TGViewer
Channel Public Channel
Ворчливый IT-дед

Ворчливый IT-дед

@vit_ded

Авторская колонка, в которой ворчит Дмитрий Александров (руководитель подразделения разработки в Яндекс Лавке).

По вопросам рекламы ... можете даже не писать, а то развели тут свою коммерцию, честным людям высказаться негде, все завалили рекламой
Subscribers
1.32K
Photos
522
Videos
8
Links
107

Showing posts older than #227 · Back to latest

Older Posts 7 shown
Post #226 771
Подарок на новый год

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

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

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

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

P.S. Если меня читает кто-то из Яндекс Почты - осторожней обновляйте GraphicsMagick, может что-то отвалиться на вебаттачах.
  • 🔥 20
  • 👍 2
Post #225 730
Inner-source

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

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

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

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

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

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

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

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

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

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

Зато результат, кажется, получился отменный. Кресла теперь аутентичные (ранее стояли какие-то левые от е90, их продал на авито, притом спрос на них оказался бешеный - мне за день написало и позвонило 15 человек) и в нарядной ткани. Это что-то среднее между оригинальным motorsport-исполнением и ваговской gti-клеткой. Мне нравится. #лёха_строит_бэху
  • 👍 19
  • ❤ 1
Post #211 809
С новым 56-м годом

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

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

Увидимся после праздников. Обнял.

Важный дисклеймер (есть в закрепе)
Предыдущий дайджест

Разработческое:
Питон
Да сколько можно отчитываться то?
Курсор и его друзья (тесты)
HRBP
Техноцели
str = 'Quoliti Ashurenes'
К ветеранам C++
Все яйца в одну корзину
Эффективность разработки

DevRel:
Highload++ 2025
Яндекс - уже не торт
Сферический код в вакууме
[▮▯▯▯▯}

Лавка изнутри:
На собственной шкуре
"Ура, склад!" (с) Шарик
Саша, иди на завод, там нужны рабочие руки!
Полный оффлайн
Распределительный Центр
Есть горячее

#лёха_строит_бэху
Со звуком "дзынь"
Разборки
304 Not Modified
Buckets Empire
Тест на мужика
Как бы да, но как бы нет

Дедовское:
Привет. Есть вопрос.
Скрепы, православие, духовность
Знал бы прикуп - жил бы в Сочи
Этот ваш хваленый ИИ ничего не может
Восьмой класс, вторая четверть
Ложь и провокация
Unplugged
Ливийские недели в Макдоналдс
С наступающим!
  • 🎉 12
  • ❤ 2
Post #209 779
С наступающим!

Дорогой Дедушка Мороз!
Честно говоря, я не очень-то хочу именно Новый год.
Я вполне согласен на слегка подержанный 2019.
Или 2007, если остался в неплохом состоянии.
Спасибо.

(украдено и переведено с 9gag, но такое вот настроение)
  • 🤣 20
  • 💯 14
  • 😁 10
  • 🤝 2
  • 😢 1
Post #203 814
Ливийские недели в Макдоналдс

Жена нашла креативное решение вечной проблемы "что бы приготовить?". 2026 год в моей квартире объявлен годом познания кухонь мира. Для этого были изготовлены фанты с ~60 странами (нагенерили из головы, что первое вспомнилось), и теперь каждая неделя знаменуется познанием местных специалитетов.

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

Гастрономическая культура Ливии характеризуется обширным использованием круп и бобовых (кускус, булгур, фасоль, нут), мяса (ягнятина, говядина) и специй (кумин, паприка, томатная паста). А первыми экспериментами на нашей кухне стали мбатан (запеченый картофель, фаршированный бараньим фаршем с луком и специями) и шарба (суп, напоминающий харчо). Получилось вкусно и познавательно. Блюда получаются в меру пряные, сытные и необычные. Также, по прогнозам, на этой неделе ожидаются шакшука, базин и таджин махши (кто бы это ни был).

А помогать в нашей новой забаве нам будут, конечно же, Лавка и Еда. Думаю, ассортимента там хватит на все 60 запланированных стран со всеми их особенностями, традициями и гастрономическими девиациями. Хотя, неровен час, придется и на фудсити съездить (это такой мега-рынок продуктов, где можно найти хоть чёрта маринованного в собственном соку).

Если у вас есть интерес к такой рубрике в моей колонке, поддержите лайком. И будем в новом году изучать гастро-глобус вместе, а там, глядишь, начну аутсорсить тексты силами жены)
  • 🔥 36
  • ❤ 15
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →