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

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

前往频道在 Telegram

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

显示更多
22 395
订阅者
-724 小时
-357
-12830
吸引订阅者
十二月 '25
十二月 '25
+74
在1个频道中
十一月 '25
+133
在1个频道中
Get PRO
十月 '25
+66
在0个频道中
Get PRO
九月 '25
+121
在0个频道中
Get PRO
八月 '25
+106
在1个频道中
Get PRO
七月 '25
+126
在0个频道中
Get PRO
六月 '25
+136
在0个频道中
Get PRO
五月 '25
+138
在0个频道中
Get PRO
四月 '25
+204
在1个频道中
Get PRO
三月 '25
+307
在2个频道中
Get PRO
二月 '25
+304
在2个频道中
Get PRO
一月 '25
+241
在2个频道中
Get PRO
十二月 '24
+251
在2个频道中
Get PRO
十一月 '24
+230
在2个频道中
Get PRO
十月 '24
+223
在2个频道中
Get PRO
九月 '24
+198
在2个频道中
Get PRO
八月 '24
+189
在2个频道中
Get PRO
七月 '24
+219
在2个频道中
Get PRO
六月 '24
+176
在2个频道中
Get PRO
五月 '24
+458
在2个频道中
Get PRO
四月 '24
+497
在7个频道中
Get PRO
三月 '24
+460
在7个频道中
Get PRO
二月 '24
+501
在7个频道中
Get PRO
一月 '24
+641
在6个频道中
Get PRO
十二月 '23
+785
在7个频道中
Get PRO
十一月 '23
+415
在2个频道中
Get PRO
十月 '23
+594
在7个频道中
Get PRO
九月 '23
+1 498
在7个频道中
Get PRO
八月 '230
在8个频道中
Get PRO
七月 '230
在2个频道中
Get PRO
六月 '23
+14
在0个频道中
Get PRO
五月 '23
+587
在2个频道中
Get PRO
四月 '23
+759
在0个频道中
Get PRO
三月 '23
+43
在0个频道中
Get PRO
二月 '23
+1 106
在0个频道中
Get PRO
一月 '230
在0个频道中
Get PRO
十二月 '220
在0个频道中
Get PRO
十一月 '220
在0个频道中
Get PRO
十月 '22
+102
在0个频道中
Get PRO
九月 '22
+394
在0个频道中
Get PRO
八月 '22
+503
在0个频道中
Get PRO
七月 '22
+525
在0个频道中
Get PRO
六月 '22
+581
在0个频道中
Get PRO
五月 '22
+289
在0个频道中
Get PRO
四月 '22
+339
在0个频道中
Get PRO
三月 '22
+455
在0个频道中
Get PRO
二月 '22
+241
在0个频道中
Get PRO
一月 '22
+14 559
在0个频道中
日期
订阅者增长
提及
频道
17 十二月0
16 十二月+2
15 十二月+2
14 十二月+2
13 十二月+3
12 十二月+8
11 十二月+7
10 十二月+6
09 十二月+9
08 十二月+5
07 十二月0
06 十二月+4
05 十二月+10
04 十二月0
03 十二月+8
02 十二月+4
01 十二月+4
频道帖子
🎁 Письмо Деду Морозу До Нового Года 15 дней! Что бы вы хотели получить в подарок? Годовая премия не в счёт, это всегда как р
🎁 Письмо Деду Морозу До Нового Года 15 дней! Что бы вы хотели получить в подарок? Годовая премия не в счёт, это всегда как рулетка — повезёт/не повезёт. Админ хотел бы набор оперативной памяти, желательно гига 32, откладывал до последнего и вот итог.. 💬 Делитесь своими хотелками или сразу вишлистами в комментах 👇 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #entry_point

1 452010

2
👨‍💻 Microsoft показали рабочий рецепт iOS виджетов В официальном .NET блоге появилась большая статья о том как собирать iOS
👨‍💻 Microsoft показали рабочий рецепт iOS виджетов В официальном .NET блоге появилась большая статья о том как собирать iOS виджеты поверх .NET MAUI не теряя нативности. Автор делится практическим опытом, который раньше приходилось выкапывать по кускам в доках Apple и чужих репозиториях. Статья не пошаговый туториал, а набор ключевых шагов и граблей от настроек App Groups и bundle id до интеграции Xcode виджет расширения в MAUI проект. ➡️ Читать статью 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
2 075
3
⏳ GetElapsedTime вместо ручного Stopwatch шаблона Многие до сих пор измеряют время в .NET по старинке создают экземпляр Stopwatch, вызывают Start, ждут выполнение и читают Elapsed. Но есть более простой и аккуратный способ через Stopwatch.GetTimestamp и Stopwatch.GetElapsedTime. Классический шаблон выглядит так: long start = Stopwatch.GetTimestamp(); // код, который нужно измерить await ProcessOrderAsync(); TimeSpan elapsed = Stopwatch.GetElapsedTime(start); GetElapsedTime вычисляет разницу между текущим timestamp и сохранённым значением и возвращает TimeSpan без создания экземпляра Stopwatch. В результате нет лишней аллокации. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
2 403
4
🚦 SemaphoreSlim в проде — не просто «асинхронный lock» SemaphoreSlim часто кидают в код как самое простое решение и успокаив
🚦 SemaphoreSlim в проде — не просто «асинхронный lock» SemaphoreSlim часто кидают в код как самое простое решение и успокаиваются. В проде этого мало, ведь малейшая ошибка с Release, областью блокировки или per-key словарем легко превращается в дедлок, гонку или утечку памяти. Самый частый фейл — банальное «забыли Release». Исключение между WaitAsync и finally и семафор навсегда занят поэтому все будущие вызовы повисают. Помогает только жесткое правило всегда оборачивать WaitAsync в try finally и не вставлять лишний код между ними особенно никакой логики которая может бросить исключение. Вторая классика — блокировки внутри async кода. Варианты вроде _lock.Wait() или .Result внутри секции под SemaphoreSlim открывают прямую дорогу к дедлокам, потому что блокирующий вызов держит поток, а продолжение ждет этот же поток. Общий принцип не блокировать внутри асинхронной критической секции если нужно синхронное API выносить его в Task.Run до входа в lock. Поэтому в проде почти всегда лучше прятать SemaphoreSlim за абстракцией AsyncLock. Обертка с LockAsync() возвращающей IDisposable снимает часть рисков. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #il_люминатор
2 491
5
Сборщик мусора для старых знаний В экосистеме .NET всё меняется, но фундамент вечен. Если чувствуешь, что уперся в потолок се
Сборщик мусора для старых знаний В экосистеме .NET всё меняется, но фундамент вечен. Если чувствуешь, что уперся в потолок сеньорити, пора инвестировать в хард-скиллы, а не просто учить новый синтаксис C 12. Оффер 1 + 2: Покупаешь один курс (по старшей цене) — получаешь доступ к трем. Выбор .NET-комьюнити: — архитектуры и шаблоны проектирования (SOLID, GRASP и вот это всё); — алгоритмы и структуры данных. Скомпилировать успех Акция до 31 декабря. NullReferenceException при выборе? Пиши сюда: @manager_proglib
2 467
6
👨‍💻 Не хватает комментария «Создаёт переменную x равную 10» 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта
👨‍💻 Не хватает комментария «Создаёт переменную x равную 10» 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
2 540
7
⚙️ Один обработчик вместо сотни try catch Когда в проекте десятки эндпоинтов, разъезжающий по коду try catch быстро превращается в свалку. Гораздо проще один раз настроить глобальный маппинг исключений в HTTP статус и возвращать нормальные ProblemDetails для всех ошибок. ASP.NET уже умеет работать с ProblemDetails из коробки, нужно только включить службу и повесить обработчик ошибок. В примере вся логика перевода исключений в HTTP ответы живет в одном месте: builder.Services.AddProblemDetails(); var app = builder.Build(); app.UseExceptionHandler(appErr => { appErr.Run(async ctx => { var ex = ctx.Features.Get<IExceptionHandlerFeature>()?.Error; var (status, title) = ex switch { ConcurrencyException => (StatusCodes.Status409Conflict, "Concurrency conflict"), NotFoundException => (StatusCodes.Status404NotFound, "Resource not found"), _ => (StatusCodes.Status500InternalServerError, "Server error") }; ctx.Response.StatusCode = status; await ctx.Response.WriteAsJsonAsync(new ProblemDetails { Status = status, Title = title, Detail = app.Environment.IsDevelopment() ? ex?.Message : null, Instance = ctx.Request.Path }); }); }); Любые новые исключения добавляются через одну запись в switch, без походов по контроллерам, а все ответы об ошибках приходят в едином формате application/problem+json, что упрощает жизнь фронту и интеграциям. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
2 617
8
Voting
❓ Лучший пост недели
2 715
9
📊 Рейтинг постов Вы всю неделю ставили нам лайки, а мы выбрали топ по реакциям: • 100 RPS Rate Limiting • Закон Брукса в разработке • Антиспам в .NET • FluentValidation в API • StackTraceHiddenAttribute Давайте выберем самый лучший пост в голосовании. Что добавить в следующий спринт? Пишите! 👇 🐸Библиотека шарписта #entry_point
2 632
10
🆕 Дайджест недели Собрали в один пост всё, что произошло за неделю. — Первое сервисное обновление .NET 10 — Кроссплатформенн
🆕 Дайджест недели Собрали в один пост всё, что произошло за неделю. — Первое сервисное обновление .NET 10 — Кроссплатформенная SharpIDE — Fleet В С Ё Почитать: — Карьерная «страховка» для IT‑шника — Как вуз влияет на карьеру — Закон Брукса в разработке 🐸Библиотека шарписта #async_news
2 563
11
🔄 WSL 2.7.0: обновление с новым ядром Windows Subsystem for Linux это встроенный слой совместимости, который позволяет запус
🔄 WSL 2.7.0: обновление с новым ядром Windows Subsystem for Linux это встроенный слой совместимости, который позволяет запускать Linux и его приложения напрямую без виртуальной машины. В WSL 2.7.0 ядро обновили до ветки Linux 6.6.114. Параллельно подтянули новые версии WSLg .NET и связанных NuGet пакетов. Список поддерживаемых дистрибутивов пополнился свежими релизами: Debian 13, Ubuntu 25.10, Fedora 43, а также Kali 2025.3 и декабрьская сборка Arch Linux. ➡️ Релиз на GitHub 🐸Библиотека шарписта #async_news
2 792
12
👨‍💻 Чистые стектрейсы в .NET с помощью StackTraceHiddenAttribute В .NET есть простой способ скрыть внутреннюю кухню и оставить только то, что важно потребителю API. Атрибут StackTraceHiddenAttribute помечает методы, которые не должны попадать в публичный стектрейс, при этом логика выполнения не меняется. Пример: public static class UserService { [StackTraceHidden] private static void ValidateName(string name) { if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException("Name cannot be empty"); } public static void CreateUser(string name) { ValidateName(name); Console.WriteLine("Created user " + name); } } В этом примере при исключении из ValidateName в стектрейсе вы увидите только вызов UserService.CreateUser. Валидационный хелпер скрыт атрибутом, поэтому внешний разработчик не видит внутренний слой проверки. 🐸Библиотека шарписта #sharp_view
2 834
13
💼 Карьерная «страховка» для IT‑шника Собрали для вас в карточках пункты, которые необходимо знать, чтобы вас не смогли выпну+5
💼 Карьерная «страховка» для IT‑шника Собрали для вас в карточках пункты, которые необходимо знать, чтобы вас не смогли выпнуть с работы. Знайте свои права и читайте полную статью. 🐸Библиотека шарписта
3 531
14
🌐 Контроллеры без мусора Пишете API, и в каждом контроллере приходится проверять if (!ModelState.IsValid) return BadRequest(). Скучно копипастить одно и то же. А если контроллеры станут реально чистыми — только маршрутизация и вызов сервиса? [ApiController] автоматически подключает механизм валидации. Он ищет в DI IValidator<T> для ваших DTO/команд и запускает их до входа в метод контроллера. FluentValidation делает так, что все ваши AbstractValidator<T> автоматически регистрируются как IValidator<T>. Настройка за 5 секунд: // Program.cs builder.Services.AddControllers() .AddJsonOptions(o => o.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase); builder.Services.AddValidatorsFromAssembly(typeof(CreateUserValidator).Assembly); Теперь все ваши AbstractValidator<T> автоматически работают. Вот так пишется валидатор: public class CreateUserValidator : AbstractValidator<CreateUserCommand> { public CreateUserValidator() { RuleFor(x => x.Email).NotEmpty().EmailAddress().MaximumLength(256); RuleFor(x => x.DisplayName).NotEmpty().MaximumLength(100); RuleFor(x => x.Password).NotEmpty().MinimumLength(8); } } Итоговый эндпоинт: [ApiController] [Route("users")] public class UsersController : ControllerBase { [HttpPost] public async Task<IActionResult> Create(CreateUserCommand cmd) { var user = await _mediator.Send(cmd); return CreatedAtAction(nameof(Get), new { id = user.Id }, user); } } Один раз настроили — наслаждаетесь чистотой контроллеров и валидацией. 🐸Библиотека шарписта #il_люминатор
3 146
15
⚡️ Fleet В С Ё JetBrains убивает Fleet как продукт, но не как технологию: с 22 декабря 2025 его перестанут распространять и к
⚡️ Fleet В С Ё JetBrains убивает Fleet как продукт, но не как технологию: с 22 декабря 2025 его перестанут распространять и команда переезжает в новый инструмент для «агентной разработки» — среды, где код пишут в основном AI‑агенты, а разработчик управляет задачами и ревьюит патчи. Fleet создавали как эксперимент: лёгкая архитектура, современный UI, свобода от легаси IntelliJ-платформы, и технически он реально удался — его компоненты и UX‑решения уже раскатаны по другим IDE от JetBrains. ➡️ Оригинальный анонс 🐸Библиотека шарписта #async_news
3 329
16
🧑‍💻 IDE для .NET, написанная на .NET У нас тут интересный эксперимент из мира .NET‑инструментов — SharpIDE. Это кроссплатфо
🧑‍💻 IDE для .NET, написанная на .NET У нас тут интересный эксперимент из мира .NET‑инструментов — SharpIDE. Это кроссплатформенная IDE для .NET, которую делают не на Java и не на Electron, а на самом .NET + движок Godot для UI. Автор позиционирует её как полностью open source‑альтернативу классическим IDE с упором на расширяемость и игровой UI ➡️ Репозиторий проекта 🐸Библиотека шарписта #sharp_view
3 660
17
🎮 Портфолио, в которое хочется играть Наткнулись на резюме разраба, которое явно не пройдёт роботизированную проверку, потом
🎮 Портфолио, в которое хочется играть Наткнулись на резюме разраба, которое явно не пройдёт роботизированную проверку, потому что робот ничего не поймёт. Резюме сделано в виде 3D игры, где нужно кататься на машинке по точкам интереса: проекты, места работы, соц. сети. У обычного HR'а на такое точно не хватит времени. Челлендж от админа — попробуйте выбить страйк в левой части карты. Скидывайте скрины в комменты 👇 ➡️ Выбить страйк 🐸Библиотека шарписта #GoTalk
3 451
18
🔄 Первое сервисное обновление .NET 10 Вышло сервисное обновление для десятой версии платформы, в котором правят баги и стаби
🔄 Первое сервисное обновление .NET 10 Вышло сервисное обновление для десятой версии платформы, в котором правят баги и стабильность без новых фич. Обновление помечено как non security: оно не закрывает уязвимости, а дорабатывает поведение рантайма, BCL и SDK после выхода 10.0.0. ➡️ Release notes 🐸Библиотека шарписта #async_news
3 303
19
🧑‍💻 Готовые LINQ-скрипты Шарписты, которые активно пользуются LINQPad редко хранят полезные скрипты. Нашли личный набор раб
🧑‍💻 Готовые LINQ-скрипты Шарписты, которые активно пользуются LINQPad редко хранят полезные скрипты. Нашли личный набор рабочих скриптов для LINQPad, который автор вынес в общий GitHub репозиторий. В репозитории лежат .linq скрипты которые помогают решать рутину в .NET проектах через LINQPad вместо отдельных утилит. Это могут быть быстрые запросы к БД, небольшие проверки, конвертеры данных и прочие «разовые» задачи которые регулярно повторяются. ➡️ Репозиторий 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
3 319
20
⚙️ Останавливаем некрасивый код Использовать dotnet format в CI удобно как «стоп кран» по стилю кода. В пайплайн достаточно добавить один шаг: - name: Format run: dotnet tool restore && dotnet format --verify-no-changes Зачем так делать dotnet format читает правила из .editorconfig и проверяет что код им соответствует. Ключ --verify-no-changes сообщает утилите работать в режиме проверки без правок файлов и выйти с ненулевым кодом если что то нужно переформатировать. В результате билд в CI падает если кто то закоммитил неотформатированный код. 🔹 Математика для разработки AI-моделей 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
3 138