<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Avi Chandra</title><link>https://avichandra.com/</link><description>Recent content in Home on Avi Chandra</description><generator>Hugo</generator><language>en-us</language><copyright>© Avi Chandra</copyright><lastBuildDate>Mon, 31 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://avichandra.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Editing the same file on two computers</title><link>https://avichandra.com/blog/same-file-two-computers/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/blog/same-file-two-computers/</guid><description>&lt;p&gt;Here&amp;rsquo;s a problem that sounds simple until you actually sit down and try to solve it.&lt;/p&gt;&#10;&lt;p&gt;You&amp;rsquo;re building a local-first app. Let&amp;rsquo;s call it &lt;strong&gt;Thangs&lt;/strong&gt;, a Things 3 clone for people who like their to-do lists fast, offline, and free of subscription fatigue. The whole pitch is that your data lives in a file on your machine, and if you want sync, you just drop that file in Dropbox or iCloud and let the cloud do its dumb cloud thing.&lt;/p&gt;</description></item><item><title>Arrhenotoky and AI swarms</title><link>https://avichandra.com/blog/arrhenotoky-and-ai-swarms/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/blog/arrhenotoky-and-ai-swarms/</guid><description>&lt;p&gt;There&amp;rsquo;s a word I want you to sit with for a second: &lt;strong&gt;arrhenotoky&lt;/strong&gt;. It sounds like a neighborhood in Athens where you&amp;rsquo;d get a very good lamb dish. It is actually one of the strangest reproductive systems on Earth, and I&amp;rsquo;ve become convinced it says something about where AI systems might be headed. Not human-shaped. Hive-shaped.&lt;/p&gt;&#10;&lt;p&gt;Bear with me. The biology comes first, and the biology is the good part.&lt;/p&gt;</description></item><item><title>Authentic Thai Green Curry</title><link>https://avichandra.com/recipes/thai-green-curry/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/thai-green-curry/</guid><description>&lt;p&gt;This is the long way around to green curry: a fresh paste pounded from green&#10;chillies, herbs and spices, then cooked with chicken and rich coconut cream.&#10;The paste takes time, but the flavour is on another level. Adapted from &lt;a href="https://www.eatingthaifood.com/thai-green-curry-recipe/"&gt;Mark&#10;Wiens&amp;rsquo;s recipe at Eating Thai Food&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Serves 3–4.&lt;/p&gt;&#10;&lt;h2 id="ingredients"&gt;Ingredients&lt;/h2&gt;&#10;&lt;h3 id="green-curry-paste"&gt;Green curry paste&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;150 g Thai green chillies, stems removed&lt;/li&gt;&#10;&lt;li&gt;1 head garlic, peeled&lt;/li&gt;&#10;&lt;li&gt;3 small shallots, peeled&lt;/li&gt;&#10;&lt;li&gt;1 thumb-sized piece galangal, sliced&lt;/li&gt;&#10;&lt;li&gt;5 cilantro roots, sliced&lt;/li&gt;&#10;&lt;li&gt;zest of 1 kaffir lime&lt;/li&gt;&#10;&lt;li&gt;2 stalks lemongrass, tender bottoms thinly sliced&lt;/li&gt;&#10;&lt;li&gt;1 tbsp white peppercorns&lt;/li&gt;&#10;&lt;li&gt;1 tsp coriander seeds&lt;/li&gt;&#10;&lt;li&gt;1 tsp cumin seeds&lt;/li&gt;&#10;&lt;li&gt;1 tsp salt&lt;/li&gt;&#10;&lt;li&gt;1 tbsp shrimp paste&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="curry"&gt;Curry&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 whole chicken, about 1.4 kg, chopped into bite-sized pieces (or your preferred chicken pieces)&lt;/li&gt;&#10;&lt;li&gt;2 cups water&lt;/li&gt;&#10;&lt;li&gt;2–3 cups coconut cream&lt;/li&gt;&#10;&lt;li&gt;6–10 Thai eggplants, quartered&lt;/li&gt;&#10;&lt;li&gt;leaves from 6–10 stems Thai sweet basil&lt;/li&gt;&#10;&lt;li&gt;2 red spur chillies, thinly sliced&lt;/li&gt;&#10;&lt;li&gt;20 kaffir lime leaves, about half torn in half&lt;/li&gt;&#10;&lt;li&gt;1/2 tsp salt, or to taste&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="method"&gt;Method&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Make the paste.&lt;/strong&gt; Dry-fry the cumin and coriander seeds in a hot pan for&#10;about 30 seconds, until fragrant. Add them to a mortar with the chillies,&#10;garlic, shallots, galangal, cilantro roots, kaffir lime zest, lemongrass,&#10;white peppercorns and salt. Pound until very smooth. Add the shrimp paste&#10;last and work it through evenly. A food processor is quicker, though the&#10;mortar and pestle gives the paste more fragrance and texture.&lt;/p&gt;</description></item><item><title>A sync engine is mostly conflict policy</title><link>https://avichandra.com/blog/conflict-policy/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/blog/conflict-policy/</guid><description>&lt;p&gt;Every time I start a sync engine I spend the first week on transport, and every&#10;time that turns out to be the week that did not matter.&lt;/p&gt;&#10;&lt;h2 id="transport-is-solved"&gt;Transport is solved&lt;/h2&gt;&#10;&lt;p&gt;Batching, retries, resumable cursors, a version vector so you know where you&#10;left off:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cursor&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; { &lt;span style="color:#a6e22e"&gt;replica&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;; &lt;span style="color:#a6e22e"&gt;clock&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;number&lt;/span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;async&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;pull&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;since&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Cursor&lt;/span&gt;)&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Promise&lt;/span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;Op&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;[]&lt;/span&gt;&amp;gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// page until the server says it has nothing newer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are a dozen good write-ups on all of it, and the code ends up looking the&#10;same regardless of who wrote it.&lt;/p&gt;</description></item><item><title>Preppy Kitchen Mocha Cake</title><link>https://avichandra.com/recipes/preppy-kitchen-mocha-cake/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/preppy-kitchen-mocha-cake/</guid><description>&lt;style&gt;&#10;.yt-lite{position:relative;display:block;width:100%;aspect-ratio:16/9;margin:1rem 0;border:0;padding:0;border-radius:8px;overflow:hidden;cursor:pointer;background-color:#000;background-size:cover;background-position:center}&#10;.yt-lite::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.15),rgba(0,0,0,.35));transition:opacity .2s}&#10;.yt-lite:hover::after{opacity:.6}&#10;.yt-lite__play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1;width:68px;height:48px}&#10;.yt-lite__play svg{width:100%;height:100%;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}&#10;.yt-lite:hover .yt-lite__play .yt-lite__bg{fill:#f00;fill-opacity:1}&#10;.yt-lite.yt-lite--playing{cursor:default}&#10;.yt-lite.yt-lite--playing::after,.yt-lite.yt-lite--playing .yt-lite__play{display:none}&#10;.yt-lite iframe{position:absolute;inset:0;width:100%;height:100%;border:0}&#10;&lt;/style&gt;&lt;button type="button" class="yt-lite" data-id="1o8oC2l-joA" aria-label="Play video: Preppy Kitchen Mocha Cake"&#10; style="background-image:url('https://i.ytimg.com/vi/1o8oC2l-joA/maxresdefault.jpg')"&#10; &gt;&#10; &lt;img alt="" aria-hidden="true" style="display:none" src="https://i.ytimg.com/vi/1o8oC2l-joA/maxresdefault.jpg"&#10; onerror="this.closest('.yt-lite').style.backgroundImage=&amp;quot;url('https://i.ytimg.com/vi/1o8oC2l-joA/hqdefault.jpg')&amp;quot;"&gt;&#10; &lt;span class="yt-lite__play"&gt;&#10; &lt;svg viewBox="0 0 68 48"&gt;&lt;path class="yt-lite__bg" d="M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55c-2.93.78-4.63 3.26-5.42 6.19C.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z" fill="#212121" fill-opacity=".8"/&gt;&lt;path d="M45 24 27 14v20z" fill="#fff"/&gt;&lt;/svg&gt;&#10; &lt;/span&gt;&#10;&lt;/button&gt;&#10;&lt;script&gt;&#10;(function(){&#10; var el=document.currentScript.previousElementSibling;&#10; el.addEventListener('click',function(){&#10; if(el.classList.contains('yt-lite--playing'))return;&#10; var f=document.createElement('iframe');&#10; f.setAttribute('allow','accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture');&#10; f.setAttribute('allowfullscreen','');&#10; f.setAttribute('title',"\"Preppy Kitchen Mocha Cake\"");&#10; f.src='https://www.youtube-nocookie.com/embed/'+el.dataset.id+'?autoplay=1&amp;rel=0';&#10; el.classList.add('yt-lite--playing');&#10; el.appendChild(f);&#10; },{once:true});&#10;})();&#10;&lt;/script&gt;&#10;&#10;&lt;p&gt;This is John Kanell&amp;rsquo;s mocha cake from &lt;a href="https://www.youtube.com/watch?v=1o8oC2l-joA"&gt;Preppy Kitchen&lt;/a&gt;,&#10;made for my mom&amp;rsquo;s birthday. Three layers of deep coffee-bloomed chocolate cake,&#10;a mocha buttercream that tastes like a good latte, and a dark chocolate ganache&#10;that goes between the layers and drips down the sides. The vegetable oil keeps it&#10;soft even straight from the fridge, which is where this cake lives.&lt;/p&gt;</description></item><item><title>Shipping to one campus at a time</title><link>https://avichandra.com/blog/one-campus-at-a-time/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/blog/one-campus-at-a-time/</guid><description>&lt;p&gt;mrmr launched at one university before it launched at two. That was not a&#10;growth strategy, it was the only thing that worked.&lt;/p&gt;&#10;&lt;h2 id="the-same-software-three-different-products"&gt;The same software, three different products&lt;/h2&gt;&#10;&lt;p&gt;An anonymous feed changes character entirely with size, and nothing in the code&#10;changes with it:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;~100 people.&lt;/strong&gt; It is a group chat.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;~1,000 people.&lt;/strong&gt; It is a newspaper.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;10,000 strangers.&lt;/strong&gt; It is a sewer.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Only the boundary moved.&lt;/p&gt;&#10;&lt;h2 id="scope-does-the-work-a-filter-cannot"&gt;Scope does the work a filter cannot&lt;/h2&gt;&#10;&lt;p&gt;Restricting the feed to a single campus handles moderation in a way no&#10;classifier has managed for me. Everyone posting is someone you could plausibly&#10;stand next to in a queue tomorrow, and that fact alone removes most of what&#10;makes anonymity grim.&lt;/p&gt;</description></item><item><title>Homemade Fermented Louisiana-Style Hot Sauce</title><link>https://avichandra.com/recipes/fermented-louisiana-hot-sauce/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/fermented-louisiana-hot-sauce/</guid><description>&lt;p&gt;&lt;img src="https://avichandra.com/images/chillies.webp" alt="A bowl of fresh bird&amp;rsquo;s eye chillies"&gt;&lt;/p&gt;&#10;&lt;p&gt;I wanted Tabasco and didn&amp;rsquo;t have any tabasco peppers, but I had a whole bowl of&#10;bird&amp;rsquo;s eye chillies going soft on the counter, so I used those. They&amp;rsquo;re hotter,&#10;and there&amp;rsquo;s something almost floral hiding under the heat. I tasted a bit of the&#10;raw mash off my finger and said &amp;ldquo;huh&amp;rdquo; out loud to nobody. Good sign, usually.&lt;/p&gt;&#10;&lt;p&gt;The fermenting is the part I keep coming back to. You salt the chillies, you&#10;wait, and the jar quietly does the rest. Tabasco apparently ages theirs in oak&#10;barrels for years, which is wild, and obviously not happening in my kitchen, so&#10;I give mine two or three weeks on the counter. Even that&amp;rsquo;s enough to get this&#10;sour, funky depth you just can&amp;rsquo;t get by pouring vinegar over raw peppers. I&#10;threw in some oregano leaves halfway through without really thinking about it.&#10;Couldn&amp;rsquo;t tell you why, but the next morning the jar smelled green and warm under&#10;all the heat, and that settled it. Haven&amp;rsquo;t made it without since.&lt;/p&gt;</description></item><item><title>Avi's Special Cheesecake</title><link>https://avichandra.com/recipes/avis-special-cheesecake/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/avis-special-cheesecake/</guid><description>&lt;p&gt;&lt;img src="https://avichandra.com/images/cheesecake-small.jpeg" alt="Avi&amp;rsquo;s special cheesecake"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the cheesecake I keep coming back to — dense and creamy in the middle,&#10;with a crisp biscuit base and the faintest tang from the sour cream. It takes a&#10;bit of patience (mostly waiting), but the steps themselves are simple.&lt;/p&gt;&#10;&lt;p&gt;Makes one 9-inch cheesecake — about 12 slices.&lt;/p&gt;&#10;&lt;h2 id="ingredients"&gt;Ingredients&lt;/h2&gt;&#10;&lt;h3 id="for-the-base"&gt;For the base&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;200 g digestive biscuits (or graham crackers), crushed&lt;/li&gt;&#10;&lt;li&gt;100 g unsalted butter, melted&lt;/li&gt;&#10;&lt;li&gt;1 tbsp sugar&lt;/li&gt;&#10;&lt;li&gt;a pinch of salt&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="for-the-filling"&gt;For the filling&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;600 g full-fat cream cheese, at room temperature&lt;/li&gt;&#10;&lt;li&gt;150 g caster sugar&lt;/li&gt;&#10;&lt;li&gt;200 g sour cream&lt;/li&gt;&#10;&lt;li&gt;3 large eggs, at room temperature&lt;/li&gt;&#10;&lt;li&gt;1 tbsp plain flour&lt;/li&gt;&#10;&lt;li&gt;1 tsp vanilla extract&lt;/li&gt;&#10;&lt;li&gt;zest of 1 lemon&lt;/li&gt;&#10;&lt;li&gt;1 tbsp lemon juice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="method"&gt;Method&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Prep.&lt;/strong&gt; Heat the oven to 160 °C (320 °F). Line the base of a 9-inch&#10;springform tin with baking paper and lightly butter the sides.&lt;/p&gt;</description></item><item><title>Miso Brown Butter Cookies</title><link>https://avichandra.com/recipes/miso-brown-butter-cookies/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/miso-brown-butter-cookies/</guid><description>&lt;p&gt;These look like normal chocolate chip cookies right up until someone asks why&#10;they taste &lt;em&gt;better&lt;/em&gt;. The answer is a spoonful of white miso, which leans into&#10;the brown butter and makes the whole thing taste like salted caramel without&#10;any caramel.&lt;/p&gt;&#10;&lt;p&gt;Makes about 18 cookies.&lt;/p&gt;&#10;&lt;h2 id="ingredients"&gt;Ingredients&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;170 g unsalted butter&lt;/li&gt;&#10;&lt;li&gt;2 tbsp white (shiro) miso&lt;/li&gt;&#10;&lt;li&gt;150 g brown sugar&lt;/li&gt;&#10;&lt;li&gt;80 g caster sugar&lt;/li&gt;&#10;&lt;li&gt;1 egg + 1 yolk&lt;/li&gt;&#10;&lt;li&gt;1 tsp vanilla extract&lt;/li&gt;&#10;&lt;li&gt;220 g plain flour&lt;/li&gt;&#10;&lt;li&gt;1/2 tsp baking soda&lt;/li&gt;&#10;&lt;li&gt;200 g dark chocolate, chopped&lt;/li&gt;&#10;&lt;li&gt;flaky salt, for the top&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="method"&gt;Method&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Brown the butter.&lt;/strong&gt; Melt the butter in a pan over medium heat, swirling,&#10;until it smells nutty and the milk solids turn golden-brown. Pour into a&#10;bowl and let it cool until just warm.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Add miso + sugars.&lt;/strong&gt; Whisk the miso into the warm butter until smooth,&#10;then beat in both sugars.&lt;/li&gt;&#10;&lt;li&gt;Beat in the egg, yolk and vanilla until glossy.&lt;/li&gt;&#10;&lt;li&gt;Fold in the flour and baking soda, then the chopped chocolate.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Chill&lt;/strong&gt; the dough for at least 30 minutes (an hour is better).&lt;/li&gt;&#10;&lt;li&gt;Scoop onto lined trays, leaving room to spread. Top each with a little&#10;flaky salt.&lt;/li&gt;&#10;&lt;li&gt;Bake at 180 °C (350 °F) for 11–12 minutes, until the edges are set but the&#10;centres look slightly underdone. They firm up as they cool.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Don&amp;rsquo;t skip cooling the brown butter — too hot and it scrambles the egg.&lt;/li&gt;&#10;&lt;li&gt;The miso already brings salt, so go easy with any extra.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Black Sesame Banana Bread</title><link>https://avichandra.com/recipes/black-sesame-banana-bread/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/black-sesame-banana-bread/</guid><description>&lt;p&gt;Banana bread is the most forgiving thing you can bake, so it&amp;rsquo;s a good place to&#10;do something slightly strange. Black sesame turns the crumb an unapologetic&#10;grey and adds a toasty, nutty note that sits somewhere near halva.&lt;/p&gt;&#10;&lt;p&gt;Makes one loaf.&lt;/p&gt;&#10;&lt;h2 id="ingredients"&gt;Ingredients&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;3 very ripe bananas, mashed&lt;/li&gt;&#10;&lt;li&gt;60 g black sesame seeds, toasted and ground (or 3 tbsp black sesame paste)&lt;/li&gt;&#10;&lt;li&gt;110 g unsalted butter, melted&lt;/li&gt;&#10;&lt;li&gt;130 g brown sugar&lt;/li&gt;&#10;&lt;li&gt;2 eggs&lt;/li&gt;&#10;&lt;li&gt;1 tsp vanilla&lt;/li&gt;&#10;&lt;li&gt;200 g plain flour&lt;/li&gt;&#10;&lt;li&gt;1 tsp baking soda&lt;/li&gt;&#10;&lt;li&gt;1/2 tsp salt&lt;/li&gt;&#10;&lt;li&gt;a handful of white sesame seeds, for the top&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="method"&gt;Method&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Heat the oven to 175 °C (350 °F) and line a loaf tin.&lt;/li&gt;&#10;&lt;li&gt;If using seeds, grind the toasted black sesame to a coarse paste in a mortar&#10;or spice grinder.&lt;/li&gt;&#10;&lt;li&gt;Whisk the melted butter, sugar, eggs and vanilla together, then stir in the&#10;mashed banana and ground sesame.&lt;/li&gt;&#10;&lt;li&gt;Fold in the flour, baking soda and salt until just combined — don&amp;rsquo;t overmix.&lt;/li&gt;&#10;&lt;li&gt;Pour into the tin, scatter white sesame on top, and bake 50–60 minutes,&#10;until a skewer comes out clean.&lt;/li&gt;&#10;&lt;li&gt;Cool in the tin for 10 minutes before turning out.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Toasting the sesame is what makes it taste like anything — do not skip it.&lt;/li&gt;&#10;&lt;li&gt;The grey is the point. Lean in.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Marmite Butter Noodles</title><link>https://avichandra.com/recipes/marmite-butter-noodles/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/recipes/marmite-butter-noodles/</guid><description>&lt;p&gt;This is barely a recipe and entirely a 1am survival mechanism. Marmite melted&#10;into butter makes a glossy, intensely savoury sauce that coats noodles like a&#10;much fancier dish. You either trust me or you don&amp;rsquo;t.&lt;/p&gt;&#10;&lt;p&gt;Serves 1 (hungry).&lt;/p&gt;&#10;&lt;h2 id="ingredients"&gt;Ingredients&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 portion of spaghetti or instant noodles&lt;/li&gt;&#10;&lt;li&gt;30 g butter&lt;/li&gt;&#10;&lt;li&gt;1 heaped tsp Marmite (or Vegemite)&lt;/li&gt;&#10;&lt;li&gt;a splash of the starchy cooking water&lt;/li&gt;&#10;&lt;li&gt;black pepper&lt;/li&gt;&#10;&lt;li&gt;optional: a soft-boiled egg, spring onion, chilli oil&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="method"&gt;Method&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Cook the noodles in well-salted water. &lt;strong&gt;Save a mug of the water&lt;/strong&gt; before&#10;draining.&lt;/li&gt;&#10;&lt;li&gt;In the warm empty pan, melt the butter, then stir in the Marmite until it&#10;dissolves into a dark, glossy sauce.&lt;/li&gt;&#10;&lt;li&gt;Add a splash of the noodle water and swirl until it loosens into a silky&#10;emulsion.&lt;/li&gt;&#10;&lt;li&gt;Toss the drained noodles through until every strand is coated.&lt;/li&gt;&#10;&lt;li&gt;Crack over black pepper. Add the egg, spring onion or chilli oil if you&amp;rsquo;re&#10;feeling civilised.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Marmite is salty enough — taste before adding any.&lt;/li&gt;&#10;&lt;li&gt;The starchy water is what makes the sauce cling. Don&amp;rsquo;t skip it.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Frame buffers beat photos</title><link>https://avichandra.com/blog/frame-buffers/</link><pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate><guid>https://avichandra.com/blog/frame-buffers/</guid><description>&lt;p&gt;The first version of the Lorcana scanner had a shutter button. You lined up a&#10;card, tapped, waited, got a result. About three seconds a card, and your thumb&#10;hurt after a playset.&lt;/p&gt;&#10;&lt;p&gt;The second version never captures a photo at all.&lt;/p&gt;&#10;&lt;h2 id="read-the-buffer-skip-the-capture"&gt;Read the buffer, skip the capture&lt;/h2&gt;&#10;&lt;p&gt;Recognition runs on whatever is already flowing through the capture pipeline:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;captureOutput&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;_&lt;/span&gt; output: AVCaptureOutput,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; didOutput sampleBuffer: CMSampleBuffer,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; from connection: AVCaptureConnection) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;guard&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; pixels = CMSampleBufferGetImageBuffer(sampleBuffer) &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; recognizer.submit(pixels) &lt;span style="color:#75715e"&gt;// no still capture, no pipeline flush&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The whole speed win comes from deleting the capture step:&lt;/p&gt;</description></item></channel></rss>