Посмотрел и приуныл. 13 лет прошло с доклада, а мы все про это говорим и говорим. В голове всплыло стойкое ощущения, что мы стоим на месте. Да, новые фреймворки, языки, новые хттп-роутеры и логгеры, но почему все появляются и появляются решения с кривыми, нелогичными, непродуманными апи? ведь многое пишется умниками, которые не 1 и не 3 года в индустирии. Вопрос скорее риторический, но осознание, что мы набиваем шишки на старых проблемах заставляет смотреть на труженников по клавиатуре определенно косо.
Forwarded from oleg_fov (Oleg Kovalov)
YouTube
How To Design A Good API and Why it Matters
Google Tech Talks
January 24, 2007
ABSTRACT
Every day around the world, software developers spend much of their time working with a variety of Application Programming Interfaces (APIs). Some are integral to the core platform, some provide access to widely…
January 24, 2007
ABSTRACT
Every day around the world, software developers spend much of their time working with a variety of Application Programming Interfaces (APIs). Some are integral to the core platform, some provide access to widely…
Оп, Bittorrent v2
SHA-1 -> SHA-256
Merkel tree
per-file hash
и да, ломается совместимость.
Не знаю как вы, а я рад, что новая версия появилась, вещь-то нужная.
https://blog.libtorrent.org/2020/09/bittorrent-v2/
SHA-1 -> SHA-256
Merkel tree
per-file hash
и да, ломается совместимость.
Не знаю как вы, а я рад, что новая версия появилась, вещь-то нужная.
https://blog.libtorrent.org/2020/09/bittorrent-v2/
oleg_log
Оп, Bittorrent v2 SHA-1 -> SHA-256 Merkel tree per-file hash и да, ломается совместимость. Не знаю как вы, а я рад, что новая версия появилась, вещь-то нужная. https://blog.libtorrent.org/2020/09/bittorrent-v2/
Ооо, расскажите, а вы где-то торренты юзаете? я не про пиратство, а использование на проде. Бекапчики и/или свои велосипеды, тот же S3.
Небольшое ревью успехов 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
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
Nicholas Nethercote
How to speed up the Rust compiler one last time
Due to recent changes at Mozilla my time working on the Rust compiler is drawing to a close. I am still at Mozilla, but I will be focusing on Firefox work for the foreseeable future.
Дожил до сегодня и не знал (так сильно забыл с универа?), что в C++ есть нетрадиционные операторы:
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://xn--r1a.website/oleg_log/3218 и смотрите ориг пост, там дальше еще 2 упоминания моих мыслей). Хотя про
&& 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://xn--r1a.website/oleg_log/3218 и смотрите ориг пост, там дальше еще 2 упоминания моих мыслей). Хотя про
pain тут спорно, но смысла в этом мало, а не все пишут LLVM по вечерам.
oleg_log
Ооо, расскажите, а вы где-то торренты юзаете? я не про пиратство, а использование на проде. Бекапчики и/или свои велосипеды, тот же S3.
Как можно догадаться - распространение новых патчей для игр и бекапы. Ничего интересного я вам не расскажу больше.
Как ФБ в далёком 2010 юзал для апдейтов https://torrentfreak.com/facebook-uses-bittorrent-and-they-love-it-100625/
Кстати, некоторые билд фермы подобное делают: кто-то собрал, а остальные подтянули.
Как ФБ в далёком 2010 юзал для апдейтов https://torrentfreak.com/facebook-uses-bittorrent-and-they-love-it-100625/
Кстати, некоторые билд фермы подобное делают: кто-то собрал, а остальные подтянули.
Torrentfreak
Facebook Uses BitTorrent, and They Love It * TorrentFreak
BitTorrent is the ideal way to transfer large files to thousands of locations in a short period of time. This doesn't only apply to movies and music that are downloaded by the average BitTorrent user, companies can benefit from it as well. With help from…
1.15.2 и 1.14.9 вышел, мелочь, но там фиксы в рантайме. Значит не мелочь.
https://twitter.com/golang/status/1303798415529254918?s=21
https://twitter.com/golang/status/1303798415529254918?s=21
Twitter
Go
🌟 Go 1.15.2 and 1.14.9 are released! 🔈 Announcement: https://t.co/MT0rb5M46n 📦 Download: https://t.co/LVAT41QPZz #golang
Как всегда посты Cloudflare о сети. В этот раз их LB Unimog (L4 как можно догадаться).
https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/
https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/
The Cloudflare Blog
Unimog - Cloudflare’s edge load balancer
Unimog is the Layer 4 Load Balancer for Cloudflare’s edge data centers. This post explains the problems it solves and how it works.
oleg_log
Как всегда посты Cloudflare о сети. В этот раз их LB Unimog (L4 как можно догадаться). https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/
Эт, я как-то раньше собирать начал, думаю повод открыть. Короч решил сделать Awesome Load Balancing. Да, сборник проектов, докладов и прочех веселостей по теме. Feel free to dobavit.
https://github.com/cristaloleg/awesome-load-balancing
https://github.com/cristaloleg/awesome-load-balancing
GitHub
GitHub - cristaloleg/awesome-load-balancing: A curated list of awesome load balancers and proxies. Software, libraries, posts,…
A curated list of awesome load balancers and proxies. Software, libraries, posts, talks. - cristaloleg/awesome-load-balancing
Оказывается есть проект на Go: Continuous profiling in for pprof compatible profiles.
Проекту почти 2 года, я 1й(?) раз о нём услышал (причем случайно от fgprof https://xn--r1a.website/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 Который больше похож на полноценное решение, хотя я так и не обкатал на практике.
Проекту почти 2 года, я 1й(?) раз о нём услышал (причем случайно от fgprof https://xn--r1a.website/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 Который больше похож на полноценное решение, хотя я так и не обкатал на практике.
Telegram
oleg_log
A sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together.
https://github.com/felixge/fgprof by twitter.com/felixge
And it's literally under 100 lines! Amazing!
https://github.com/felixge/fgprof by twitter.com/felixge
And it's literally under 100 lines! Amazing!
Forwarded from Good reviewer - Bad reviewer (Oleg Kovalov)
Не поверите кто live. Смотрим на GhostDB (не зря голосовалку выше делали)
https://www.youtube.com/watch?v=RsZREiCRcrU
Ну и репа https://github.com/jakekgrog/GhostDB
https://www.youtube.com/watch?v=RsZREiCRcrU
Ну и репа https://github.com/jakekgrog/GhostDB
YouTube
go / GhostDB
Good reviewer - Bad reviewer
Не поверите кто live. Смотрим на GhostDB (не зря голосовалку выше делали) https://www.youtube.com/watch?v=RsZREiCRcrU Ну и репа https://github.com/jakekgrog/GhostDB
Хорошая статья всплыла по ходу обсуждения. Жаль раньше не встречал. Как для начала копания по пейперам вполне ок.
https://en.wikipedia.org/wiki/Cache_replacement_policies
https://en.wikipedia.org/wiki/Cache_replacement_policies
В Go 1.15 должны завести хороший фикс на документацию, а именно выкидывание
Ведь это не совсем документация, а скорее прагма и/или аннотация (где-то после этих слов температура в комнате увеличилась)
https://github.com/golang/go/issues/37974
//go:* из документации.Ведь это не совсем документация, а скорее прагма и/или аннотация (где-то после этих слов температура в комнате увеличилась)
https://github.com/golang/go/issues/37974
GitHub
go/doc: drop //go:* comments from extracted docs · Issue #37974 · golang/go
Today we write things like: //go:noinline // F does whatever it does. func F() instead of the more natural: // F does whatever it does. //go:noinline func F() because the latter produces: $ go doc ...
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://xn--r1a.website/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://xn--r1a.website/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/