18377
По всем вопросам- @haarrp C# - обучающий канал Senior C# разработчика. @ai_machinelearning_big_data - Machine learning @itchannels_telegram - 🔥лучшие ит-каналы @csharp_ci - C# академия @pythonlbooks- книги📚 Реестр РКН: https://clck.ru/3Fk3kb
Основы обобщений (Generics) в C#: классы, интерфейсы, методы и делегаты
Generics — это фундамент гибкого и переиспользуемого кода в C#. На открытом вебинаре курса OTUS C# Developer. Professional Павел Нилов объяснит, как работают обобщения, зачем они нужны и как с их помощью писать код, который не боится масштабирования.
📌 18 ноября, 20:00
Основы обобщений (Generics) в C#
— классы, интерфейсы, методы и делегаты
— ковариантность, контравариантность и ограничения
— эффективное использование List и Dictionary
— примеры и разбор типичных ошибок
Вебинар бесплатный и подойдёт начинающим .NET-разработчикам, студентам и джунам, готовящимся к собеседованиям, а также тем, кто хочет систематизировать знания по Generics.
👉 Регистрируйтесь: https://otus.pw/QTK7/?erid=2W5zFHAbjFE
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
#ПятничныйКвиз #карательныйсишарп #ВопросИзЗрительногоЗала
Читать полностью…
Невидимые утечки: как находить и обезвреживать сложнейшие утечки памяти в .NET
Даже опытные разработчики не всегда замечают, как события, таймеры и делегаты создают невидимые утечки, удерживая объекты в памяти. На открытом вебинаре курса OTUS C# Developer. Professional Елена Сычева покажет, как такие ошибки возникают и как их находить.
📌 12 ноября, 20:00
Невидимые утечки в .NET
— диагностика скрытых утечек памяти
— разбор работы GC и дампов памяти
— анализ событий, таймеров и делегатов
— реальные примеры из продакшн-кейсов
Вебинар бесплатный и будет полезен .NET-разработчикам уровня Middle и выше, работающим с долгоживущими приложениями и микросервисами.
👉 Регистрируйтесь: https://otus.pw/SkLR/?erid=2W5zFJw5xMW
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
На Stepik вышел курс - Linux: полный апгрейд твоих скиллов
Хочешь реально понимать, что происходит под капотом твоей системы, а не просто кликать по GUI?
Без глубокого знания базы ты не инженер - ты просто пользователь.
🔹 В курсе ты:
- Освоишь bash, grep, sed, awk - инструменты, которыми живут админы.
- Разберёшь права, процессы, сеть, файловую систему и научишься чинить всё, что падает.
- Настроишь SSH, firewall, systemd, crontab, демоны и автозапуск.
- Научишься анализировать логи, следить за нагрузкой, и не паниковать при 100% CPU.
💡 Формат: пошаговое объяснение базы и разбор важных практик по работе с Linux.
🎯 После курса ты: будешь чувствовать Linux как родную среду и забудешь, что такое “permission denied”.
🚀 Сейчас действуют скидка целых - 30%, не упусти реальный шанс прокачаться.
👉 Пройти курс на Stepik
Как вы организуете свои Vertical Slices?
Есть два подхода, и оба встречаются в живых проектах:
1) Один файл → статический класс + вложенные типы
- Request / Response внутри
- Handler внутри
- Validator внутри
- Endpoint там же
- максимум локальности и контекста
- удобно читать как "одна фича – один файл"
2) Каждый тип в отдельном файле
- Request.cs
- Response.cs
- Handler.cs
- Validator.cs
- Endpoint.cs
- привычно для больших команд
- проще искать по имени файла
- лучше работает при очень длинных обработчиках
По сути:
- маленькие обработчики → один файл с вложенными типами
- большие и долгоживущие фичи → отдельные файлы + папка
Главный принцип Vertical Slice — держать фичу целостной.
Не заставлять прыгать по всему solution ради одной команды.
А вы как делаете: всё в одном файле или дробите?```
⚡️ Хорошая архитектура ничего не стоит, если её легко сломать.
Есть три способа заставить команду придерживаться дизайна:
- компилятор и статический анализ
- архитектурные тесты
- код-ревью
Компилятор - лучший друг. Он мгновенно ловит ошибки и не даст собрать проект, если что-то нарушено.
Но как использовать это для защиты архитектуры?
В .NET можно скрывать типы через internal и разделять код на проекты, чтобы изолировать модули.
Проблема - при масштабировании проектов становится слишком много.
Статический анализ полезен, но писать свои Roslyn-правила - удовольствие на любителя.
Поэтому я делаю ставку на архитектурные тесты.
Они позволяют задать правила в виде автотестов и контролировать зависимости между модулями, особенно в модульном монолите: каждый модуль видит только публичный API других модулей.
Ну и код-ревью - финальный фильтр. Кто-то должен глазами подтвердить, что всё ок.
Что выбрать?
Я больше всего полагаюсь на компилятор и архитектурные тесты - это помогает ловить проблемы максимально рано.
Хотите больше? Посмотрите пример использования архитектурных тестов и подход shift left.
🔐 Что такое RBAC (Role-Based Access Control)
RBAC - это модель контроля доступа на основе ролей. Она помогает управлять авторизацией в приложениях просто и масштабируемо.
Как работает RBAC:
- Ролям назначаются определённые разрешения (permissions);
- Пользователям присваиваются роли, и через них - разрешения;
- Разрешения определяют, что пользователь может или не может делать.
📌 Преимущество RBAC в том, что можно централизованно управлять правами доступа.
Но часто роли оказываются слишком «грубыми» — не хватает точности для отдельных политик безопасности.
Здесь на помощь приходят permissions — разрешения на конкретные действия.
Если нужно дать доступ другой роли, достаточно просто добавить разрешение к роли, не переписывая всю систему авторизации.
💡 Простая концепция, но невероятно мощная в управлении доступом.
Подробнее
Интенсив по Unity: создай и монетизируй свою инди-игру
Присоединяйся к 2-месячному интенсиву по Unity, во время которого ты с нуля создашь культовую игру «2048», научишься кастомизировать проект с помощью нейросети и работать с алгоритмами.
Кому подойдёт интенсив:
➡️ Планируешь усилить портфолио крутым проектом, чтобы попасть на стажировку в геймдев студии;
➡️ Думаешь о монетизации собственных знаний уже сейчас
➡️ Хочешь научиться работать с нейросетями, чтобы добавить игре свой стиль;
Только на этом потоке онлайн-лекции проходят лично с создателями интенсива — опытными геймдев-разработчиками.▪️старт 3 ноября▪️длительность: 2 месяца▪️стоимость за весь курс 35 000 руб.
Переходи на сайт и оставляй заявку, чтобы всего через 2 месяца начать зарабатывать на собственной инди-игре
erid: 2W5zFHXTbda
🖥 Шардирование в базах данных: обзор концепции
Шардирование или шардинг - это принцип проектирования базы данных, при котором данные разбиваются на части и размещаются на разных шардах.
Интерактивный лонгрид по шардированию баз данных.
В нем разобрано все - от принципов работы шардов и причин, зачем это вообще нужно, до тонкостей проектирования и типовых ошибок.
Каждый раздел сопровождается интерактивными диаграммами, с которыми можно экспериментировать прямо в статье.
Отличный материал, чтобы прокачать понимание распределённых БД на выходных 💡
Статья: https://planetscale.com/blog/database-sharding
Видео: https://www.youtube.com/watch?v=R2ML2jLs3_U
Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями 🔥
Тебя ждут:
▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего.
▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии.
▫️ ИТ-качалка. Наращивай экспертизу на воркшопах.
▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов.
▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч.
▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек.
▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты.
Когда: 21 ноября, МТС Live Холл в Москве и онлайн.
Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.
Приходи на C#-дебаты – 1,5 часа на полезные знакомства и обсуждения
28 октября пройдут C#-дебаты — вечер, где обсуждаем код, архитектуру и инженерные решения. Твое мнение важно!
Как это будет: Участники случайным образом распределяются в zoom-комнаты, в каждой — модератор, который поможет разогнать разговор (или вовремя потушить пожар 🔥). 3 раунда по 30 минут.
Зачем приходить:
- Обсудишь темы, которые вызывают споры: performance vs readability, скорость vs стабильность, код vs бизнес-задачи.
-Заберешь идеи и практики, которые работают у других, и поделишься своим опытом.
- Найдешь полезные контакты и познакомишься с C#-коммьюнити.
Вечер организует Mindbox, но будет «без оружия»: никакого хантинга и рассказа про вакансии, пока ты сам не спросишь.
📅 Когда: 28 октября
⏰ Во сколько: 19:00–20:50 (мск)
📍 Где: Zoom (ссылку пришлём после регистрации)
👉 Зарегистрироваться
EF Core: Что скрывают за репозиторием?
Entity Framework Core — мощный инструмент, но его часто оборачивают в Repository Pattern, не задумываясь, действительно ли это нужно. На открытом вебинаре курса OTUS C# Developer. Professional Виктор Дзицкий покажет, когда репозиторий оправдан, а когда он только мешает.
📌 5 ноября, 20:00EF
Core: Что скрывают за репозиторием?
— когда Repository Pattern избыточен
— реализация Specification Pattern для гибких запросов
— как объединить оба подхода для чистой архитектуры
Вебинар бесплатный и будет полезен C# и .NET-разработчикам, которые активно используют EF Core и хотят сделать код доступа к данным тестируемым и поддерживаемым.
👉 Регистрируйтесь: https://otus.pw/SwNU/?erid=2W5zFJEjp2k
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Хотите собрать свой мини-Google? 🚀
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.
Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.
После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
Присоединяйтесь 22 октября в 20:00:
https://otus.pw/Yli7/?erid=2W5zFGbuHhJ
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🪄 magictools — curated-подборка инструментов и ресурсов для разработки игр
Если ты занимаешься геймдевом — этот репозиторий настоящий клад для поиска подходящих инструментов! Вот что внутри:
- Графика: от placeholders до редакторов и генераторов персонажей
- Spritesheets и анимация: инструменты для упаковки и обработки
- Фреймворки и движки: 2D/3D, физика, GUI, звук, освещение, генерация ландшафта и кастомные пайплайны
- Аудио и музыка: коллекции звуков и редакторы
- Книги, видео, подкасты, журналы и блоги: образовательное и вдохновляющее содержание
- Game Jam сообщества, исходники игр, управление проектами — всё в одном месте!
- Плюс разделы по AI, обучению, инструментам общего развития и прочему ценному
Этот список постоянно растёт и обновляется — отличное решение, чтобы не запутаться в инструментариуме.
https://github.com/ellisonleao/magictools
#GameDev #Ресурсы #Инструменты
𝟵𝟬% API на самом деле НЕ RESTful — и почти всегда по одной причине 👇
По модели зрелости Ричардсона REST имеет 4 уровня:
• 0 — просто один эндпоинт, всё через XML/JSON
• 1 — ресурсы с разными URI
• 2 — корректное использование HTTP-методов
• 3 — HATEOAS, когда сам API подсказывает клиенту, какие действия доступны дальше
Проблема в том, что большинство сервисов останавливаются на уровне 2 — то есть формально используют GET/POST/PUT/DELETE, но не дают клиенту навигации через гипермедиа.
Почему почти никто не добавляет HATEOAS:
1. Нужно больше кода
2. Вырастают ответы
3. Нет жёсткого стандарта, как это оформлять
4. Клиент усложняется
5. Кажется оверинжинирингом
Но что происходит без него?
1. Клиент и сервер становятся жёстко связаны
2. Бизнес-логика дублируется на клиенте
3. API плохо открывается и не подсказывает, как по нему ходить
HATEOAS — не обязательный компонент, но именно он делает API настоящим REST, а не просто HTTP поверх JSON.
Здесь разбор, когда это действительно важно и когда нет.
Хочешь разобраться с event-driven архитектурой?
Начни с самого простого - событийных уведомлений. В DDD это делается через domain events.
Как это работает:
- В доменной модели есть агрегаты - они отвечают за целостность внутри своих границ.
- Если нужно инициировать действие вне агрегата, он не вызывает его напрямую, а публикует domain event.
- Другие агрегаты подписываются на эти события и реагируют, когда нужно.
Получается слабое связывание: один объект просто сообщает «что произошло», а не «что делать дальше».
Агрегат поднял событие — другие обработали. Чисто, понятно, без прямых зависимостей.
Так строятся системы, которые легко расширять и поддерживать, не превращая код в паутину вызовов.
Event-driven начинается не с Kafka и очередей, а с простого: правильно разделять границы и общаться через события.
Подробнее
🔥 EF Core 10 принес нормальные JOIN'ы в LINQ
Больше не нужно вспоминать, как извращаться с GroupJoin + DefaultIfEmpty, чтобы сделать обычный LEFT JOIN.
Теперь есть прямые методы:
✅ LeftJoin
✅ RightJoin
И они делают ровно то, что ты пишешь:
«Оставь все из левой таблицы и подтяни правые записи, если есть совпадения».
Плюсы
- Читаемость выше
- Код короче и очевиднее
- Транслируется в тот же SQL, что и раньше, но без боли
Примерно так LINQ наконец становится ближе к привычному SQL-пониманию разработчика: пишешь join — получаешь join, без магии и обходных путей.
Подробнее про LeftJoin и RightJoin в EF Core 10
#dotnet #efcore #csharp #linq #backend #devtools
⚡️ Что выведет код?
using System;
namespace MyApplication {
class Program {
static void Main(string[] args) {
int a = 10, b = 20;
Console.WriteLine("{0}+{1}", a, b);
}
}
}
Не пропустите! 06 ноября в 20:00 пройдет бесплатный урок курса “Unity Game Developer. Professional” по теме “ECS: Секретное оружие топовых разработчиков.” Запись: https://otus.pw/c4Lq/
Устал от медленных и запутанных игровых механик? ECS изменит твое представление о разработке игр!
Что вы узнаете:
- Основы ECS — разберем ключевые принципы работы на примере LeoEcsLite
- Сравнение подходов — проведем детальный анализ ООП vs ECS
- Преимущества ECS — узнаем, почему крупные студии выбирают именно эту архитектуру
- Практические кейсы — рассмотрим реальные примеры оптимизации геймплея
- Производительность — разберем, как ECS помогает достичь максимальной эффективности
Записывайтесь на вебинар и получите спец. предложение на обучение:
https://otus.pw/c4Lq/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
Last Call: не пропусти Wink AI Challenge — первый в России ИИ-хакатон в киноиндустрии. Создай своё решение, которое ускорит производство фильмов и сериалов. Призовой фонд — 1 125 000 рублей.
Регистрация открыта до 4 ноября: https://cnrlink.com/winkaichallengecsharp
Приглашаем ML-инженеров, backend- и frontend-разработчиков, DevOps, MLOps и мультимедиа-инженеров.
Главные причины присоединиться:
🔸 Работа с настоящими сценариями и материалами, анализ текстов, извлечение сущностей, генерация структуры съёмок.
🔸 Практика применения NLP, NER и мультимодальных данных в задачах кинопроизводства.
🔸 Разработка ИИ-сервиса, который оценят и будут использовать продюсеры популярных российских фильмов и сериалов.
🔸 Реальный кейс в портфолио, созданный специально для крупнейшего онлайн-кинотеатра.
🔸Финалисты отправятся в Москву — Wink оплатит билеты и проживание.
Успей зарегистрироваться на первый в России хакатон по применению ИИ в кинопроизводстве: https://cnrlink.com/winkaichallengecsharp
Ubuntu Unity остался без разработчиков и новых релизов
Проект Ubuntu Unity не может сформировать новый релиз 25.10 из-за отсутствия разработчиков, способных исправить критические проблемы с работой пользовательского окружения Unity, возникающие при использовании пакетной базы Ubuntu 25.10. Пользователям Ubuntu Unity не рекомендуется обновлять свои системы до ветки 25.10 или пытаться установить пакеты с Unity поверх других редакций Ubuntu 25.10, так как это может нарушить работоспособность системы.
https://opennet.ru/64125/
Не пропустите! 28 октября в 20:00 пройдет бесплатный урок курса “Unity Game Developer. Professional” по теме “Unity Архитектура: от хаоса к порядку.” Запись: https://otus.pw/udwz/
Хотите создавать игры, которые не превратятся в хаос после первого релиза? Приглашаем вас на открытый урок по архитектуре в Unity, где мы разберем ключевые принципы создания профессиональных игровых проектов.
Что вы узнаете:
- Индустриальные стандарты разработки игр — погрузимся в реальные практики топовых студий
- Scene Driven Design — рассмотрим плюсы и минусы популярного подхода создания игр "От Сцены"
- AppScene + Additive — разберем профессиональный подход создания игр, где сцена перестает быть главным состоянием игры и становится одним из элементов геймплея
- Лучшие практики — изучим проверенные временем решения для создания стабильных проектов
- Типичные ошибки — узнаем, как избежать распространенных проблем в архитектуре
Записывайтесь на вебинар и получите спец. предложение на обучение:
https://otus.pw/udwz/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
⚙️ 3 способа определить Middleware в ASP.NET Core
Middleware - это компоненты, которые добавляют дополнительную логику до или после обработки HTTP-запроса.
С их помощью можно реализовать аутентификацию, логирование, кеширование, обработку ошибок и другие сквозные функции приложения.
🔧 В ASP.NET Core уже встроено множество middleware (Static Files, Routing, Authentication и др.),
но вы можете создавать и свои собственные.
Вот три основных способа это сделать:
- Request Delegates - определяете логику прямо в app.Use(...)
- Convention-based - создаёте класс с методом Invoke или InvokeAsync
- Factory-based - используете фабрику с внедрением зависимостей (DI)
🧠 Подробный разбор и примеры кода - в статье
#dotnet #aspnetcore #backend #middleware #csharp
🔥 dotenvx — улучшенная версия популярной библиотеки dotenv, созданная её автором!
💡 Dotenvx предназначен для управления переменными окружения в приложениях и предлагает расширенные возможности, такие как поддержка нескольких сред, шифрование .env файлов и кроссплатформенность.
🔍 Основные преимущества dotenvx:
🌟 Шифрование .env файлов: обеспечивает безопасность конфиденциальных данных, хранящихся в переменных окружения.
🌟 Кроссплатформенность: совместим с различными языками программирования и фреймворками, такими как Python, PHP, Ruby, Go, Rust, Java, .NET и другие.
🔐 Лицензия: BSD-3-Clause
🖥 Github
@csharp_ci
А ты правильно называешь свои DTO? 🤔
DTO (Data Transfer Object) — это объект передачи данных.
Проще говоря, это класс или структура, которая используется, чтобы передавать данные между слоями приложения или между сервером и клиентом (например, в API).
Когда ты создаёшь Web API, твои эндпоинты принимают и отдают данные.
Обычно такие модели называют с суффиксом DTO (Data Transfer Object).
Но вот в чём проблема 👇
❌ DTO часто смешивают входные и выходные данные в одном классе.
❌ Со временем такие классы разрастаются и становятся неразберихой.
👉 Лучше использовать суффиксы Request и Response:
• CreateUserRequest — для входных данных
• UserResponse — для выходных
Почему это лучше:
✅ Понятнее — сразу видно, для чего модель.
✅ Масштабируемо — изменения в Response не ломают Request.
✅ Удобнее сопровождать — не нужно гадать, что делает UserDto.
📌 Совет: какую бы схему ты ни выбрал — будь последовательным и используй её во всём проекте.
А ты используешь Request/Response или по-старинке DTO? 👇
⚙️ Создание фоновых задач в .NET с Quartz
Если тебе нужно планировать фоновые задачи в .NET — попробуй Quartz.
Всё просто: реализуешь интерфейс, регистрируешь задачу — и Quartz берёт на себя расписание и выполнение.
✨ Что делает Quartz удобным:
- Глубокая интеграция с Dependency Injection — можно внедрять сервисы, логеры и репозитории;
- Scoped-область задач — безопасно использовать DbContext без проблем с жизненным циклом;
- Умный планировщик: без ручных таймеров и бесконечных циклов.
После Quartz уже не хочется возвращаться к ручным решениям.
📘 Подробный гайд по продвинутой работе с Quartz в .NET
🧭 Зачем нужен service discovery?
Проблема микросервисов проста: как сервисам надёжно находить и вызывать друг друга? Жёстко прописанные IP и порты ломаются при любом масштабировании, перезапуске, автосборке или миграции.
Что делает service discovery
- Даёт логические имена вместо физических адресов (users-api, billing, auth).
- Динамически находит живые инстансы и балансирует запросы.
- Упрощает масштабирование, blue/green-деплой и отказоустойчивость.
Как это работает (базовый поток)
1) Сервис регистрируется в реестре (name → адреса, порты, метаданные, health).
2) Клиент запрашивает реестр и получает актуальный адрес.
3) Клиент шлёт запрос по полученному адресу (часто с ретраями и timeouts).
Паттерны
- Client-side discovery: клиент сам спрашивает реестр (Consul, Eureka).
- Server-side discovery: маршрутизация через прокси/ингресс (Envoy, API-шлюз).
- K8s-вариант: встроенный DNS/Services дают стабильные имена.
Что выбрать
- Consul/Eureka — когда вы не в Kubernetes или хотите гибкий реестр и health-чеки.
- K8s Services — когда всё крутится в Kubernetes.
- Envoy/Traefik/API-шлюз — если нужен серверный роутинг, канареечные релизы, mTLS.
Как внедрить в .NET (пример с Consul)
- Поднимите Consul-агент (dev/cluster), включите health-чеки (HTTP/TCP/TTL).
- Регистрируйте сервис на старте приложения: имя, адрес, порт, теги, check.
- Разрешайте адреса через:
- Consul API (client-side discovery в коде .NET),
- или DNS-запросы вида service-name.service.consul (удобно для простых клиентов),
- или через sidecar/Envoy, чтобы вынести логику сетевого стека из приложения.
- Добавьте политики устойчивости (Polly): retries, circuit breaker, timeouts.
- Пропишите deregistration при остановке, чтобы не висели «мертвые» инстансы.
- Логи/метрики: мониторьте failing-чеки, латентность и распределение трафика.
✨ Пример в .NET:
builder.Services
.AddHttpClient<ReportingServiceClient>(client =>
{
client.BaseAddress = new Uri("http://reporting-service");
})
.AddServiceDiscovery()
.AddRoundRobinLoadBalancer();