Полезная статья про Avalonia и реализацию MVVM на C# по шагам!
В этой статье:
• Что такое Avalonia и почему она интересна для кроссплатформенного desktop
• Как разделить интерфейс и бизнес-логику через MVVM
• Как постепенно собрать пример приложения с View, ViewModel, binding и данными
➡️ C# Ready | #статья
В этой статье:
• Что такое Avalonia и почему она интересна для кроссплатформенного desktop
• Как разделить интерфейс и бизнес-логику через MVVM
• Как постепенно собрать пример приложения с View, ViewModel, binding и данными
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥4👎1
Делаем простой rate limiter на C#!
Иногда нужно ограничить частоту действий: не давать пользователю слишком часто нажимать кнопку, вызывать команду или отправлять запрос
В этой задаче:
Такой подход легко расширить: можно поменять лимит, размер окна или хранить отдельную очередь для каждого пользователя.
➡️ C# Ready | #задача
Иногда нужно ограничить частоту действий: не давать пользователю слишком часто нажимать кнопку, вызывать команду или отправлять запрос
В этой задаче:
• храним timestamps последних вызовов;
• удаляем старые события;
• проверяем лимит в скользящем окне;
Такой подход легко расширить: можно поменять лимит, размер окна или хранить отдельную очередь для каждого пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥4
Разберём HttpClient: 7 возможностей для аккуратной работы с API!
HttpClient часто используют для интеграций, микросервисов и внешних HTTP-запросов. Чтобы код не превращался в ручную сборку строк, заголовков и JSON, стоит знать базовые возможности клиента.
В этой шпоре:
Эти вещи помогают писать API-клиенты короче, понятнее и устойчивее к зависаниям и ошибочным статусам.
➡️ C# Ready | #шпора
HttpClient часто используют для интеграций, микросервисов и внешних HTTP-запросов. Чтобы код не превращался в ручную сборку строк, заголовков и JSON, стоит знать базовые возможности клиента.
В этой шпоре:
• базовый адрес через BaseAddress;
• общие заголовки;
• GET-запросы;
Эти вещи помогают писать API-клиенты короче, понятнее и устойчивее к зависаниям и ошибочным статусам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤5👍4
Крутая статья о том, как подружить C#, .NET MAUI и Rust в одном приложении!
В этой статье:
• Как подключить Rust-код к MAUI-проекту
• Зачем может понадобиться нативная часть внутри C#-приложения
• Как C# и Rust могут вместе работать с графикой через SkiaSharp
➡️ C# Ready | #статья
В этой статье:
• Как подключить Rust-код к MAUI-проекту
• Зачем может понадобиться нативная часть внутри C#-приложения
• Как C# и Rust могут вместе работать с графикой через SkiaSharp
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥5
Почему не стоит lock-ать строку или публичный объект?
В C#
Проблема начинается, когда в роли
Строки могут интернироваться, то есть одинаковые литералы могут ссылаться на один и тот же объект.
В итоге другой код в приложении тоже может случайно заблокироваться на
Похожая проблема с публичными объектами:
Любой внешний код может взять этот объект и тоже сделать
Надёжнее держать приватный синхронизатор:
Так точка блокировки остаётся внутри класса, и никто снаружи не может случайно вмешаться.
➡️ C# Ready | #совет
В C#
lock работает по объекту-синхронизатору:lock (sync)
{
// критическая секция
}
Проблема начинается, когда в роли
sync используют строку:lock ("cache")
{
UpdateCache();
}Строки могут интернироваться, то есть одинаковые литералы могут ссылаться на один и тот же объект.
В итоге другой код в приложении тоже может случайно заблокироваться на
"cache":lock ("cache")
{
DoSomethingElse();
}Похожая проблема с публичными объектами:
public object Sync = new();
Любой внешний код может взять этот объект и тоже сделать
lock, создавая странные зависания.Надёжнее держать приватный синхронизатор:
private readonly object _sync = new();
lock (_sync)
{
UpdateCache();
}
Так точка блокировки остаётся внутри класса, и никто снаружи не может случайно вмешаться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥3
Проверяем срок действия TLS-сертификата!
Нужно быстро понять, когда у сайта закончится HTTPS-сертификат? Соберём простую проверку через openssl: подключимся к серверу, достанем notAfter и посчитаем, сколько дней осталось до истечения.
В этой задаче:
Такую проверку удобно запускать в cron, CI или простом мониторинговом скрипте, чтобы не узнать об истёкшем сертификате от пользователей.
➡️ C# Ready | #задача
Нужно быстро понять, когда у сайта закончится HTTPS-сертификат? Соберём простую проверку через openssl: подключимся к серверу, достанем notAfter и посчитаем, сколько дней осталось до истечения.
В этой задаче:
• Получаем сертификат через openssl s_client;
• Достаём дату окончания через openssl x509;
• Считаем разницу и проверяем порог.
Такую проверку удобно запускать в cron, CI или простом мониторинговом скрипте, чтобы не узнать об истёкшем сертификате от пользователей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍5🔥3
Хороший вход в современный C# для начинающих и джунов!
Статья спокойно объясняет, зачем сейчас учить C#, где он применяется и с каких базовых вещей стоит начинать, если хочется двигаться в сторону .NET-разработки.
В статье автор показывает:
• где C# используется в реальных проектах
• какие инструменты нужны на старте
• как подойти к изучению языка без хаоса
➡️ C# Ready | #статья
Статья спокойно объясняет, зачем сейчас учить C#, где он применяется и с каких базовых вещей стоит начинать, если хочется двигаться в сторону .NET-разработки.
В статье автор показывает:
• где C# используется в реальных проектах
• какие инструменты нужны на старте
• как подойти к изучению языка без хаоса
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥2
Пишем парсер query string на C#!
Нужно разобрать строку вида ?page=2&tag=cs&tag=api и получить структуру, где повторяющиеся ключи не перетирают друг друга.
В этой задаче:
Такой маленький парсер полезен для CLI-утилит, тестов и логов.
➡️ C# Ready | #задача
Нужно разобрать строку вида ?page=2&tag=cs&tag=api и получить структуру, где повторяющиеся ключи не перетирают друг друга.
В этой задаче:
• убираем лишний вопросительный знак
• делим строку на пары
• декодируем ключи и значения
Такой маленький парсер полезен для CLI-утилит, тестов и логов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥3