<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Cooking on entangledDEV</title>
        <link>/tags/cooking/</link>
        <description>Recent content in Cooking on entangledDEV</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Sun, 01 Feb 2026 00:09:25 -0600</lastBuildDate><atom:link href="/tags/cooking/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Reactive Sous Vide Cooking</title>
            <link>/p/reactive-sous-vide-cooking/</link>
            <pubDate>Thu, 08 May 2025 22:52:30 -0600</pubDate>
            <guid>/p/reactive-sous-vide-cooking/</guid>
            <description>&lt;h1 id=&#34;sous-vide-is-the-combine-of-cooking-and-its-not-just-a-joke&#34;&gt;&lt;a href=&#34;#sous-vide-is-the-combine-of-cooking-and-its-not-just-a-joke&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Sous Vide Is the Combine of Cooking (and It&amp;rsquo;s Not Just a Joke)&#xA;&lt;/h1&gt;&lt;p&gt;Have you ever moved from imperative to reactive, functional Combine code and thought:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“Wait… why doesn’t everything work like this?”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That’s exactly how I felt after discovering &lt;strong&gt;sous vide cooking&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sous vide isn’t just a trendy food technique. It’s a &lt;strong&gt;declarative, functional, reactive system for cooking&lt;/strong&gt;. It replaces the chaos of heat guessing and overcooked edges with &lt;strong&gt;precise timing, temperature control, and fully composed flavour pipelines&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And yes — it’s basically Combine, but for food.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;traditional-cooking-is-imperative&#34;&gt;&lt;a href=&#34;#traditional-cooking-is-imperative&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Traditional Cooking Is Imperative&#xA;&lt;/h2&gt;&lt;p&gt;Most traditional cooking is full of guesswork, manual state management, and side effects. You:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Flip meat constantly&lt;/li&gt;&#xA;&lt;li&gt;Poke it to check doneness&lt;/li&gt;&#xA;&lt;li&gt;Guess when it’s ready&lt;/li&gt;&#xA;&lt;li&gt;Hope the inside isn’t raw while the outside burns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That’s imperative cooking — direct, stateful, and prone to edge-case disasters.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;isDone&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isDone&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;checkCenter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;flipSteak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hopeItWorks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;sous-vide-is-combine&#34;&gt;&lt;a href=&#34;#sous-vide-is-combine&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Sous Vide Is Combine&#xA;&lt;/h2&gt;&lt;p&gt;Now let’s look at sous vide — where you:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Set the desired temperature&lt;/strong&gt; (like defining a &lt;code&gt;Publisher&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Apply a precise duration&lt;/strong&gt; (like chaining &lt;code&gt;.debounce(for:)&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Add aromatics and fats&lt;/strong&gt; (like injecting dependencies)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Finish with a sear&lt;/strong&gt; (a side-effect terminal operator)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Suddenly, your food becomes a &lt;strong&gt;purely defined stream of transformation&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ribeyePublisher&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setTemperature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;54&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;forDuration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;combineLatest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thyme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;map&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sink&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That’s not just metaphor — that’s &lt;em&gt;real cooking logic&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;ingredients-are-data--the-bag-is-the-di-container&#34;&gt;&lt;a href=&#34;#ingredients-are-data--the-bag-is-the-di-container&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Ingredients Are Data — The Bag Is the DI Container&#xA;&lt;/h2&gt;&lt;p&gt;Before your food enters the pipeline, it’s prepared with all its required dependencies:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;strong&gt;protein&lt;/strong&gt; with defined attributes: cut, fat content, target temp&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Aromatics&lt;/strong&gt; like garlic or thyme&lt;/li&gt;&#xA;&lt;li&gt;Optional &lt;strong&gt;modifiers&lt;/strong&gt; like butter, ghee, miso, or oil&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You seal this together in a sous vide bag — your &lt;strong&gt;immutable dependency container&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;protein&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protein&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ribeye&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;temp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;54&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;flavor&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thyme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;garlic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;butter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;bag&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SousVidePackage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protein&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;additions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flavor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The bag acts like a sealed struct — containing everything your food needs to be transformed with &lt;strong&gt;zero mutation mid-process&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Once it enters the bath, it’s a pure, self-contained unit of flavour.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;cooking-pipelines-combine-style-breakdown&#34;&gt;&lt;a href=&#34;#cooking-pipelines-combine-style-breakdown&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Cooking Pipelines: Combine-Style Breakdown&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Combine Operator&lt;/th&gt;&#xA;          &lt;th&gt;Cooking Equivalent&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.setTemperature(_:)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Declare target doneness&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.forDuration(_:)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Sous vide cooking time&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.combineLatest&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Add infused flavours (herbs, fats)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.map&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Sear, smoke, or torch the result&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.delay(for:)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Resting time&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.sink&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Serve the final plate&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Sous vide lets you build entire meals this way. Want to run proteins and veggies at different temps? Just spin up two pipelines (containers + circulators), and compose your plate from multiple streams.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;why-this-actually-matters&#34;&gt;&lt;a href=&#34;#why-this-actually-matters&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Why This Actually Matters&#xA;&lt;/h2&gt;&lt;p&gt;This isn’t just a metaphor — it’s &lt;strong&gt;functionally better cooking&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Most of the cooking process becomes &lt;strong&gt;purely declarative&lt;/strong&gt;:&lt;br&gt;&#xA;you describe the end state (target temperature, duration, flavour infusions), and the sous vide system ensures it reaches that state with precision.&lt;/p&gt;&#xA;&lt;p&gt;And yes, we still use &lt;strong&gt;imperative cooking&lt;/strong&gt; — but only at the end.&lt;br&gt;&#xA;The sear, the smoke, the torch — these are &lt;strong&gt;controlled, purposeful side effects&lt;/strong&gt;, isolated to a small, well-defined step. That step is short, visible, and &lt;strong&gt;easy to get right&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This separation of concerns means:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The majority of the cooking is error-free and repeatable&lt;/li&gt;&#xA;&lt;li&gt;The only mutable phase is &lt;strong&gt;optional and cosmetic&lt;/strong&gt; (crust, browning)&lt;/li&gt;&#xA;&lt;li&gt;You dramatically &lt;strong&gt;minimise the risk of failure&lt;/strong&gt;, because 95% of the process is handled declaratively&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Just like a good software architecture, sous vide &lt;strong&gt;isolates the risky, stateful parts of the process&lt;/strong&gt;, keeping them out of the core logic — and your food is better for it.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;structuring-your-meal-as-data&#34;&gt;&lt;a href=&#34;#structuring-your-meal-as-data&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Structuring Your Meal as Data&#xA;&lt;/h2&gt;&lt;p&gt;With sous vide, you start thinking in food components:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Protein&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Cut&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Grams&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;desiredTemp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Celsius&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;aromatics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Herb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Even flavour additions can be &lt;strong&gt;typed&lt;/strong&gt; and &lt;strong&gt;quantified&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;protocol&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Flavoring&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;associatedtype&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unit&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Salt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Flavoring&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;typealias&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unit&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Grams&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Grams&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Thyme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Flavoring&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;typealias&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unit&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sprigs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sprigs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each ingredient can now express &lt;strong&gt;what it is&lt;/strong&gt; and &lt;strong&gt;how much of it belongs in the bag&lt;/strong&gt;, keeping your recipe data clean, predictable, and reusable.&lt;/p&gt;&#xA;&lt;p&gt;The more you model your meals like this, the more you realise:&lt;br&gt;&#xA;you’re not improvising — you’re &lt;strong&gt;declaring data&lt;/strong&gt;, composing systems, and defining a pipeline that transforms raw input into delicious output.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;&lt;a href=&#34;#conclusion&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Conclusion&#xA;&lt;/h2&gt;&lt;p&gt;Sous vide didn’t just improve my meals — it changed the way I think about food.&lt;/p&gt;&#xA;&lt;p&gt;It’s precise. It’s elegant. It’s &lt;em&gt;reactive&lt;/em&gt;.&lt;br&gt;&#xA;It respects the ingredient, avoids mutation, and lets me compose my meals with confidence.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;And perhaps most beautifully: with sous vide, you &lt;strong&gt;start the pipeline&lt;/strong&gt;, walk away, and &lt;strong&gt;wait for the system to emit a ready-to-finish result&lt;/strong&gt; — perfectly aligned with Combine’s flow.&lt;/p&gt;&#xA;&lt;p&gt;You don’t poke or poll. You don’t micromanage.&lt;br&gt;&#xA;You &lt;strong&gt;subscribe once&lt;/strong&gt;, and the water does the rest.&lt;br&gt;&#xA;All you need to do… is &lt;code&gt;sink { searAndServe($0) }&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Combine your flavours.&lt;br&gt;&#xA;Compose your meals.&lt;br&gt;&#xA;Serve with intention.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You’re not just cooking.&lt;br&gt;&#xA;You’re declaring dinner.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;PS: No &lt;code&gt;sink&lt;/code&gt; was harmed in the making of this ribeye.&lt;/em&gt;&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
