📓 Записки программера
1.02K subscribers
304 photos
1 video
6 files
599 links
Канал с регулярными постами о разных интересных материалах (статьи, видео, фреймворки и полезные инструменты).

https://dotnet.social/@denisio
Download Telegram
Интересный workshop для Dapr. Достаточно подробно описан кейс, нарисованы схемы и есть 7 заданий по очереди для практики разработки микросервисной архитектуры.

Микросервисов всего 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.
🔥3
Ещё один странный бенчмарк на количество памяти на таски (10К - 100К - 1M) #perf
👍1
Пожалуй лучшая статья с обилием интерактивных анимаций - как работает навигация (GPS, Глонасс, ....) #gps #doc
Интересный 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
Ещё один странный тест с SSE/AVX - поиск элемента в массиве, где каждый элемент может встречаться дважды, кроме одного элемента (иногда встречается задача на собесах). Используется операция XOR, которая позволяет за O(n) найти этот элемент.

Как видно - даже простой цикл можно крутить быстрее 😊 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
👍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 элемента - делается операция Sum( (p-mean) * (p-mean) )
результат которой потом делится на src.Count и получаем Average.

Если бы операция была над float - можно было бы в 256 бит уложить сразу по 8 float'ов: 256 бит / 4 байта (32 бита) float

#csharp #avx
👍2