Обновить
100.12

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Expression: всё что нужно для старта

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели6.4K

Если поискать по Хабру статьи, связанные с Expression, то можно найти несколько десятков страниц статей. Однако, я решил написать еще одну. Цель с которой я решил это сделать‑ разобрать деревья выражений для разработчиков которые еще не имели с ними дела. Для тех кому это кажется магией. И самое главное, показать для чего они могут пригодиться.

Что же далее...

Валидация Delegate-регистраций в DI-контейнере

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели2.3K

Использование DI-контейнеров часто приводит к появлению неприятных ошибок в рантайме. В таких случаях хочется, чтобы контейнер умел находить проблемы и уведомлять о них в момент сборки. 

С проверкой регистраций, добавленных через рефлексию, все довольно просто, и некоторые контейнеры даже предоставляют такой функционал из коробки. Но вот что делать с регистрациями-делегатами сходу неясно и даже может показаться, что от ошибок резолва сервисов внутри делегатов никуда не деться.

В статье на примере Autofac посмотрим, как устроены регистрации-делегаты, и научимся находить в них ошибки до того, как контейнер начнет использоваться приложением. По ходу дела вспомним, как работают замыкания в C# и как размещаются в памяти анонимные делегаты, а также рассмотрим способ анализа MSIL-инструкций в процессе выполнения программы.

Читать далее

DAX-style подход в C# для SUMMARIZECOLUMNS из Power BI

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели1.3K

Привет, Хабр! Одной из важных функций в аналитическом языке DAX является SUMMARIZECOLUMNS, т.к. она готовит данные для дашбордов за счет декартова произведения полей группировки, если поля группировки из разных таблиц. Понятно, что на любом языке программирования можно реализовать логику, в чем-то аналогичную SUMMARIZECOLUMNS из DAX. Интересующимся DAX-style логикой для C# из NuGet пакета DaxSharp для функцииSUMMARIZECOLUMNS — добро пожаловать под кат :)

Читать далее

У нас был план: внедрить автоматизацию тестирования мобильного приложения

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели985

Хабр, привет! Меня зовут Мельников Станислав, руковожу группой автоматизированного тестирования. В статье расскажу, как мы организовали автоматизацию тестирования мобильного приложения и ушли от бесконечного ручного регресса к ферме устройств и авто-тестам, которые теперь живут в CI. Делюсь цифрами, граблями и планами. 

Читать далее

Книга: «.NET 8: приложения и сервисы. Практика создания проектов с использованием Blazor, .NET MAUI, gRPC, GraphQL.»

Время на прочтение9 мин
Охват и читатели3.4K

Привет, Хаброжители! У нас есть для вас новое издание книги «.NET 8: приложения и сервисы» вы сможете поднять свои навыки владения C# и .NET на новый уровень.

В книге описаны практические приемы использования различных технологий, включая Web API, gRPC, GraphQL и SignalR, что выделяет ее среди других источников. Она познакомит вас с новой унифицированной моделью Blazor Full Stack и расскажет, как использовать .NET MAUI для разработки мобильных и десктопных приложений.

В новом издании представлены последние достижения, включая бесшовную реализацию веб-сервисов со встроенной поддержкой Ahead-of-Time (AOT) ADO. NET SqlClient. Помимо других популярных библиотек, в книге рассматриваются Humanizer и Noda Time. Совершенно новая глава расскажет об архитектуре, кэшировании, организации очередей и приемах построения надежных фоновых сервисов.

Читать далее

Электронная налоговая Черногории: пока 404. Ну хорошо, 50/50 — значит 202

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели2.1K

Я всё‑таки решил на практике проверить работу электронной подачи документов на регистрацию или изменение данных черногорской компании. Я конечно, читал несколько отзывов о работе личного кабинета СRPS (ссылка), точнее о том, что он не работает — но надо же убедиться самому. На самом деле, всё оказалось достаточно легко и понятно — заполнение сведений, прикрепление документов, их подписание цифровой подписью — всё работает...

Читать далее

Публикация Xamarin.Forms iOS приложений в условиях прекращения поддержки фреймворка

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели785

1 мая 2024 компания Microsoft официально прекратила поддержку Xamarin.Forms. Альтернативой они называют MAUI, который всё ещё очень и очень сырой. Нельзя так просто взять и перенести свое приложение на новые рельсы - у платформ разные подходы к написанию кода. Так как выкручиваться в таком случае тем, у кого есть legacy проекты на Xamarin.Forms, но при этом нет возможности перевести их на MAUI?

Читать далее

Балансирование нагрузки при разделяемых ресурсах при помощи очередей в Hangfire

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели1.4K

Привет, Хабр! При создании фоновых работ, например, через Hangfire, может быть актуально учитывать разделяемые ресурсы (например, базы данных, внешнюю API или файловую систему). Поскольку такие ресурсы являются ограниченными, возникает потребность управления количеством параллельно исполняемых задач без написания сложной логики. Интересующимся особенностями распределения ресурсов в Hangfire при помощи очередей — пожаловать под кат :)

Читать далее

Nullable-аннотации: MaybeNull и NotNullWhen в C#

Время на прочтение8 мин
Охват и читатели3K

Привет, Хабр!

Сегодня мы рассмотрим nullable-аннотации в C#: как с помощью [MaybeNull] и [NotNullWhen] (плюс родственных атрибутов вроде [MaybeNullWhen], [NotNullIfNotNull], [DoesNotReturn]) формально описывать те самые «ну тут иногда null, а тут точно нет».

Читать далее

Пример реализации слоя приложения persistence layer без использования ORM фреймворка

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели2.6K

Слой приложения persistence layer является в определённом смысле уникальным в смысле узкой направленности его функционала по сравнению с другими слоями приложения. Если рассматривать его только для работы с реляционными базами данных, то реализацию функционала слоя можно разбить на два основных варианта - с использованием ORM фреймворка и без использования ORM фреймворка. Каждый из этих вариантов можно реализовать достаточно универсальным образом.

В этой статье рассмотрен пример реализации слоя persistence layer без использования ORM фреймворка. Предлагаемое решение является простым и в тоже время достаточно универсальным для использования в языках программирования, поддерживающих объектную модель.

Читать далее

async2: эксперимент с поддержкой асинхронности в рантайме

Уровень сложностиСложный
Время на прочтение25 мин
Охват и читатели3.6K

Перед тем как перейти к рассмотрению предложенных изменений в работе асинхронности в C#, давайте разберемся — зачем все это нужно, как устроено сейчас и какие имеются проблемы, раз разработчики начали искать способы улучшения существующей логики.

Для начала давайте поймем, а зачем вообще нам нужна асинхронность и какие проблемы она решает?

Представим какой‑то абстрактный web‑api, который ходит за данными в БД. При однопоточном синхронном выполнении следующий запрос может быть обработан только тогда, когда полностью был выполнен предыдущий, что неэффективно, т.к. вся нагрузка ложится только на 1 ядро процессора, а остальные простаивают.

Читать далее

.NET Digest #8

Время на прочтение4 мин
Охват и читатели2.3K

Добро пожаловать на восьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про уже ожидаемые .NET 10 preview 4 и 5, новую команду dotnet run app.cs и множество интересных статей. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Как собрать друзей на игру и не сойти с ума: мой бот для геймеров

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели7.1K

Я занимаюсь разработкой уже 10 лет, большую часть времен... Так, это из прошлой статьи. Давайте заново.

Я играю в игры уже 27 лет, большую часть времени играю один, но пару раз в неделю собираюсь играть с друзьями и каждый раз, чтобы собраться, нужно пройти 10 круг опросов: кто, когда, во сколько, на сколько, во что и 1001 другой вопрос. В какой-то момент я понял, что больше так жить нельзя и решил использовать свои навыки программиста, чтобы решить эту проблему.

Читать далее

Ближайшие события

Телеграмм боты на C# и с чем их едят. TeleBotFramework

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5K

Я занимаюсь разработкой уже 10 лет, большую часть времени на C# и ASP.Net и взбрело мне в голову разобраться, что такое эти ваши телеграм боты и как они работают.

Спойлер: Это просто вебсервер с webhook или вообще консольное приложения с long-pooling.

И начал я с того, что это такое и есть ли какие-то общие подходы к решению этой задачи. И на удивление, не нашёл. Вполне возможно, что просто плохо искал и решил сделать свой велосипед, но что уж тут поделать, уже сделал.

Первое что меня удивило в примерах кода других ботов, это god метод в контроллере, который имеет несколько свитч-кейсов один в другом, а внутри ещё какие-то условные операторы. Мне сразу показалось это странным и я решил пойти по-другому пути. Типа такого, но пример не настоящий.

Читать далее

Используем API Speech2Text для распознавания записей разговоров

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели1.5K

В нашей компании анализируются звонки менеджеров отдела продаж для оценки их эффективности, устранения недочётов и улучшения сервиса. На сегодняшний день это составляет немалый массив ручной работы, для облегчения которой мы задумали привлечь технологии искусственного интеллекта. Идея следующая: забираем записи звонков, распознаём речь (преобразовываем в текст), подключаем LLM для анализа текста, знакомимся с выводами, при необходимости (например, возникновении каких-то аномалий) контролируем происходящее вручную.

Распознавание аудио решили делать через сервис Speech2Text, пример использования API которого я и покажу в этой статье. В черновом варианте получаем примерно следующую схему работы (нас сейчас интересует прямоугольник с подписью Speech2Text connector):

Читать далее

CoreBus: Часть 5 — попытка использования Native AOT

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели1.1K

CoreBus (старое название «Терминальная программа») — кроссплатформенный терминал для работы с COM-портами и TCP-сокетами с поддержкой протоколов Modbus TCP / RTU / ASCII.

Ребрендинг, новые фичи и Native AOT (+ боль и разочарование).

Читать далее

Struct IEnumerator

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели3.4K

Как-то было свободных полчаса перед встречей. Ни туда, ни сюда. Дай, думаю, сниму трейс с приложения. Вдруг что-то интересное найдётся.

А в качестве бонуса: использование var может привести к багам? Узнаем в самом конце ;)

Читать далее

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 8. Запоминающий поиск пути

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели1.6K

Мы ковыряли поиск пути через A* на протяжении двух глав и при этом были сосредоточены на синтаксических изысках F#. В этой главе мы отдохнём от синтаксиса и посмотрим на то, как этот алгоритм мог бы развиваться в более функциональном стиле.

Читать далее

Как я собеседовался в Ozon, Т-Банк, Mindbox и другие крупные компании

Уровень сложностиПростой
Время на прочтение25 мин
Охват и читатели120K

Всем привет. Я сеньор и тимлид на .NET (C#). До недавнего времени работал в Росатоме, пока там внезапно не сократили целую дирекцию по цифровизации. Так что пришлось срочно выходить на рынок, причём, впервые в моей жизни (до этого работа находила меня сама). По результатам нескольких циклов собеседований получился неплохой дневник, который я здесь привожу.

История длинная, но интересная

AGI: от идеи к реализации, часть 2: от линейного преобразования к живому мышлению

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели1.4K

Предисловие: вот и прошел этап критики и самоопределения после публикации моей первой статьи. Теперь это уже вторая. Хотел бы сказать что первая статья не была научной публикацией и сведением графиков по GPT. Это было исследованием экспериментом таким: если человек не может изобрести AGI, то почему бы не попросить об этом LLM? Вот это как раз сейчас и делается в данной работе. Результат смотрите сами. И да это не очередной RAG как приводилось в комментариях, это становится новой парадигмой.

🧠 От Линейного Преобразования к Живому Мышлению: Критика LLM и Архитектура AGI как Субъекта

Автор: [Твоё имя или псевдоним]
Версия: 1.0 | Июль 2025

Читать далее

Вклад авторов