en
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Open in Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Show more
2025 year in numberssnowflakes fon
card fon
22 347
Subscribers
-624 hours
-377 days
-14330 days
Posts Archive
Photo unavailableShow in Telegram
Что выведет код Пишите свои ответы в комментариях 👇 Для любознательных ответ такой: 333 #dotnet_challenge
Show all...
Photo unavailableShow in Telegram
🤫 Курс «ИИ-агенты для DS-специалистов» Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-агенты — это новый рывок. Уже через пару лет именно они будут драйвить аналитику и автоматизацию. Хотите остаться на гребне? 🖥️ На курсе «ИИ-агенты для DS-специалистов» мы разберём: — создание AI-агентов с нуля — сборку собственной RAG-системы — интеграцию LLM под задачи бизнеса 📌 Курс подходит: → ML/AI инженерам (middle+ / senior) → Data Scientists → Backend и platform-инженерам → Advanced CS/DS студентам ⚡️ Старт уже скоро — 3 октября. 💰 До 28 сентября действует скидка — 57.000 ₽ вместо 69.000 ₽ (по промокоду datarascals). 🔗 Узнать больше о курсе и записаться З.ы. если вы не успели на вебинар «ИИ-агенты: новая фаза развития искусственного интеллекта» — запись уже доступна
Show all...
🥱 1
Photo unavailableShow in Telegram
🔄 Апдейт .NET Aspire Microsoft представила .NET Aspire 9.5 — свежий релиз для разработки распределённых приложений. Главное новшество — file-based AppHost: теперь можно описать всё приложение в одном файле apphost.cs, без громоздких .csproj. Добавление ресурсов и сервисов делается буквально одной строкой. Ещё появились улучшения в CLI, новая команда aspire update, упрощающая апгрейд SDK и интеграций, а также обновлённый дэшборд. ➡️ Блог разработчиков 🐸Библиотека шарписта #async_news
Show all...
🔥 8👍 1🌚 1
Photo unavailableShow in Telegram
⏱️ Как ускорить асинхронный код в C# Частая ошибка — писать асинхронные вызовы последовательно:
await GetUser();
await GetOrders();
await GetRecommendations();
Каждая операция ждёт предыдущую и если каждый запрос занимает по секунде, общее время = 3 секунды. А можно иначе:
var userTask = GetUser();
var ordersTask = GetOrders();
var recsTask = GetRecommendations();

await Task.WhenAll(userTask, ordersTask, recsTask);
Все задачи стартуют сразу. Теперь общее время = 1 секунда (ожидание самой длинной операции). Маленький приём — большая разница во времени выполнения. 🐸Библиотека шарписта #sharp_view
Show all...
👍 38🥱 9 1 1
Photo unavailableShow in Telegram
Отдохнуть или покушать Давайте помечтаем — ваш работодатель даёт вам выбор: 1 sick-day (отгул с сохранением ЗП) или оплата одного обеда в неделю. 💬 Что вы выберете? Почему? Ждём в комментариях 👇 🐸Библиотека шарписта #entry_point
Show all...
4👍 1🔥 1
💡 Domain Validation в .NET и DDD — просто о сложном В .NET-проектах часто пишут валидацию прямо в контроллере или сервисе: — проверили, что поле не пустое, — число больше нуля, — email подходит по формату. Это правильно, но есть проблема — бизнес-правила остаются размазаны по коду. В итоге можно случайно создать объект в некорректном состоянии (например, заказ без товаров). В идеале должно быть два уровня валидации Application Validation И Domain Validation. В одном проверяются входные данные, а в другом строится защита сущностей от нарушения бизнес-правил. Пример проверки на уровне приложения:
public record CreateOrderDto(string CustomerEmail, List<OrderItemDto> Items);

public class OrderApplicationValidator
{
    public static void Validate(CreateOrderDto dto)
    {
        if (string.IsNullOrWhiteSpace(dto.CustomerEmail))
            throw new ArgumentException("Email is required");

        if (!dto.CustomerEmail.Contains("@"))
            throw new ArgumentException("Email format is invalid");

        if (dto.Items == null || dto.Items.Count == 0)
            throw new ArgumentException("Order must contain at least one item");
    }
}
Здесь мы проверяем только корректность ввода. А вот внутри домена мы защищаем бизнес-правила:
public class OrderItem
{
    public string ProductName { get; }
    public int Quantity { get; }
    public Money Price { get; }

    private OrderItem(string productName, int quantity, Money price)
    {
        ProductName = productName;
        Quantity = quantity;
        Price = price;
    }

    public static OrderItem Create(string productName, int quantity, Money price)
    {
        if (string.IsNullOrWhiteSpace(productName))
            throw new InvalidOperationException("Product name cannot be empty");

        if (quantity <= 0)
            throw new InvalidOperationException("Quantity must be greater than zero");

        return new OrderItem(productName, quantity, price);
    }

    public Money GetTotal() => Money.Create(Quantity * Price.Amount);
}
Когда правила закреплены в домене, они становятся частью самой логики, а не зависимыми от внешних слоёв. Это гарантирует, что объект в принципе невозможно построить в некорректном виде. 🐸Библиотека шарписта #il_люминатор
Show all...
🔥 7 1👍 1
Photo unavailableShow in Telegram
Show all...
😁 33👍 2 1
Photo unavailableShow in Telegram
Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей. Соревнования пройдут в двух треках: 1. Алгоритмические задачи Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад. 2. Программирование роботов Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только. Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве. Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель. Регистрируйся до 20 октября по ссылке.
Show all...
2
Photo unavailableShow in Telegram
🔢 Когда числа становятся понятными UnitsNet — .NET-библиотека, которая превращает «голые» числа в осмысленные физические величины. Пример: вместо double speed = 27.8; вы пишете Speed speed = Speed.FromMetersPerSecond(27.8); и работаете уже с километрами в час, милями или узлами — без ручных пересчётов. В UnitsNet поддерживается более сотни единиц измерения — от времени и массы до температуры и силы. Вам не нужно держать в голове коэффициенты и вручную пересчитывать из одной системы в другую: библиотека сделает это сама. Ещё один плюс — читаемость кода. Ваши расчёты выглядят как документация: сразу видно, где давление, где скорость, а где длина. ➡️ Попробовать либу 🐸Библиотека шарписта #sharp_view
Show all...
31👍 12🔥 3 1
Photo unavailableShow in Telegram
❗ Сегодня премьера В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным«ИИ-агенты: новая фаза развития искусственного интеллекта». В программе: — почему агенты ≠ чат-боты; — живое демо простого агента; — и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского. Это прямой эфир: подключиться можно через лендинг курса.
Show all...
Photo unavailableShow in Telegram
📎 Где заказать курсовую по программированию Курсовые по программированию сегодня можно заказать в пару кликов — рынок переполнен сервисами, готовыми взять на себя любую задачу. За простотой скрываются и подводные камни: сомнительное качество, завышенные цены и риск нарваться на недобросовестных исполнителей. По ссылке топ площадок, которые зарекомендовали себя в 2025 году. ➡️ Узнать, где лучше 🐸Библиотека шарписта
Show all...
😁 8 1
Photo unavailableShow in Telegram
🤩 Live Preview без дебага В Visual Studio 2022 v17.14 появилась функция для .NET MAUI — XAML Live Preview теперь доступен прямо во время дизайна, без запуска отладки. Изменения сразу видны, можно пользоваться Hot Reload и инструментами инспекции. Поддержка работает не только для Windows, но и для Android-эмуляторов, а вместе с GitHub Copilot Vision можно прикрепить картинку макета и получить готовый XAML-код, который отобразится в Live Preview. 🔗 Подробнее 🐸Библиотека шарписта #async_news
Show all...
🔥 14
⚙️ Почему async void ломает ваш код В C# у async void есть дурная репутация, и не зря. Такой метод не возвращает Task, а значит, его нельзя await-ить, нельзя встроить в пайплайн и невозможно корректно отследить завершение. Исключения из него не ловятся обычным образом — они пробиваются в синхронизационный контекст или в пул потоков, где легко превращаются в необработанные и могут уронить процесс.
// Контроллер ASP.NET Core
[HttpPost]
public async void Create() { await _svc.DoAsync(); } // Исключения мимо pipeline

// Библиотека
public async void SaveAsync(Item item) { await _repo.Save(item); } // Вызывающему не сконтролировать
Правильно — всегда возвращать Task:
[HttpPost]
public async Task<IActionResult> Create() { await _svc.DoAsync(); return Ok(); }

public Task Invoke(HttpContext ctx) => _next(ctx);

public Task SaveAsync(Item item) => _repo.Save(item);
Единственный сценарий, где async void уместен, — обработчики событий в UI-фреймворках вроде WPF или WinForms, где сигнатура задаётся самим фреймворком. Там приходится мириться, но даже там стоит ловить исключения локально и логировать их. 🐸Библиотека шарписта #sharp_view
Show all...
❤‍🔥 8 8👍 1
💡 Что скрывается под капотом IReadOnlyList В .NET есть интерфейс IReadOnlyList<T>. На первый взгляд, он обещает нам неизменяемый список. Но это полуправда. Определение интерфейса:
public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
{
    T this[int index] { get; }
}
Интерфейс наследует IReadOnlyCollection, а тот, в свою очередь, наследует IEnumerable. Таким образом, он даёт доступ: к элементам через индекс (this[int index]), к свойству Count, и к итерации через foreach. ⚠️ Важный нюанс: IReadOnlyList не делает коллекцию реально readonly. Если у вас есть List<int> и вы приведёте его к IReadOnlyList<int>, изменять список по-прежнему можно — просто не через эту ссылку. Пример:
var list = new List<int> { 1, 2, 3 };
IReadOnlyList<int> ro = list;

list.Add(4);  // ro теперь "видит" 4
То есть IReadOnlyList — это контракт для чтения, а не гарантия неизменности. Если нужна настоящая защита — используйте ImmutableArray или ReadOnlyCollection. 🐸Библиотека шарписта #il_люминатор
Show all...
12🥱 7❤‍🔥 6
Photo unavailableShow in Telegram
🔥 Не пропустите событие осени для AI-комьюнити 24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта» 😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт: — почему ИИ-агенты сейчас на пике инвестиций — чем они отличаются от ChatGPT и обычных моделей — цикл агента: восприятие → планирование → действие → обучение — живое демо простого агента — как бизнес уже получает ROI до 80% ⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.Мест мало, регистрация закроется, как только забьём комнату
Show all...
1👍 1
⚙️ Когда Hash Join быстрее Nested Loops Внутри SQL-движка соединение таблиц — это не магия, а конкретный алгоритм. Сравним два подхода к соединению таблиц. Nested Loops работает буквально так, как звучит: берём строку из первой таблицы и ищем совпадения во второй. Если вторая таблица имеет подходящий индекс, поиск по нему будет очень быстрым, и такой алгоритм блестяще справляется с задачей маленькое соединяется с большим. Hash Join подходит там, где Nested Loops захлёбывается. Он сначала строит хэш-таблицу по одной из входных таблиц, а затем пробегается по второй и ищет совпадения через хэш-функцию. Это даёт огромный выигрыш, когда нужно соединить два больших набора данных, и когда индексов для ускорения поиска нет. Цена такого подхода — расход памяти. В итоге — если речь идёт о маленьком наборе строк против большого и есть индекс, Nested Loops окажется быстрее. Но если обе таблицы крупные и индексы не спасают, Hash Join чаще всего становится оптимальным выбором. 💬 Как вы бы ответили на такой вопрос на собеседовании? 🐸Библиотека шарписта #dotnet_challenge
Show all...
👍 7 1
Photo unavailableShow in Telegram
Show all...
👍 33🥱 3😢 2💯 1
👇 Вектор следующей неделиAnonymous voting
  • Создание API и веб-приложений.
  • Работа с данными, оптимизация запросов.
  • Эффективная параллельность.
  • Новые возможности языка
  • Тестирование в C#
  • А я и сам могу предложить тему
0 votes
➡️ Выбираем направление на неделю Давайте собирать библиотеку вместе. Выбираем тему, которая станет главным фокусом контента на ближайшие 7 дней. 👇 🐸Библиотека шарписта #entry_point
Show all...
Photo unavailableShow in Telegram
📰 Недельная подборка Прошла неделя и мы снова собрали для вас материалы для прочтения на досуге. — Cake.Sdk теперь умеет dotnet publish Вышла бета Cake.Sdk 5.0.25257.82, и главная новость — поддержка dotnet publish. Теперь можно собирать self-contained бинарники и даже контейнеры прямо из Cake-скриптов, без необходимости ставить .NET Runtime на целевой машине. — Цена пропущенного ? в C# На примере open source-проекта Stability Matrix автор показывает ошибки в конструкторах и инициализации, где невинный ? или проверка на null могли бы предотвратить баги и NaN в расчётах. — Кто такие Unit-лид и Technical OwnerMicrosoft увеличивает срок поддержки релизовWolverine 5.0 🐸Библиотека шарписта #async_news
Show all...
2