oleg_log – Telegram
oleg_log
1.78K subscribers
1.85K photos
129 videos
9 files
2.75K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks

about: https://news.1rj.ru/str/oleg_log/3200
Download Telegram
Я вообще в map[uint32]uint16 верю :D
Forwarded from Bortlog
Вчера с Олегом разбирали GhostDB https://www.youtube.com/watch?v=RsZREiCRcrU

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

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

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

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


сурс https://news.1rj.ru/str/count0_digest/4705

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

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

Писать такое можно, читать и жить тоже, но как говорится: я (пока) не Гослинг, да и ты не RTX 3090.
Заговорился с товарищем о рекомендованных длинах ключей и хешей. Решили, что брать самое длинное из возможных - не всегда верно. Гугл привёл сюда: https://www.keylength.com/en/compare/

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

Но не факт, что у NSA уже и на это есть решение)))))))))
Forwarded from Bortlog
При локальном дебаге проблемного кода часть надо сдампить в 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
Forwarded from Good reviewer - Bad reviewer (Oleg Kovalov)
Вот и мы, будем (до)делать чекеры для go-critic https://www.youtube.com/watch?v=FKPBzQir1vA
Forwarded from Experimental chill
Что-то при переезде в Лондон у меня добавилось намного больше проблем, чем убавилось, и оно колеблется от полной апатии до "это то, чем я буду заниматься всю жизнь".

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

Speed run Super Mario Bros.

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

Разбор диссасемблера и все остальные странности тут
Не по айти, но оч доставляет этот автор. Правда классные работы. Грех не пошарить.

https://www.patreon.com/gudim (а еще можно попатреонить)
Forwarded from Gudim
да, НО
Заметил на lobste.rs интересный тред, что поставить на свеженький макбук (кстати моделька не дурная 2020 MacBook Pro 13” (i7/32/1TB), аж слюни потекли). Сам давно хочу сделать себе уютный скрипт, который накатывает полноценную дэвмашину, dotfiles но с большим уровнем автоматизации считайте.

https://lobste.rs/s/uzdehw/what_should_i_do_after_getting_my_first_own
Forwarded from Bortlog
Пришла еще одна идея в голову и из нее получилась такая библиотечка https://github.com/storozhukBM/pcache

Это горутин локал кэш. У него много недостатков:
- странная эвикшен полиси. При достижении максимального размера выбрасывается рандомный элемент. Иногда при сборке мусора эвиктятся все данные.
- поскольку это локальный кэш, то в худшем случае каждая горутина будет держать полную копию данных поэтому очень большим этот кэш не сделаешь.

Но есть и пара преимуществ:
- занимает 80 строк вместе с документацией
- реализация получилась настолько быстрой что ее можно ставить как кэш перед традиционными кэшами 🙃
Я смотрю тут в Go закрыли неплохо ишью, с добавлением 24байтных элементов (аллокационных групп?). Конечно это с C не сравнится, но часть объектов начнет занимать меньше. Отрадно.

https://github.com/golang/go/issues/8885