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

По вопросам рекламы ... можете даже не писать, а то развели тут свою коммерцию, честным людям высказаться негде, все завалили рекламой
Download Telegram
"Саша, иди на завод, там нужны рабочие руки!" (с) сценка из квн

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

Что такое завод? Ну, в общем, это настоящий завод. Три этажа, несколько десятков цехов, сотни единиц номенклатуры, тысячи техпроцессов, тьма приборов, станков, автоматов и конвейеров. Говорят, это самое эффективное производство еды в разрезе производительности на единицу площади. Например, там есть автомат, который может лепить несколько тысяч сырников в час! Его даже приходится "убавлять", чтобы эти сырники успевали от него отгружать. Бульоны варятся в семи баках на 300+ литров (притом бульон для фо-бо варится аж 6 часов). А прибор для нарезки перемалывает почти 10 тонн морковки за одну смену. Куда столько? Ну, люди любят салатики)

Когда попадаешь на наш завод, первое, что удивляет - это уровень стерильности. Попасть на производство сложнее, чем в операционную - халаты, балаклавы, маски, 4 степени очистки и дезинфекции каждого входящего, инсектицидные лампы. Даже лифты разделены - чистый (для продукции) и грязный (для сырья и тары). И само производство оставляет впечатление очень выверенного, прозрачного и подконтрольного. Вот есть поверье - "кто на мясокомбинате работал, тот колбасу не ест". И знаете что? У меня лишь укрепилось мнение, что нашей готовой еде можно доверять. Тут все серьезно. На конвейерных линиях есть даже металлодетекторы на случай попадания посторонних предметов в упаковку (например, если вдруг из-за неисправности какого-то оборудования в пищу попадет металлическая стружка)!

Но при чем тут IT - спросите вы. А без IT современное производство обойтись не может. Техпроцессы, планшеты, ТСД, экраны, сеть, принтеры этикеток, датчики на станках, камеры, контроль качества, учет, поставки, склад, отгрузки - все это связано в живой IT-организм, который должен быть здоровым и эффективным. А системами учета, процессами, софтом и ит-инфрой занимаются как раз мои команды. И все это - офигенно сложно. Зато интересно и кайфово. Много систем, немного магии. В каждом рецепте есть щепотка кода, чтобы блюдо удалось на славу. Приятного аппетита!
🔥37👍9
Все яйца в одну корзину

Как я уже упоминал, на дарксторах Лавки происходит множество удивительных операционных процессов. Например, переборка яиц. Как минимум такую строчку я видел в одной из волшебных экселек. Я пока не убедился, что это именно то, что я себе представил, но предположим, что суть процесса в том, чтобы перекомплектовать лотки так, чтобы не продавать разбитые яйца.

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

Написать функцию, которая на вход принимает строку. В строке последовательности нулей (целое яйцо) и единиц (битое яйцо) по 10 в ряд (лоток вмещает 10 яиц) разделены пробелами (считаем, что входные данные корректны). На выходе нужно в аналогичном формате получить лотки так, чтобы в начале строки были все целые, в правой - битые, а также количество лотков, которые можно считать товарными (содержащие только целые яйца).
Пример:

'0101010101 1010101010 0101010101' -> '0000000000 0000011111 1111111111', 1.

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

def eggs(s):
lst = list(s)
i, j, full = 0, len(lst)-1, 0
while (lst[j] == '1' or lst[j] == ' ') and j >= 0:
j -= 1
while i<j:
if lst[i] == ' ':
full += 1
elif lst[i] == '1':
lst[i], lst[j] = lst[j], lst[i]
j -= 1
while (lst[j] == '1' or lst[j] == ' ') and j>i:
j -= 1
i += 1
if i == len(lst)-1 or lst[i] == ' ':
full +=1
return ''.join(lst), full


Не самое элегантное и читаемое. Любой олимпиадник тут же сочтет это решение довольно наивным и предложит альтернативу. Особенно если мы еще и целимся в правила код-гольфа (кто не знает - это такой вид контеста, где нужно решить задачу наименьшим количеством символов кода). Например, в таком духе (тут я осознанно не пускаюсь в лишние оптимизации и сокращения, чтобы сохранить хоть толику читаемости. Это в контестах/код-гольфе код чисто write-only, а мы тут просто балуемся):

def eggs(s):
solid = s.count('0')
full = solid // 10
res_full = ('0' * 10 + ' ') * full
res_mixed = '0' * (solid % 10) + '1' * (10 - (solid % 10 if solid % 10 else 10))
res_broken = (' ' + '1' * 10) * (len(s.split()) - full - (1 if res_mixed else 0))
if not res_mixed:
res_broken = res_broken.lstrip()
return (res_full + res_mixed + res_broken).strip(), full


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

P.S. Я сомневаюсь, что мы правда пишем алгоритмы таких ручных операций. Этот пост - лишь еще одно метафорическое описание отличий операционного продукта от pure-digital.
P.P.S. На всякий случай оставлю тесткейсы для задачки - https://telegra.ph/tests-12-09-3. Кто напишет в комментариях самое короткое решение (по правилам код-гольфа), получит от меня в личку мой любимый стикерпак и ссылку на вакансии)
🤯431👍1🔥1
Тест на мужика

По теме #лёха_строит_бэху движений много, контента мало. Машина заканчивает слесарку, на днях заберу. Салон отдан в перешив, тканьи подобраны, будет до конца года. Фонари новые купил. Фары едут из Пскова. Ноздри едут из Тюмени. Обвес ищем. По оклейке договорился. В общем, тот, кто хоть раз связывался с подобными проектами, понимает, что каждую неделю выдавать контент почти нереально. Так что пока ждем.

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

шарошка
фреза
цанга
штуцер
ввертыш
фланец
метчик
седёлка
коуш
струбцина
надфиль
бородок
вороток
скарпель
нивелир
кельма
сапун
соленоид
шток
футорка
таль
траверса
рым
вертлюг
талреп
обушок
люверс
сальник
клеммник
контактор
припой
канифоль
гусак
швеллер
двутавр
шплинт


Если тебе знакомы все эти понятия, ставь 💯
- скорее всего, ты продавец в техмаркете.
Если знаешь от 30 до 35 вещей, ставь 🏆
- тебе присуждается звание "Рукастый мужик I степени".
Если знаком с 20-30 предметами, ставь 👌
- ты найдешь в техмаркете то, что тебе нужно (наверное).
10-20 наименований есть в кладовке - ставь 👍
- ты уже крутой, я простые вещи сюда не писал.
5-10 штучек где-то слышал - ставь 🤔
- лампочку вкрутить ты сможешь, остальное не твое.
Меньше 5 знакомых слов - ставь 😱
- профи-ру тебе в помощь, а у тебя есть дела поважнее.
🤔16👍15😱13🏆8👌62💯21
Полный оффлайн

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

Я о нем знал давно, но только с неделю назад добрался до него ногами. Первое впечатление - очень стильно, чисто, много редких sku. Магазин небольшой, но корзинка все равно набирается полная - всего хочется. Там много наших СТМ (включая, разумеется, готовую еду с нашего завода), много вкусностей и деликатесов - аж слюнки текут.

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

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

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

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

Начнем с простого. "Внедрить куда-нибудь ИИ" не равно "повысить эффективность разработки". Это не значит, что использовать ИИ не нужно вовсе. Но сначала нужно проанализировать область применимости в зависимости от задач команды. Потом понять рычаг влияния в тех или иных местах. Если ИИ оптимизирует втрое затраты на задачи, составляющие 2% от нагрузки на команду - вы больше потратите на внедрение. А экономия 20% от задач, занимающих 80% команды - уже заметно.

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

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

В общем, берите эффективность в свои руки. Никто лучше вас не придумает, как вам помочь быть продуктивней. Анализируйте свою занятость, рефлексируйте над процессами, находите подходящие инструменты и действуйте.
💯2853
Распределительный Центр

РЦ - это как ДЦ, но вместо юнитов - паллеты, и перемещаются они чуть чаще.
Я продолжаю познавать Лавку изнутри. В предыдущих сериях:
Даркстор глазами кладовщика
Даркстор глазами директора
Завод готовой еды
Оффлайн-магазин
А на прошлой неделе я съездил в наш РЦ, чтобы осознать часть того пути, который проходит товар от поставщика (или с завода) на дарксторы (или в оффлайн-магазин).

Знаете ли вы, чем отличается рохля, ступа, штабелер и погрузчик? Я теперь знаю. Начнем с того, что у них общего - есть вилы для подъема паллет. Только рохля работает за счет мышечной силы, ступа не только ездит сама, но и возит сотрудника (на небольшой огороженной площадке, похожей на ступу бабы-яги), штабелер поднимает паллеты на верхние полки с помощью телескопической стрелы, а погрузчик - грузит груз в грузовики.

Кто-то должен всем этим парком управлять - таких сотрудников на РЦ сотни. А кто управляет ими? Конечно, есть бригадиры и другой управляющий состав. Но без цифровизации и автоматизации тоже никуда. Поэтому существует специальная WMS для РЦ, в которой появляется информация о заданиях, товарах и их перемещении, поставках и отгрузках. Отдельно для ТСД линейного персонала, отдельно для компьютеров управленцев. Она похожа чем-то на WMS для дарксторов, только еще более мощная и развесистая - на ней работают сотни бизнес-процессов разных частей Яндекса. Но под наши конкретные задачи там еще есть что доделать, чтобы добиться максимальной эффективности.

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

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

IT-инфры там тоже очень много. Начиная с сети, видеонаблюдения, серверной, коммутационных и хранилища данных, и заканчивая умными шкафами с ячейками для ТСД и зарядной инфраструктурой для погрузочной техники. Без крутых технологий РЦ на педальном приводе попросту не успеет поставить товар на дарки, чтобы вы могли в любой день насладиться своим Медовейником из Лавки. Всем ALOSA*, пацаны!

* ALOSA - anyline on-shelf availability - одна из операционных метрик, отражающая процент доступности к заказу минимум одного товара из каждого самого глубокого уровня категорийного дерева, чтобы мочь закрыть потребность человека в любом свойстве.
👍16
Unplugged

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

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

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

Умный дом превращается в тыкву. Связаться с людьми не получится (все ушло в мессенджеры - у вас вообще много телефонов людей есть? а смску вы когда последний раз отправляли?). Оплатить покупку не получится, сервисы не работают (как показал блекаут мобильного интернета весной - инфраструктура города встает колом). Маршрут не построить, расписание автобусов не посмотреть - если из вас выдернуть провод, вы так и будете беспомощно стоять посреди города и не понимать, куда и зачем вам идти.

А что дальше? Не попасть домой, потому что умный замок тебя не узнает? Не попить кофе, потому что кофемашина управляется только со смартфона? Не сделать воду погорячее, если Grohe таймаутит? Не получится воспользоваться смывом в унитазе при недоступности сервера Villeroy&Boch? Нафиг такое будущее.

И с одной стороны, все современные технологии добавляют удобства. Но завязываться на них в критичных вопросах без резервирования - так себе затея. В конце концов, Илья Сегалович еще 22 года назад говорил "1. Прогресс неостановим. 2. Работать всё равно ничего не будет". Давайте уметь обходиться без always-on сети и уметь получать удовольствие от жизни не-в-экране.
👍20💯51👎1🤝11
Как бы да, но как бы нет

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

Но не буду. Потому что есть и несколько ложек дёгтя.

Ложечка за маму: вот объясните, почему с каждым первым сервисом одна и та же проблема - приезжаешь с одним списком работ, сервис рекомендует еще какие-то критичные вещи, и в итоге делает больше из своего списка, чем из моего? То есть из того, что мне было важно, половина остается не сделанной?

Ложечка за папу: вот почему примерно всегда ты объясняешь проблему, сервис выполняет ряд работ, по идее направленный на устранение этой проблемы, а проблема остается? Мне перебрали половину тормозной системы, а педаль как проваливалась, так и проваливается? Просто стоишь на светофоре на тормозах, а педаль медленно уползает из-под ноги. Меня это, почему-то, смущает.

Ложечка за бабушку: и всегда так, что большая часть работ выполнена хорошо, но найдется пара мест, где прям трешово. Например, у поддона двигателя просто отсутствует один из болтов и оттуда уже поддавливает масло. Забыли? Не хватило болтов? Не стреляет болт? Фиг знает, но это треш.

Ложечка за дедушку: и обязательно после сервиса появится проблема, которой не было до. И с одной стороны, нет никаких весомых доказательств, что сервис к этому причастен, но в такие совпадения я не верю. Например, у меня после сервиса пропала пятая передача. Я к ним на ней ехал же. А выехал - и пятой на месте попросту не оказалось. Как так то?

Кушайте - не обляпайтесь. А требовать исправления уже сил нет, сервак в области, к ним не наездишься. Что ж, ладно, тем не менее - машина стала надежней, комфортней и безопасней. Стала ли она конфеткой - очевидно, нет. Но будем продолжать работы по остальным направлениям, а остальное - как-нибудь позже добьем. #лёха_строит_бэху
😢13🌚4🔥2🙈1
Есть горячее

Если вы в приложении Лавки по своему адресу видите раздел с горячей едой, значит в ближайшем дарксторе есть так называемый модуль кухни. Там готовят еду "из под ножа" - индивидуально под вас, непосредственно после заказа. От хотдогов и бургеров до шницеля с гречкой и колбасок с драниками. В отличие от готовой еды, позиции раздела "Есть горячее" готовятся поварами на дарке и приезжают (о, чудо) горячими. Кроме того, там готовится кофе и выпечка.

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

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

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

Приправим блюдо учетными и нормативными факторами - нужно распечатать этикетку с реальным составом (он может варьироваться в зависимости от партии из поставки) и даже зашить в штрих-код точный вес продукции. А принтеры эти весьма капризны, надо сказать - это вам не ctrl+P нажать, они управляются из кода и ломаются при добавлении элемента в enum.

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

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

То есть мы берем всю операционную сложность кафе, накладываем на операционную сложность дарксторов и - вуаля - получаем весьма сложный путь от упаковки сосисок на полке к хот-догу у вас в руках. Зато горячо и сытно. Приятного аппетита!
8👍6🔥4🤯1
Ливийские недели в Макдоналдс

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

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

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

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

Если у вас есть интерес к такой рубрике в моей колонке, поддержите лайком. И будем в новом году изучать гастро-глобус вместе, а там, глядишь, начну аутсорсить тексты силами жены)
🔥351592