Сеньору запретили писать откровения на ревью, поэтому он опять наказан использованием эмодзи.
Пишите в комментарии, что это он написал на картинке 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Ключевые новости, которые могли ускользнуть от вашего внимания.
— Диагностика задержек в .NET
В статье описан случай, когда некоторые запросы в .NET-приложении занимали до 20 секунд, происходя это с периодичностью каждые полчаса. Узнайте в статье разобрался ли автор с этой проблемой.
— Руководство по выживанию с устаревшим кодом
В 2025 году Visual Basic 6.0 уже почти не используется, а VB.NET и .NET Framework постепенно уходят в прошлое, оставшись только для поддержки старых приложений.
— xUnit для сложных интеграционных тестов
Джереми Миллер описывает, как интегрировать логирование в xUnit для сложных интеграционных тестов с использованием Wolverine.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по C# | тесты, код, задания
Middle/Senior C# разработчик — удалёнка.
C# Developer — до 5500 $, удалёнка.
Full-Stack .NET Developer — до 450 000 ₽, удалёнка.
Tech Lead AI — от 450 000 ₽, удалёнка.
С#-разработчик — от 250 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Гид по Redis в C#
Представьте, что ваши запросы обрабатываются мгновенно. Для этого можно использовать Redis. Сейчас покажем как это сделать.
1. Устанавливаем
2. Создаём подключение
3. Базовые операции: SET и GET
4. Механизм подписки и публикации
Подписчик:
Публикация:
5. Дополнительно: списки, хэши и TTL
Пушим и читаем из конца/начала:
Группируем поля в одном ключе:
TTL для удаления ключей через время:
Бонус: бест практис
• ConnectionMultiplexer — тяжёлый объект, создавайте один раз.
• Используйте ConfigureAwait(false) и ловите исключения RedisConnectionException.
• Выполняйте атомарные операции на стороне сервера для консистентности.
• При росте нагрузки переходите на кластерный режим или Redis Sentinel для отказоустойчивости.
В будущем Redis становится центром событийной архитектуры: Stream-поддержка и геоданные открывают новые горизонты.
🐸 Библиотека шарписта #буст
Представьте, что ваши запросы обрабатываются мгновенно. Для этого можно использовать Redis. Сейчас покажем как это сделать.
1. Устанавливаем
Install-Package StackExchange.Redis
2. Создаём подключение
using StackExchange.Redis;
var redis = ConnectionMultiplexer.Connect("localhost:6379");
IDatabase db = redis.GetDatabase();
3. Базовые операции: SET и GET
// Записываем строку
bool setResult = db.StringSet("user:42:name", "ProgLib");
Console.WriteLine($"SET OK: {setResult}");
// Читаем строку
string name = db.StringGet("user:42:name");
Console.WriteLine($"GET: {name}"); // → ProgLib
StringSet
возвращает true, если всё прошло гладко. StringGet
в случае отсутствия ключа вернёт null.4. Механизм подписки и публикации
Подписчик:
var sub = redis.GetSubscriber();
sub.Subscribe("notifications", (channel, message) => {
Console.WriteLine($"Получено сообщение: {message}");
});
Публикация:
sub.Publish("notifications", "Новый заказ №128");
5. Дополнительно: списки, хэши и TTL
Пушим и читаем из конца/начала:
db.ListRightPush("tasks", "Сделать отчёт");
var task = db.ListLeftPop("tasks");
Группируем поля в одном ключе:
db.HashSet("session:1001", new HashEntry[] {
new HashEntry("userId", 42),
new HashEntry("expiresAt", DateTime.UtcNow.AddMinutes(30).ToString("O"))
});
var expires = db.HashGet("session:1001", "expiresAt");
TTL для удаления ключей через время:
db.StringSet("cache:item:7", "данные", TimeSpan.FromMinutes(5));
Бонус: бест практис
• ConnectionMultiplexer — тяжёлый объект, создавайте один раз.
• Используйте ConfigureAwait(false) и ловите исключения RedisConnectionException.
• Выполняйте атомарные операции на стороне сервера для консистентности.
• При росте нагрузки переходите на кластерный режим или Redis Sentinel для отказоустойчивости.
В будущем Redis становится центром событийной архитектуры: Stream-поддержка и геоданные открывают новые горизонты.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Как алгоритмическое мышление повышает производительность
Если ваше приложение «подтормаживает», вспомните о спортивном программировании: анализируйте асимптотику и меняйте неэффективные алгоритмы — и запросы станут выполняться за доли секунды.
Не догадывайтесь, где узкое место, а измеряйте его профилировщиком и выбирайте правильные структуры данных.
➡️ Почему спортивное программирование полезно
🐸 Библиотека шарписта #буст
Если ваше приложение «подтормаживает», вспомните о спортивном программировании: анализируйте асимптотику и меняйте неэффективные алгоритмы — и запросы станут выполняться за доли секунды.
Не догадывайтесь, где узкое место, а измеряйте его профилировщиком и выбирайте правильные структуры данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
🐢 Столкнулись с «тормозным» C#-кодом? Медленные алгоритмы могут растянуть выполнение задачи на минуты вместо миллисекунд.
📅 Приглашаем на открытый урок «Анализ сложности алгоритмов и сортировка на C#» 3 июля в 20:00 МСК.
Разберём, что такое Big O, какие факторы влияют на скорость, и на практике напишем пузырьковую, вставками и другие сортировки.
Вы увидите, как измерять время выполнения, сравнивать производительность и выбирать самый эффективный алгоритм. После занятия ваш код станет быстрее, а техническое интервью — проще.
Регистрируйтесь сейчас — урок проходит перед стартом курса «C# Developer»: https://clc.to/5ttuqA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 Приглашаем на открытый урок «Анализ сложности алгоритмов и сортировка на C#» 3 июля в 20:00 МСК.
Разберём, что такое Big O, какие факторы влияют на скорость, и на практике напишем пузырьковую, вставками и другие сортировки.
Вы увидите, как измерять время выполнения, сравнивать производительность и выбирать самый эффективный алгоритм. После занятия ваш код станет быстрее, а техническое интервью — проще.
Регистрируйтесь сейчас — урок проходит перед стартом курса «C# Developer»: https://clc.to/5ttuqA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Чек-лист по настройке и ведению репозитория .NET-проекта
Составили для вас чек-лист для организации репозитория .NET-проекта. Получился мини-гайд, который можно скинуть джуну.
✅ Проверьте URL репозитория
• Убедитесь, что имя аккаунта, название репозитория и основная ветка (main или master) соответствуют соглашениям команды.
• Проверьте, нет ли опечаток или лишних символов в пути.
✅ Добавьте файл LICENSE
• Поместите в корень проекта файл с лицензией (MIT, Apache, GPL и т. д.).
• Проверьте, что текст лицензии актуален и соответствует требованиям компании.
✅ Настройте .gitignore
• Используйте готовые шаблоны для .NET (VisualStudio, Rider): исключите bin/, obj/, настройки IDE, файлы сборки.
• При необходимости добавьте игнорацию пользовательских секретов и сертификатов.
✅ Создайте файл .gitattributes
Задайте нормализацию переводов строк:
• Укажите специальные правила для бинарных файлов, чтобы избежать проблем с кодировкой.
✅ Подробный README.md
• Опишите назначение проекта, его архитектуру и ключевые зависимости.
• Дайте инструкции по установке, настройке и запуску (команды CLI, порты, переменные окружения).
• Приведите пример запуска основных сценариев.
✅ Проект тестов
• Создайте отдельный тестовый проект (.Tests) и убедитесь, что все тесты проходят при команде
• Добавьте в README badge с процентом покрытия (например, через Coveralls или Azure Pipelines).
✅ CI/CD через GitHub Actions
• Разместите workflow в .github/workflows/ci.yml: сборка, тесты, анализ кода.
• Опционально — настройте деплой на тестовый или продакшен-стенд.
✅ Файлы CODE_OF_CONDUCT.md и CONTRIBUTING.md
• CODE_OF_CONDUCT.md определяет правила поведения участников.
• CONTRIBUTING.md описывает, как создавать issue, форкать проект и оформлять PR.
✅ Метки и темы
• Настройте лейблы для Issue/PR: bug, enhancement, help wanted, good first issue.
• Добавьте в репозиторий релевантные темы (например, csharp, dotnet-core, webapi).
✅ Badge-значки в README
• Статус сборки (Build Passing/Failing).
• Процент покрытия тестами.
• Поддерживаемые версии .NET.
Сколько «галочек» из списка содержит ваш проект?
🐸 Библиотека шарписта #буст
Составили для вас чек-лист для организации репозитория .NET-проекта. Получился мини-гайд, который можно скинуть джуну.
• Убедитесь, что имя аккаунта, название репозитория и основная ветка (main или master) соответствуют соглашениям команды.
• Проверьте, нет ли опечаток или лишних символов в пути.
• Поместите в корень проекта файл с лицензией (MIT, Apache, GPL и т. д.).
• Проверьте, что текст лицензии актуален и соответствует требованиям компании.
• Используйте готовые шаблоны для .NET (VisualStudio, Rider): исключите bin/, obj/, настройки IDE, файлы сборки.
• При необходимости добавьте игнорацию пользовательских секретов и сертификатов.
bin/
obj/
*.user
*.suo
Задайте нормализацию переводов строк:
* text=auto
*.ps1 text eol=crlf
• Укажите специальные правила для бинарных файлов, чтобы избежать проблем с кодировкой.
• Опишите назначение проекта, его архитектуру и ключевые зависимости.
• Дайте инструкции по установке, настройке и запуску (команды CLI, порты, переменные окружения).
• Приведите пример запуска основных сценариев.
• Создайте отдельный тестовый проект (.Tests) и убедитесь, что все тесты проходят при команде
dotnet test
.• Добавьте в README badge с процентом покрытия (например, через Coveralls или Azure Pipelines).
• Разместите workflow в .github/workflows/ci.yml: сборка, тесты, анализ кода.
• Опционально — настройте деплой на тестовый или продакшен-стенд.
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with: { dotnet-version: '7.0.x' }
- run: dotnet build --no-restore
- run: dotnet test --no-build --verbosity normal
• CODE_OF_CONDUCT.md определяет правила поведения участников.
• CONTRIBUTING.md описывает, как создавать issue, форкать проект и оформлять PR.
• Настройте лейблы для Issue/PR: bug, enhancement, help wanted, good first issue.
• Добавьте в репозиторий релевантные темы (например, csharp, dotnet-core, webapi).
• Статус сборки (Build Passing/Failing).
• Процент покрытия тестами.
• Поддерживаемые версии .NET.
Сколько «галочек» из списка содержит ваш проект?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В рамках трансляции On .NET Live ведущие разобрали, как через чёткие интерфейсы Repository и паттерн Specification вынести всю логику запросов из бизнес-слоя, чтобы не забирать в память лишние данные и легко мокировать код для тестов.
Также обсудили компромиссы generic-репозиториев и показали, как Unit of Work возвращает настоящую транзакционность, вызывая
SaveChanges()
один раз в конце.Please open Telegram to view this post
VIEW IN TELEGRAM
😤 Пока вы думаете — остальные уже учатся строить системы, которые работают за них
⚡24 часа до старта курса по AI-агентам. Самое время задуматься о прокачке скиллов, потому что места ограничены!
Если вы до сих пор думаете, что LLM — это просто «вызов через API», то вы рискуете очень скоро оказаться за бортом индустрии.
Модели больше не в центре. Решают те, кто умеет собирать интеллектуальные системы, а не просто «дообучать модельку».
➡️ Что вы потеряете, если не впишетесь:
— навык, который уже востребован на рынке
— понимание, как из GPT сделать полноценного помощника, агента или продукт
— шанс догнать тех, кто уже перешёл на следующий уровень
📌 Курс стартует уже завтра
— 5 вебинаров, живая практика, код, разборы, продовые кейсы
— без «посмотрите статью», только то, что реально нужно
Спикеры: Никита Зелинский (МТС), Диана Павликова, Макс Пташник, Дима Фомин — те, кто реально собирает агентные системы, а не просто про них пишет.
❗Старт уже завтра — забронируйте место на курсе сейчас
⚡24 часа до старта курса по AI-агентам. Самое время задуматься о прокачке скиллов, потому что места ограничены!
Если вы до сих пор думаете, что LLM — это просто «вызов через API», то вы рискуете очень скоро оказаться за бортом индустрии.
Модели больше не в центре. Решают те, кто умеет собирать интеллектуальные системы, а не просто «дообучать модельку».
➡️ Что вы потеряете, если не впишетесь:
— навык, который уже востребован на рынке
— понимание, как из GPT сделать полноценного помощника, агента или продукт
— шанс догнать тех, кто уже перешёл на следующий уровень
📌 Курс стартует уже завтра
— 5 вебинаров, живая практика, код, разборы, продовые кейсы
— без «посмотрите статью», только то, что реально нужно
Спикеры: Никита Зелинский (МТС), Диана Павликова, Макс Пташник, Дима Фомин — те, кто реально собирает агентные системы, а не просто про них пишет.
❗Старт уже завтра — забронируйте место на курсе сейчас
Теперь разработчики могут генерировать альтернативный текст для изображений прямо в своем приложении.
Вместо того чтобы отправлять запросы в облачные сервисы, можно использовать локально размещенные модели, например Ollama.
Для этого достаточно запустить простой скрипт на C#, который анализирует изображение и генерирует для него текстовое описание.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
var
в C# — удобство или маскаС появлением ключевого слова
var
нам дали возможность уменьшить количество шаблонного кода и писать более компактные выражения.Вместо явного написания громоздких типов можно писать лаконичный код:
// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData();
Также
var
не делает переменную динамической, это всё тот же строго типизируемый код.Но есть и сильный аргумент против использования
var
. На примере кода выше:// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData(); // каков тип data? int, string, CustomType?
Тип, получаемый из функции неочевиден и это в разы ухудшает читаемость кода.
var
— полезный инструмент, но требует дисциплины. При очевидном типе он упрощает код, при неочевидном — мешает пониманию.var
в коде или сторонник явного? Делитесь мыслями в комментариях 👇Please open Telegram to view this post
VIEW IN TELEGRAM
Несколько интересных материалов, которые вы могли пропустить.
— Фильтрация, сортировка и пагинация в .NET
От инициализации проекта и установки пакета Sieve до настройки DI и написания контроллера с автоматическим применением фильтров и сортировок.
— Каналы не подходят для In-Memory шины сообщений
Использование каналов в качестве шины сообщений может завести в тупик: отсутствие персистентности приводит к необходимости самому реализовывать dead-letter очереди, экспоненциальные откладывания для повторов, механизмы отложенной доставки и «claim-check» для тяжёлых полезных нагрузок.
— Запуск коммерческих изданий AutoMapper и MediatR
В обновлённых релизах AutoMapper v15.0 и MediatR v13.0 на NuGet реализован запрос лицензии при установке.
Помимо тарификации по размеру команды и скидок за годовую подписку, подписчики получают приоритетную поддержку, ранний доступ к выпускам и частные каналы в Discord.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по C# | тесты, код, задания
С# Senior Backend Developer — от 250 000 ₽, удалёнка.
C# программист — до 160 000 ₽, гибрид (Москва).
Fullstack Middle C# Developer— до 500 000₽, офис (Москва).
Руководитель группы C# — от 450 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
HTML Embed Code: