C# 1001 notes
Відкрити в Telegram
Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp
Показати більше6 607
Підписники
+624 години
+487 днів
+3730 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
серпень '26
серпень '26
+107
в 32 каналах
липень '26
+102
в 41 каналах
Get PRO
червень '26
+73
в 0 каналах
Get PRO
травень '26
+67
в 0 каналах
Get PRO
квітень '26
+66
в 0 каналах
Get PRO
березень '26
+57
в 0 каналах
Get PRO
лютий '26
+138
в 0 каналах
Get PRO
січень '26
+91
в 1 каналах
Get PRO
грудень '25
+85
в 0 каналах
Get PRO
листопад '25
+132
в 3 каналах
Get PRO
жовтень '25
+87
в 1 каналах
Get PRO
вересень '25
+101
в 4 каналах
Get PRO
серпень '25
+81
в 0 каналах
Get PRO
липень '25
+80
в 0 каналах
Get PRO
червень '25
+83
в 0 каналах
Get PRO
травень '25
+60
в 0 каналах
Get PRO
квітень '25
+80
в 0 каналах
Get PRO
березень '25
+107
в 0 каналах
Get PRO
лютий '25
+105
в 0 каналах
Get PRO
січень '25
+169
в 0 каналах
Get PRO
грудень '24
+202
в 1 каналах
Get PRO
листопад '24
+203
в 2 каналах
Get PRO
жовтень '24
+364
в 1 каналах
Get PRO
вересень '24
+241
в 0 каналах
Get PRO
серпень '24
+262
в 1 каналах
Get PRO
липень '24
+168
в 0 каналах
Get PRO
червень '24
+398
в 2 каналах
Get PRO
травень '24
+379
в 35 каналах
Get PRO
квітень '24
+304
в 43 каналах
Get PRO
березень '24
+314
в 20 каналах
Get PRO
лютий '24
+281
в 1 каналах
Get PRO
січень '24
+572
в 45 каналах
Get PRO
грудень '23
+941
в 48 каналах
Get PRO
листопад '23
+655
в 2 каналах
Get PRO
жовтень '23
+61
в 0 каналах
Get PRO
вересень '23
+80
в 0 каналах
Get PRO
серпень '23
+507
в 0 каналах
Get PRO
липень '23
+487
в 0 каналах
Get PRO
червень '23
+88
в 0 каналах
Get PRO
травень '23
+569
в 0 каналах
Get PRO
квітень '23
+21
в 0 каналах
Get PRO
березень '23
+28
в 0 каналах
Get PRO
лютий '23
+23
в 0 каналах
Get PRO
січень '23
+28
в 0 каналах
Get PRO
грудень '22
+32
в 0 каналах
Get PRO
листопад '22
+31
в 0 каналах
Get PRO
жовтень '22
+40
в 0 каналах
Get PRO
вересень '22
+28
в 0 каналах
Get PRO
серпень '22
+43
в 0 каналах
Get PRO
липень '22
+321
в 0 каналах
Get PRO
червень '22
+41
в 0 каналах
Get PRO
травень '22
+37
в 0 каналах
Get PRO
квітень '22
+180
в 0 каналах
Get PRO
березень '220
в 0 каналах
Get PRO
лютий '220
в 0 каналах
Get PRO
січень '220
в 0 каналах
Get PRO
грудень '210
в 0 каналах
Get PRO
листопад '210
в 0 каналах
Get PRO
жовтень '210
в 0 каналах
Get PRO
вересень '210
в 0 каналах
Get PRO
серпень '210
в 0 каналах
Get PRO
липень '210
в 0 каналах
Get PRO
червень '210
в 0 каналах
Get PRO
травень '210
в 0 каналах
Get PRO
квітень '21
+1
в 0 каналах
Get PRO
березень '21
+45
в 0 каналах
Get PRO
лютий '21
+54
в 0 каналах
Get PRO
січень '21
+42
в 0 каналах
Get PRO
грудень '20
+1 304
в 0 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 26 серпня | +3 | |||
| 25 серпня | +9 | |||
| 24 серпня | +13 | |||
| 23 серпня | +23 | |||
| 22 серпня | +13 | |||
| 21 серпня | +1 | |||
| 20 серпня | +1 | |||
| 19 серпня | +1 | |||
| 18 серпня | +1 | |||
| 17 серпня | +5 | |||
| 16 серпня | +3 | |||
| 15 серпня | +1 | |||
| 14 серпня | +1 | |||
| 13 серпня | +2 | |||
| 12 серпня | +1 | |||
| 11 серпня | 0 | |||
| 10 серпня | +6 | |||
| 09 серпня | +2 | |||
| 08 серпня | +3 | |||
| 07 серпня | +1 | |||
| 06 серпня | +3 | |||
| 05 серпня | +2 | |||
| 04 серпня | +3 | |||
| 03 серпня | +2 | |||
| 02 серпня | +3 | |||
| 01 серпня | +4 |
Дописи каналу
⚡ Race Conditions в ASP.NET Core - как они появляются и почему их сложно ловить
В статье Assis Zang разбирается, что происходит, когда несколько запросов одновременно работают с общим состоянием и начинают вмешиваться друг в друга.
Внутри:
- откуда берутся race conditions
- почему проблема может проявляться нестабильно
- как воспроизвести конкурентный доступ
- какие ошибки возникают при работе с shared state
- как использовать синхронизацию и безопасные паттерны
- почему потокобезопасность важна даже в обычном web API
Полезно для .NET-разработчиков, которые работают с многопоточностью, shared state и высоконагруженными ASP.NET Core-приложениями.
https://telerik.com/blogs/understanding-race-conditions-aspnet-core
| 2 | ✔️ Hugging Face прощупывает интерес покупателей
Платформа для хостинга моделей и датасетов наняла банки, чтобы выяснить, готов ли кто-нибудь купить бизнес. Речь пока не о сделке - тестирование рынка может закончиться и новым раундом финансирования.
По данным источников, сейчас компанию оценивают примерно в 1,3 млрд долларов, тогда как в 2023 году оценка доходила до 4,5 млрд, - за три года почти в три с половиной раза ниже.
Наиболее вероятными покупателями называют нынешних инвесторов Hugging Face - Google, Amazon, Nvidia, Intel и Salesforce.
bloomberg.com
✔️ Alibaba запустила видеогенератор Wan3.0
Модель собирает тридцатисекундные ролики из текстовых документов, таблиц, презентаций и веб-страниц. В новой версии лучше работают референсы и реконструкция реальных объектов, а базовая длина ролика выросла.
Alibaba целится в производство рекламы, коротких сериалов и музыкальных клипов. До официального запуска модель была в открытой бете.
Иностранцы получают доступ к API через Alibaba Cloud. Секунда видео стоит 10 центов в 720p и 20 центов в 1080p, то есть полный тридцатисекундный ролик в 1080p обойдется в 6 долларов.
reuters.com
✔️ Antigravity теперь управляется с телефона
Агентом можно рулить со смартфона или из браузера, ничего дополнительно не устанавливая. В интерфейсе видно сессии в реальном времени, туда же ставятся задачи и оттуда проверяются результаты.
На телефон приходят уведомления, когда агент закончил работу или ждет от человека подтверждения. Подключиться можно сразу к нескольким машинам и быстро между ними переключаться, причем монитор хосту не нужен - Antigravity запускается и работает и без него.
Обновление раскатывают постепенно, первыми его получают подписчики Google AI Ultra.
antigravity.google
✔️ FDA впервые разрешило автономного робота для забора крови
Американский регулятор выдал разрешение по процедуре системе Aletta голландского стартапа Vitestro. Робот делает всю процедуру сам: накладывает жгут, дезинфицирует кожу, находит вену, вводит иглу, меняет пробирки, убирает расходники и заклеивает прокол.
Вены он ищет ближней инфракрасной съемкой, ультразвуком и допплерографией - ими же отличает вену от артерии. В клинических испытаниях на 1600 пациентах игла попадала с первой попытки в 94,5% случаев.
Aletta рассчитана на амбулаторный прием взрослых. Один оператор может вести сразу три таких аппарата.
fda.gov
✔️ В Южной Корее микроэлектроника догоняет медицину по конкурсу в ВУЗы
На фоне ИИ-бума корейские абитуриенты пошли в микроэлектронику. По данным Jongno Academy, частного центра подготовки к поступлению, средний проходной балл на профильные специальности в ведущих вузах дошел до 96,2. Медицинские факультеты, где конкурс исторически самый высокий в стране, держат 97,2.
Университеты вместе с Samsung Electronics и SK Hynix запускают целевые программы с гарантированным трудоустройством. А школьники, чтобы поступить на инженерные направления, все лето занимаются в специализированных центрах Сеула.
ft.com
@ai_machinelearning_big_data
#news #ai #ml | 563 |
| 3 | ⚡️Актуальные темы .NET на DotNext 2026
В .NET одновременно происходит много интересного: C# получает новые возможности, .NET 10 меняет расклад между Native AOT и JIT, а в разработке появляются ИИ-агенты, которые берут на себя часть инженерной работы.
На DotNext 2026 разберем как вещи, которые происходят на уровне машинного кода, так и вполне прикладные вопросы архитектуры и разработки.
📅 25–26 сентября, Москва + online
Выбрали 8 тем из программы, среди которых не только доклады, но и хардкорный воркшоп, чтобы показать этот диапазон:
— как заставить Transactional Outbox одновременно быть строгим и параллельным;
— зачем ASP.NET Core модульный монолит и как собрать его без микросервисов;
— где Native AOT выигрывает у JIT в .NET 10;
— что происходит с циклами, inlining и bounds checks в C# и Go;
— как меняется SDLC, когда в команде появляются ИИ-агенты;
— что принесут discriminated unions в C# 15;
— как проектировать асинхронное взаимодействие в распределенных системах (воркшоп).
Все подробности — в карточках и на сайте конференции.
🌟По промокоду csharp1001notes — персональные билеты дешевле
→ Программа DotNext
→ Купить билет | 728 |
| 4 | Rate Limiting и Throttling API в .NET
В ASP.NET Core есть встроенные механизмы, которые помогают защитить API от перегрузки и слишком частых запросов.
Можно ограничивать трафик:
— по IP
— по пользователю
— по endpoint
— по фиксированному окну
— через sliding window
— token bucket
— concurrency limiter
Это полезно не только против DDoS. Rate limiting помогает не дать одному клиенту забить весь сервис, защитить дорогие операции и стабилизировать нагрузку на БД и внешние API.
В .NET это можно настроить прямо в middleware без сторонних библиотек.
Хороший разбор с примерами:
https://tundehub.dev/rate-limiting-and-throttling-apis-in-net
#aspnetcore #dotnet | 1 304 |
| 5 | Архитектурные ошибки, которые совершают даже опытные C#-разработчики
Можно соблюдать SOLID, использовать паттерны и современные архитектурные подходы — и всё равно со временем получить систему, которую сложно и дорого поддерживать.
Почему так происходит? Где заканчивается хорошая архитектура и начинается оверинжиниринг? И какие решения, которые сегодня кажутся правильными, завтра становятся источником технического долга?
18 августа в 20:00 МСК на открытом вебинаре OTUS вместе с Антоном Герасименко разберём архитектурные ошибки, которые регулярно встречаются в реальных .NET-проектах.
Вы узнаете, как отличать действительно полезные архитектурные решения от «архитектуры ради архитектуры» и проектировать системы, которые можно развивать без постоянных дорогостоящих переделок.
Вебинар проходит в преддверии старта курса «C#-разработчик. Продвинутый уровень».
Регистрируйтесь: https://otus.pw/fvrf/?erid=2W5zFHT5e3T
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. | 597 |
| 6 | ⚡️ C#-приём: не привязывай метаданные к объектам через обычный `Dictionary` — иногда нужен `ConditionalWeakTable`.
Допустим, библиотека кеширует данные о типах:
private static readonly Dictionary<Type, Metadata> Cache = new();
В обычном приложении это может годами работать без проблем.
Но если используются plugins, dynamic assemblies или unloadable AssemblyLoadContext, такой словарь способен удерживать Type, а вместе с ним — всю загруженную сборку.
И получить memory leak.
Для таких случаев в .NET есть малоизвестный:
ConditionalWeakTable<TKey, TValue>
Пример:
private static readonly ConditionalWeakTable<Type, Metadata> Cache = new();
static Metadata GetMetadata(Type type)
{
return Cache.GetValue(type, BuildMetadata);
}
Ключ здесь хранится слабо.
Если Type больше нигде не нужен, GC может его собрать, а связанная запись автоматически исчезнет из таблицы.
Это особенно полезно для:
* reflection-кешей;
* proxy/framework-кода;
* source/runtime metadata;
* plugin-систем;
* приложений с AssemblyLoadContext.
🔥 Если видишь:
static Dictionary<Type, ...>
или
static ConcurrentDictionary<Type, ...>
в коде, который работает с динамически загружаемыми сборками, стоит проверить:
не удерживает ли этот кеш сборки в памяти навсегда?
Иногда правильный ответ — ConditionalWeakTable.
#CSharp #DotNet #Backend #Programming #CLR | 1 752 |
| 7 | 🎓 Скоро заканчивается прием документов на онлайн-магистратуру ИТМО в партнерстве с Яндекс Практикумом «Фронтенд-, бэкенд‑разработка и ИИ‑решения»
Это двухлетняя программа, где обучение проходит полностью онлайн с лекциями по вечерам. Нагрузка адаптируется под ваш уровень, сохраняются все статусы и льготы очной формы. После выпуска выдается диплом магистра ИТМО и диплом о профпереподготовке от Яндекса.
Что внутри:
• 9 треков на выбор по уровню и стеку: 4 базoвых (JS, Python, Java, C++) и 5 продвинутых — с упором на асинхронность, микросервисы, высокое нагружение, Kafka, C++/Boost, NestJS, Spring Boot.
• Упор на практику на основе реальных задач партнеров программы и сервисов Яндекса, также есть возможность вести собственный рабочий проект. На выходе получите 10+ кейсов в портфолио.
• Интеграция ИИ в разработку: автоматизация рутинных задач (генерация кода, написание тестов, дебаггинг, документация) и промпт-инжиниринг на всех треках.
• Специализированный трек «ИИ-решения в разработке»: проектирование систем на базе LLM, сборка RAG-пайплайнов, работа с мультиагентными сетями и внедрение AI-компонентов в продакшен.
Подать заявление можно также онлайн. Отбор проходит одним из способов: по рекомендательному письму для выпускников курсов Практикума или через вступительные экзамены.
📌 Подробности о программе. | 1 332 |
| 8 | 🚀 C# 15 меняет подход к `unsafe`: указатели больше не означают автоматически опасный код
Раньше в C# сам факт использования указателя требовал:
unsafe
{
int* ptr;
}
Теперь язык движется к более точной модели:
опасным считается не наличие указателя, а операция, которая реально работает с unmanaged-памятью.
В preview-версии C# 15 уже не требуют unsafe:
✅ объявление pointer-типа
✅ получение адреса через &
✅ fixed для закрепления памяти
✅ преобразование stackalloc в указатель
✅ sizeof для unmanaged-типов
Пример:
int number = 42;
int* pointer = &number;
int[] numbers = [10, 20, 30];
fixed (int* first = numbers)
{
// само закрепление памяти безопасно
}
Но вот это всё ещё требует unsafe:
*pointer; // dereference
pointer->Value; // доступ через указатель
pointer[0]; // работа с элементами
delegate*<> // вызов function pointer
Главная идея:
**создать инструмент можно безопасно.
Опасно — когда начинаешь напрямую менять память.**
Это первый этап большой переработки модели безопасности C#.
Дальше ожидаются:
- requires-unsafe для отдельных членов;
- opt-in на уровне assembly;
- новый safe keyword.
C# постепенно делает unsafe-код более точечным: меньше блоков вокруг всего файла, больше внимания к реально опасным операциям.
#csharp #dotnet #programming | 1 559 |
| 9 | 🔥 EF Core migrations - это компилятор схемы базы, а не кнопка «создать таблицу»
Опытный C#-разработчик не оставляет бизнес-инварианты только внутри SaveChangesAsync().
Проверку в приложении можно обойти прямым SQL, импортом данных, фоновым процессом или второй версией сервиса. Поэтому правила, нарушение которых делает данные некорректными, стоит закреплять в самой базе.
public sealed class ProductConfiguration
: IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.ToTable("Products", table =>
{
table.HasCheckConstraint(
"CK_Products_Price_Range",
"[Price] > 0 AND [Price] <= 10000000");
});
builder.Property(x => x.Name)
.HasMaxLength(200)
.IsRequired();
builder.Property(x => x.NormalizedName)
.HasMaxLength(200)
.IsRequired();
builder.Property(x => x.Price)
.HasPrecision(18, 2);
builder.HasIndex(x => x.NormalizedName)
.IsUnique()
.HasDatabaseName("UX_Products_NormalizedName");
}
}
HasPrecision(18, 2) управляет физическим представлением decimal, но не проверяет допустимый диапазон цены. За это отвечает CHECK.
Уникальный индекс решает другую важную проблему - гонку между запросами.
if (!await db.Products.AnyAsync(x => x.Name == name))
{
db.Products.Add(product);
await db.SaveChangesAsync();
}
Два параллельных запроса могут одновременно пройти AnyAsync() и попытаться создать одинаковые записи. Только уникальное ограничение базы гарантированно остановит второй запрос.
Использовать для уникальности исходный Name тоже опасно. Результат будет зависеть от collation базы: Laptop, LAPTOP и Laptop могут считаться одинаковыми или разными. Поэтому часто сохраняют нормализованное значение:
product.NormalizedName = product.Name
.Trim()
.ToUpperInvariant();
После изменения модели создаём миграцию:
dotnet ef migrations add HardenProductSchema
Но миграцию нельзя принимать вслепую. EF Core сравнивает текущую модель с ModelSnapshot и генерирует предполагаемый переход между двумя состояниями.
Например, обычное переименование свойства может быть распознано как удаление старого столбца и создание нового:
migrationBuilder.DropColumn(
name: "Name",
table: "Products");
migrationBuilder.AddColumn<string>(
name: "DisplayName",
table: "Products",
nullable: false);
В production это означает потерю данных. Правильную операцию нужно указать вручную:
migrationBuilder.RenameColumn(
name: "Name",
table: "Products",
newName: "DisplayName");
Для крупных таблиц полезен подход expand -> backfill -> contract.
Сначала добавляется nullable-столбец:
migrationBuilder.AddColumn<string>(
name: "NormalizedName",
table: "Products",
type: "nvarchar(200)",
nullable: true);
Затем данные заполняются порциями отдельной задачей. После обновления всех строк новая версия приложения начинает записывать оба значения. И только в следующем релизе столбец переводится в NOT NULL, добавляется индекс и удаляется устаревшая логика.
Так миграция не держит долгую блокировку и остаётся совместимой сразу с несколькими версиями приложения.
В CI стоит проверять, не забыл ли разработчик создать миграцию:
dotnet ef migrations has-pending-model-changes
Для production лучше генерировать проверяемый SQL:
dotnet ef migrations script \
--idempotent \
--output migrations.sql
Либо собирать отдельный executable:
dotnet ef migrations bundle \
--self-contained \
-r linux-x64
efbundle можно запускать в deployment job без исходников проекта и установленного EF CLI. | 1 723 |
| 10 | 🚀 Claude Opus 5 за 24 часа собрал собственный космический симулятор
Разработчик запустил модель на одну непрерывную сессию и получил The Long Silence - полноценную браузерную игру об исследовании космоса. По словам автора, весь код, визуал и звук создал Claude.
Внутри:
• процедурные звёзды, планеты, кольца и туманности
• посадка на поверхность планет
• перелёты между системами и fold drive
• сканирование объектов, станции и заброшенные корабли
• карта галактики, сюжет и архив найденных данных
• динамическое масштабирование графики для стабильных 60 FPS
Игра работает на WebGL2 без готовых ассетов: миры генерируются из seed, графика написана на GLSL, а музыка и звук создаются процедурно.
Это ещё не Starfield по масштабу, но для проекта, собранного моделью за сутки, результат выглядит безумно.
🎮 Код и запуск: https://github.com/achimala/TheLongSilence
🌐 Запустить в браузере: https://longsilence.anshu.dev/ | 2 064 |
| 11 | AI-инструменты уже умеют быстро писать код, но для C#-разработчика это не отменяет экспертизу, а делает её важнее. Теперь нужно не просто получить подсказку от ассистента, а понять, где она корректна, где скрывает ошибку и какие последствия принесёт в .NET-приложении.
5 августа в 20:00 МСК на открытом вебинаре OTUS разберём, как использовать AI так, чтобы становиться сильнее как C#-разработчик, а не зависеть от автогенерации. Покажем, где AI действительно ускоряет работу Middle/Senior: рефакторинг, генерация тестов, разбор legacy-кода, объяснение стектрейсов и поиск направлений для улучшения.
Отдельно посмотрим на зоны, где ассистенты часто ошибаются: потокобезопасность, работа с IDisposable, производительность LINQ, тонкости DI и конфигурации.
Урок проходит в преддверии старта курса «C#-разработчик. Продвинутый уровень».
👉 Регистрируйтесь: https://otus.pw/ZmAS/?erid=2W5zFHwJ5Qu
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. | 747 |
| 12 | .NET 11 готовят под эпоху AI
Microsoft собрала ключевые .NET-сессии с Build 2026. Фокус - AI, агенты и развитие C#.
Что показали:
- union types в C#;
- улучшения runtime, SDK и производительности в .NET 11;
- инструменты для добавления AI в C#-приложения;
- agentic web в ASP.NET Core и Blazor;
- локальные AI-модели и on-device inference через .NET MAUI;
- новый dotnetup для установки и обновления SDK/runtime.
Важно: .NET 11 пока находится в preview, а часть возможностей ещё развивается.
https://devblogs.microsoft.com/dotnet/dotnet-at-microsoft-build-2026/ | 2 132 |
| 13 | Каждый год в середине лета мы с друзьями собираемся на E-CODE. Ещё относительно молодая конфа Ozon Tech стала уже своего рода легендой. Не удивительно: хардовость официальной части здесь не уступает громкости афтерпати.
На E-CODE 2026 нас по части бэкэнда ждут:
• Runtime Async с его + и –
• трассировка с eBPF
• ускорение на SIMD
• построение кастомной real-time системы видеоаналитики
• сравнительный анализ алгоритмов сборки мусора
Фишка этого года — брейнринг разработчиков и ИИ. Эксперты разберут сложные кейсы и сравнят свои подходы с тем, что предложит машина. Победителя выберет зал.
Регистрируйтесь сейчас, чтобы услышать это всё вживую: https://ecode.ozon.tech/ | 1 969 |
| 14 | 🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
В IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы.
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: t.me/DevopsDocker
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_1001_notes
Java: t.me/java_library
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: @courses
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
Пока кто-то листает шум, ты будешь видеть инструменты, задачи и идеи, которые помогают расти в профессии. | 2 016 |
| 15 | Полезный Docker-трюк для .NET: кэшируйте NuGet-пакеты через BuildKit, а не скачивайте их заново при каждой сборке.
# syntax=docker/dockerfile:1.7
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY *.csproj .
RUN --mount=type=cache,target=/root/.nuget/packages \
dotnet restore
COPY . .
RUN --mount=type=cache,target=/root/.nuget/packages \
dotnet publish -c Release -o /app
NuGet-кэш не попадает в финальный image, но между сборками сохраняется. В итоге restore работает быстрее, особенно в CI, где зависимости обычно весят больше, чем сам код. | 2 308 |
| 16 | ⚡️ GPT-5.6 РЕЛИЗ
OpenAI выкатили сразу три новые модели.
• Sol - заявлено, что модель мощнее Mythos. Доступ для платных пользователей обещают в течение 24 часов.
На Terminal Bench 2.1 с настройкой Ultra модель выбивает рекордные 91,9%.
Первые тестеры отдельно отмечают сильную работу с интерфейсами: она уверенно собирает UI для приложений и сайтов, а не просто генерирует сырой код.
• Terra - уровень Fable 5. Будет доступна бесплатно.
• Luna - еще одна бесплатная модель для всех.
Помимо самой модели, показали 3 крупных продуктовых обновления:
1. ChatGPT Work
2. новое desktop-приложение ChatGPT
3. hosted sites, то есть размещение сайтов прямо через Chatgpt
https://openai.com/ru-RU/live/ | 2 315 |
| 17 | AI-инструменты стали стандартной частью стека C#/.NET-разработчиков: ассистенты в IDE, генерация кода и тестов, помощь с документацией и ревью.
По данным отраслевых отчётов, 80–90% инженеров уже используют AI-сервисы, а 97% компаний встроили AI в SDLC.
Однако разрыв сегодня проходит не по доступу к моделям. У одних команд AI встроен в мультиагентные пайплайны, SDD подход и метрики качества. У других остаётся локальным помощником без влияния на метрики, скорость релизов и риск-профиль.
Именно для интеграции AI в процессы команда Naition запускает 12‑недельную программу по AI-driven разработке. Программу собрали инженеры и техлиды из Яндекс Cloud, Сбера, Google и других продуктовых команд с опытом более 15 лет.
Что внутри:
• создание AI-окружения под ваш стек
• контекст-инжиниринг - от создания и подключения кастомных MCP до RAG под вашу кодовую базу
• решение продуктовых задач, spec-driven разработка и контроль качества с evals
• разработка агентов, сабагентов с выходом в практики оркестрации
• практики работы с легаси-проектами и крупными кодовыми базами при ограниченном бюджете
Форматы участия:
Командный - для C#/.NET-команд от 3–5 человек. Заходите в общий поток и получаете отдельный трек: разбор текущих процессов, выделение узких мест, план внедрения AI-практик и фиксация метрик до и после изменений.
Индивидуальный формат - для архитекторов, техлидов, middle/senior‑разработчиков и руководителей, которые хотят собрать язык и паттерны AI‑ориентированной разработки, чтобы затем использовать их как основу изменений внутри своих команд.
95% участников прошлого потока дошли до конца. Первые изменения в процессах команды вносили уже после второго модуля.
Новый поток AI‑DRIVEN стартует 21 июля.
Если вы отвечаете за архитектуру и метрики разработки в C#/.NET‑проектах, вы можете оставить заявку на сайте и до 13 июля получить индивидуальные условия участия для команды или для себя как индивидуального участника.
Подробности на сайте: naition.ai
Реклама: ИП Крутов Дмитрий Валерьевич ИНН: 772973192199
Erid: 2VtzqxRqZmC | 1 818 |
| 18 | Record-типы в C#: когда модель данных не должна быть обычным class
record в C# удобен там, где объект описывает данные, а не поведение и идентичность.
Типичный пример:
public record User(string Name, int Age);
Компилятор сам сгенерирует конструктор, Equals, GetHashCode, ToString и деконструкцию. Но главное отличие не в сокращении кода, а в семантике.
Обычный class сравнивается по ссылке:
var a = new UserClass("Alice", 25);
var b = new UserClass("Alice", 25);
Console.WriteLine(a == b); // false
record сравнивается по значению:
var a = new User("Alice", 25);
var b = new User("Alice", 25);
Console.WriteLine(a == b); // true
Это делает record хорошим выбором для DTO, read models, value objects, событий, результатов запросов и моделей, где важны значения полей.
Ещё одна удобная вещь - with. Можно создать копию объекта, изменив только нужные поля:
var user = new User("Alice", 25);
var updated = user with { Age = 26 };
Console.WriteLine(updated);
// User { Name = Alice, Age = 26 }
Но есть важный нюанс: with делает поверхностную копию. Если внутри есть изменяемая коллекция, она не станет автоматически immutable.
public record Team(string Name, List<string> Members);
Такой record всё ещё может меняться через Members.Add(...). Поэтому для реально неизменяемых моделей лучше использовать immutable-коллекции или аккуратно закрывать доступ к изменяемому состоянию.
record не заменяет class везде. Если у объекта есть жизненный цикл, identity, состояние и бизнес-поведение, обычный класс часто будет честнее.
Но когда тип нужен как чистая модель данных, record убирает шум и делает намерение в коде очевидным. | 1 793 |
| 19 | Методы, их перегрузка и расширения. Бесплатный урок специализации «C#-разработчик»
Методы — одна из базовых вещей в C#, без которой невозможно нормально писать, читать и поддерживать код. Но у начинающих разработчиков часто всё смешивается: где обычный метод, где перегрузка, как работает сигнатура, зачем нужны параметры по умолчанию и в каких случаях использовать params.
На открытом уроке 2 июля в 20:00 разберём, что такое метод в C#, как писать собственные методы и как использовать перегрузку без хаоса в коде. Поговорим о сигнатуре метода, параметрах по умолчанию, ключевом слове params и методах-расширениях. На примерах покажем, как эти механики помогают делать код понятнее, гибче и удобнее для повторного использования.
Урок не для тех, кто хочет просто «выучить синтаксис» без понимания, как методы влияют на структуру программы.
👉 Записаться: https://otus.pw/wkKs/?erid=2W5zFG7dRZ3
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. | 1 354 |
| 20 | Продвинутый C#-трюк: обновляй `Dictionary` без двойного поиска
Многие пишут так:
if (dict.TryGetValue(key, out var value))
{
dict[key] = value + 1;
}
else
{
dict[key] = 1;
}
Проблема: ты сначала ищешь ключ через TryGetValue, а потом снова лезешь в словарь через dict[key].
В hot path это лишняя работа.
Есть более взрослый вариант:
using System.Runtime.InteropServices;
ref var count = ref CollectionsMarshal.GetValueRefOrAddDefault(
dict,
key,
out var exists
);
if (!exists)
{
count = 0;
}
count++;
Что происходит:
1. C# получает ссылку прямо на значение внутри Dictionary
2. ключ ищется один раз
3. значение можно менять без повторного обращения
4. меньше лишних операций в tight loop
Где это полезно:
1. счётчики событий
2. парсеры
3. агрегации
4. обработка логов
5. high-performance backend code
Но есть важный нюанс:
не меняй структуру словаря, пока держишь ref.
То есть не делай Add, Remove, Clear рядом с этой ссылкой.
Это не трюк для каждого CRUD-сервиса.
Это инструмент для мест, где C# уже упёрся в производительность, и ты начинаешь выжимать лишние аллокации и лишние lookup’и. | 1 771 |
