Рубрика «.net»

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

Фото: Jesse Bowser, Unsplash

Читать полностью »

Введение

Каждый C#-разработчик хотя бы раз писал что-то вроде:

var result = numbers.Where(x => x > 10).Select(x => x * 2).Take(5);

И почти каждый на старте карьеры удивлялся, узнав, что эта строчка ничего не вычисляет. Ни один элемент коллекции ещё не тронут, ни один предикат не вызван — вся цепочка спит. Вычисления начнутся только тогда, когда мы начнём перебирать result в foreach или вызовем .ToList().

Читать полностью »

FOG Prime на GitHub

FOG Prime на GitHub

Когда Discord внезапно теряет голосовую связь, а YouTube открывается через раз, пользователю обычно предлагают длинную инструкцию: проверить DNS, перебрать параметры, запустить несколько скриптов и каким-то образом не запутаться в результатах. Читать полностью »

На предыдущей работе был простой подход: используем любые ИИ‑инструменты — главное результат. Что приводило к тому, что разработчик не мог внятно объяснить, для чего это написано. Главное, что тесты проходят? А то, что находится в чёрном ящике — дело второстепенное.

На текущей работе к ИИ отношение осторожное. По моим наблюдениям многие используют как чат, а не как агент. Есть определенные модули, которые не должны утечь. Мне стало интересно разобраться насколько можно автоматизировать генерацию кода.

Я вижу четыре основных варианта использования ИИ в разработке:

Пятница, 23:47. PagerDuty: “Платёж AmEx, провайдер вернул 5xx три раза подряд, билеты не зарезервированы.” Открываю логи – действительно 3 ответа провайдера с 5xx, ни одной успешной транзакции по нашей базе. Закрываю как временный сбой на стороне провайдера, пишу короткую сводку в дежурный чат и иду досматривать. Через 40 минут второй алерт – уже от ночной поддержки: клиент прислал скрин выписки, 3 списания подряд за одну бронь. У клиента рейс через 6 часов, ему нужна действующая бронь и подтверждение, что он завтра нормально улетит, а не тикет в поддержку.

Читать полностью »

Azio-Speech.png

Azio-Speech.png

Предисловие: зачем вообще это нужно

Читать полностью »

Ты только что получил задачу перенести сервис на gRPC - и думаешь, что это просто «взял protobuf, описал контракты, запустил кодогенерацию«? Так думал и я. До тех пор, пока не столкнулся с тем, что decimal в protobuf попросту не существует, nullable int превращается в нечто с флагом HasValue вместо привычного int?, а два enum в одном файле могут убить сборку из‑за конфликта имён значений — и компилятор скажет тебе об этом совсем не очевидно.»

Читать полностью »

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

Допустим, мы хотим сгенерировать тип с таким интерфейсом:

public interface IStudent
{
    string Name { get; set; }
    int Some(string value);
}

Логика метода Some (просто для примера):

public int Some(string value)
{
    string str = Name + value;
    Console.WriteLine(str);
    return str.Length;
}

Reflection.Emit

Можно использовать System.Reflection.Emit.

Читать полностью »
StaticEcs

Коротко о том, что такое ECS (Entity Component System)

Сущность — числовой идентификатор без данных.
Компонент — структура данных (Position, Health, Velocity), которая может быть прикреплена к сущности.
Система — код, перебирающий сущности с нужным набором компонентов и обрабатывающий их.

Читать полностью »

Discriminated Unions: Что не так с реализациями объединений в C#? - 1

В жизни каждого C# программиста рано или поздно наступает момент, когда switch по objectЧитать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js