Ворчливый IT-дед
1.23K subscribers
283 photos
2 videos
1 file
66 links
Авторская колонка, в которой ворчит Дмитрий Александров (руководитель подразделения разработки в Яндекс Лавке).

По вопросам рекламы ... можете даже не писать, а то развели тут свою коммерцию, честным людям высказаться негде, все завалили рекламой
Download Telegram
С новым 56-м годом

от epoch (начала unixtime)!
И пока мы все тут вспоминаем, как работу работать, просто поделюсь моментами нового года.
1. На даче хорошо.
2. Уклон участка - не всегда плохо, зимой можно кататься со склона.
3. Бассейн легко превращается в хоккейную коробку. Ну и что, что круглую.
4. Кошке почему-то не понравилось гулять.
5. В лесу волшебно. Но идти трудновато.
6. "Жидкость для розжига" в лице короны зимой работает хуже.
7. В камине можно печь картошку.
8. Найден рецепт годного риета из шпрот. Обязательные ингридиенты: шпроты, мазик, яйцо вареное. Опционально: горчица, острый соус, перец, соль, творожный сыр, каперсы, маринованый огурец, красный лук, чеснок, укроп. Все это перемалывается в блендере до однородной массы, намазывается на греночку черного хлеба, накрывается кружочком свежего огурца. Беллиссимо! Особенно под картошечку из п.7.
🔥21121
С иголочки одет

Наконец удалось забрать сиденья с перешива. Настал момент установки. И, вроде, невелика наука - 4 гайки и всех делов. Но нет, возиться пришлось несколько часов, умотавшись аки пёс.

Сначала вне машины синхронизировать салазки, чтобы были в одном положении. Потом попасть, чтобы все дырки "стреляли". Потом насадить салазки на шпильки так, чтобы стояло ровно, а шпильки торчали достаточно для наживления гаек (тут пришлось прибегнуть к умеренному кувалдингу). И осложняется это все тем, что ты не имеешь одновременного доступа ко всем отверстиям. Подвинул сидушку на салазках назад - можешь подобраться к передним отверстиям. Подвинул вперед - теперь к задним. Снова назад, потому что спереди соскочило. И так далее. А незакрепленное сиденье по салазкам ездить отказывается... Ну и для доступа к гайкам нужно особое сочетание рожкового ключа, торцевых головок, карданчика и трещоток разных размеров, потому что что-то постоянно куда-то упирается и не лезет. Ах да, пришлось еще переставить замки ремней от прежних кресел, потому что новые были без оных.

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

В задним диваном все проще - 2 крюка, 2 защелки и готово. Но и там был подвох. Нужно было установить замки задних ремней. Там два болта под разные сиденья. Выкрутил один, закрепил замки, закручиваю - не держит. Ну конечно - сгнила резьба и болт прокручивается. Ладно, средний ремень нам не нужен, крепим во второе место. Тут держит. Ура! Но вот незадача - пряжки не подходят к замкам... Видать, не та версия. Что ж, значит, задние ремки будут пока носить декоративный характер. Все равно толпой мы на бэхе ездить не планируем.

Зато результат, кажется, получился отменный. Кресла теперь аутентичные (ранее стояли какие-то левые от е90, их продал на авито, притом спрос на них оказался бешеный - мне за день написало и позвонило 15 человек) и в нарядной ткани. Это что-то среднее между оригинальным motorsport-исполнением и ваговской gti-клеткой. Мне нравится. #лёха_строит_бэху
👍1951
Inner-source

Представьте себе две команды разработки. И ребятам из одной частенько нужны изменения в коде второй для решения своих бизнес-задач. Как водится, есть два варианта - либо "заказывать" разработку у оунеров, либо контрибьютить самим.

Плюсы "заказного" варианта понятны - первой команде не нужно разбираться в чужом коде, вторая команда лучше контролирует свой сервис. Но и минусы очевидны, и главный из них - долго ждать. Потому что у второй команды нет соответствующей задачи ни а планах, ни в интересах, им своей работы хватает. А пытаться насквозь приоритизировать свою задачку у соседей через всех заказчиков - то еще удовольствие.

Остается второй вариант - контрибьютить к соседям. Тебе надо - ты и делай. И вроде все понятно. Но всегда начинаются какие-то тёрки. Первая команда приносит какую-то фигню в PR-ах, вторая долго ревьювит и не хочет аппрувить. Переделай. Нет, так тут не принято. А вы вообще нам тесты сломали. В общем, конфликт. А мы конликты не любим.

На помощь приходит методология inner-source, которая фиксирует пререквизиты, процесс и обязательства сторон в более-менее четкий контракт. Эдакие правила игры, которые, если обе стороны договорились соблюдать, снижают градус полемики вокруг "гостевых" изменений в чужом монастыре. Набор практик, направленных на ослабление кордонов и призванных повысить гибкость и эффективность нашей работы. В зрелых командах инженерная культура должна позволять кодить у соседей в мирном и продуктивном ключе.

Поделюсь некоторыми правилами, которые были написаны кровью в одной из наших команд пару лет назад. Надеюсь, будет полезно. И можете в комментарии докинуть свои пункты, если у вас такие принципы есть и работают.

1. Тот, кто хочет внести какие-то изменения, должен перед этим рассказать свою задумку мейнтейнерам и согласовать примерный способ решения задачи.
2. У команды, в которую часто приходят иннер-сорсить, должна быть краткая и понятная документация на сервис, чтобы гостевой разработчик лучше понимал специфику сервиса, и как его случайно не сломать.
3. Должен быть документ, коротко и понятно описывающий принятые в конкретной команде подходы и традиции - от код-стайла до отношения к слоям абстракции - во избежание комментариев на код-ревью в духе "у нас тут так не принято", когда весь код уже написан.
4. Существует и выполняется разумный SLA на ревью (притом в каждой итерации, если их >1). Зеркально: автор ПР-а вносит требуемые правки достаточно оперативно, чтобы не размывать фокус ревьювера (спустя 2 недели ревьюверу трудно вспомнить, о чем был ПР).
5. В сервисе должно быть высокое покрытие тестами (юниты, авто, любые не-ручные), чтобы иметь достаточную степень уверенности в безопасности прошедших тесты правок. Количество флапов и ситуаций "а, да, этот тест сломан, не обращай внимание" должно быть околонулевым.
6. Если одна и та же гостевая команда часто вносит правки в сервис, в ней можно выбрать trusted-коммитера. Его коммиты можно ревьювить не так придирчиво (то есть как от своих), и он сам может ревьювить и аппрувить коммиты от других участников гостевой команды.
7. Гость, в свою очередь, в полной мере отвечает за качество своего коммита, стабильность релиза, возможные багфиксы, поддержку этого кода, как за свой сервис. Соблюдает подходы из п.3, разбирается в специфике из п.2, следит за тестами из п.5 и добавляет тесты на свой код.
8. Любые разногласия устраняются в конструктивном ключе, без лишних препонов. В случае необходимости обсуждаются лично или с эскалацией до лидов. Главное - помнить, что мы тут одно дело делаем, а работаем - в коллективе.
👍24
Подарок на новый год

Не знаю, что Дедушка Мороз принес под елку вам, но я своему подарку подивился знатно. А получил я фикс ранее зарепорченного бага в опенсорсной либе (видимо, хорошо себя вел). Это было совсем не то письмо, которое я ожидал увидеть в почте на праздниках. Даже сначала подумал, что это какой-то спам. Потому что ждал я этого ... 14 лет!

Летом 2012 года, когда я работал бекенд-разработчиком в Яндекс Почте, делал я одну тасочку про отображение приаттаченных картинок в веб-интерфейсе почты. Я даже нашел тикет в jira (да-да, тогда еще jira, сейчас он смигрирован в трекер) - WMI-303 (WMI == Web Mail Interface). Задача звучала так: "Разворачивать картинки согласно EXIF". И при решении этой задачи мне нужно было перезаписать данные об ориентации изображения, чтобы уже повернутая картинка имела "нормальную" ориентацию при скачивании из браузера.

Однако, при разработке я столкнулся с багом в библиотеке GraphicsMagick, которую я использовал для работы с жпегами - судя по моему комментарию к тикету, там "расходятся сишная реализация библиотеки и плюсовый интерфейс". Ну мы не гордые, мы поправим. Пара строк с приведением типов между C и C++ и полсотни строк с магией битовых масок и оффсетов. Я отправил фикс в опен-сорс, но его реджектнули (почему - уже не вспомню, а в тикет не написал). Поэтому я локально запатчил GraphicsMagick, админы его пересобрали и разложили, проблема ушла. Но ишью все же завел.

И вот, спустя почти 14 лет, мейнтейнер либы сообщает, что проблема исправлена! Некоторую нерасторопность он объясняет тем, что, мол, тяжело менять код, от которого ожидают, что он будет работать как раньше. Понимаю. Но лучше поздно, чем никогда. Или нет?

P.S. Если меня читает кто-то из Яндекс Почты - осторожней обновляйте GraphicsMagick, может что-то отвалиться на вебаттачах.
🔥205👍2
ʁиvɐdɯɔʚⱯ

Мы продолжаем изучать гастро-географию, и на этой неделе выпала Австралия.

Сын сразу нашел ее на глобусе и сходу выпалил, что это единственная страна, занимающая свой материк целиком, что находится она в южном в восточном полушариях, и что она пятая по площади в мире. И что туземцев там захватили англичане. А вот жена призадумалась.

Потому что какой-то своей ярковыраженной гастрокультуры там почти нет. Изначально кухня Австралии, по понятным причинам, формировалась из английской. Потом туда понаехали из самых разных стран и, как в любой стране нового света, получился фьюжн. В последнее время там, говорят, сильно увлеклись азиатской кухней, но своего придумали немного.

Да, какой-то локальный колорит все же присутствует. Могут и кенгуру зажарить, и крокодила схомячить. Но почему-то мяса кенгуру не нашлось ни в Лавке, ни в Еде. Однако, жене удалось наскрести каких-то местных рецептов и получилось следующее.

Во-первых, мясной пирог. Говорят, они только этими пирогами и питаются, и каждый австралиец съедает по 4 пирога в неделю. В пироге два вида теста (сверху слоеное, внизу скорее песочное) и рубленная говядина с тимьяном и вустерским соусом. Получилось вкусно и необычно, нам понравилось. Могу понять австралийцев.

Во-вторых, кукурузно-индюшачий суп с рисовой лапшой, соевым соусом и имбирем. Не так экзотично, прослеживаются азиатские мотивы, но, тем не менее - хорошо. Секрет в том, чтобы часть кукурузы загодя перетереть в пюре, а часть - добавить зернами.

В-третьих, на выходных нас ожидает что-то из креветок. Что именно - не знаю, просто видел, что креветки появились в морозилке. Оно и немудрено, когда у тебя страна со всех сторон окружена океанами. Да и креветки как ни приготовь - будет классно. Но что выйдет - вы так и не узнаете, потому что на следующей неделе будет уже новая страна, новые локал спешиэлитиз и новые факты о мире. Стэй тьюнд.
13🔥7
Как зайцу - стопсигнал

Очевидно, к 42-му году жизни автомобиля оптика уже изрядно уставшая. Мутная, выцветшая, морально устаревшая. К текущему моменту удалось заменить задние фонари. Новые - слегка затемненные, нарядные, яркие - благородно заняли свое место в задней панели без особых приключений. Хотя и тут не обошлось без подвохов.

Основная проблема заключалась в том, что прокладки между кузовом и фонарем, что были на старых фонарях, безнадежно дизассемблировались в пыль. А новые пришлось заказывать и две недели ждать. Зато, к моему удивлению, нашелся новый оригинал и за вменяемые деньги.

Также было подмечено, что работать из багажника (а фонарь крепится изнутри) легче Лехе. Мне скручиваться в три погибели было не с руки, а сыну там было вполне уютно. Да и для наживления мелких 8-мм гаечек его пальцы подходят лучше моих.

Результат - налицо. Точнее, на заднюю часть. Но все равно красиво. #лёха_строит_бэху
🔥23
Чтобы ракета летела, ее задняя часть должна гореть

Так и у нас... Да что я вам разжевываю, вы и так в курсе. Такое настроение на сегодня.
😁338🔥3🤝3👀1🫡1