Size: a a a

2020 October 27
oleg_log
Те, кто сталкивается с БД и скриптами миграции: какие вы тулзы используете?

https://github.com/pressly/goose
https://github.com/golang-migrate/migrate
и...не только в го конечно же.

Поделитись своим опытом. В теории интересны только накатывания-откатывания новых-старых версий схем для Постгри или Майскл. Но все средства хороши.

А ну и проприетарные тоже можно, мы не такие бедные, чтобы жить за счет одного опенсурса. Тыкать @olegkovalov
источник
oleg_log
Если интересно про интеграцию и любовь-ненависть Apple & Google, то советую читнуть. Логично, что дружба выгоднее войны, и сделка считается успешной, когда каждая сторона считает, что кинула другую. В общем все очевидно. Хотя думаю Apple в чуть большем плюсе.

https://www.nytimes.com/2020/10/25/technology/apple-google-search-antitrust.html
источник
2020 October 28
oleg_log
https://flywaydb.org/
https://www.liquibase.org/

Для python+postgres
https://pypi.org/project/yoyo-migrations/

Для Go используем https://github.com/golang-migrate/migrate

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

еще кстати вариант создать пустой любой active record фреймворка проект (django, rails) и делать автомиграции которые уже есть + редактировать их если что-то не подходит, очень удобные инструменты

https://github.com/rubenv/sql-migrate

Для мускля есть такая штука прекрасная:
https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html

Йо. Мы для миграции схем на больших объемах юзаем gh-ost https://github.com/github/gh-ost

dotnet-ef. Как понятно из названия это dotnet only, но это очень круто и удобно

Используем https://github.com/amacneil/dbmate
Простая как палка, при этом все базово нужные вещи есть

Спасибо всем откликнувшимся.
источник
2020 October 29
oleg_log
Postgres Feature Matrix.

Понятия не имею, зачем это может понадобиться (хотя пригодится), но повтыкать можно.

https://www.postgresql.org/about/featurematrix/
источник
oleg_log
И давайте еще о Постгрес. Померяем что там с хранением текста и как это влияет на перф.

А еще на странице можно 203 раза прочитать TOAST. Советую не упустить возможность.

https://hakibenita.com/sql-medium-text-performance

И перевод https://habr.com/ru/company/ruvds/blog/525412/
источник
oleg_log
proposal: cmd/compile: switch to a register-based calling convention for #golang functions

Preliminary experiments indicate this will achieve at least a 5–10% throughput improvement across a range of applications

is accepted! 🚀

https://go.googlesource.com/proposal/+/master/design/40724-register-calling.md

https://github.com/golang/go/issues/40724
источник
2020 October 30
oleg_log
More #golang awesomness! Happening in 1.16 🎉

Go 1.16 will include an early devirtualization pass, which allows better escape analysis of interface method calls (i.e., fewer heap allocations) when the compiler can see the interface always has a known concrete type.

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

https://twitter.com/mdempsky/status/1321894360116420608
источник
oleg_log
Вот аще гениальный конфиг линтера. Цикломатическая сложность 99. Дайте два.
источник
2020 October 31
oleg_log
Сперва хотел поругаться на документацию к ah-pee Google Firestore (https://pkg.go.dev/cloud.google.com/go/firestore)(вот эта строка вывела из себя status.Code(err) == codes.NotFound, она с потолкам, непонятно что это, короч как часто у гугла и их апи).

Но на самом деле я пришел похвалить даже. Берешь такой, ставишь env-var FIRESTORE_EMULATOR_HOST на свой желаемый хост и гоняешь в тестах.

Мне эт оч понравилось, что торчащее апи для клиента ничего не знает про хост, к которому надо идти, а в тестах нормально, что мы одной переменной все клиенты переключим (наверное некоторые пуристы тут не согласятся и захотят HostResolver интерфейс, но проигнорим их).

Да, как можете догадаться, в коде все просто https://github.com/googleapis/google-cloud-go/blob/firestore/v1.3.0/firestore/client.go#L65

Короч лайк.
источник
2020 November 01
oleg_log
источник
oleg_log
Сегодня в Generic Talks (https://t.me/generictalks/163) обсудили статью об отменах операций (timeout, deadline, cancel), которую я вспомнил из-за одного выпуска Good-Bad reviewer (https://t.me/good_bad_reviewer/58).

Так вот, советую почитать. Довольно полезно и интересно описано о том, почему каждый из способов может быть неочень. Еще там рассказывают про либку на питоне Trio от автора, но теория применима ко всему и всем.

Ссыль https://vorpus.org/blog/timeouts-and-cancellation-for-humans/
источник
2020 November 02
oleg_log
Восхитительная иллюстрация TCP
источник
oleg_log
#network #tcp
источник
2020 November 03
oleg_log
Блин, я только сейчас понял: remote != work from home.

Мне кажется именно отсюда и ползет отвращение у сотрудников, а у работодателей недоверие.

1е потому что "блин я дома и мне мешают те, кто тут живут, да и сконцентрироваться сложно, когда видишь эту пыль под диваном".

2е потому что "да он(а) на диване лежит и жрёт чипсы, вместо того, чтобы фиксить фичи".

С другой стороны, если свалить в опенспейс(или съемную хату), чтобы лишь бы не дома работать, то бонусы уменьшаются. Хотя всегда можно найти баланс.
источник
oleg_log
Так как я теперь С++ программист, рано или поздно я должен был поделиться впечатлениями. Но сначала коротка история.

Давным-давно, в другой жизни, мы набирали на работу программистов. Давали простую задачку типа перевернуть строку и разрешали писать на чем угодно. Любой язык, который ты знаешь. Ведь сила, она, брат, не в языке. Show us your best self. Так вот, про языки. Приходили сишники, и программы у них получались примерно такие, как от низкоуровнего языка и ожидаешь — страх, неуверенность, кишки, расчлененка и совершенно скучные вопросы типа «а кто выделит место под результат», которые внезапно выходят на первый план и становятся шоу-стопперами. В смысле писали они хорошо и правильно, это скорее мои ощущения от языка.

А потом пришел сиплюсплюсник. Я тогда, наивный, подумал — ну примерно то же самое получится. Но нет, он как-то очень быстро и ловко накидал программу, нигде явно память не выделял, нигде даже указателей не появилось. Все чистенько и аккуратненько, как будто на Джаве писал. А когда указатели над головами не летают, сразу чувствуешь себя сильно безопаснее. И я подумал — опа! Так что, можно было? Никогда бы не стал строить свою карьеру на внимательной работе с памятью, но без нее я вполне смог бы жить.

С тех пор эта мысль у меня висела в фоне — может быть, не так плох С++, как его малюют? Может быть, там как с Джавой — плохие программисты пишут плохо и создают языку репутацию, а хорошие сидят тихонечко, пишут хорошо и проблем не знают. Но проверить эту гипотезу поводов все не подворачивалось. Отзывы тоже были противоречивые, что скорее подтверждало мою гипотезу.

И вот наконец я попробовал С++ сам. То есть я пришел немножечно сбоку в большой и старый C++ проект, а именно Skia. Да и попробовал совсем чуть-чуть. Но главное, что свою гипотезу я, кажется, проверил: неважно, насколько хорошо ты обложился умными указателями, рефкаунтерами и move конструкторами. Неважно, сколько человек писало, смотрело, ревьюило и потом использовало твой код. Неважно, насколько прожжеными плюсовиками они были, неважно, как долго компания развивает экспертизу именно в C++ и насколько хороши их best practices. Все равно рано или поздно кто-нибудь, где-нибудь, как-нибудь, что-нибудь продолбает. Это точно такая же бомба замедленного действия, как и С, а промышленный код выглядит примерно так же страшно и ничуть не менее безопасно. В Skia контрибутит 170 человек. На ней работают Chrome, Android, Flutter, Firefox и Xamarin. И я, одним глазом на нее поглядывающий, без опыта низкоуровнего программирования, без опыта С или С++, нашел за 6 месяцев два случая некорректной работы с памятью. А ведь я их даже не искал! Причем в одном случае мне пришлось объяснять, почему это баг — даже натренированный глаз, когда ему показываешь сломанный код, не всегда способен заметить ошибку.

Итог, увы, неутешительный. Людям верить нельзя. Хороший программист даже себе не должен верить. Машинам — можно. Тотальные гарантии — единственное, что нас спасет. In the long run, конечно.
источник
oleg_log
Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

https://github.com/google/skia
источник
2020 November 04
oleg_log
Звучит как снятие с себя ответственности, эт удобно
источник
oleg_log
Поддержка собственного сервера для Bot API

Вместе
с обновлением Bot API до версии 5.0 появилась возможность запускать свой собственный сервер Bot API. После поднятия, ваш бот будет отправлять запросы на свой сервер вместо api.telegram.org.

После переключения бот сможет:
— Скачивайте файлы без ограничения размера.
— Загружать файлы размером до 2000 МБ.
— Загружать файлы, с сервера или по прямой ссылке на файл.
— Возможность использовать любой HTTP URL-адрес, локальный IP-адрес и порт для вебхуков.
— Возможность установить max_webhook_connections до 100000.
— Возможность получить локальный путь как значение поля file_path без необходимости загружать файл после запроса getFile.

Исходный код сервера Telegram Bot API распространяется по лицензии Boost Software License.

#BotAPI
источник
oleg_log
Думаю для вас далеко не секрет, что преждевременная оптимизация...дада, вечная-старая тема.

Столкнулся я в PR с одним молодым и активным пареньком, которому хочется делать возвращение структуры из метода по значению (а не через указатель, как чаще бывает), ведь поинтер оказался жуткой тратой ресурсов. Честно.

Проблема вот в чем: а никто ведь и не мерял 😏 хотя на мой вопрос даже докинул ссылку на затасканую статью (https://segment.com/blog/allocation-efficiency-in-high-performance-go-services/). и как бы все...

Угадайте, кому важнее псевдоиммутабельность и минус 1 поинтер в хипе по сравнению с консистентностью в общем проекте и соседних пакетах? плез не делайте так.

1. консистентность
2. перформанс
держите именно в таком порядке, когда 2е ДЕЙСТВИТЕЛЬНО будет важным, 1е вы СОЗНАТЕЛЬНО понизите в приоритете.
источник
2020 November 05
oleg_log
источник