Size: a a a

2020 September 08
oleg_log
Небольшое ревью успехов 1 человека по ускорению компилятора Rust. Хардкора не найдете, скорее просто история и некоторые моменты.

https://blog.mozilla.org/nnethercote/2020/09/08/how-to-speed-up-the-rust-compiler-one-last-time/

+ график между версиями, но YMMV https://perf.rust-lang.org/dashboard.html
источник
2020 September 09
oleg_log
Дожил до сегодня и не знал (так сильно забыл с универа?), что в C++ есть нетрадиционные операторы:

&&  and
&=  and_eq
&  bitand
|  bitor
~  compl
!  not
!=  not_eq
etc...


https://en.cppreference.com/w/cpp/language/operator_alternative

Как уважаемый @experimentalchill объяснил и пруфнул:
For example (and this is stretching my memory), the baseline EBCDIC character set on the IBM mainframes did not have the square bracket characters [ and ]. http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf — страница 197

Тут слова самого БАТИ https://www.youtube.com/watch?v=JYG5LFHkUuE&t=4582

В итоге Бьярне сам это добавил первым, в С95 при интернациолизации стандарта пришла IBM и сказала, что они это используют. Добавили из-за обратной совместимости.
(с)

Вот в итоге и вылилось это в Python внутри C++. Не зря Бьярне говорил: в С++ скрывается лаконичный язык, но скрывается.

А еще вспоминаются слова Линуса: Your hardware limitations shouldn't be a pain for the rest of us. (https://t.me/oleg_log/3218 и смотрите ориг пост, там дальше еще 2 упоминания моих мыслей). Хотя про pain тут спорно, но смысла в этом мало, а не все пишут LLVM  по вечерам.
источник
oleg_log
Как можно догадаться - распространение новых патчей для игр и бекапы. Ничего интересного я вам не расскажу больше.

Как ФБ в далёком 2010 юзал для апдейтов https://torrentfreak.com/facebook-uses-bittorrent-and-they-love-it-100625/

Кстати, некоторые билд фермы подобное делают: кто-то собрал, а остальные подтянули.
источник
oleg_log
1.15.2 и 1.14.9 вышел, мелочь, но там фиксы в рантайме. Значит не мелочь.

https://twitter.com/golang/status/1303798415529254918?s=21
источник
2020 September 10
oleg_log
Как всегда посты Cloudflare о сети. В этот раз их LB Unimog (L4 как можно догадаться).

https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/
источник
oleg_log
Эт, я как-то раньше собирать начал, думаю повод открыть. Короч решил сделать Awesome Load Balancing. Да, сборник проектов, докладов и прочех веселостей по теме. Feel free to dobavit.

https://github.com/cristaloleg/awesome-load-balancing
источник
oleg_log
Оказывается есть проект на Go: Continuous profiling in for pprof compatible profiles.

Проекту почти 2 года, я 1й(?) раз о нём услышал (причем случайно от fgprof https://t.me/oleg_log/3326)

Ну и дёготь: Note this repository is very much a proof of concept, it only works on a very basic level. Everything is prone to change, nothing is supported.

https://github.com/conprof/conprof

Стоит так же вспомнить profefe https://github.com/profefe/profefe Который больше похож на полноценное решение, хотя я так и не обкатал на практике.
источник
oleg_log
Не поверите кто live. Смотрим на GhostDB (не зря голосовалку выше делали)

https://www.youtube.com/watch?v=RsZREiCRcrU

Ну и репа https://github.com/jakekgrog/GhostDB
источник
2020 September 11
oleg_log
Хорошая статья всплыла по ходу обсуждения. Жаль раньше не встречал. Как для начала копания по пейперам вполне ок.

https://en.wikipedia.org/wiki/Cache_replacement_policies
источник
oleg_log
Почему никто еще не постил генератор ямла для кубов????

Даже темная тема есть.

https://k8syaml.com/
источник
oleg_log
В Go 1.15 должны завести хороший фикс на документацию, а именно выкидывание //go:* из документации.

Ведь это не совсем документация, а скорее прагма и/или аннотация (где-то после этих слов температура в комнате увеличилась)

https://github.com/golang/go/issues/37974
источник
oleg_log
Я вообще в map[uint32]uint16 верю :D
источник
oleg_log
Вчера с Олегом разбирали GhostDB https://www.youtube.com/watch?v=RsZREiCRcrU

И там был момент где трекается кол-во соединений с одного и того-же IP
для этого используется map[string]int64.

Так вот я забыл сказать что IPv4 можно хранить как uint32 или кастомный стракт 4х байтовый.
Ну и кол-во соединений одновременных измерять 64 битным интом это как-то расточительно, ни одна машина столько соединений физически не потянет, можно спокойто uint32 для этого использовать.

В общем 'map[uint32]uint32' будет намного компактнее и производительнее.
источник
2020 September 12
oleg_log
Ох как мне этот if глаз натёр своим существованием:

func (b *Bus) Add(p Passenger) {
 if b.passengers == nil {
   b.passengers = make(map[string]Passenger)
 }
 b.passengers[p.SSN] = p
}


сурс https://t.me/count0_digest/4705

Никогда не понимал, зачем все эти поздние инициализации. Да, конечно, это пример, как же еще, но вопрос, что в голове у автора в продакшен коде - остается загадкой.

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

Писать такое можно, читать и жить тоже, но как говорится: я (пока) не Гослинг, да и ты не RTX 3090.
источник
oleg_log
Случайно наткнулся на такую конвенцию по неймингу в логах. Список не полный (скорее всего бизнес-сущности сами назовете), но как начало - норм.

https://docs.datadoghq.com/logs/processing/attributes_naming_convention/
источник
2020 September 13
oleg_log
Заговорился с товарищем о рекомендованных длинах ключей и хешей. Решили, что брать самое длинное из возможных - не всегда верно. Гугл привёл сюда: https://www.keylength.com/en/compare/

Сборник рекомендаций от разных организаций (за разное время, к слову). Если лень клацать - ищите кнопку Compare all methods и идите обновлять ключи. На скрине собственно финальная таблица сравнения.

Но не факт, что у NSA уже и на это есть решение)))))))))
источник
oleg_log
При локальном дебаге проблемного кода часть надо сдампить в stdout состояние нескольких переменных.
И для этого мы обично пишем код типа:
fmt.Printf("person: %v, balance: %v\n", person, balance)


И вроде все норм, но каждый раз когда быстренько набираешь такой код и у тебя больше 2х таких переменных начитает просто вымораживать ведь ты просто повторяешь одно и тоже дважды.
Еще при дебаге и правках часто переменные уходят из скоупа или надо добавить еще что-то и этот притф не очень удобно поправлять.

Как было бы круто если бы был какой-то макрос чтобы можно было
debug.Print(person, balance)


a язык сам бы разобрался как какая переменная называется и выдал правильный лог.

Я тут написал маленькую библиотечку для Go в которой лишь одна такая функция.
Решение не идеальное, но для быстрого локального дебага подойдет.
Вы можете использовать эту библиотеку через Go modules или просто скопируйте файл dump.go в свой проект и добавте его в .gitignore чтобы не засорять зависимости.

https://github.com/storozhukBM/dump
источник
oleg_log
Вот и мы, будем (до)делать чекеры для go-critic https://www.youtube.com/watch?v=FKPBzQir1vA
источник
2020 September 14
oleg_log
Что-то при переезде в Лондон у меня добавилось намного больше проблем, чем убавилось, и оно колеблется от полной апатии до "это то, чем я буду заниматься всю жизнь".

Но не смотря на весь хаос и ужас с FB, Telegram и пары трейдинговых компаний, я нашёл полноценный алмаз:

Speed run Super Mario Bros.

Это очень красиво, технично, кажется невозможным, но понимать, что такое компьютерный стек, адреса, проезды по памяти надо. Нет, серьёзно, просто посмотрите, для меня это стало вдохновением, которого я не получал очень долго!

Разбор диссасемблера и все остальные странности тут
источник
oleg_log
Линтеры как гоняете? (мне важно смотреть что там у людей время от времени)
Анонимный опрос
50%
Да, спец таск на каждом билде и/или коммите
8%
Да, только перед мёржем в мастер (или близко к этому)
1%
Да, но опционально включаем
7%
Да, но локально на гиткоммит хук
9%
Да, но локально, по желанию
8%
Не используем
4%
Используем, но редко и случайно
1%
Использовали, то отказались (важно сказать в лс почему)
1%
Другое
12%
Результаты / не применимо
Проголосовало: 665
источник