📓 Записки программера
Открыть в Telegram
Канал с регулярными постами о разных интересных материалах (статьи, видео, фреймворки и полезные инструменты). https://dotnet.social/@denisio
Больше1 078
Подписчики
-124 часа
-17 дней
+730 день
Архив постов
На просторах твиттера нашлась свеженькая ссылка по подготовке к алгоритмическим собесам.
Возвращаясь к теме профайлинга в контейнерах.
На днях мне эти инструменты - а конкретно dotnet-trace и dotnet-counters - помогли выяснить, что перф просирается в контейнере по причине перекомпиляции EF запроса при каждом вызове. Простой вынос его в EF.CompiledQuery снизил утилизацию проца почти в 8 раз. Да, этот запрос вызывался много раз в секунду, но я первый раз такое вижу, чтобы оно ТАК влияло.
В любой контейнер эти инструменты ставятся очень просто. У меня на данный момент контейнеры собираются на базе mcr.microsoft.com/dotnet/aspnet:8.0.2-alpine3.19 и там надо
apk add dotnet7-sdk
dotnet tool install --global dotnet-trace
dotnet tool install --global dotnet-counters
...
Потом снимаешь трейсы с помощью dotnet-trace, выносишь из контейнера (с помощью docker cp) и рассматриваешь их с помощью Jetbrains dotTrace (два чая этим господам, исключительно удобная штука для рассматривания следов преступления под лупой)
PS Не забудьте убедица, что в вашем dockerfile НЕТ этой строки:
ENV DOTNET_EnableDiagnostics=0
потому что у меня она изначально была и инструменты соответственно не работали - просто не видился процесс :))Несложная сводная статья API Gateway vs. Load Balancer vs. Reverse Proxy - что, для чего, когда, почему и зачем используются те или иные штуки и чем они отличаются. #howto
Пример использования паттерна Composition для начинающих #howto #example #patterns #dotnet
Использование ClaimsTransformation для RBAC.
Помимо того, что описано в статье - напоминаю, что в пришедшего юзера (User.Identity) можно добавлять свои клаймы прямо во время обработки входящего запроса и которые (например) не были известны на момент аутентификации юзера, но возможно понадобяца в дальнейшей обработке запроса.
Я таким образом добавлял id организации, которой принадлежит юзер (доставалось из базы по id юзера, который брался из его клаймов), потому что этот id кое-где использовался для вышеупомянутой RBAC. Это можно например делать в custom AuthenticationHandler (статья про это). #dotnet
Контейнер с "почтовым сервером" и UI для него, который можно использовать для отладки/тестирования
Также напоминаю про https://webhook.site - который умеет не только почту принимать и показывать в реальном времени, но и принимать вебхуки по get / post и показывать содержимое чего там пришло. Использовал для интеграции со Stripe, временно направив туда вебхуки от него.
#tools #dev
Волей случая принесло ssr-benchmark - сравнение SSR-фреймворков. vue и nuxt вполне себе норм, быстрее реакта :) #ui #vuejs
Tomato Architecture - A Pragmatic Approach to Software Design - время изучить ещё один подход к архитектуре :))) название конечно ну такое и в целом там ничо нового в статье, однако интересны два подхода связанные с модульностью:
Package by feature - правда тут вылезает вопрос как именно классифицировать feature и насколько гранулярно, но там есть ссылка на другую статью, где чуть подробнее раскрываеца это.
Test not only units, but whole features - вот это тоже интересная штука. Unit-тесты безусловно полезны и нужны (особенно если у тебя математика внутри), но вот интеграционные тесты на feature как раз показывают как будет работать твоя feature в окружении. #architecture #howto
Т.к. я не дизайнер ниразу (а иногда UI делать надо :) - нахожу интересным посмотреть на готовые UI например на layers.to.
Там есть конечно весьма спорные решения (с точки зрения юзабельности, например это што) - но в целом большое собрание, чтобы можно было посмотреть на сочетание цветов и некоторые подходы. #ui
Как-то прошло мимо и я заметил только щас, что недавно был анонсирован pl/dotnet (там есть ссылка на github), который позволяет писать функции и процедуры на C# для Postgres.
В прод конечно же я бы это затаскивать не стал, потому что версия 0.99beta (что как бы намекает), ну и помня историю с появлением аналогичного в MSSQL - где в первых версиях (ну как в первых, в mssql 2005 что ли) на каждый вызов создавался app domain, а после вызова удалялся. В эпоху .net 4.0 это было небыстро и било по перфомансу запросов прилично, а также регулярно отрывало башку оптимизатору, который не знал как оценить план выполнения такой функции. Так что в первых версиях это можно было использовать только для каких-нибудь единичных штук (отправить емайл, распарсить файл, дёрнуть урл, ...). Потом это конечно же починил, но я никогда так и решился использовать .net внутри mssql.
Но времена нынче другие, .net стал сильно побыстрее и думаю там это вполне пригодно. Не могу пока придумать зачем, но интересно.
#dotnet #postgres
Parlot is a fast, lightweight and simple to use .NET parser combinator - билдер парсеров на Expression'ах (и не только).
Бенчмарки выглядят вполне ок, надо будет попробовать что-нибудь попарсить им. Написано, что используется в OrchardCore.
#dotnet
Zuplo - интересный проект, который позволяет завернуть твоё API в них и делать разное (биллить, менеджить ключи, ...) без особых телодвижений.
inject/provide в Vuejs - да... это не Рио-де-Жанейро, конечно назвать это DI сложно, но помогает разгрузить код от кросс-ссылок на файлы. Ну и офиц документация да, она правда нищевата на примеры.
#vuejs
Я и не знал, что современные браузеры умеют нативно разметкой рисовать формулы #css #html
LongQueryInterceptor.cs (gist) - автоматически логирует в штатный лог запросы EntityFramework, которые выполняются дольше чем указанное время. #dotnet #ef
Чуть более десятка полезных запросов для Postgres собрал и оформил с примерами. Для одного поста в телегу - это слишком много (особенно с разметкой примеров вывода). Так что положил в виде gist на github:
🔸Текущие выполняемые запросы
🔸Запросы, выполняемые более 1 секунды
🔸Таблицы с % попадания в кэш при их использовании
🔸Размеры таблиц (включая индексы)
🔸Размеры индексов
🔸Размер текущей БД
🔸Размеры и наличие временных файлов
🔸Статистика по чтению индексов
🔸Статистика использования индексов
🔸Топ 5 самых активных таблиц
🔸Топ 5 самых активных индексов
🔸Никогда не использованные индексы
#postgres
Некоторое количество советов при логировании с помощью Serilog (в основном связано с обогащением контекста разными штуками, чтобы потом легче было искать в логах нужное) #dotnet
Managing 238M Memberships at Netflix - статья и 50 минутное видео с докладом про это #highload
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
