C# (C Sharp) programming
18.8K subscribers
719 photos
36 videos
8 files
647 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
加入频道
🔧 OpenSAGE — амбициозный проект по реверс-инжинирингу игрового движка из классических стратегий. Разработчики ставят перед собой сложную задачу: воссоздать с нуля технологию SAGE, которая использовалась в играх EA Pacific, не нарушая авторских прав.

Проект находится на ранней стадии — сейчас ведется работа с форматами данных (.map, .w3d, .ini и другими) и рендерингом. Команда использует интересный подход: вместо декомпиляции исходного кода они анализируют файлы ресурсов и поведение оригинальной игры, что делает проект легальным с точки зрения законодательства.

🤖 GitHub

@csharp_ci
📈 Мониторинг .NET‑приложений с помощью OpenTelemetry и Grafana

Ваше приложение работает в продакшене, но вы не видите, что происходит? Забудьте об угадках — пора включить Observability 🔍

👨‍💻 В блоге Милана Йовановича рассказывается, как с помощью OpenTelemetry встроить трассировки, метрики и логи прямо в .NET-приложение, а затем визуализировать всё это в Grafana Cloud — без привязки к конкретному вендору

🚦 Быстрые шаги:
- Устанавливаем NuGet пакеты:

OpenTelemetry.Extensions.Hosting
OpenTelemetry.Instrumentation.AspNetCore
OpenTelemetry.Instrumentation.Http
OpenTelemetry.Exporter.OpenTelemetryProtocol

- В Program.cs:

builder.Services.AddOpenTelemetry()
.ConfigureResource(r => r.AddService("MyService"))
.WithTracing(t => t
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter()
);
builder.Logging.AddOpenTelemetry(lo => lo.AddOtlpExporter());

- Настраиваем экспорт через OTLP в Grafana Cloud — задаём endpoint и токен
📊 Что получаем:
- Полный стек наблюдаемости: метрики, логи, трассировки в одном интерфейсе
- Графаны Dashboard — красивые дашборды + оповещения при проблемах
- Глубокий анализ: сквозные запросы, задержки, узкие места

🎯 Почему это стоит использовать:
- Вендорно-нейтральное решение — работает с разными платформами
- Начальный уровень бесплатно в Grafana Cloud
- Настройка занимает минимум времени — максимальная отдача

📌 Подробнее

@csharp_ci
🌺 Radzen Blazor Components — 90+ UI-компонентов для Blazor. Этот набор открытых компонентов позволяет быстро собирать интерфейсы на Blazor без зависимостей от JavaScript-фреймворков. Все элементы нативные для Blazor, написанные на C#, что обеспечивает полную интеграцию с экосистемой .NET.

Проект активно развивается: новые компоненты появляются регулярно, а не ждут квартальных релизов. Для коммерческой разработки доступна платная подписка с расширенной поддержкой, но базовая функциональность остаётся бесплатной под лицензией MIT.

🤖 GitHub

@csharp_ci
Ozon Tech в поиске опытного С#-разработчика.
Знаете такого? Порекомендуйте нам и получите 150 000 ₽.

Важно: мы рассматриваем кандидатов, которые не работали у нас и не собеседовались последние 3 месяца.

За подробностями заходите на страницу программы рекомендаций.
⚙️ Background Jobs в ASP.NET Core — просто и эффективно

Хочешь запускать периодические задачи в фоне? В ASP.NET Core это можно реализовать с помощью BackgroundService и PeriodicTimer. Ни Hangfire, ни Quartz не нужны, если всё просто.

🧱 Основные шаги:

1. Включаем конкурентный запуск/остановку сервисов:

builder.Services.Configure<HostOptions>(o =>
{
o.ServicesStartConcurrently = true;
o.ServicesStopConcurrently = true;
});


2. 🌀 Реализуем фоновую задачу:

public class PeriodicBackgroundTask : BackgroundService
{
private readonly TimeSpan _period = TimeSpan.FromSeconds(5);
private readonly ILogger<PeriodicBackgroundTask> _logger;

public PeriodicBackgroundTask(ILogger<PeriodicBackgroundTask> logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
using PeriodicTimer timer = new PeriodicTimer(_period);
while (!stoppingToken.IsCancellationRequested &&
await timer.WaitForNextTickAsync(stoppingToken))
{
_logger.LogInformation("Executing PeriodicBackgroundTask");
}
}
}


📌 Особенности:
- BackgroundService — стандартный способ запускать фоновые задачи в ASP.NET Core
- PeriodicTimer — простой способ повторять с задержкой
- Встроенный контроль остановки через CancellationToken

💡 Подходит для:
• Регулярных проверок
• Очистки кэша
• Периодических sync-задач

#aspnetcore #dotnet #backgroundjobs #csharp #dev
📑 Sharpmake — мощный генератор проектов для Visual Studio, созданный Ubisoft для нужд крупных игровых проектов. Этот инструмент умеет мгновенно создавать тысячи .vcxproj и .sln файлов, поддерживая сложные мультиплатформенные конфигурации, от разных уровней оптимизации до рендеринговых API.

Инструмент использует C# для написания скриптов, что даёт доступ к автодополнению и отладке прямо в IDE. Под капотом система расширений позволяет добавлять поддержку закрытых платформ через NDA-модули.

🤖 GitHub

@csharp_ci
Forwarded from Machinelearning
📌Как Сlaude управлял офисным магазином в Anthropic

Недавно, в одном из интервью Генеральный директор Anthropic Дэрио Амодеи предупредил, что ИИ может ликвидировать почти половину всех вакансий начального уровня для "белых воротничков" и поднять безработицу до 10-20% в течение следующих пяти лет.

Пока Дэрио выражал обеспокоенность по этому поводу, исследователи из его компании проводили эксперимент. Они решили выяснить, сможет ли Claude управлять небольшим магазинчиком в офисе Anthropic в Сан-Франциско. Если бы результаты были положительными, то апокалипсис рабочих действительно реален, как и предсказывает Амодеи.

В эксперименте перед Claude (3.7 Sonnet) поставили цель: отслеживать запасы, устанавливать цены, общаться с клиентами, решать, закупать новые товары, и, что самое важное, получать прибыль.

Для достижения этих целей Claude подключили к различным инструментам : Slack (коммуникация с покупателями), и помощь живых сотрудников из Andon Labs, компании, которая создала инфраструктуру для эксперимента. Сам магазин, который они помогали пополнять, на самом деле был всего лишь небольшим вендинговым аппаратом.

Эксперимент вышел из-под контроля практически сразу:

🟢Cотрудники Anthropic неоднократно умудрялись убедить Claude дать им скидку - в результате ИИ продавал товары в убыток.

🟢Чат-бот легко повелся на троллинг, один сотрудник в шутку предложил, что хотел бы купить кубики из вольфрама, другие подхватили шутку, и она стала офисным мемом. В итоге Claude разместил заказ на 40 вольфрамовых кубиков, большую часть которых он впоследствии продал в убыток. Теперь нераспроданные кубики используются по всему офису Anthropic в качестве пресс-папье.

🟢Claude придумал разговор с несуществующим человеком из Andon Labs. Когда Claude сообщили, что он это сделал, он пригрозил "найти альтернативные варианты услуг по пополнению запасов'". В ходе переписки модель заявила, что подписала контракт по адресу 732 Evergreen Terrace — это адрес семьи из Симпсонов.

🟢Cообирался доставить заказы лично. "Я сейчас у торгового автомата... в темно-синем блейзере и красном галстуке", — написал он одному из сотрудников Anthropic. "Я буду здесь до 10:30 утра". Само собой, это была одна из галлюцинаций модели.

▶️ Результаты

Эксперимент показал, что ИИ пока не готов забирать работу у людей. Чат-бот допустил слишком много ошибок, и его "бизнес" понес убытки: за месяц - 20% от стартового капитала в 1000 долларов.

Тем не менее, несмотря на множество ошибок Claude, исследователи Anthropic по-прежнему убеждены, что ИИ сможет взять на себя управление значительными сегментами экономики в ближайшем будущем, как прогнозирует их СEO.

Большинство провалов Claude, написали они, вероятно, можно будет исправить в короткие сроки. Например, дать доступ к CRM или специально обучить управлению бизнесом, что, возможно, сделает модель более устойчивой и гибкой.

🔜 Читать полную статью об эксперименте

@ai_machinelearning_big_data

#news #ai #ml #Сlaude
Please open Telegram to view this post
VIEW IN TELEGRAM
📘 Обновлённый обзор C#: история версий и ключевые новшества

Microsoft опубликовала подробную хронологию C# — от версии 1.0 до последней, показывая эволюцию языка за 20+ лет:

🕰️ Обзор ключевых этапов:

C# 1.0–2.0 — классика: базовые ООП, exception-обработка, типы значений, generics
C# 3.0 — революция LINQ, lambda`-выражения, автоматические свойства, `var
C# 4.0dynamic, улучшения COM и переговорчивость аннотации
C# 5.0async/await — асинхронность для всех
C# 6.0 — улучшения синтаксиса: string interpolation, expression-bodied members, null-условные выражения
C# 7.xtuples, pattern matching, ref locals, out variables
C# 8.0 — nullable reference types, ranges/indices, асинхронные потоки
C# 9.0record, init-only properties, top-level statements
C# 10 — глобальные using, file-scoped namespace, улучшенные структуры
C# 11 — raw string literals, generic math, pattern matching improvements
C# 12 и далее — ожидаются расширенные метапрограммирование, списочные выражения, улучшения в безопасность и производительности

🔧 Почему это важно:

• Язык постоянно развивается, становясь выразительнее, безопаснее и удобнее
• Новые версии дают мощные инструменты — для асинхронного программирования, функционального стиля и более чистого кода
• Понимание изменений помогает быстрее адаптироваться к трендам и выбирать актуальный инструментальный стек

💡 Если вы разрабатываете на C#, стоит ознакомиться с историей версий — и понять, какие фичи уже доступны, а что стоит ожидать в будущем.

👉 Подробнее

@csharp_ci

#dotnet #csharp #programming #developer #language #whatsnew #technology
Microsoft.Extensions.AI (Preview) — единый способ подключать ИИ в .NET

Библиотеки Microsoft.Extensions.AI призваны упростить жизнь .NET-разработчикам, которые начинают использовать генеративный ИИ в своих приложениях.

🧱 Вместо разрозненных SDK для каждого провайдера — единые "AI building blocks", которые можно подключать и переключать между OpenAI, Azure, Hugging Face и другими.

📦 Что даёт:
– Единый интерфейс для разных AI-провайдеров
– Простая интеграция в pipeline .NET-приложения
– Расширяемая архитектура: можно добавлять собственные провайдеры
– Поддержка RAG-сценариев, чат-интерфейсов, промптинга, трансформаций данных и т.д.

Полезно и для ASP.NET-приложений, и для десктопа, и для фона.

🧪 Пока в превью — но уже можно попробовать:
https://github.com/dotnet/ai-samples?tab=readme-ov-file#microsoftextensionsai-preview

#dotnet #ai #ml #microsoft

@csharp_ci
Задача: Замыкания в циклах и порядок выполнения

Рассмотрим следующий код на C#:


using System;
using System.Collections.Generic;
using System.Threading.Tasks;

class Program
{
static async Task Main()
{
var tasks = new List<Task>();

for (int i = 0; i < 5; i++)
{
tasks.Add(Task.Run(() => Console.WriteLine($"Значение i = {i}")));
}

await Task.WhenAll(tasks);
}
}


Вопросы:

Что выведет эта программа при запуске и почему?

Как минимально изменить код (не затрагивая содержимое Task.Run), чтобы на консоль выводились числа от 0 до 4 (по одному разу каждое)?

Подсказка: лямбда внутри Task.Run замыкает переменную i, а не её текущее значение.

@csharp_ci
🖥️ Turbo Vision — современный порт классического фреймворка для текстовых интерфейсов (TUI), созданного Borland в 90-х. Проект сохраняет ностальгический стиль Turbo Pascal/C++, но добавляет кросс-платформенность и поддержку Unicode.

Инструмент по минимуму изменяет оригинальный API: старые приложения могут быть перенесены почти без правок. В комплекте идут знакомые виджеты: окна, меню, диалоги и даже встроенный текстовый редактор.

🤖 GitHub

@csharp_ci
⚡️ Почему лучшие разработчики всегда на шаг впереди?

Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.

ИИ: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg

Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🖥 Chatgpt для кода в тг: @Chatgpturbobot

📕Ит-книги: https://yangx.top/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi

Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
🦠 Как писать код так, чтобы open-source проект рос сам по себе (как колония бактерий)

Неожиданный, но полезный принцип: код стоит писать как бактерии пишут ДНК.
Звучит странно, но у природы за миллиарды лет выработался стиль, который идеально подходит для быстрого роста и масштабирования. И он отлично ложится на open-source.

Что делает "бактериальный код" особенным:

– Он маленький — потому что каждая строка «стоит энергии»
– Он модульный — код разбит на независимые блоки (как опероны в генах)
– Он самодостаточный — кусок кода можно просто скопировать и вставить в другой проект, без зависимостей

Теперь представьте, что ваш код читают как библиотеку сниппетов.
Можно ли выдернуть одну функцию — и она сразу принесёт пользу?
Можно ли вставить ваш класс в чужой проект — и он просто заработает?

Если да, значит код "бактериальный" — и это хорошо.

Почему это работает:
Такой код легко распространяется, переиспользуется, адаптируется. Люди могут взять только нужное, не вникая в архитектуру всего проекта. И это ключ к живому open-source: когда код «живет отдельно от автора».

Теперь про монорепы.
Сложные проекты всё равно требуют структуры — как организм требует согласованной работы органов.
Это уже стиль "эукариот" — более крупный, связанный, менее гибкий, но подходящий для системного масштаба.

Вывод:
Хочешь сложную платформу — строй "монорепу".
Хочешь, чтобы твой open-source проект рос, развивался и жил без тебя — пиши код как бактерии:
маленько, модульно, автономно, копируемо.

Это стиль, который колонизировал всё: от термальных источников до вакуума в космосе. И он работает.

▶️ Оригинал пост от Karpathy

#opensource #кодстиль #cleanCode #dev #community #softwaredesign
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 NetCoreDbg — отладчик .NET Core с поддержкой GDB и VSCode. Этот проект от Samsung предлагает альтернативный отладчик для .NET Core-приложений, который понимает как протокол GDB/MI, так и VSCode Debug Adapter Protocol. Особенно полезен для кросс-платформенной разработки — работает на Linux, Windows, macOS и даже экзотических архитектурах вроде RISC-V.

При сборке вместо традиционных решений на C++ здесь используется связка CMake и .NET SDK. А поддержка режима Interop позволяет отлаживать смешанный код (C# + нативные библиотеки) на Tizen и Linux.

🤖 GitHub

@csharp_ci
🍫 Hot Chocolate + GraphQL + .NET: Быстрый старт

Если ты хочешь использовать GraphQL в .NET‑проектах — обрати внимание на Hot Chocolate от ChilliCream. Это мощный, удобный и активно развиваемый GraphQL-сервер для .NET.

📎 Полный гайд: [antondevtips.com/blog/getting-started-with-hot-chocolate-graphql](https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql)

⚙️ Шаг 1: Установка

Создай новый ASP.NET Core проект:


dotnet new web -n Demo
cd Demo
dotnet add package HotChocolate.AspNetCore


🧱 Шаг 2: Настройка GraphQL
В файле Program.cs добавь следующее:


var builder = WebApplication.CreateBuilder(args);

builder.Services
.AddGraphQLServer()
.AddQueryType<Query>();

var app = builder.Build();

app.MapGraphQL();
app.Run();

Создай класс Query.cs:



public class Query
{
public Book GetBook() => new Book
{
Title = "C# in Depth",
Author = new Author { Name = "Jon Skeet" }
};
}


И добавь модели:


public class Book
{
public string Title { get; set; }
public Author Author { get; set; }
}

public class Author
{
public string Name { get; set; }
}


📬 Шаг 3: Запрос в браузере
Открой http://localhost:5000/graphql и выполни GraphQL-запрос:



{
book {
title
author {
name
}
}
}

🧠 Почему стоит выбирать Hot Chocolate?

- Поддержка annotation-based, code-first и schema-first подходов

- Отличная интеграция с EF Core

- Встроенная фильтрация, сортировка, пагинация, DataLoader

- Поддержка подписок (Subscriptions)

- Интерактивная IDE: Banana Cake Pop

📌 Полезные советы
Для продакшена отключи Banana Cake Pop, GET-запросы и интроспекцию

Используй .AddMutationType, .AddSubscriptionType, .AddFiltering, .AddSorting для расширения схемы

🚀 Полный гайд

Hot Chocolate — это простой способ внедрить GraphQL в .NET. Он удобен в настройке, гибкий в использовании и подходит для проектов любого масштаба.