C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام C# (C Sharp) programming
تُعد قناة C# (C Sharp) programming (@csharp_ci) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 18 136 مشتركاً، محتلاً المرتبة 7 012 في فئة التكنولوجيات والتطبيقات والمرتبة 36 141 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 18 136 مشتركاً.
بحسب آخر البيانات بتاريخ 14 سبتمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 7، وفي آخر 24 ساعة بمقدار -3، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 15.21%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 8.13% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 2 760 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 475 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 0.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل .net, api, логика, архитектура, string.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 15 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
42|john@example.com|127
Нужно распарсить её без Split(), Regex и временных string:
public readonly record struct UserLog(
int Id,
ReadOnlyMemory<char> Email,
int Latency
);
Реализуйте:
static bool TryParse(
ReadOnlyMemory<char> input,
out UserLog result
)
Требования:
• парсинг через Span<char>
• false при битом формате
• без лишних аллокаций
• Email должен ссылаться на исходный buffer
Пример:
var input = "42|john@example.com|127".AsMemory();
if (TryParse(input, out var log))
{
Console.WriteLine(log.Id); // 42
Console.WriteLine(log.Email); // john@example.com
Console.WriteLine(log.Latency); // 127
}
Вопрос:
почему нельзя сохранить ReadOnlySpan<char> в UserLog, а ReadOnlyMemory<char> можно?captureContent.
Статья - https://bartwullems.blogspot.com/2026/09/monitoring-github-copilot-usage-with.html
#GitHubCopilot #Aspire #OpenTelemetryMicrosoft.Extensions.AI и Ollama локальную модель можно подключить буквально несколькими строками.
Что можно собрать:
- обычный чат
- суммаризацию текста
- классификацию и категоризацию
- распознавание изображений
- свои AI-фичи без отправки данных во внешний API
Особенно интересно, что всё это можно запускать локально: модель работает на вашей машине, а приложение обращается к ней как к обычному сервису.
Примерно так:
builder.Services.AddChatClient(
new OllamaApiClient(
new Uri("http://localhost:11434"),
"phi3:mini"));
Дальше получаем IChatClient и используем его внутри обычного .NET-приложения.
Хороший разбор того, как работать с LLM в .NET через Microsoft.Extensions.AI:Microsoft.Resilience по-прежнему можно использовать бесплатно.
С .NET 8 работа с resilience стала заметно проще: появился новый API Polly и официальные библиотеки Microsoft для построения resilience pipelines.
Что можно настроить:
- Retry
- Fallback
- Timeout
- Rate limiting
- Circuit breaker
Хороший разбор того, как собирать устойчивые cloud-приложения на современном .NET:
https://milanjovanovic.tech/blog/building-resilient-cloud-applications-with-dotnetHttpClient в .NET
HttpClient отлично подходит для HTTP-запросов, но при неправильном использовании можно столкнуться с проблемами вроде исчерпания сокетов и некорректного обновления DNS. Плюс сериализацию и разбор ответов часто приходится писать вручную.
Refit упрощает это:
- описываешь REST API обычным C#-интерфейсом
- получаешь type-safe клиент
- сериализация и десериализация выполняются автоматически
- под капотом всё равно используется HttpClient
Удобно для проектов, где много внешних API и не хочется писать повторяющийся HTTP-код.
https://github.com/reactiveui/refitappsettings.json, environment variables, User Secrets и других configuration providers.
Можно читать их напрямую через IConfiguration, но такой код быстро становится хрупким и неудобным.
Вместо этого лучше использовать Options Pattern:
* создать класс настроек
* привязать его к секции конфигурации
* получать через IOptions<T>
* добавить валидацию через Data Annotations
Так конфигурация становится типизированной, проще тестируется и меньше ломается при рефакторинге.DropDownList удобен для плоских списков, а TreeView хорошо показывает структуру, но занимает много места.
Telerik предлагает промежуточный вариант - DropDownTree.
Он позволяет выбирать элементы из дерева прямо внутри компактного dropdown:
* категории товаров
* структура компании
* файловая система
* регионы
* роли и permissions
Компонент поддерживает вложенные данные напрямую, поиск по дереву, раскрытие нужных узлов и отображение выбранного пути.
Пример:
<TelerikDropDownTree Data="@Data"
@bind-Value="@SelectedValue"
ValueField="TreeItemId"
Filterable="true">
<DropDownTreeBindings>
<DropDownTreeBinding TextField="Text"
ItemsField="Items" />
</DropDownTreeBindings>
</TelerikDropDownTree>
Главное преимущество - не нужно превращать сложную иерархию в огромный плоский список.
Если данные уже представлены как рекурсивный DTO, их часто можно передать компоненту практически напрямую.
Полезный вариант для Blazor-приложений, где пользователь должен выбирать что-то из большого дерева данных, но постоянно держать TreeView на экране нет смысла.
https://telerik.com/blogs/simplify-hierarchical-selection-blazor-telerik-dropdowntree
#aspnetcore #blazor