RU

Что стоит за простым уведомлением: история разработки шаблонизатора на C#

Чтобы напомнить клиенту о встрече, нужно собрать в одном сообщении данные из нескольких записей CRM. С этой задачи началась работа над моим шаблониз…

c#.netшаблонизаторdynamics crmsqlsmsуведомленияparsertemplatesemail
Habr
RU

Отбор акций на .NET: 14,5 млн баров в SQLite, фильтр, который мерил не в тех единицах, и перестановочный тест

Каждый вечер мне нужно ответить на один вопрос: на какие бумаги из примерно тринадцати тысяч имеет смысл потратить время сегодня. Не «какие вырастут…

c#.netsqliteвременные рядыоптимизацияпараллельные вычислениябэктестперестановочный тестанализ данныхотбор акций
Habr
RU

Что скрывают популярные ORM для C#: проверка проектов RepoDB и SqlSugar

Когда речь заходит об ORM, большинство C# разработчиков сразу вспоминают мощный Entity Framework Core или же легковесный Dapper. Но что насчёт RepoD…

.netormc#c#.netsqlпрограммированиестатический анализинформационная безопасность
Habr
RU

Async void в C#: Его опасности и почему он все еще существует

Разбираем необычную конструкцию async void В чем отличие от написания async Task ? Какие проблемы могут за ней скрываться? Для чего ее ввели в язык?…

async voidc#asyncасинхронное программированиеисключенияантипаттерныtaskawaitvoid.net
Habr
RU

Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам. Часть 2

В первой части мы успешно вскрыли чёрный ящик LINQ: написали  Where  вручную, разобрались, как компилятор превращает  yield return &n…

.netlinqyieldc#итераторыкомпиляторленивые вычисленияотложенное выполнениеienumerabledeffered execution
Habr
RU

Code, Force, Repeat. Олдскульный GUI для олдскульных скриптов. Часть 2. Действие

В прошлый раз мы пробежались по предметной области, добыли данные и вывели их на экран. В принципе, этого достаточно для выполнения моего ежедневног…

f#.netконсольные приложенияконсольные скриптыmvufsxcodeforcesспортивное программирование
Habr
RU

Практическое применение линейной реализации асинхронных операций на примере WPF приложения

В этой статье я покажу, как использовать IAsyncEnumerable в WPF‑приложении для асинхронных операций. Код полностью рабочий, его…

iasyncenumerableасинхронное программированиечистая архитектураc#.net
Habr
RU

Code, Force, Repeat. Олдскульный GUI для олдскульных скриптов. Часть 1. Экспозиция

В этот раз я пришёл с двухчастным текстом про F#, тайппровайдеры, скрипты, спортивное программирование, MVU, консольные интерфейсы в стиле FarManage…

f#.netконсольные скриптыконсольные приложенияmvufsxcodeforcesспортивное программирование
Habr
RU

1500 строк красного: как обновление одного плагина на Rust-сервере съедает вечер — и почему виноват diff

Выходит обновление плагина, он дописывает свои ключи в ваш конфиг и заодно меняет порядок остальных. Через сутки в дискорде жалобы, вы открываете бэ…

rustc#.netavaloniajson
Habr
RU

Лицензионный ключ на 202 символа: почему не Ed25519 и не RSA

Понадобилось научить десктопную программу принимать лицензионные ключи: строка из письма вставляется руками и проверяется без интернета. Во что это…

ecdsaed25519.netc#цифровая подписьлицензированиекриптографияBouncyCastlelibsodiumbase32
Habr
RU

CraftHub: вложенный JSON больше не расплющивается в колонки, плюс подсветка синтаксиса и ещё по мелочи

Вложенный JSON-объект при импорте в таблицу расплющивался в колонку robot.point.x — и вся структура терялась безвозвратно. Разобрался, как сделать э…

avaloniaavaloniauijsonc#.net
Habr
RU

Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам. Часть 2

В первой части мы успешно вскрыли чёрный ящик LINQ: написали Where вручную, разобрались, как компилятор превращает yield return в конечные автоматы,…

.netlinqyieldc#компиляторитераторыленивые вычисленияотложенное выполнениеienumerabledeffered execution
Habr