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

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

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

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

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

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

Я, когда впервые открыл этот интерфейс, был обескуражен обилием возможностей и контроля. А самое удивительное, что оно супер-удобное и работает очень даже шустро. Несмотря на то, что это монолит на питоне. Кстати, его бы-таки распилить. Так что если вы любите жесткое техно и умеете в питон/голанг, мы вас ждем тут (всех остальных крутых разработчиков, аналитиков и мл-щиков тоже ждем, вы гляньте там, много вкусного).
👍11😁4
Buckets Empire

Для продолжения #лёха_строит_бэху нужно, чтобы бэха вернулась из сервиса по слесарке. Но и без авто-контента я не оставлю ни Лёху, ни канал.

Выходные без тачек - пустая трата времени. Поэтому мы отправились в музей старых японских ведер. Точнее, в два его филиала, в Кузьминках и в Орехово. Там в сумме 200+ тачек из 70-х, 80-х и 90-х. Те самые теплые-ламповые машины, от которых в душе что-то шевелится, в отличие от всего современного автопрома. Царство велюра и слепых фар. Антураж музея дополнен старыми японскими магнитофонами и музыкой из форсажа и нид-фор-спида.

И как не упомянуть олдовый игровой автомат, на котором Леха посоревновался в скорости доставки тофу на хачироку!

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

На обратном пути заехали в магазин Форвард Авто. Мы с Лёхой уже сколько лет болеем за их команду в дрифте - и ни разу не были в их магазине, надо было исправлять. Увы, восхищаться мы к тому моменту уже устали, а все слюни выпустили в музее. Поэтому в Форварде взяли сыну кепку и модельку, а на около-стоковую е30 у них, ожидаемо, ничего не было.
93👍1
К ветеранам C++

Как вы все помните, C++ - лучший язык программирования. Нет задач, которые нельзя на нем решить. Так что в любой непонятной ситуации - используйте плюсы. В моих командах в Лавке, увы, плюсы почти не используются. Запрещать им где-то переходить на плюсы - грех. Заставлять - садизм. Так и живем.

Есть же еще userver - дружелюбный опен-сорсный фреймворк для С++, родившийся в Городских сервисах Яндекса. Штука классная - снижает порог входа, снимает много болей, повышает продуктивность разработки. Но есть нюанс.

Честно говоря, сам я перестал писать на плюсах еще во временя 17го стандарта, и новинок 21 в глаза не видел. Но если вы - практикующий плюсарь и следите за трендами - рекомендую заскочить на встречу российской рабочей группы по стандартизации С++ 15 декабря в 18:30 (Москва + онлайн) - это «голос» русскоговорящих разработчиков в вопросах совершенствования стандарта языка. Встречу проведёт тот самый Антон Полухин, член российской рабочей группы по стандартизации С++ и руководитель группы общих компонент в Техплатформе Городских сервисов Яндекса. Будут и ответы на вопросы о стандарте С++, и афтепати.

А если вы уже достаточно суровы и бородаты, у нас и вакансии есть - советую присмотреться!
🔥8321
Ложь и провокация

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

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

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

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

Проверяйте свои источники и не верьте интернетам на слово.
💯238😁31
"Саша, иди на завод, там нужны рабочие руки!" (с) сценка из квн

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

Что такое завод? Ну, в общем, это настоящий завод. Три этажа, несколько десятков цехов, сотни единиц номенклатуры, тысячи техпроцессов, тьма приборов, станков, автоматов и конвейеров. Говорят, это самое эффективное производство еды в разрезе производительности на единицу площади. Например, там есть автомат, который может лепить несколько тысяч сырников в час! Его даже приходится "убавлять", чтобы эти сырники успевали от него отгружать. Бульоны варятся в семи баках на 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