oleg_log
1.78K subscribers
1.86K photos
129 videos
9 files
2.77K links
Shelter for antisocial programmers "Oleg"

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

about: https://xn--r1a.website/oleg_log/3200
Download Telegram
Странно, что никто не сказал о Nomad 0.12, а ведь приятно видеть апдейт.

Да как бы и HashiConf идёт, ток как-то тихо в ленте...

https://www.hashicorp.com/blog/announcing-hashicorp-nomad-0-12-beta/

Cloud Platform подъехал, я сперва подумал, что это будет абстракция на AWS, GCP, so on но это только для раскатки продуктов хашикорпа, но все равно прикольно.

https://www.hashicorp.com/blog/announcing-cloud-platform/?utm_source=twitter
Крутая штучка, советую лайкнуть
Forwarded from 🇺🇦 Go performance channel (Oleg Kovalov)
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!
Какой хороший бенчмарк. Наверное. В общем меня привлёк 3й участник, да, на V lang, который я без стеснения называл скамом.

Как можно догадаться, если глянуть в код, то можно увидеть, как быстро работает echo на вашем epoll/kqueue https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/V/pico.v/main.v и https://github.com/S-YOU/picoev.v

Вопрос, зачем это бенчить оставлю открытым. Если пролистать (сильно) ниже, можно найти Go с роутером chi, выдающий "жалкие" 240к рпс. Что вполне себе хороший результат. Написано без пуллов и прочей магии, простое как палка.

Вещь конечно прикольная, но эхами меряться лучше не на публику.

Результаты конечно же https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=json
Маленькая ода для sync.Once в #go

А именно. Часто можно встретить какую-то операцию, которую нужно и можно сделать 1 раз. Это может быть и закрытие соединения в каком-то клиенте и часто инициализация каких-то вещей.

Так как многим хочется эти вещи еще и в разных горутинах дергать, приходится добавлять какие-то синхронизации. Конечно же проще всего бахнуть Mutex и забыть о проблемах, некоторые чуть изощряются и делают на каналах, на атомиках тоже, но ведь уже есть простое решение - sync.Once !

Это буквально 3 инта (мютекс 2 32битных содержит https://github.com/golang/go/blob/go1.14.4/src/sync/once.go#L18 опустим вопрос кешлиний и прочих веселостей) и на этом вся логика заканчивается. Самое главное, как по мне, что это заметно лучше читается:
- ты видишь sync.Once
- ты знаешь, что он выполнится 1 раз
- ты знаешь, что по другому его не использовать

Эт круто.

Сюда же добавлю select {} который просто заблочит горутину (часто испоользую в main), поэтому другие решения (через бесконечный цикл, чтение из неиспользуемого канала) по сути не нужны.
Что-то меня прорвало на поговорить, в @generictalks чат всплыла тема дженериков (хах, ирония) и вспомнили sync.Map с его interface{} в параметрах. Вот что посоветую я.

Оборачивайте в свой тип. Вместо обычного поля:
type Foo struct {
idToUser sync.Map

idToUser idToUserMap
}

type idToUserMap struct { data sync.Map }
// геттер и сеттер под конкретные типы

Внезапно вы уйдете от явных переходов от interface{} к вашему типу в методе Load, что приятно, лишний раз не ошибетесь с типом (но тесты тоже иметь, окда?). Еще тип подскажет, что же вы там мапите, это полезно.

Это наверное не супер вещь и sync.Map пихать везде не надо, я все же за явный мютекс + мапа, но как помочь другим не тупить над вашим кодом вариант - норм.
Стырю свой твит, короч.

Хороший пост от Дейва о логировании, вот прям за каждый абзац готов дать +

Правда по поводу ненадобности Warn чуть-чуть бы поспорил, но лень, можно и так жить спокойно.

https://dave.cheney.net/2015/11/05/lets-talk-about-logging

Еще про уровни логирования можно читнуть: WakeMeUpInTheMiddleOfTheNight https://divan.dev/posts/wakemeupinthemiddleofthenight/ (уже не раз на канале упоминал, стоит держать в уме).

Ах да, это все language agnostic, поэтому не думайте, что это только для Go, вещи правда полезные озвучены в этих постах.
'We had no idea how to do it': YouTube's founders, investors, and first employees tell the chaotic inside story of how it rose from failed dating site to $1.65 billion video behemoth

> YouTube's cofounders originally thought "a generic platform where we could host all the videos on the internet" was too bold of an idea. So for about a week, the site was a dating platform — until it wasn't.

> Just about every 48 hours, some emergency came up. When you have a million people watching a video a day, you can't just manually log each view anymore.

https://www.businessinsider.com/youtube-oral-history-early-days-founded-investors-employees-started-google-2020-5
Интересный вопрос на самом деле. Для тех, кто не хочет ответить в твитор, может ответить мне 👀 @olegkovalov

https://twitter.com/davidcrawshaw/status/1277111328155398145
Forwarded from Generic Talks (Oleg Kovalov)
Мы начали, сейчас будем про найм и собесы говорить https://www.youtube.com/watch?v=-r9ybGDh1qc
Я на неделю уйду оффлайн. Лейтенси подпрыгнет до 7 дней. Сорьте.
oleg_log
Как же не хватает ФП в метриках. Ведь действительно это бы упростило чтение и изменение запросов. (1я строка 260 символов, и обычно она будет отрендерена как 5, что не помогает совсем)(на сколько я знаю это касается любых хранилищь метрик)
Позвращаемся к самокопанию в Телеге.

Так вот, на неделе вспомнил одну вещь, что сложные метрики сложно читать (хах, ирония). И особо решения с Прометеусом нет, но оказывается есть.

Авторы VictoriaMetrics ведь сделали свой MetricsQL и там есть оператор WITH (вспоминайте Postgres). Лучше примера уже не объяснить:

WITH (
f(a, b) = WITH (
f1(x) = b-x,
f2(x) = x+x
) f1(a)*f2(b)
) f(foo, with(x=bar) x)


https://play.victoriametrics.com/promql/expand-with-exprs

И это очень круто. Тепепь я торчу им аналог пива, как встречу.
Lava Layer Anti-Pattern

<..> resulting in an application with three different data access solutions and different implementations of the same type of function depending on during which generation it was implemented.

https://www.infoq.com/news/2015/01/lava-layer-antipattern/

А все почему? а ведь есть разные способы сделать одну и ту же вещь. Здесь даже не проблема в языке (хотя возможность подстрекать использовать новые вещи), а скорее незаконченные миграции.

Был я в нескольких больших проектах и там как в анекдоте: v1 is deprecated, v2 is experimental.

Пожалуй я сейчас понял, почему некоторые архитекторы бежали в микросервисы: компоненты получались связанны только по http и не было видно дикой разницы между 2мя(и больше) подходами реализации.
Github же завез README для профиля.

Можно глянуть у меня https://github.com/cristaloleg

Надо всего лиш создать репо со своим никнеймом, а дальше обычный markdown. В принципе выходит миленько.

UPD: походу не у всех есть доступ