inv2004 Dev Blog
166 subscribers
34 photos
3 videos
46 links
Он всегда был не прочь подкрепиться. Кроме того, он был поэт
Download Telegram
Радио-Т: Rust против Go

Хотя очень редко слушаю Радио-Т, но, мимо такого пройти не мог. В пятёрочке очень удивлялись почему я стою пол-часа с рукой у лица возле полки с дошираком, но, для этого был повод.

В этой теме участвуют трое ведущих, и, если, один из них изображает непонимание и скепсис, то кринж от прослушивания вызывали двое других, изображающих из себя типичных растоманов первой волны - не писав на расте чего-то больше hello-world, что очень видно по тому как они путаются в базовых вещах, они, даже до некой обиды на первого ведущего, доказывают то как всё правильно и хорошо при написании веба на расте. При том, перепрыгивая и путаясь в Clone, Box, dyn, макросах и подобном. Дальше - лучше, начинают спец-олимпиаду - смотреть бенчмарки. И происходит такое: смотрите, rust обгоняет go-echo на 10%, эти 10% - это же миллионы и миллиарды долларов - говорит один из них => раст экономит миллиарды. На что другой (скептикам проще - они просто смотрят цифры) говорит, вот есть же go-fiber, и он, о боже, обгоняет rust на 10%. Но, если это стоит миллионы, может быть стоило использовать этот fiber, который всё равно быстрее?

В общем-то это больше смешно, но есть пару выводов, которые я сделал для себя:
1) Чем меньше я пишу на расте, тем меньше у меня осталось к нему раздражения, растоманы новой волны куда лучше понимают его проблемы и проблему его позиционирования и являются куда меньше фанатиками RIIR (rewrite it in rust)
2) Перестал слушать Радио-Т потому как их профессиональной областью является обзор макбуков, а если говорить про dev-ориентированное, то лучше заменить, или совместить, с чем-то другим

https://t.me/radio_t_podcast/218

#rust #golang #podcast
Спецолимпиада. 1/3

Было много дел, но тут, как гром среди ясного неба, на форуме прозвучало "вот тут бенчат разные языки https://github.com/jinyus/related_post_gen". В глубине души, понимая весь бред таких бенчей, я всё же не смог устоять чтобы не зайти по ссылке и не запустить разок ... потом второй ...

Стоит оговориться о бенче, он довольно тупой - с ходу стало понятно, что близко к k-nucleotide, который я когда-то писал на Rust: https://t.me/inv2004_dev_blog/24 - хеш на хеше и тд. В итоге простая замена на xxhash дала заметный, но недостаточный, прирост.

Кстати, стоит упомянуть любимый (только по работе, конечно) Go, который обогнал всех с большим запасом + один из первых показал мультитредовую версию, где тоже затащил себя на первое местно.

Поначалу, была мысль забить, но, случайно заметил как Rust Evangelism Strike Force очень активно шлют PR за PR'ом. Nim при этом, кажется, даже в десятку не попадал, хотя это уже была не черновая версия. "Что за дела", подумал я, и достал valgrind, который показал какой-то eqcopy, занимающийся какими-то аллокациами.

valgrind конечно, крут, ещё бы - по сути единственный несемплирующий профилировщик, но стек в нём видно куда хуже чем в perf. Покопавшись в сгенерированном коде на C (за что Nim и нравится, хотя многие считают недостатком), стало понятно что Nim копирует целый вектор при чтении, что, конечно, полный провал. Удивило почему [] из хеша не умеет одалживать данные по указателю. В прочем, удивление длилось не долго - никаких больших проблем с этим нет - просто забыли проставить всего одно слово - lent. Поставил - полетело. Есть всё же польза от бенчей

...

#bench #rust #nim #go
Спецолимпиада. 2/3

Показалось что дальше копать в этой функции особо некуда и, я перешёл к следующей - просто найти top5 максимальных значений. Вроде, куда проще, но, по факту, это очень значительно влияло на итоговый результат при практически одинаковом коде функции. Тут уже пришлось подключать штуку потяжелее - Godbolt, я не настолько упоролся, чтобы начинать там разбирать ассемблер, но, было видно, что в одном случае эта функция занимает ~100 строк на asm, а в другом ~200+. Это, конечно, не правило, но, часто, чем короче тем лучше.

Дальше хуже -flto, а потом и пробы gcc или clang. Казалось что clang вырвался вперёд, потом, неожиданно, оказалось что можно сделать PGO (Profile-Guided Optimization.

Тут, я переключился на ноут, где установлен Arch, со всем свежим. Тут оказалось, что версия компилятора C имеет критическое значение для бенчей. На свежем, оказалось, всё ровно наоборот - clang очень плох, но clang с PGO - лучше всех, при этом свежий gcc (без всяких PGO) всего где-то на ~процент хуже, чем clang с PGO. Дальше хуже - оказалось что PGO (он тоже семплирует что ли?) только с 50% вероятностью что-то там цепляет важное. В итоге, без каких-то вообще изменений получались сборки, которые работали попеременно то быстро, то медленно. Я не нашёл ничего лучше, чем собирать PGO статистику не один раз, а 10, но и это не гарантировало 100% попадания. Мне прислали хорошее видео про это, но довольно тяжело поверить что всё настолько рандомно собирается https://youtu.be/r-TLSBdHe1A

...

#bench #rust #nim
Forwarded from Arkeii
Спецолимпиада. 3/3

Итого - на ноуте AMD 5650U - Nim обошёл Rust, это, кстати, в -d:release. Ведь есть еще -d:danger который не такой уж и опасный на самом деле - для бенчей точно ок. На десктопе i5-12600 - Rust впереди на какую-то долю процента. Почему так - пока сказать не могу, может из-за overflowChecks.

Но, написать я хотел не об этом.

А о том, что, пожалуй, из всего большого IT, эта область почему-то до сих пор вызывает интерес у меня. И, хотя, у меня нет желания лезть в embedded, и моё знание Asm довольно слабо, Но, и профилирование Clickhouse, и billion-taxi-rides, и оптимизация запросов, и много чего ещё включая любые рабочие задачи когда надо что-то ускорить - всегда вызывали живой интерес. Думаю, вот может, раз всё равно это нравится, то углубиться в эту тему. Но, опять же, не очень понятно в какую именно и есть ли вообще такая профессия с IT.

Буду благодарен любым рекомендациям, что почитать про это.

#bench #rust #nim
Даже немного растерялся. Это нормально?

Кто-то может объяснить что происходит?

Что вместо гугла?

#google #нативная·интеграция
YAML-разработчик - это профессия такая

Решил установить локально k3d кластер, чтобы освежить воспоминания, заодно нашёл повод поныть в этом посте. Не то что я решил двигаться в DevOps/AWS по причине https://t.me/inv2004_dev_blog/92, но, последнее, что я целиком сам устанавливал в проде из оркестраторов был docker swarm.

В целом, если не очень сильно вдаваться во внутренности, то в k8s всё устроено довольно просто, и даже логично. В какой-то момент ты говоришь ага, где-то должен быть глобальный репозиторий k8s конфигов, но тут открывается второе дно, а именно Helm, в котором заявляется - всё что делает k8s, кроме базовых функций, он делает плохо, мы поможем вам с этим. Естественно выбирается самый сложный путь из возможных. Одно из основных назначений Helm это шаблонизация k8s конфигов. Используется для этого go template, который сразу выкидывает на тебя мешанину embedded-тегов, что невольно начинаешь вспоминать времена когда программировал на JSP (или PHP если кому ближе). Причём, даже этого недостаточно, Helm может переиспользовать свои же компоненты (скорее мета-компоненты), в итоге, чтобы понять как там что генерится тебе надо нырять с головой не просто в шаблон, а в чей-то компонент и разбираться как он генерирует тебе по сути простой конфиг yaml который ждёт k8s. Helm v2 так вообще свой сервис на каждую ноду ставил, но от этого отказались

Я бы не написал это, если бы это всё не объяснило мне почему в больших компаниях этим занимаются целые отделы так называемых yaml-девелоперов, целая новая профессия по сути. Вместо того чтобы немного подправить то, что и так не слишком плохо выглядит, а именно k8s конфиги, изобретается новая абстракция сверху, в эту абстракцию добавляется ещё одна абстракция компонентов, в итоге не удивительно, что есть люди, которые пять дней в неделю поддерживают это.

В качестве дежавю вспоминается высший пилотаж старых времён - генерация sendmail конфига через m4. На этом ломались лучшие люди linux-сообщества, и, наверное, это одна из причин почему postfix заменил sendmail. Не помню точно, но несколько строчек (из сотен) выглядело вроде такого:
define(`SMART_HOST', `relay:uucp-gateway')
LOCAL_NET_CONFIG
R $* < @ $+ .$m. > $* $#smtp $@ $2.$m $: $1 < @ $2.$m > $3


#devops #k8s #helm #🥭
собеседование:

go-джун - как устроен словарь?
python-синьёр - как устроен словарь?
... с другой стороны на upwork 8 предложений по go и аж 266 по питону. А с третьей стороны, мне тяжело понять кто сейчас пишет на python что-то кроме аналитики
Опять заболело от презентаций в powerpoint

На работе я редко делаю показываю что-то сильно отличающиеся от текста/кода/табличек в ascii (+картинка иногда). НО, когда надо что-то сложнее, - диаграмма, появляющиеся части слайда и тд - то хочешь, не хочешь - приходится переходить в powerpoint, что не радует и часто вызывает сложности - в нем не удобно именно с текстом/кодом/таблицами работать

Смотря выступления и интернете создаётся впечатление, что у всех это просто, и только у меня какое-то непонимание. Итого, в очередной раз, решил сдвинуть ситуацию и попробовать то, что есть.
Reveal.js сложнее и html, Marp проще, но, попытка сделать, как мне кажется, простые вещи не очень удалась, может быть оно, теоретически и возможно, но требует каких-то плагинов и приседаний.

Наверное, хорошо бы показать пример:
- какая-то диаграмма, листая ты просто подцвечиваешь стрелочки или какие-то другие компоненты
- слайд наследует прошлый слайд. ?fragments? Сейчас я эмулирую просто копируя всё целиком, но это сложно редактировать
- две таблицы, листая добавляются данные то в одну таблицу, то в другую (ну и стрелочки подсветить что откуда)

Вопрос: может быть есть кто-то опытный в этом вопросе, но из тек кто предпочитает code-like презентации?
Sharp Zaurus SL-C1000

Иногда кажется что linux уже прошёл свой пик полезности в качестве десктопа, и вот почему. У меня была такая штука как на картинке, её можно было легко носить с собой в кармане. К тому же, так как штука японская и шарп - говорилось что там какой-то хороший звук, так что она ещё в качествее mp3-плеера использовалась. Интересно то, что для неё удалось собрать и установить нормальный debian под armel v0.2. И ещё vim и hugs (интерпретатор haskell). Запустить-то, наверное, не так интересно, а интересно то, что это была довольно удобная конструкция. Сидя за столом, я без особых проблем, мог двумя руками на ней что-то делать. Где-то в автобусе или на весу - в целом тоже нормально. Достать и убрать её было так же просто как достать телефон. И, я думаю, что тогда именно благодаря линуксу, который давал то самое сочетание, которое позволяло нормально работать как на настоящем компьютере. Настолько, что большую свою часть HN/SPL с https://nponeccop.livejournal.com я сделал именно на нём. Можно ли так сейчас - не знаю и не уверен. А сейчас, кажется, это всё куда-то разбежалось - linux в попытках догнать другие системы потерял ключевые из свои десктоп-удобств

#linux
This media is not supported in your browser
VIEW IN TELEGRAM
- Джеймс, у нас только три минуты перепрограммировать подлодки
...
- нет, Джеймс, у нас CI только два часа занимает, а целиком два месяца потребуется

#компьютерный_юмор
У меня была своя раскладка ещё до того как об этом написал Прокопов (tonsky)

По историческим причинам, мне в руки попадали в основном ноутбуки без кириллицы на клавиатуре. Зубрить раскладку в слепую мне было лень, что-то там гравировать - ещё более лень и не нравилось как выглядит. Так я узнал о фонетической раскладке, но она мне сразу не понравилась - не все буквы попадали в звучание. Фонетическая значит фонетическая + у меня были устройства с не особо страндартный клавиатурами типа sharp zaurus где не было много лишних кнопок и надо было уместиться на том что есть. Так родился следующий монстр, от которого я уже не могу отвыкнуть. Для меня в тот момент, почему-то, было очевидно, что надо делать на слух privet = привет. конечно, на слух оно не всё попало, но в целом попало. э всё же откололась. Отдельный вопрос был куда запихнуть буквы типа щ, ё, й, ю. Они не самые частые, и поставил их на шифт, что оказалось вполне удобным. И, совсем редко, но я всё же использую их заглавными, но тут ничего лучше в голову не пришло чем сдвинуть их рядом на цифры. цифры в ru я набираю достаточно редко.

Кстати, сделал я её на винде 2000 и она до сих пор легко ставится на win11 из установщика

Если у кого с раскладками ещё хуже - делитесь как вы к такому пришли

#layout
Ишь чего захотел - paint запустить на windows 10. MS провернуло какой-то апдейт (в новогоднюю ночь?) и paint улетел из системы. И больше не ставится
ccal - календарь, а не калории

Мир, в очередной раз, ускорился, а я, как всегда, замедлился. Наверное, это возрастное, но, пока фронтендеры ищут идеальный календарь, где надо помечать каждые пол-часа твоего дня, я, с удивлением, обнаружил, что не могу решить проблему масштабнее - посмотреть календарь за год. Большинство того, что нашлось в интернете даже не имеют такой опции. В целом простой консольный cal -y был бы ок, если бы умел 1) праздники 2) подсветить ещё пару дат.

Второй абзац будет о том, что мне повезло в том, что у меня есть инструмент, который позволяет быстро писать то, что на выходе не выглядит особо стыдно и чем можно поделиться (в виде статического бинарника конечно). Тут задача другая - главное вовремя остановиться.

Итого - появился https://github.com/inv2004/ccal
- по ip-геолокации вытягивает праздники для вашей местности
- умеет подкрашивать даты из простого .txt файла
- можно задать стили для своих дней. Если, конечно хочется: ярче, тусклее, подчёркнутое и тд
- умеет перемешивать цвета: красный день из праздников и зелёный из вашего .txt превратится в жёлтый
всё новое лучше:
> git clone https://github.com/...
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
> git config --global http.version HTTP/1.1
> git clone ...
OK


#git
Жизнь сложилась так, что месяца полтора назад мне понадобилось написать api на spring boot, и, хотя старая часть резюме состоит целиком из EJB+J2EE. Но, после этого подхода, любое желание хоть как-то возобновлять Яву как топором отрубило.

Самое запомнившееся:

- полный DI, видимо через какой-то class loader. Т.е. вы можете написать вообще что угодно, даже невалидный синтаксис в каком-то классе. И это вообще никак не помешает всему проекту собраться без ошибок и запуститься. И только проход по нужной ветке кода выдаст пятистраничный (ну а какой ещё?) exception.

- NPE всё ещё актуален

- Интерфейсы. Само по себе в этом нет ничего плохого, но, чтобы протащить что-то в Map<List<T>>, а потом обработать, требуют неоднократные приседания. Из подобного особенно запомнился специальный класс для облегчения этой проблемы - org.springframework.util.LinkedMultiValueMap<T>. Но, чтобы вытащить это в Map<List<T>> нужны пол-страницы кода. и это только спринг-бутовая тулза, которую, по логике вещей, нельзя выносить из внутренней логики спринга.

- Рассказывать о том что Ява решает проблемы свой выразительности через макросы аннотации как это делает раст даже не особо стоит

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

#java
Dwarf Fortress

Оказывается релизнулся в стиме больше года назад.

Естественно сразу GUI, так как понятно, что текстовая версия слишком хардкорна для увеличения аудитории

https://store.steampowered.com/app/975370/Dwarf_Fortress/
Рейтинг работодателей 2024

- Контора на "A" (en, но с ru* корнями) - Общение с HR - 0/5. Тех - 4/5.

HR просто проф-неприго(ден/дна). Не смотря на попытки тех-персонала это сгладить, общение с HR, оставило максимально негативное послевкусие от компании. Настолько, что сравнимо с тем когда я ездил собеседовать куда-то в agava лет 20 назад и что до сих пор помню, но, про это можно отдельно потом написать

- Контора на "R" - Общение с HR 4/5. Тех - 2/5

Просто пулей прошли все этапы, и, вроде много людей. Но, Первое - начальство легко выдёргивало своих GMT сотрудников пособеседовать меня аж в 10 вечера (что мне ок, но им - не очень), что как бы говорит, что субординация тут американская. Если абстрагироваться что контора не маленькая, но ценятся те что работают больше, а не лучше, на чём и держатся. "дух" низкотехнического стартапа очень сильный

- Контора на "S" (en)

Верните деньги, которые вы мне должны, и почему-то не торопитесь выплачивать, видимо, ожидая когда всё схлопнется, и выплачивать уже будет некому

- Контора на "Я" - HR - 4/5. Тех - 3/5

В данном случае я несколько раз озвучил, что хотя я ок к C++, но не имею большого желания его использовать на работе. В итоге, после пары общений (не на C++), мне сказали, что типа я всё равно должен буду писать на плюсах :)
Второй момент - все тех-работники производили впечатление взмыленных лошадей. Тут же это подтвердили поделив зп на performance-review несметное количество раз в год, за каждый из которых, я так понял, надо биться как в последний раз, чтобы получить обещанное. Закончилось всё немного по-другому: стоит сказать, что во всех случаях из этого поста, я редко задерживался на HR, и, видимо, из-за этого упустили этот момент. В конце второго этапа, кто-то неожиданно произнёс стоп-слово "офис", которого я вообще не ожидал от этой компании, после чего нажал на тормоз

- Контора на "О" (ру). HR - 4/5. Тех - 4/5

Не смотря на закрытую уже позицию, HR не сильно сопротивлялись и довольно быстро нашли внутри то что вроде было бы интересно, даже, не смотря на расхождение в вилках, показали кому-то резюме и мы, довольно быстро, переместились дальше. А вот что привлекло - тех-персонал (это было после прошлого описание), произвёл довольно расслабленное впечатление, что, я думаю, сильно повлияло. Бал снял за второй тех-этап, так как с первых минут было озвучено что времени максимально мало, что подталкивало изображать какие-то пируэты на виртуальной доске, лишь бы быстрее. А минуты через 2 как закончил, увидел что тут надо ещё бы очередь впихнуть, но не стал прерывать говорящего, а тут и сам говорящий это озвучил. В общем все куда-то торопились. Не смутило, что вопрос отпусков меня волновал немного больше работы

- Контора на "Я" - HR - 3/5. Тех - 4/5

Такое впечатление что у них какой-то глобальный race condition, меня независимо и одновременно звали на две разные вакансии. Никого не смутило резюме, а я купился на слова "оптимизация баз данных", На собеседовании оказалось что им нужен помощник продажника. Ладно, бывают промахи. Последний ответ от HR звучал как типа я не соответствую их ожиданиям - в целом ерунда, но прозвучало грубовато, могли бы писать аккуратнее
Ничего особо не делал, а тут upwork неожиданно прислал

#upwork