Size: a a a

2020 December 28
oleg_log
У вас есть кубернетес?
источник
2020 December 29
oleg_log
подведу и я "итоги"

@tgstat_bot 2020 <channel name>

и популярный пост https://t.me/oleg_log/2967
источник
oleg_log
Красивая история о том, как переход на бинарный формат данных, дал приложеню на тел чуть больше воздуха.

Итого:
1. берем жсон на 15мб - декодим 20сек на Galaxy S4 (чтобы там не было внутри)
2. берем FlatBuffers на 4мб с теми же данными - получаем 0.5сек.
3. ...
4. ПРОФИТ

Тут скорее отдельная заслуга FT, что они пряменько лежат в памяти. В любом случае, JSON хоть и везде, но наверное после 100кб файла/запроса/структуры стоит начать думать про что-то более бинарное, как следствие оптимальное.

https://blog.extrawurst.org/gamedev/unity/programming/rust/2020/12/26/unity-flatbuffers.html

Такие посты заставляют задуматься, сколько же в мире неоптимальных решений, сколько потраченных петабайт RAM-а и спаленных деревень cpu-циклов. Так и живём, шо.
источник
oleg_log
А ведь правда, там кривая версия вышла. Спасибо, что не leftpad.

https://t.me/teamerlin/6482
Telegram
☕️ Мерлин заваривает чай 𓀇
Почему-то никто не написал, а тем временем в комьюнити Go не всё спокойно. Генератором драмы выступил автор популярного HTTP роутера chi. Решив, что настало время для нового релиза, @pkieltyka вместо версиис v5.*.* выпустил версию v1.5.0, в то время как последняя версия была v4.1.2+incompatible.

К сожалению, go mod не рассчитан на такой слом семантического версионирования и приводит версии других пакетов

Например, если у вас были зависимости, зависящиее от chi

git.example.com/commons/pkg/rest v1.3.2
github.com/go-chi/chi v4.1.2+incompatible

то после апгрейда он их версия упадёт до совместимой с v1:

git.example.com/commons/pkg/rest v1.1.0
github.com/go-chi/chi v1.5.1

Основным мотивом слома версионирования, по словам автора, стало эстетическое неприятие использование номера версий в путях импорта (как пример, github.com/go-chi/chi/v5).

Вокруг этого решения до сих пор бурлят споры, и понятно из-за чего: chi — один из самых приятных в использовании роутеров, к тому же совместимый со стандартной библиотекой.…
источник
2020 December 30
oleg_log
ммм, кружечка приехала.
дада, у меня хороший маникюр.
поделитесь какой у вас свэг крутой был?
источник
oleg_log
Любопытный, но довольно бесполезный пример полиморфизма в Go

В гошечке есть несколько способов писать полиморфные функции:

1. интерфейсы;
2. тайп свитчи и тайп кастинг интерфейсов;
3. рефлексия;

Недавно мне понял, что есть чётвёртый подход, который стал возможен с появлением type alias — назовём его апкастингом типов. Работает оно так:

func main() {
 printName(Cat{"Whiskey"})
 printName(Dog{"Chappie"})
}

type Cat struct { Name string }

type Dog struct { Name string }

type named = struct { Name string }

func printName(n named) {
 fmt.Println(n.Name)
}

В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип  ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.

К сожалению, это не слишком полезно — наверное только если вы не хотите делать пачку геттеров и у вас есть пачка одинаковых структур разных типов.
источник
oleg_log
Чуть поясним. Прикол здесь в самом алиасе, для передачи Cat/Dog в printName их не надо явно приводить к named.

И на этом все. Как можете догадаться, если бы у Cat/Dog было еще 1 поле, то ничего бы не вышло, надо чтобы поля совпадали.

https://play.golang.org/p/xpyO7pE6ASv (уберите = и будем вам счастье)
источник
oleg_log
источник
oleg_log
Мольбы были услышаны, вышел еще 1 пост с рецензиями от Данилы. Прочитайте хотя бы описание, этого уже достаточно для 2х IQ поинтов.

https://t.me/experimentalchill/65
https://t.me/experimentalchill/66
https://t.me/experimentalchill/67
Telegram
Experimental chill
#рецензии
Ультракороткие рецензии на тoп инженерных находок 2020го года от @Danlark, которых не было в блоге. Часть 1.

1. Deterministic Aperture: A distributed, load balancing algorithm

Балансеры в компании Twitter красиво переплетают идеи consistent hashing, непрерывной геометрии и power of 2 choices, что помогает сократить количество соединений в 10 раз и снизить дисперсию распределения запросов на 78%.

2. BOLT: A Practical Binary Optimizer for Data Centers and Beyond

Компания Facebook оптимизирует и так уже PGO соптимизированные C++ бинари в реальном времени, собирая профили и ставя горячие блоки кода близко друг к другу. Из-за этого сайты Facebook и Instagram ускорились на 5-7%, а пропозал по добавлению такой функциональности был принят в LLVM.

3. ScaNN: Efficient Vector Similarity Search

Google выложил свой алгоритм поиска похожих векторов, который обыгрывает по скорости все предыдущие примерно в 2 раза, отличие от других алгоритмов только в том, что ScaNN правильно подобрал константы для квантования…
источник
2020 December 31
oleg_log
источник
oleg_log
не работа, а мечта
источник
2021 January 01
oleg_log
о да, ода уходящего года...
источник
oleg_log
Что может быть лучше, чем начать год с проверенных технологий.

А за Gradle - метко. Может Maven с xml не самое радостное для редактирования, но хоть рабочее и понятное.

https://t.me/nikitonsky_pub/37
Telegram
Стой под стрелой
Стоит конечно признаться, я избалован Java. Казалось бы, самая немодная технология в мире, однако:

Когда хайпили контейнеры, я пожимал плечами. JVM ставится вообще без каких-либо зависимостей, просто копированием папки, и... все! Все работает. Хочешь в /home положи, хочешь десяток JVM рядом держи и запускай хоть параллельно. Даже никакие переменные прописывать не надо.

Когда каждый язык изобретал свой package management, я опять пожимал плечами. Раздутые node_modules? В Maven каждая зависимость иммутабельна, скачивается один раз в жизни и дальше шарится между вообще всеми возможными приложениями. Lock-файлы? В Maven версии прописываются не диапазонами, граф зависимостей однозначен в любой момент времени настоящего и будущего, безо всяких .lock-файлов. Удалить из Maven Central ничего нельзя, так что драмы вроде left-pad тоже невозможны. Что такое reproducible builds я тоже никогда не понимал: как в принципе можно так напрограммировать, что билд будет не reproducible? История о том, что node_modules надо периодически…
источник
oleg_log
Блоу все пилит компилятор. Ждем дальше. https://twitter.com/jonathan_blow/status/1345083953187672064?s=28
источник
2021 January 02
oleg_log
источник
2021 January 03
oleg_log
C + плюшки = Zig. Ну простой же как палка.

https://gist.github.com/ityonemo/769532c2017ed9143f3571e5ac104e50

Воодушевлено длиннопастой про Rust https://fasterthanli.me/articles/a-half-hour-to-learn-rust
(A half-hour to learn Rust, Jan 27, 2020 · 51 minute read. Нуда)
источник
2021 January 04
oleg_log
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да?

Наверное каждый хоть раз обжигался о
for k, v := range foo {
   go func() { run(k,v) }()
}

или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал, что давайте от этого уйдём (в го2, когдатотам) https://github.com/golang/go/issues/20733

Там забавный комент добавили, может слышали, Let's Encrypt недавно откатили 3М+ сертификатов. Угадайте из-за чего)))

https://github.com/letsencrypt/boulder/pull/4690/files#diff-d02067a9f9a2bed1110fd4e98641c2effcf5d1d5f18461e35d6ac1535f6e2c21L1411-R1414
источник
oleg_log
Подведём итоги ~1 месяца.

Все даже хорошо. Есть посты, за которые не стыдно. Есть приятные и критикующей-правильные отзывы. Есть желание продолжать дальше.

Хотя местами хочется уйти в дикие и непрактичные темы, но по большому счёту пользы от таких мало.

Для заинтересованных @oleg_log_plus
источник
oleg_log
Внезапно многие не знали этой проблемы (кроме тех кто не пишут на го). Так вот.

Есть даж спец страница на вики про эту особенность (а сколько статей с пеной у рта это совсем другое).

Поэтому советую прочитать https://github.com/golang/go/wiki/CommonMistakes и включить scopelint (хотя мне кажется еще кто-то ругается) в golangci-lint
источник
oleg_log
:slowpoke: там слак прилёг. https://status.slack.com/#

на самом деле теперь все веселее, там всё красное, хотя днём были только сообщ.
источник