This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io🍔
👉 @KodBlog
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2
Visual Studio 2026 показывает результаты условных операторов (if) прямо в коде во время отладки.
Скоро будет доступно⌨️
👉 @KodBlog
Скоро будет доступно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤40🔥11👏3🕊3
Динамическая сортировка в EF Core
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
👉 @KodBlog
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥2❤1
LLM в .NET проще, чем кажется
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.🙂
Подробнее: тык
👉 @KodBlog
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.
Подробнее: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
Устаревший подход к работе с null в C# выглядит так:
• Возвращать
• Вставлять десятки проверок
• Полагаться на то, что разработчики «просто знают», что может быть
И всё это ради чего?
Хрупкий код, скрытые баги и
Новый путь такой:
• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)
Как начать:
• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию
Писать безопасный, устойчивый к падениям C# код тяжело.
Но искать
👉 @KodBlog
• Возвращать
null из методов и надеяться на лучшее• Вставлять десятки проверок
if (x != null) повсюду• Полагаться на то, что разработчики «просто знают», что может быть
nullableИ всё это ради чего?
Хрупкий код, скрытые баги и
NullReferenceExceptionНовый путь такой:
• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)
Как начать:
• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию
Писать безопасный, устойчивый к падениям C# код тяжело.
Но искать
NullReferenceException в продакшене в 100 раз сложнее.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👎4👍2
Любите ретро-игры и открытый код? На OS Game Clones собрали десятки открытых клонов классических игр. 😎
Теперь можно играть в любимые тайтлы на современных системах, изучать исходники или использовать их как основу для своих проектов. От платформеров до шутеров и градостроительных симуляторов
Всё в свободном доступе и с возможностью модификации.
👉 @KodBlog
Теперь можно играть в любимые тайтлы на современных системах, изучать исходники или использовать их как основу для своих проектов. От платформеров до шутеров и градостроительных симуляторов
Всё в свободном доступе и с возможностью модификации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥4🥰2👍1
Слышали про Refit?
Если нет, позвольте представить.
Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.
Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".
Почему стоит рассмотреть его использование?
- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API
Больше всего мне нравится обертка
Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.🍺
👉 @KodBlog
Если нет, позвольте представить.
Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.
Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".
Почему стоит рассмотреть его использование?
- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API
Больше всего мне нравится обертка
ApiResponse<T>, которая обрабатывает как содержимое, так и метаданные.Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
LeetCode только что добавил AI, который решает задачи за тебя.
Тогда какой, блин, вообще смысл, лол.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍2
Правильный выбор индекса ускорил SQL-запрос в 70 раз.
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
👉 @KodBlog
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Вместо того чтобы:
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
👉 @KodBlog
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
😐7👍2😁2👌2❤1
dotnet-backend-template-12.09.2025 (2).zip
266.3 KB
Сохраняйте этот проверенный шаблон бэкенда на .NET — собранный по лучшим отраслевым практикам, чтобы ты мог сосредоточиться на разработке действительно важных функций.
ASP.NET Core Web API, EF Core, PostgreSQL, аутентификация и авторизация, OpenTelemetry, FluentValidation, Swagger, Docker и многое другое
👉 @KodBlog
ASP.NET Core Web API, EF Core, PostgreSQL, аутентификация и авторизация, OpenTelemetry, FluentValidation, Swagger, Docker и многое другое
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👎3🔥2
Бенчмарк производительности LINQ
Ранее видел это на LinkedIn — возможно, бенчмарк немного искусственный, но всё же хорошо показывает улучшения производительности между версиями .NET.
https://gist.github.com/jackmott/4b6b12f6d05997783a9fa1accd0b2c7b
👉 @KodBlog
Ранее видел это на LinkedIn — возможно, бенчмарк немного искусственный, но всё же хорошо показывает улучшения производительности между версиями .NET.
https://gist.github.com/jackmott/4b6b12f6d05997783a9fa1accd0b2c7b
Please open Telegram to view this post
VIEW IN TELEGRAM
Исключения не для управления потоком
Исключения применимы только для непредвиденных ситуаций. Когда ими заменяют обычные условия, код становится менее читаемым, сложнее в отладке и работает медленнее.
Решение — использовать Result Pattern. Возврат объекта с полями IsSuccess или IsError, Value и Error делает API предсказуемым, код чище, тесты проще и повышает производительность.
Уже есть готовые NuGet-пакеты вроде FluentResults, CSharpFunctionalExtensions, Ardalis Result и error-or, но реализовать такой паттерн можно и самостоятельно.
Здесь лучший гайд по тому, как использовать Result Pattern в реальных приложениях
👉 @KodBlog
Исключения применимы только для непредвиденных ситуаций. Когда ими заменяют обычные условия, код становится менее читаемым, сложнее в отладке и работает медленнее.
Решение — использовать Result Pattern. Возврат объекта с полями IsSuccess или IsError, Value и Error делает API предсказуемым, код чище, тесты проще и повышает производительность.
Уже есть готовые NuGet-пакеты вроде FluentResults, CSharpFunctionalExtensions, Ardalis Result и error-or, но реализовать такой паттерн можно и самостоятельно.
Здесь лучший гайд по тому, как использовать Result Pattern в реальных приложениях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3
Топ-3 встроенных обобщённых делегата в C#: Func, Action и Predicate
Делегаты — это указатели на функции. Они помогают в коммуникации и колбэках.
В .NET есть три встроенных обобщённых делегата:
1)
2)
3)
Эти обобщённые делегаты активно используются во встроенных классах .NET,
и мы можем применять их, чтобы писать делегаты короче.
Хотите увидеть их на реальном примере?
- Создаём класс
- Формируем список объектов типа
- Добавляем данные
Некоторые методы LINQ используют делегаты:
- Метод Select принимает Func
- Метод ForEach принимает Action
- Метод FindAll принимает Predicate
А как часто вы используете их в своём коде?🍜
👉 @KodBlog
Делегаты — это указатели на функции. Они помогают в коммуникации и колбэках.
В .NET есть три встроенных обобщённых делегата:
1)
Func: принимает обобщённый вход и возвращает обобщённый выход2)
Action: принимает обобщённый вход и ничего не возвращает3)
Predicate: принимает обобщённый вход и всегда возвращает BooleanЭти обобщённые делегаты активно используются во встроенных классах .NET,
и мы можем применять их, чтобы писать делегаты короче.
Хотите увидеть их на реальном примере?
- Создаём класс
Student с некоторыми свойствами- Формируем список объектов типа
Student- Добавляем данные
Некоторые методы LINQ используют делегаты:
- Метод Select принимает Func
- Метод ForEach принимает Action
- Метод FindAll принимает Predicate
А как часто вы используете их в своём коде?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
Знали ли вы, что можно создать гиперссылку, которая откроет Visual Studio и сразу клонирует любой git-репозиторий?
Это очень просто, вот пример: https://vs-open.link/git-clone
👉 @KodBlog
Это очень просто, вот пример: https://vs-open.link/git-clone
Please open Telegram to view this post
VIEW IN TELEGRAM
Visual Studio Protocol Handlers
Git Clone Link Generator - Visual Studio Protocol Handler
Generate shareable Git clone URLs that open repositories directly in Visual Studio. Create one-click repository clone links with QR codes for easy sharing.
🔥5👍2
Новая C#-библиотека RCParsing, которая предлагает гибридный подход к обработке сложных синтаксисов с отступами.
Разработчики отмечают, что традиционные инструменты часто не справляются с такими задачами, а использование барьерных токенов значительно улучшает качество парсинга. В качестве примера приводится разбор YAML.
Подробнее в статье
👉 @KodBlog
Разработчики отмечают, что традиционные инструменты часто не справляются с такими задачами, а использование барьерных токенов значительно улучшает качество парсинга. В качестве примера приводится разбор YAML.
Подробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Тонкое, но мощное дополнение в C# 14:
(которое снизит количество
Null-conditional assignment (null-условное присваивание).
Этот оператор позволяет присвоить значение члену или элементу объекта только в том случае, если сам объект не равен null.
Это небольшое изменение, но оно может сильно повлиять на читаемость и безопасность кода.
Почему это полезно:
Убирает повторяющиеся проверки на null перед присваиванием.
Упрощает код, делая его легче для понимания.
Безопасно пропускает присваивание, если целевой объект равен null, тем самым избегая NullReferenceException.
См. пример кода
👉 @KodBlog
(которое снизит количество
NullReferenceException)Null-conditional assignment (null-условное присваивание).
Этот оператор позволяет присвоить значение члену или элементу объекта только в том случае, если сам объект не равен null.
Это небольшое изменение, но оно может сильно повлиять на читаемость и безопасность кода.
Почему это полезно:
Убирает повторяющиеся проверки на null перед присваиванием.
Упрощает код, делая его легче для понимания.
Безопасно пропускает присваивание, если целевой объект равен null, тем самым избегая NullReferenceException.
См. пример кода
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29❤🔥7❤3👍1
image_2025-09-30_07-04-26.png
868.3 KB
Какая единственная стратегия сильнее всего помогает улучшить производительность приложения?
Это —кешировать (почти) всё!
Кеш хранит копии часто используемых данных в быстродоступном месте, сокращая время доступа и снижая нагрузку на основные источники данных.
Преимущества кеширования:
- более быстрое получение данных
- снижение нагрузки на основные хранилища
- улучшение пользовательского опыта
Не ограничивайся только кешированием запросов к базе данных, ведь чтение из кеша гораздо быстрее, чем вызов API.
Как решить, что кешировать?
Лучше спросить себя: а почему бы это не закешировать?
Добавление кеша имеет свою цену, поэтому для каждого кандидата нужно оценить:
- будет ли доступ через кеш быстрее
- стоит ли хранить эти данные
- как часто нужно валидировать
- сколько обращений придётся на одну запись в кеше
- локальный или общий кеш нужен
Нужно помнить, что данные в кеше могут устаревать, и бывают ситуации, когда кеширование неуместно.
Чтобы оценить эффективность кеша, можно отслеживать метрики, например cache misses.
Популярные стратегии кеширования:
👉 @KodBlog
Это —
Кеш хранит копии часто используемых данных в быстродоступном месте, сокращая время доступа и снижая нагрузку на основные источники данных.
Преимущества кеширования:
- более быстрое получение данных
- снижение нагрузки на основные хранилища
- улучшение пользовательского опыта
Не ограничивайся только кешированием запросов к базе данных, ведь чтение из кеша гораздо быстрее, чем вызов API.
Как решить, что кешировать?
Лучше спросить себя: а почему бы это не закешировать?
Добавление кеша имеет свою цену, поэтому для каждого кандидата нужно оценить:
- будет ли доступ через кеш быстрее
- стоит ли хранить эти данные
- как часто нужно валидировать
- сколько обращений придётся на одну запись в кеше
- локальный или общий кеш нужен
Нужно помнить, что данные в кеше могут устаревать, и бывают ситуации, когда кеширование неуместно.
Чтобы оценить эффективность кеша, можно отслеживать метрики, например cache misses.
Популярные стратегии кеширования:
🔸 Cache-Aside
Приложение само управляет чтением и записью в кеш. При cache miss данные берутся из основного хранилища и добавляются в кеш.🔸 Read-Through
При cache miss кеш автоматически подгружает данные из основного хранилища. Это упрощает работу, так как кеш сам обрабатывает промахи.🔸 Write-Around
Данные пишутся напрямую в основное хранилище, минуя кеш. Полезно, когда записи происходят часто, а чтения — реже.🔸 Write-Back
Сначала данные пишутся в кеш, а позже синхронизируются с основным хранилищем. Снижает количество операций записи, но есть риск потери данных, если синхронизация не успеет выполниться.🔸 Write-Through
Данные одновременно записываются и в кеш, и в основное хранилище. Обеспечивает консистентность, но может увеличивать задержку записи. Подходит там, где критична целостность данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3❤🔥2
Как проще всего запускать фоновые задачи в .NET?
Фоновые задачи — это процессы или операции, которые выполняются независимо от основного потока выполнения программы или приложения.
Обычно такие задачи работают в фоне, часто без прямого взаимодействия с пользователем, и могут выполнять различные функции, например:
Для этого в .NET можно использовать IHostedService.
Он содержит два метода:
- StartAsync
- StopAsync
Мы можем добавить в него нужное действие, достаточно зарегистрировать этот сервис в Program и всё будет готово.
Такой подход подходит для простых фоновых задач. Для более продвинутых сценариев можно использовать следующие NuGet-пакеты:
- Hangfire
- Quartz
👉 @KodBlog
Фоновые задачи — это процессы или операции, которые выполняются независимо от основного потока выполнения программы или приложения.
Обычно такие задачи работают в фоне, часто без прямого взаимодействия с пользователем, и могут выполнять различные функции, например:
отправка уведомлений
периодические задачи
задачи по расписанию
обработка сообщений
асинхронная обработка
обработка данных в реальном времени
Для этого в .NET можно использовать IHostedService.
Он содержит два метода:
- StartAsync
- StopAsync
Мы можем добавить в него нужное действие, достаточно зарегистрировать этот сервис в Program и всё будет готово.
Такой подход подходит для простых фоновых задач. Для более продвинутых сценариев можно использовать следующие NuGet-пакеты:
- Hangfire
- Quartz
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3