Интересный workshop для Dapr. Достаточно подробно описан кейс, нарисованы схемы и есть 7 заданий по очереди для практики разработки микросервисной архитектуры.
Микросервисов всего 3 (четыре, если считать внешний условный Camera simulation который дергает два endpoint'а - их можно подергать и curl'ом), так что несложно.
Особенно интересно то, что нет особой привязки к Dapr - тоесть это всё можно легко реализовать просто как сервисы и запилить их в докер/кубер или реализовать через через akka/orleans (два из трёх сервисов прекрасно лягут на модель акторов). Ну и соответственно необязательно использовать C#, можно на любом языке сделать - как все микросервисы так и какие-то отдельные.
#dotnet
Микросервисов всего 3 (четыре, если считать внешний условный Camera simulation который дергает два endpoint'а - их можно подергать и curl'ом), так что несложно.
Особенно интересно то, что нет особой привязки к Dapr - тоесть это всё можно легко реализовать просто как сервисы и запилить их в докер/кубер или реализовать через через akka/orleans (два из трёх сервисов прекрасно лягут на модель акторов). Ну и соответственно необязательно использовать C#, можно на любом языке сделать - как все микросервисы так и какие-то отдельные.
#dotnet
Потыкал в очередной раз MAUI. Остаюсь при мнении, что это странная и нежизнеспособная хуйня. Прекрасно работает как hello world, но за пределами этого начинаются невероятные костыли и приседания.
Билд и деплой на на симулятор или живой девайс (wifi гигабитный, ноут жырный, телефон - топ по скорости) идёт секунд 30. Просто билд hello world с одной формой под два таргета (windows/android) идёт секунд 20. Билд только под винду - секунд 10.
Приличные компоненты, которые нужны для любого нормального приложения - контролы, гриды, карты - почти все prerelease/beta и работают через жопу.
Mapsui для карт - полный пиздец, такое ощущение что люди вообще не видели никогда других компонентов, которые годами есть на рынке. На топовом андроед телефоне с 120 Гц экраном пан, зум и вращение работают рывками как на вафельнице за $50. Забавно, что карта вращается строго по часовой стрелке, против часовой нельзя если она до этого не повернута. Проекции для координат тоже неясны, но явно не широта/долгота. Ну и документации примерно нихера, даже комментариев для intellisense. Как это использовать - совершенно неясно.
Надо посмотреть как в Avalonia.
Билд и деплой на на симулятор или живой девайс (wifi гигабитный, ноут жырный, телефон - топ по скорости) идёт секунд 30. Просто билд hello world с одной формой под два таргета (windows/android) идёт секунд 20. Билд только под винду - секунд 10.
Приличные компоненты, которые нужны для любого нормального приложения - контролы, гриды, карты - почти все prerelease/beta и работают через жопу.
Mapsui для карт - полный пиздец, такое ощущение что люди вообще не видели никогда других компонентов, которые годами есть на рынке. На топовом андроед телефоне с 120 Гц экраном пан, зум и вращение работают рывками как на вафельнице за $50. Забавно, что карта вращается строго по часовой стрелке, против часовой нельзя если она до этого не повернута. Проекции для координат тоже неясны, но явно не широта/долгота. Ну и документации примерно нихера, даже комментариев для intellisense. Как это использовать - совершенно неясно.
Надо посмотреть как в Avalonia.
🔥3
Пожалуй лучшая статья с обилием интерактивных анимаций - как работает навигация (GPS, Глонасс, ....) #gps #doc
ciechanow.ski
GPS – Bartosz Ciechanowski
Interactive article explaining how GPS works.
Интересный github Debugging stories - детективы про поиск и нахождение разных хитрожопых ошибок, где не всегда очевидно что убийца - садовник :)
How to Build Dynamic Queries With Expression Trees in C# - в т.ч. для того, чтобы в LINQ выражениях использовать динамически какие-то поля. #dotnet
👍1
AWS CDK for .NET Developers - использование враппера AWSS CDK на C# для настройки/инициализации IaaS #dotnet
Чятики принесли, что есть бесплатная альтернатива copilot, который в т.ч. работает без ограничений по странам
Windsurf
Windsurf - The most powerful AI Code Editor
Windsurf is the world's most advanced AI coding assistant for developers and enterprises. Windsurf Editor — the first AI-native IDE that keeps developers in flow.
👍3
Большой раздел (скорее даже книга, которую там же можно скачать в PDF) Architecting Cloud Native .NET Applications for Azure
#azure #dotnet
#azure #dotnet
Docs
Architecting Cloud Native .NET Applications for Azure - .NET
A guide for building cloud-native applications leveraging containers, microservices, and serverless features of Azure.
Ещё один странный тест с SSE/AVX - поиск элемента в массиве, где каждый элемент может встречаться дважды, кроме одного элемента (иногда встречается задача на собесах). Используется операция XOR, которая позволяет за O(n) найти этот элемент.
Как видно - даже простой цикл можно крутить быстрее 😊 gist #simd #sse #dotnet
Как видно - даже простой цикл можно крутить быстрее 😊 gist #simd #sse #dotnet
Как я и предполагал - fine tuned model для ChatGPT прекрасный инструмент для компаний.
У каждой крупной компании как правило есть свои knowledge base, документы, документация для софта и т.д. Несложным образом, можно запилить модель, которая будет каким-то образом смержена для API-токена с основной моделью ChatGPT и будет отвечать на completion через API уже с учётом тех документов, которые скормили в fine tuned модель.
На скриншоте - ответ ChatGPT как раз с fine tuned модель, которая создана из нескольких PDF-документов с публичного сайта с предыдущей работы (отвечает на английском - потому что скормленные доки были на нём) - взято оттуда, чтобы я мог верифицировать ответ.
Важным является качество первоначальных данных, на которых строица fine tuned модель. Если это print ready PDF - будет херня. Идеально - plain text полученный без всякой лишней хрени (тегов, картинок, ...).
Пока неясно как быть с мультиязычностью, когда скармливается один и тот же документ на разных языках - как будут обрабатываться такие кейсы. #chatgpt
У каждой крупной компании как правило есть свои knowledge base, документы, документация для софта и т.д. Несложным образом, можно запилить модель, которая будет каким-то образом смержена для API-токена с основной моделью ChatGPT и будет отвечать на completion через API уже с учётом тех документов, которые скормили в fine tuned модель.
На скриншоте - ответ ChatGPT как раз с fine tuned модель, которая создана из нескольких PDF-документов с публичного сайта с предыдущей работы (отвечает на английском - потому что скормленные доки были на нём) - взято оттуда, чтобы я мог верифицировать ответ.
Важным является качество первоначальных данных, на которых строица fine tuned модель. Если это print ready PDF - будет херня. Идеально - plain text полученный без всякой лишней хрени (тегов, картинок, ...).
Пока неясно как быть с мультиязычностью, когда скармливается один и тот же документ на разных языках - как будут обрабатываться такие кейсы. #chatgpt
👍1
Ещё один всрато-тест - считаем StdDev.
Разница между обычным LINQ и Vector256 - в разы на маленькой коллекции и два порядка на большой (gist, .net 7)
Для тех кто не понял что делается на примере Average:
* загружается по 4 double в вектор (256 бит / 8 байт (64 бита) один double = 4 штуки влезает в 1 вектор)
* над ними одновременно делается операция Avx.Add - добавляем к вектору-аккумулятору такой же вектор с 4 следующими double (Vector256.Load возвращает вектор со следующими 4 double по адресу pointer)
* после прохода по всем элементами - складываем 4 штуки double из vsum - получаем полную сумму всех элементов
* делим на src.Count - получаем среднее из чего формируем новый вектор vectorMean - он получает 4 идентичных значения в своих элементах.
Аналогичным образом по 4 элемента - делается операция
Если бы операция была над float - можно было бы в 256 бит уложить сразу по 8 float'ов: 256 бит / 4 байта (32 бита) float
#csharp #avx
Разница между обычным LINQ и Vector256 - в разы на маленькой коллекции и два порядка на большой (gist, .net 7)
Для тех кто не понял что делается на примере Average:
* загружается по 4 double в вектор (256 бит / 8 байт (64 бита) один double = 4 штуки влезает в 1 вектор)
* над ними одновременно делается операция Avx.Add - добавляем к вектору-аккумулятору такой же вектор с 4 следующими double (Vector256.Load возвращает вектор со следующими 4 double по адресу pointer)
* после прохода по всем элементами - складываем 4 штуки double из vsum - получаем полную сумму всех элементов
* делим на src.Count - получаем среднее из чего формируем новый вектор vectorMean - он получает 4 идентичных значения в своих элементах.
Аналогичным образом по 4 элемента - делается операция
Sum( (p-mean) * (p-mean) )
результат которой потом делится на src.Count и получаем Average.Если бы операция была над float - можно было бы в 256 бит уложить сразу по 8 float'ов: 256 бит / 4 байта (32 бита) float
#csharp #avx
👍2