В общем, была задача на оптимизацию плана работ: есть набор заказов, и в каждом N тасков. Таски могут зависеть друг от друга или нет, имеют длительность и тип. Ещё есть M работников, каждый из которых может выполнять таски только определённых типов, причём, у каждого своя скорость.
Если все таски в заказе выполнены, фирма получает сколько-то денег. У заказа есть дедлайн, за просрочку штраф (за каждый день просрочки), который вычитается из цены заказа. И ещё фирма тратит деньги за каждый день своей работы независимо от того, как загружены её сотрудники (то есть просто платит зарплаты по сути). Ещё важен учёт праздников и выходных.
Нужно заработать на определённом наборе заказов и работников как можно больше денег. Полный текст задачи и код программы проверки есть в репозитории. Эта задача является изменённым заказом, который мы с напарником решали в реальной жизни: оптимизация работы печатных станков для типографии. Правда, тогда и мы справились так себе, и заказчик в итоге сначала захотел всё вручную сам делать, а потом и вовсе похоронил проект при смене директора.
!!! Не читайте дальше, если хотите сначала попробовать решить самостоятельно, потому что я сейчас опишу эффективные подходы и результаты.
________________________________________
Так вот. Мы с другим экспертом Андреем сразу сели и написали разные варианты, чтобы задать шкалу, по которой будем оценивать решения команд. За пару часов я собрал примитивный жадный алгоритм, который сортировал заказы по прибыльности и укладывал в сетку кое-как, это дало нам нижнюю оценку. Мой алгоритм заработал ~75 млн виртуальных рублей, мы решили для оценки поставить нижней границей 40 млн. То есть всё, что ещё ниже, оценивалось в ноль баллов за качество оптимизации.
Затем Андрей закрылся дома на три дня и вышел на свет со сложным жадным алгоритмом, который очень хитро сортировал заказы и очень хитро укладывал их в сетку, попутно выбирая разные способы этой укладки в зависимости от конкретного заказа. Это позволило заработать ~275 млн рублей. Мы сделали верхней границей для оценки 280 млн.
К сожалению, в итоге только две команды из десяти прошли нижнюю границу, заработав, соответственно, ~91 и ~105 млн. К верхней границе не приблизился никто. И у четырёх команд алгоритм вообще не смог уложить без нарушений задачи в сетку (то есть, например, произвольно менял длительности, накладывал задачи друг на друга, давал одному работнику две задачи в один момент и так далее). Важной ошибкой команд, на мой взгляд, являлся тот факт, что никто не воспользовался возможностью запустить алгоритм на несколько минут и дать ему поработать. По условиям задания, можно было тянуть до 5 минут на одну оптимизацию, но по факту решения команд отрабатывали за единицы и десятки секунд.
На самом конкурсе, пока команды работали, я решил попробовать сделать быстрое (по времени написания) но эффективное решение. Сначала попробовал жадную сортировку + доведение до лучшего варианта методом имитации отжига. В качестве нового состояния я просто менял местами заказы целиком. Этот вариант работал пару минут и дал мне около ~200 млн дохода. К слову, команда-лидер использовала такой же подход, просто не докрутила число итераций и температуру.
Ну и потом я взял готовую либу по реализации классической генетики с особями и скрещиванием. Особью был массив с приоритетами заказов (которые конечно же нужно было аккуратно уложить чистым алгоритмом). Тип скрещивания: scattered. Всего 15 поколений по 20 особей, и это за минуту-полторы давало ~230-240 млн. Считаю, что для конкурса это самый лучший выбор: пишется одним человеком за день и даёт почти максимум, при этом легко настраивается на нужную длительность работы, легко параллелится.
Ну а потом уже дома я посидел и накодил свой вариант сложного жадного с плавающим окном перебора отсортированных заказов и плавающей же укладкой по работникам. Такая штука за две минуты зарабатывает ~281 млн. Но за три дня в условиях стресса я бы такое не сделал, скорее всего.
#dev
Ben Edgington | 𝕏🧵
RT @weboftrees: 🧵Introducing EIP-7999: Unified multidimensional fee market.
Ethereum is like a supermarket with one inventory label. There are 45M eggs, 45M cheese, 45M snacks. etc, but everything scans as "1 food". To avoid empty shelves, it closes once 45M food has been sold during the day.
~
₿izFeed#⃣:#dev#ETH
Ben Edgington | 𝕏🧵
RT @parithosh_j: The data from this devnet would be a really important data point for deciding what blob values we choose for the first bumps after PeerDAS goes live in Fusaka. Its great to see the @testinprod_io and @base help make it a reality!
~
₿izFeed#⃣:#dev#ETH
Ben Edgington | 𝕏🧵
RT @testinprod_io: The largest Fusaka devnet is now being geared up!
@testinprod_io and @base, who have been putting efforts to L2 scaling by contributing PeerDAS as a part of @Optimism Collective, are now teaming up with @ethPandaOps to run the biggest devnet in the history.
~
₿izFeed#⃣:#dev#ETH
vitalik.eth | 𝕏🧵
In the medium term I want some fancy BCI thing where it shows me the thing as it's being generated and detects in real time how I feel about each part of it and adjusts accordingly.
~
₿izFeed#⃣:#dev#ETH
vitalik.eth | 𝕏🧵
These days I get much more excited about open-weights AI models with good *editing* functionality than those that are just for creating from scratch.
~
₿izFeed#⃣:#dev#ETH
vitalik.eth | 𝕏🧵
Echoing something @karpathy recently said, it does frustrate me how a lot of AI development is trying to be as "agentic" as possible, when actually creating *more* paths for human input both creates a better output (now for quite a while going forward) and is better for safety.
~
₿izFeed#⃣:#dev#ETH
Болото из MVP, 🔨 и 🪚
В этом месяце Sketch выкатил обнову со Smart Layout, но не полноценно как в Figma или даже лучше, а тупо в Beta. При всей любви к Sketch, у меня не укладывается в голове — как отстающая компания продолжает делать на пол Фёдора? Если вы каждый месяц проигрываете гонку за пользователей, то надо быть минимум на шаг впереди по новым фичам, а не огрызки показывать.
Не знаю как вы, но я всё чаще замечаю как компании злоупотребляют сырыми продуктами, которые преимущественно не доходят до нормального вида, обрастают костылями и жду своих редизайнов с переосмыслением годами. Все эти попытки выпустить MVP побыстрей, чтобы получить заветную обратную связь, чтобы потом улучшить свою идею, по факту стали мечтами и превратились в инструмент лени с плохим планированием. У MVP понятный принцип, он должен быть простым, но функциональным, чтобы пользователи могли оценить идею и её потенциал. Но в итоге мы часто видим сырое дерьмище, а не функциональное вкусняшку. Вместо того, чтобы работать над полноценным продуктом, компании создают пылесосы для денег, а план по экономии времени и ресурсов исчезает через пару месяцев.
Использование MVP должно быть осознанным решением, основанным на стратегии дальнейшего развития, например: у PO с дизайнером продукта есть финальная картина в голове, её пилят на малые части и эти части делают пиздато, первую часть релизят как MVP. Вот это лайк, вот это кайф. В современном мире, где технологии и инновации развиваются стремительными темпами, а многие стремятся создать минимально жизнеспособный продукт, кажется, залог успеха — ставить качество в приоритет.
🕳
🎞Добавил видео отображающие моё отношение к происходящему вокруг: рандомная компания год делала свой MVP с кучей компромиссов и ограничений и накопила большой технический долг. В итоге выпустила кал, который никому не нужен, но за то получили обратную связь — «Мы подтвердили гипотезу, пользователям нужны двери и стекла, а ещё им важны удобные сидения с ремнями безопасности».
#мысли#dev
💬Threads → 📸 Stories
Да-да-да, клон твиттера, но без анархии Маска и не ясно чем по итогу нужно пользоваться, но я хочу вбросить тему про Add to story.
Threads хорошо напомнил всем нам, как можно работать с Facebook SDK по публикации в Stories/Posts. Ребята заюзали свой же соседний сервис для дополнительного охвата и сделали красиво.
На моей памяти Yandex Drive в свои времена аналогично использовал SDK инсты для шэринга промокода. Сейчас они убрали кнопку перехода в Stories (наверно затрахались следить за обновлениями в SDK), добавил пример. Других ярких кейсов не могу сходу назвать, если что, пишите в комменты.
Глядя на такую хорошую реализацию Threads, в которой они поддерживают локаль + стиль темы, я в свой чек-лист по созданию проектов добавил пункт — «Возможность использования Add to story». Вариантов использования может быть много, например:
🍷 Доставка товаров/винный — карточка с рейтингом, ценой, сочной фоткой товара/бутылкой вина
💳 Финансы — карточка с курсом валюты или тариф/карта с бонусами
🎞 Стриминговый сервис — карточка с обложкой видео/трека, просмотры/прослушивания, длительность
👍 Принцип вы поняли
𐄂 𐄂 𐄂
Продукт через свою аудиторию получает дополнительный канал упоминаний и присутствия, а по тапу переход в прилож/сайт, профит.
Ⓜ️SDK for Developers
#мысли#dev
🍏Camera Control
Кажется, Эппл задал новый тренд для китайских телефонов и скоро мы увидим множество похожих на Camera Control кнопок
🥱
Я почитал спеку и там есть интересные моменты, смотрите:
✓ Данный контрол может использоваться только для приложений, которые работают с камерой (иначе будет реджект по HIG)
✓ Внутри контрола можно использовать только SF Symbols
✓ Если вы ранее использовали кнопки на превью камеры — переносите их в новое меню
🤤
🔗HIG Camera Control
Теперь вы тоже вооружены, чао!
P.s. Есть ещё прикол с камерой. 11 лет назад в iPhone 4 уже был слайдер переключения режимов как в новой iOS. Вот так камбэк :)
#apple#dev
Делай раз, делай два, Air Pods считает за тебя
Вы знали что через AirPods можно слушать музыку, аудиокниги и вообще какой-то аудиопоток? Понятно что знали, вы же не дикари. А знали что в AirPods (3-го поколения), AirPods Pro, AirPods Max и Beats Fit Pro есть датчиками движения, через которые можно:
• Считать прыжки
• Считать количество приседаний/отжиманий/других упражнений
• Использовать iPhone/iPad как микрофон и транслирует звук прямо в наушники
Для всех кто пилит свои приложки про фитнес, спорт или что-то смежное, можно использовать real-time sensor API для лучшего UX и погружения:
🍏CMHeadphoneMotionManager
🧰Code Examples на GitHub
🕹Headphone Motion Unity Plugin
Рефы:
Fitnexx, YaoYao, Posture Pal, Live-прослушивание
#apple#dev