Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Ko'proq ko'rsatish📈 Telegram kanali Библиотека шарписта | C#, F#, .NET, ASP.NET analitikasi
Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 21 708 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 953-o'rinni va Rossiya mintaqasida 30 278-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 21 708 obunachiga ega bo‘ldi.
28 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -37 ga, so‘nggi 24 soatda esa 5 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 16.02% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.85% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 3 478 marta ko‘riladi; birinchi sutkada odatda 1 705 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 26 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent .net, шарписта, навигация, await, string kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 29 Avgust, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
Semantic Kernel, но глобальный стандарт задаёт LangGraph. Его киллер-фича — явное управление графом выполнения и состоянием (Stateful Graph).
Это позволяет реализовывать сложные паттерны: Human-in-the-loop (человек подтверждает действие), Time Travel (откат состояния назад) и цикличное планирование. Понимание этих принципов пригодится любому разработчику, внедряющему AI.
Записаться на курс
Погружение в архитектуру агентов: Смотрите вводный урок бесплатно.Random в .NET генерирует псевдослучайные числа для игр, тестов или симуляций. Он работает на основе сида, обычно времени, и дает целые, дробные значения или байты.
Основы класса Random
System.Random создает последовательности чисел через алгоритм. Для простого инта берут Next(min, max), где верхняя граница не включается.
Переиспользуйте один экземпляр, иначе в цикле из-за одинаковых сидов выйдут повторения. Статический или инжектированный через DI вариант подходит для прода:
var rng = new Random();
int число = rng.Next(1, 101); // от 1 до 100
NextDouble возвращает от 0.0 до 1.0, умножьте и сдвиньте для нужного интервала. Байты через NextBytes заполняют массив. Это для тестовых файлов или симуляций.
double температура = rng.NextDouble() * 50 - 10; // от -10 до 40
byte[] буфер = new byte[16];
rng.NextBytes(буфер);
Обычный Random не годится для токенов или паролей, предсказуем при известном сиде. Берите RandomNumberGenerator из System.Security.Cryptography для криптографии.
GetInt32(1, 101) или Fill для байт. В API для ключей всегда крипто-вариант.
Random не потокобезопасен, общий экземпляр сломается. ThreadLocal<Random> создаст по инстансу на поток. Parallel.For с ним работает корректно, без гонок:
var локальныйRng = new ThreadLocal<Random>(() => new Random());
Parallel.For(0, 100, i => {
int значение = локальныйRng.Value!.Next(100);
});
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминаторpublic class User
{
public string Name { get; set; }
public static bool operator true(User? user) => user?.Name != null;
public static bool operator false(User? user) => user?.Name == null;
}
Теперь if (user) сработает если имя задано, иначе попадет в else. Компилятор автоматически вызывает нужный оператор при булевом контексте.
Единственный минус: никто не ожидает такого, код становится загадкой для команды. Лучше стандартные is not null или !ReferenceEquals(null, obj).
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_viewIHttpClientFactory упрощает создание клиентов, интегрируется с DI и решает проблемы вроде утечек сокетов.
Фабрика кэширует обработчики сообщений, управляет их временем жизни и добавляет логирование.
Зачем нужна фабрика
HttpClient из Framework 4.5 часто создают вручную, но это приводит к проблемам: сокеты не освобождаются, DNS не обновляется. Фабрика решает это через пул обработчиков с лайфтаймом в 2 минуты по умолчанию.
Она регистрируется через AddHttpClient в IServiceCollection и дает доступ к CreateClient. Короткоживущие клиенты подходят для большинства случаев, в отличие от долгоживущих с PooledConnectionLifetime.
Предупреждение: если нужны куки, лучше обойтись без фабрики из-за шаринга CookieContainer.
Способы использования
Разработчики выбирают между базовым, именованными, типизированными клиентами или сгенерированными через Refit.
В базовом варианте инжектят IHttpClientFactory и вызывают CreateClient для каждого запроса. Это просто для рефакторинга старого кода.
Именованные клиенты настраивают по имени из конфига, с базовым URI и заголовками вроде User-Agent:
builder.Services.AddHttpClient("MyClient", client =>
{
client.BaseAddress = new Uri("https://api.example.com/");
client.DefaultRequestHeaders.UserAgent.ParseAdd("MyApp");
});
Затем CreateClient("MyClient").
Типизированные удобны для конкретного API: класс принимает HttpClient в конструкторе, фабрика регистрирует его через AddHttpClient<T>.
Логика запросов инкапсулируется в методах класса, DI все подхватывает. IntelliSense работает, нет строковых ключей.
Не используйте в синглтонах: клиент должен быть короткоживущим, иначе DNS не обновится. Лучше именованные или SocketsHttpHandler:
public class ApiService(HttpClient client)
{
public async Task<Todo[]> GetTodos(int id) =>
await client.GetFromJsonAsync<Todo[]>($"todos/{id}");
}
В итоге фабрика делает HTTP-клиенты в .NET предсказуемыми и масштабируемыми. Для прода это как стандарт: меньше багов с соединениями, проще DI.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминаторLangGraph реализует паттерн, где агент — это не просто цепочка плагинов, а граф с состоянием.
Архитектурные преимущества:
— цикличность: нативная поддержка циклов (ReAct pattern);
— state management: управление контекстом похоже на работу с сессиями;
— human-in-the-loop: возможность поставить граф на паузу, получить апрув человека и продолжить.
Курс по архитектуре уже стартовал.
Записаться на курс
Смотреть первую лекцию бесплатно// Добавим NuGet пакет
dotnet add package Microsoft.FeatureManagement
// В appsettings.json
"FeatureManagement": {
"NewDashboard": false
}
В коде:
if (await featureManager.IsEnabledAsync("NewDashboard"))
{
RenderNewDashboard();
}
else
{
RenderOldDashboard();
}
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_viewpublic async Task<IActionResult> ExpireOldOrders()
{
var cutoff = DateTime.UtcNow.AddDays(-30);
var affectedRows = await _db.Orders
.Where(o => o.Status == OrderStatus.Pending
&& o.CreatedAt < cutoff)
.ExecuteUpdateAsync(setters =>
setters.SetProperty(
o => o.Status,
OrderStatus.Expired));
return Ok(new { affectedRows });
}
EF Core сгенерирует один SQL примерно такого вида:
UPDATE Orders
SET Status = 2
WHERE Status = 0
AND CreatedAt < @cutoff
Приложение отправляет в базу одну команду, а не тысячи мелких запросов. С точки зрения БД — это максимально естественный сценарий: нагрузка на сеть и блокировки минимальны.
ExecuteDelete решает такую же задачу для удаления:
public async Task<int> CleanOldLogsAsync(DateTime cutoff)
{
var affected = await _db.Logs
.Where(l => l.CreatedAt < cutoff)
.ExecuteDeleteAsync();
return affected;
}
EF Core не загружает логи в память — удаление происходит одним SQL-запросом.
Важно: эти методы обходят change tracking и не вызывают события SaveChanges.
Используйте их, когда производительность важнее бизнес-логики в коде.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминаторLangGraph, CrewAI и AutoGen;
— интеграция RAG и инструментов планирования;
— 13 живых вебинаров и поддержка менторов.
Поток уже стартовал, присоединяйтесь сейчас.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.docker run -p 27017:27017 mongo
Эта команда скачает официальный образ mongo с Docker Hub и запустит контейнер. Флаг -p 27017:27017 пробрасывает порт на хост, то есть вы обращаетесь к базе на localhost:27017.
Так вы получаете рабочую MongoDB без отдельной установки сервера, настройки сервисов и борьбы с конфликтами версий.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_viewusing var controller = new GpioController();
controller.OpenPin(18, PinMode.Output);
bool ledOn = true;
while (true)
{
controller.Write(18, ledOn ? PinValue.High : PinValue.Low);
Thread.Sleep(1000);
ledOn = !ledOn;
}
В цикле мы записываем значение «включено» или «выключено», меняем состояние каждую секунду.
Приложение компилируется как self-contained и разворачивается на устройстве. После назначения прав на выполнение (chmod +x) запускаете исполняемый файл — и светодиод начинает мигать с интервалом в секунду.
➡️ Гайд от майков
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view.NET активно интегрирует ИИ (например, через Semantic Kernel). Наш курс поможет вам понять фундаментальные принципы построения автономных систем.
Начинаем сегодня в 19:00 МСК.
Основные темы:
— путь от базовых промптов до мультиагентных систем;
— использование инструментов и планирование задач;
— деплой и масштабирование своих ИИ-решений;
— работа с векторными хранилищами данных.
Занять место