Forwarded from Bortlog
Вчера с Олегом разбирали GhostDB https://www.youtube.com/watch?v=RsZREiCRcrU
И там был момент где трекается кол-во соединений с одного и того-же IP
для этого используется
Так вот я забыл сказать что IPv4 можно хранить как uint32 или кастомный стракт 4х байтовый.
Ну и кол-во соединений одновременных измерять 64 битным интом это как-то расточительно, ни одна машина столько соединений физически не потянет, можно спокойто uint32 для этого использовать.
В общем 'map[uint32]uint32' будет намного компактнее и производительнее.
И там был момент где трекается кол-во соединений с одного и того-же IP
для этого используется
map[string]int64.Так вот я забыл сказать что IPv4 можно хранить как uint32 или кастомный стракт 4х байтовый.
Ну и кол-во соединений одновременных измерять 64 битным интом это как-то расточительно, ни одна машина столько соединений физически не потянет, можно спокойто uint32 для этого использовать.
В общем 'map[uint32]uint32' будет намного компактнее и производительнее.
YouTube
go / GhostDB
Ох как мне этот
сурс https://news.1rj.ru/str/count0_digest/4705
Никогда не понимал, зачем все эти поздние инициализации. Да, конечно, это пример, как же еще, но вопрос, что в голове у автора в продакшен коде - остается загадкой.
Ты знаешь, что у тебя есть некая вещь и прикидываешь её поведение. В данном случае это не (супер)оптимизация (кэп), но так же и не (супер)важное телодвижение. Тогда зачем этап инициализации оттягивать к моменту использования? Наверное если бы это было не 1 и не 2 поля, а какой-то компонент (не включили флаг в рантайм - не начали телодвижение), то было бы чуть приятнее.
Писать такое можно, читать и жить тоже, но как говорится: я (пока) не Гослинг, да и ты не RTX 3090.
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.
Telegram
Пятничный деплой
Знакомимся с паттернами проектирования на примере создания реального приложения на Go: https://proglib.io/w/6ece07a3
oleg_log
Вопрос: а кто знает какой-то формат-стандарт для логов? Что там WARNING: <timestamp> <url> <params> <emoji bloat> По идее и формат жсона тоже подойдет, но текстовый не менее интересен. Я почему-то не помню есть ли, скиньте плс @olegkovalov
Случайно наткнулся на такую конвенцию по неймингу в логах. Список не полный (скорее всего бизнес-сущности сами назовете), но как начало - норм.
https://docs.datadoghq.com/logs/processing/attributes_naming_convention/
https://docs.datadoghq.com/logs/processing/attributes_naming_convention/
Заговорился с товарищем о рекомендованных длинах ключей и хешей. Решили, что брать самое длинное из возможных - не всегда верно. Гугл привёл сюда: https://www.keylength.com/en/compare/
Сборник рекомендаций от разных организаций (за разное время, к слову). Если лень клацать - ищите кнопку Compare all methods и идите обновлять ключи. На скрине собственно финальная таблица сравнения.
Но не факт, что у NSA уже и на это есть решение)))))))))
Сборник рекомендаций от разных организаций (за разное время, к слову). Если лень клацать - ищите кнопку Compare all methods и идите обновлять ключи. На скрине собственно финальная таблица сравнения.
Но не факт, что у NSA уже и на это есть решение)))))))))
Forwarded from Bortlog
При локальном дебаге проблемного кода часть надо сдампить в stdout состояние нескольких переменных.
И для этого мы обично пишем код типа:
И вроде все норм, но каждый раз когда быстренько набираешь такой код и у тебя больше 2х таких переменных начитает просто вымораживать ведь ты просто повторяешь одно и тоже дважды.
Еще при дебаге и правках часто переменные уходят из скоупа или надо добавить еще что-то и этот притф не очень удобно поправлять.
Как было бы круто если бы был какой-то макрос чтобы можно было
a язык сам бы разобрался как какая переменная называется и выдал правильный лог.
Я тут написал маленькую библиотечку для Go в которой лишь одна такая функция.
Решение не идеальное, но для быстрого локального дебага подойдет.
Вы можете использовать эту библиотеку через Go modules или просто скопируйте файл
https://github.com/storozhukBM/dump
И для этого мы обично пишем код типа:
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
GitHub
GitHub - storozhukBM/dump
Contribute to storozhukBM/dump development by creating an account on GitHub.
Forwarded from Good reviewer - Bad reviewer (Oleg Kovalov)
Вот и мы, будем (до)делать чекеры для go-critic https://www.youtube.com/watch?v=FKPBzQir1vA
YouTube
go-critic
Forwarded from Experimental chill
Что-то при переезде в Лондон у меня добавилось намного больше проблем, чем убавилось, и оно колеблется от полной апатии до "это то, чем я буду заниматься всю жизнь".
Но не смотря на весь хаос и ужас с FB, Telegram и пары трейдинговых компаний, я нашёл полноценный алмаз:
Speed run Super Mario Bros.
Это очень красиво, технично, кажется невозможным, но понимать, что такое компьютерный стек, адреса, проезды по памяти надо. Нет, серьёзно, просто посмотрите, для меня это стало вдохновением, которого я не получал очень долго!
Разбор диссасемблера и все остальные странности тут
Но не смотря на весь хаос и ужас с FB, Telegram и пары трейдинговых компаний, я нашёл полноценный алмаз:
Speed run Super Mario Bros.
Это очень красиво, технично, кажется невозможным, но понимать, что такое компьютерный стек, адреса, проезды по памяти надо. Нет, серьёзно, просто посмотрите, для меня это стало вдохновением, которого я не получал очень долго!
Разбор диссасемблера и все остальные странности тут
YouTube
Super Mario Bros. 3 in 3 minutes - World Record Speedrun Explained
Watch the unedited run here: https://www.twitch.tv/videos/697843359
Watch the latest WR here (3;02.383): https://www.twitch.tv/videos/968510773
Explanation by KabAudio: https://pastebin.com/mPYVMA56
Patreon: https://www.patreon.com/bismuth9
Twitch: http…
Watch the latest WR here (3;02.383): https://www.twitch.tv/videos/968510773
Explanation by KabAudio: https://pastebin.com/mPYVMA56
Patreon: https://www.patreon.com/bismuth9
Twitch: http…
Линтеры как гоняете? (мне важно смотреть что там у людей время от времени)
Anonymous Poll
50%
Да, спец таск на каждом билде и/или коммите
8%
Да, только перед мёржем в мастер (или близко к этому)
1%
Да, но опционально включаем
7%
Да, но локально на гиткоммит хук
9%
Да, но локально, по желанию
8%
Не используем
4%
Используем, но редко и случайно
1%
Использовали, то отказались (важно сказать в лс почему)
1%
Другое
12%
Результаты / не применимо
Не по айти, но оч доставляет этот автор. Правда классные работы. Грех не пошарить.
https://www.patreon.com/gudim (а еще можно попатреонить)
https://www.patreon.com/gudim (а еще можно попатреонить)
Patreon
Get more from Anton Gudim on Patreon
creating comics and illustrations
Заметил на lobste.rs интересный тред, что поставить на свеженький макбук (кстати моделька не дурная 2020 MacBook Pro 13” (i7/32/1TB), аж слюни потекли). Сам давно хочу сделать себе уютный скрипт, который накатывает полноценную дэвмашину, dotfiles но с большим уровнем автоматизации считайте.
https://lobste.rs/s/uzdehw/what_should_i_do_after_getting_my_first_own
https://lobste.rs/s/uzdehw/what_should_i_do_after_getting_my_first_own
lobste.rs
What should I do after getting my (first) own new Macbook?
60 comments
Forwarded from Bortlog
Пришла еще одна идея в голову и из нее получилась такая библиотечка https://github.com/storozhukBM/pcache
Это горутин локал кэш. У него много недостатков:
- странная эвикшен полиси. При достижении максимального размера выбрасывается рандомный элемент. Иногда при сборке мусора эвиктятся все данные.
- поскольку это локальный кэш, то в худшем случае каждая горутина будет держать полную копию данных поэтому очень большим этот кэш не сделаешь.
Но есть и пара преимуществ:
- занимает 80 строк вместе с документацией
- реализация получилась настолько быстрой что ее можно ставить как кэш перед традиционными кэшами 🙃
Это горутин локал кэш. У него много недостатков:
- странная эвикшен полиси. При достижении максимального размера выбрасывается рандомный элемент. Иногда при сборке мусора эвиктятся все данные.
- поскольку это локальный кэш, то в худшем случае каждая горутина будет держать полную копию данных поэтому очень большим этот кэш не сделаешь.
Но есть и пара преимуществ:
- занимает 80 строк вместе с документацией
- реализация получилась настолько быстрой что ее можно ставить как кэш перед традиционными кэшами 🙃
Я смотрю тут в Go закрыли неплохо ишью, с добавлением 24байтных элементов (аллокационных групп?). Конечно это с C не сравнится, но часть объектов начнет занимать меньше. Отрадно.
https://github.com/golang/go/issues/8885
https://github.com/golang/go/issues/8885
GitHub
runtime: consider adding 24-byte size class · Issue #8885 · golang/go
Currently we have only 16 and 32 byte size classes. 24-byte size class would reduce memory consumption by 25% for programs that extensively use 24-byte objects (e.g. Node struct { left, right *Node...
oleg_log
Я смотрю тут в Go закрыли неплохо ишью, с добавлением 24байтных элементов (аллокационных групп?). Конечно это с C не сравнится, но часть объектов начнет занимать меньше. Отрадно. https://github.com/golang/go/issues/8885
(относительно поста выше, интересны бекенды и стендалон прилож)
Вы следите за аллокациями когда пишите код?
Вы следите за аллокациями когда пишите код?
Anonymous Poll
12%
Да, обязательно
14%
Какие-то популярные аллоцирующие паттерны отлавливаю
10%
Нет, не слежу, просто профилирую потом
35%
Нет, не слежу, пока на проде проблем не будет
18%
Нет, не слежу, не разбираюсь
8%
Не работаю с бекендом (или аналогом)
4%
Другое