LongQueryInterceptor.cs (gist) - автоматически логирует в штатный лог запросы EntityFramework, которые выполняются дольше чем указанное время. #dotnet #ef
👍7🔥3
inject/provide в Vuejs - да... это не Рио-де-Жанейро, конечно назвать это DI сложно, но помогает разгрузить код от кросс-ссылок на файлы. Ну и офиц документация да, она правда нищевата на примеры.
#vuejs
#vuejs
👍1
Zuplo - интересный проект, который позволяет завернуть твоё API в них и делать разное (биллить, менеджить ключи, ...) без особых телодвижений.
Zuplo
API Key Management - Zuplo
Zuplo's API key management makes it easy to create, manage, and revoke API keys. Create API keys for your team members and give them access to only the data they need.
🤔2👍1
Как-то прошло мимо и я заметил только щас, что недавно был анонсирован pl/dotnet (там есть ссылка на github), который позволяет писать функции и процедуры на C# для Postgres.
В прод конечно же я бы это затаскивать не стал, потому что версия 0.99beta (что как бы намекает), ну и помня историю с появлением аналогичного в MSSQL - где в первых версиях (ну как в первых, в mssql 2005 что ли) на каждый вызов создавался app domain, а после вызова удалялся. В эпоху .net 4.0 это было небыстро и било по перфомансу запросов прилично, а также регулярно отрывало башку оптимизатору, который не знал как оценить план выполнения такой функции. Так что в первых версиях это можно было использовать только для каких-нибудь единичных штук (отправить емайл, распарсить файл, дёрнуть урл, ...). Потом это конечно же починили, но я никогда так и решился использовать .net внутри mssql.
Но времена нынче другие, .net стал сильно побыстрее и думаю там это вполне пригодно. Не могу пока придумать зачем, но интересно.
#dotnet #postgres
В прод конечно же я бы это затаскивать не стал, потому что версия 0.99beta (что как бы намекает), ну и помня историю с появлением аналогичного в MSSQL - где в первых версиях (ну как в первых, в mssql 2005 что ли) на каждый вызов создавался app domain, а после вызова удалялся. В эпоху .net 4.0 это было небыстро и било по перфомансу запросов прилично, а также регулярно отрывало башку оптимизатору, который не знал как оценить план выполнения такой функции. Так что в первых версиях это можно было использовать только для каких-нибудь единичных штук (отправить емайл, распарсить файл, дёрнуть урл, ...). Потом это конечно же починили, но я никогда так и решился использовать .net внутри mssql.
Но времена нынче другие, .net стал сильно побыстрее и думаю там это вполне пригодно. Не могу пока придумать зачем, но интересно.
#dotnet #postgres
😁2🤔2👍1
Т.к. я не дизайнер ниразу (а иногда UI делать надо :) - нахожу интересным посмотреть на готовые UI например на layers.to.
Там есть конечно весьма спорные решения (с точки зрения юзабельности, например это што) - но в целом большое собрание, чтобы можно было посмотреть на сочетание цветов и некоторые подходы. #ui
Там есть конечно весьма спорные решения (с точки зрения юзабельности, например это што) - но в целом большое собрание, чтобы можно было посмотреть на сочетание цветов и некоторые подходы. #ui
👍8
Tomato Architecture - A Pragmatic Approach to Software Design - время изучить ещё один подход к архитектуре :))) название конечно ну такое и в целом там ничо нового в статье, однако интересны два подхода связанные с модульностью:
Package by feature - правда тут вылезает вопрос как именно классифицировать feature и насколько гранулярно, но там есть ссылка на другую статью, где чуть подробнее раскрываеца это.
Test not only units, but whole features - вот это тоже интересная штука. Unit-тесты безусловно полезны и нужны (особенно если у тебя математика внутри), но вот интеграционные тесты на feature как раз показывают как будет работать твоя feature в окружении. #architecture #howto
Package by feature - правда тут вылезает вопрос как именно классифицировать feature и насколько гранулярно, но там есть ссылка на другую статью, где чуть подробнее раскрываеца это.
Test not only units, but whole features - вот это тоже интересная штука. Unit-тесты безусловно полезны и нужны (особенно если у тебя математика внутри), но вот интеграционные тесты на feature как раз показывают как будет работать твоя feature в окружении. #architecture #howto
🔥2
Волей случая принесло ssr-benchmark - сравнение SSR-фреймворков. vue и nuxt вполне себе норм, быстрее реакта :) #ui #vuejs
GitHub
GitHub - eknkc/ssr-benchmark: Benchmarking JS web framework SSR performance
Benchmarking JS web framework SSR performance. Contribute to eknkc/ssr-benchmark development by creating an account on GitHub.
🥰1
Контейнер с "почтовым сервером" и UI для него, который можно использовать для отладки/тестирования
Также напоминаю про https://webhook.site - который умеет не только почту принимать и показывать в реальном времени, но и принимать вебхуки по get / post и показывать содержимое чего там пришло. Использовал для интеграции со Stripe, временно направив туда вебхуки от него.
#tools #dev
Также напоминаю про https://webhook.site - который умеет не только почту принимать и показывать в реальном времени, но и принимать вебхуки по get / post и показывать содержимое чего там пришло. Использовал для интеграции со Stripe, временно направив туда вебхуки от него.
#tools #dev
👍7
Использование ClaimsTransformation для RBAC.
Помимо того, что описано в статье - напоминаю, что в пришедшего юзера (User.Identity) можно добавлять свои клаймы прямо во время обработки входящего запроса и которые (например) не были известны на момент аутентификации юзера, но возможно понадобяца в дальнейшей обработке запроса.
Я таким образом добавлял id организации, которой принадлежит юзер (доставалось из базы по id юзера, который брался из его клаймов), потому что этот id кое-где использовался для вышеупомянутой RBAC. Это можно например делать в custom AuthenticationHandler (статья про это). #dotnet
Помимо того, что описано в статье - напоминаю, что в пришедшего юзера (User.Identity) можно добавлять свои клаймы прямо во время обработки входящего запроса и которые (например) не были известны на момент аутентификации юзера, но возможно понадобяца в дальнейшей обработке запроса.
Я таким образом добавлял id организации, которой принадлежит юзер (доставалось из базы по id юзера, который брался из его клаймов), потому что этот id кое-где использовался для вышеупомянутой RBAC. Это можно например делать в custom AuthenticationHandler (статья про это). #dotnet
🔥3
Несложная сводная статья API Gateway vs. Load Balancer vs. Reverse Proxy - что, для чего, когда, почему и зачем используются те или иные штуки и чем они отличаются. #howto
❤4👍3
Возвращаясь к теме профайлинга в контейнерах.
На днях мне эти инструменты - а конкретно dotnet-trace и dotnet-counters - помогли выяснить, что перф просирается в контейнере по причине перекомпиляции EF запроса при каждом вызове. Простой вынос его в EF.CompiledQuery снизил утилизацию проца почти в 8 раз. Да, этот запрос вызывался много раз в секунду, но я первый раз такое вижу, чтобы оно ТАК влияло.
В любой контейнер эти инструменты ставятся очень просто. У меня на данный момент контейнеры собираются на базе mcr.microsoft.com/dotnet/aspnet:8.0.2-alpine3.19 и там надо
Потом снимаешь трейсы с помощью dotnet-trace, выносишь из контейнера (с помощью
PS Не забудьте убедица, что в вашем dockerfile НЕТ этой строки:
потому что у меня она изначально была и инструменты соответственно не работали - просто не видился процесс :))
На днях мне эти инструменты - а конкретно 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
потому что у меня она изначально была и инструменты соответственно не работали - просто не видился процесс :))
Telegram
📓 Записки программера
Как профайлить софт в контейнере с помощью штатных инструментов. Несмотря на то, что в заголовоке упомянуто .net 6 - оно работает и net 5 тоже без изменений. Дампы получаемые из контейнера - открываются не только в Visual Studio, но и в Rider тоже. Что немаловажно…
👍11🔥6❤1
На просторах твиттера нашлась свеженькая ссылка по подготовке к алгоритмическим собесам.
GitHub
GitHub - beagreatengineer/algo-interview: 🧑💻 Бесплатный, минимально необходимый план подготовки к алгоритмическому интервью в…
🧑💻 Бесплатный, минимально необходимый план подготовки к алгоритмическому интервью в компанию мечты. Для начинающих и опытных специалистов. - beagreatengineer/algo-interview
👍7
FluentContracts - с одной стороны выглядит симпатично... С другой стороны - выглядит, что писанины становится чуть больше. Надо вобщем попробовать в какой-нибудь небольшой проект затащить :) #dotnet
👍4👎1🤔1
Бесплатная книга Architecting Modern Web Applications with ASP.NET Core and Microsoft Azure за авторством Steve Smith и Microsoft. Я пролистал, ну в целом сакральных знаний там не особо, но для джунов зайдет отлично, особенно учитывая что там есть ряд интересных ссылок, например на Design Patterns с примерами и сводную таблицу Principles там же.
#books #dotnet
#books #dotnet
👍4
Пишут, что релизнули MongoDB.EntityFrameworkCore - ну и LINQ-запросы выглядят почти как традиционные LINQ в EF. А у меня так и не дошли руки посмотреть во что транслируются Where/Select/... в этом случае.
#dotnet
#dotnet
MongoDB
MongoDB Provider for Entity Framework Core Now Generally Available | MongoDB Blog
We are pleased to announce that the MongoDB Provider for Entity Framework Core (EF Core) is now generally available. Learn more.
🔥2