Please open Telegram to view this post
VIEW IN TELEGRAM
HttpClient — это часто неочевидная область, где мелкие ошибки могут обернуться большими проблемами, такими как утечки ресурсов, игнорирование изменений DNS или перегрузка сети. Вот несколько ключевых уроков, которые помогут вам эффективно управлять HTTP-запросами в ваших приложениях.
Каждый раз, когда вы создаёте новый экземпляр HttpClient, в операционной системе открывается новый TCP-сокет. Если вы забыли правильно утилизировать его (или создаёте их слишком много за короткий промежуток времени), это может привести к исчерпанию доступных портов и замедлению работы приложения.
Вместо создания HttpClient вручную, внедряйте фабрику IHttpClientFactory. Она решает проблемы утечки сокетов, управляет временем жизни клиентов и правильно обрабатывает изменения DNS.
Сетевые запросы могут иногда прерываться. Настройте стратегию повторных попыток через библиотеку Polly, к примеру.
services.AddHttpClient("RetryClient")
.AddTransientHttpErrorPolicy(policy =>
policy.WaitAndRetryAsync(3, _ => TimeSpan.FromSeconds(2)));
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод FirstOrDefault в LINQ может стать источником путаницы. Он возвращает первый элемент последовательности или значение по умолчанию для типа, если элементов нет. Для ссылочных типов и Nullable<T> это null, а для значимых типов (например, int) — это их дефолтное значение (0, false и т.д.).
✏️ Например, вызов FirstOrDefault для пустого списка List<int> вернёт 0, что может быть неожиданно, если 0 имеет смысловое значение в вашем коде.
var numbers = new List<int> { };
var result = numbers.FirstOrDefault();
Console.WriteLine(result); // Вывод: 0
❗️Чтобы избежать ошибок, рекомендуется явно проверять коллекцию на пустоту перед вызовом метода или использовать DefaultIfEmpty, чтобы задать своё значение по умолчанию. Например:
var result = numbers.DefaultIfEmpty(null).FirstOrDefault();
Это гарантирует, что даже для пустой коллекции результат будет null, а не дефолтное значение типа. Такой подход делает код понятным и избавляет от скрытых проблем с обработкой "пустых" результатов.
#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔢 Числовая сортировка строк в .NET
Спустя 10 лет дискуссий сообщество .NET наконец-то получит поддержку числовой сортировки строк. Теперь строки с числами, например "file2" и "file10", сортируются логично с учётом чисел. Это стало возможным благодаря новому флагу CompareOptions.NumericOrdering, добавленному в PR#109861. Вопрос впервые подняли ещё в 2015 году в issue#13979, и с тех пор разработчики искали безопасный и универсальный способ его решения.
🎉 Эта долгожданная функция будет доступна в будущих версиях .NET, улучшая работу со строками в файлах, версиях и других данных.
#новость
🐸 Библиотека шарписта
Спустя 10 лет дискуссий сообщество .NET наконец-то получит поддержку числовой сортировки строк. Теперь строки с числами, например "file2" и "file10", сортируются логично с учётом чисел. Это стало возможным благодаря новому флагу CompareOptions.NumericOrdering, добавленному в PR#109861. Вопрос впервые подняли ещё в 2015 году в issue#13979, и с тех пор разработчики искали безопасный и универсальный способ его решения.
#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
❓Что такое gRPC?
gRPC — это фреймворк удаленных вызовов процедур, который использует HTTP/2 для передачи данных между приложениями. Он выделяется высокой производительностью благодаря бинарному формату Protocol Buffers.
🧑💻Реализация API
В статье из C#Corner пошагово описан процесс реализации API в .NET 8:
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Мини-гайд по реализации MFA в .NET
Многофакторная аутентификация (MFA) — это важный инструмент для повышения безопасности приложений. Она требует подтверждения личности пользователя через два или более независимых фактора, таких как пароль и одноразовый код из приложения-аутентификатора (например, Google Authenticator).
Как это работает:
➡️ Для каждого пользователя создается уникальный секретный ключ. Этот ключ используется для генерации одноразовых паролей (TOTP).
➡️ Секретный ключ кодируется в формате QR-кода. Пользователь сканирует этот код своим приложением-аутентификатором, чтобы настроить MFA.
➡️ После настройки приложение генерирует коды, которые действуют в течение ограниченного времени.
➡️ При входе в приложение пользователь вводит код из аутентификатора. Сервер проверяет его, сравнивая с тем, что должно быть сгенерировано для данного пользователя.
Основные этапы реализации в .NET:
1️⃣ Настройте библиотеку для работы с TOTP и генерации QR-кодов.
2️⃣ Реализуйте процесс генерации секретного ключа и сохранения в базе данных.
3️⃣ Организуйте валидацию кода на сервере при каждом входе.
📎 Пример реализации с кодом
🐸 Библиотека шарписта
Многофакторная аутентификация (MFA) — это важный инструмент для повышения безопасности приложений. Она требует подтверждения личности пользователя через два или более независимых фактора, таких как пароль и одноразовый код из приложения-аутентификатора (например, Google Authenticator).
Как это работает:
Основные этапы реализации в .NET:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 .NET MAUI и Blazor Hybrid предоставляют возможность использовать единую кодовую базу для создания приложений, работающих на мобильных устройствах, настольных системах и в вебе. Это решение для тех, кто хочет оптимизировать процесс разработки.
🎯 Чем это удобно?
• Переиспользование Razor-компонентов между вебом, мобильными и настольными приложениями.
• Единый стиль работы для разработчиков, знакомых с экосистемой .NET
Если вы хотите понять, как это работает на практике, рекомендуем ознакомиться с одной из статей, где подробно описывается процесс создания кроссплатформенного приложения на основе .NET MAUI и Blazor Hybrid.
Please open Telegram to view this post
VIEW IN TELEGRAM
Предлагаем послушать авторский айти ремикс о нашем любимом C#! Без наездов на джавистов не обошлось.
🎧 Слушать
Please open Telegram to view this post
VIEW IN TELEGRAM
🌵🕵️♂️ Git-квест: 10 испытаний для повелителя репозиториев
Привет, шарписты! Вы пишете код, который собирается в проекты, покоряющие мир, но знаете ли вы, как не запушить .env в мастер? Этот тест — шанс доказать, что вы не только мастер LINQ, но и ветвлений в Git
✏️ Пройти тест
Привет, шарписты! Вы пишете код, который собирается в проекты, покоряющие мир, но знаете ли вы, как не запушить .env в мастер? Этот тест — шанс доказать, что вы не только мастер LINQ, но и ветвлений в Git
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Недавно прошла трансляция «.NET Data Community Standup» , на которой эксперты обсудили ключевые подходы и инструменты для оптимизации работы с данными в .NET.
🔉 Что обсудили?
• Рассказали, как эффективно управлять контекстами данных в .NET.
• Обсуждали оптимизацию ресурсов, улучшение производительности приложений и типичные случаи использования пуллинга.
• Объяснили, как использовать необработанные SQL-запросы в Entity Framework.
• Разобрали, когда FromSql может быть полезен, а когда его лучше избегать.
• Показали, как предварительная компиляция запросов снижает накладные расходы.
• Поделились примерами, где скомпилированные запросы позволяют ускорить повторное выполнение запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
С Новым годом и Годом Змеи! 🐍 Пусть этот год принесет вам успех, рост и меньше усилий для достижения больших целей. Мы в Proglib Academy пришли с хорошими новостями в начале года.
🌟 Обновления курсов!
Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили:
📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств.
Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики.
🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры.
Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования
Общие обновления:
- Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки.
- Сократили время проверки домашних заданий, ответы теперь приходят быстрее.
- Видео теперь без перекрытий, презентации стали четче, а задания логичнее.
Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас!
💡 С 27.01.25 цены изменятся на 10%.
Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче.
Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀
Выбрать курс
🌟 Обновления курсов!
Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили:
📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств.
Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики.
🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры.
Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования
Общие обновления:
- Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки.
- Сократили время проверки домашних заданий, ответы теперь приходят быстрее.
- Видео теперь без перекрытий, презентации стали четче, а задания логичнее.
Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас!
💡 С 27.01.25 цены изменятся на 10%.
Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче.
Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀
Выбрать курс
⚡️ Автоматическая регистрация зависимостей в C#
Scrutor — это библиотека для упрощения регистрации зависимостей в контейнере инверсии управления (IoC) Microsoft.Extensions.DependencyInjection. Она позволяет автоматически сканировать сборки и регистрировать классы по заданным правилам, избавляя от необходимости вручную прописывать каждую зависимость.
💻 Пример использования
С помощью Scrutor можно зарегистрировать все классы в сборке, реализующие интерфейсы, в несколько строк:
💡 Основные возможности
• Автоматическая регистрация классов.
• Фильтрация классов по правилам (например, по имени или пространству имён).
• Настройка времени жизни (Transient, Scoped, Singleton).
• Регистрация классов с пользовательскими интерфейсами или без них.
📎 GitHub библиотеки
🐸 Библиотека шарписта
Scrutor — это библиотека для упрощения регистрации зависимостей в контейнере инверсии управления (IoC) Microsoft.Extensions.DependencyInjection. Она позволяет автоматически сканировать сборки и регистрировать классы по заданным правилам, избавляя от необходимости вручную прописывать каждую зависимость.
💻 Пример использования
С помощью Scrutor можно зарегистрировать все классы в сборке, реализующие интерфейсы, в несколько строк:
services.Scan(scan => scan
.FromAssemblyOf<Startup>() // Сканирование текущей сборки
.AddClasses() // Добавление всех классов
.AsImplementedInterfaces() // Регистрация их как интерфейсов
.WithScopedLifetime()); // Установка времени жизни
• Автоматическая регистрация классов.
• Фильтрация классов по правилам (например, по имени или пространству имён).
• Настройка времени жизни (Transient, Scoped, Singleton).
• Регистрация классов с пользовательскими интерфейсами или без них.
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть идеи для пет-проектов? А может уже что-то делаете? Поделитесь своими задумками с сообществом! 👇 Ведь это субботний #интерактив!
Не стесняйтесь делиться своими идеями и прогрессом в их реализации. Мы уверены, что среди вас много талантливых разработчиков, которые могут создать что-то уникальное и интересное.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Meadow v2: что изменилось
Команда Wilderness Labs выпустила долгожданную Meadow v2 — крупное обновление платформы для разработки IoT-устройств на базе .NET! 🚀 Если вы занимаетесь созданием умных устройств или встраиваемых систем, этот релиз точно заслуживает вашего внимания. Давайте разберем, что нового:
➡️ Meadow v2 получил серьезные улучшения в работе операционной системы, что повышает стабильность и производительность устройств.
➡️ Добавлены новые API для работы с периферией, сенсорами и другими компонентами, что упрощает разработку сложных IoT-решений.
➡️ Теперь Meadow лучше работает с различными аппаратными компонентами, что расширяет возможности для создания уникальных устройств.
➡️ Множество багов и проблем, обнаруженных в предыдущих версиях, были устранены, что делает платформу более надежной.
➡️ Wilderness Labs постарались улучшить документацию, чтобы разработчикам было проще начать работу с платформой.
📎 Полный список изменений доступен на официальной странице релиза
🐸 Библиотека шарписта #новость
Команда Wilderness Labs выпустила долгожданную Meadow v2 — крупное обновление платформы для разработки IoT-устройств на базе .NET! 🚀 Если вы занимаетесь созданием умных устройств или встраиваемых систем, этот релиз точно заслуживает вашего внимания. Давайте разберем, что нового:
Please open Telegram to view this post
VIEW IN TELEGRAM
Если вы работаете с F#, то наверняка слышали о пайпах (pipes). Это инструмент языка, который помогает писать код в стиле "конвейера", делая код читаемым и выразительным. Давайте разберем, как они работают и зачем их использовать.
❓Что такое пайпы?
Пайпы — это операторы, которые передают результат одной функции в качестве входного аргумента другой. В F# есть два оператора:
Пример:
let add x y = x + y
let multiplyBy2 x = x * 2
// Без пайпа
let result1 = multiplyBy2 (add 3 4) // 3 + 4 = 7, затем 7 * 2 = 14
// С пайпом
let result2 = add 3 4 |> multiplyBy2 // То же самое, но более читаемо
Пример:
let result = multiplyBy2 <| add 3 4 // То же, что и multiplyBy2 (add 3 4)
3. Зачем использовать пайпы?
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы собираем данные о том, какие методы биохакинга действительно помогают разрабам улучшить качество жизни и повысить продуктивность. Поделитесь своим опытом — это поможет другим сделать осознанный выбор в мире биохакинга.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие методы отслеживания здоровья вы используете?
Anonymous Poll
32%
🔄 Фитнес-трекер/умные часы
11%
📱 Приложения для трекинга здоровья
9%
📊 Регулярные анализы крови
6%
🌡 Измерение температуры тела
30%
⚖️ Только вес на весах
44%
🤷♂️ Не отслеживаю показатели
Какие методы улучшения сна вы используете?
Anonymous Poll
16%
😴 Блокировка синего света вечером
17%
🌙 Строгий режим сна
13%
🌡 Оптимальная температура в спальне
9%
💊 Мелатонин
6%
🍵 Травяные чаи для сна
6%
📱 Трекинг фаз сна
58%
🤷♂️ Никакие