<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://brian.abelson.live/feed.xml" rel="self" type="application/atom+xml" /><link href="https://brian.abelson.live/" rel="alternate" type="text/html" /><updated>2026-10-15T13:09:28-04:00</updated><id>https://brian.abelson.live/feed.xml</id><title type="html">Brian Abelson</title><subtitle>Brian Abelson writes code, words, and music in New York City.
</subtitle><entry><title type="html">Reading together, unsupervised</title><link href="https://brian.abelson.live/log/2026/08/12/feederss.html" rel="alternate" type="text/html" title="Reading together, unsupervised" /><published>2026-08-12T12:30:00-04:00</published><updated>2026-08-12T12:30:00-04:00</updated><id>https://brian.abelson.live/log/2026/08/12/feederss</id><content type="html" xml:base="https://brian.abelson.live/log/2026/08/12/feederss.html"><![CDATA[<video src="/assets/video/feederss.mp4" autoplay="" loop="" muted="" playsinline="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p>I made a thing called <a href="https://gitlab.com/abelsonlive/feederss">feederss</a>. It sits next my self-hosted RSS reader, <a href="https://miniflux.app/">miniflux</a>, reads its database, and publishes a small static page showing who subscribes to what, which categories they’ve configured, and what articles they’ve starred (a modified version of mine is <a href="https://feederss.abelson.live">here</a> (I’ve removed a few users)). The site also includes a <a href="https://feederss.abelson.live/data.json">JSON blob</a> I’m using to populate the lists of recent feeds I’ve subscribed to and articles I’ve liked on my <a href="./about">about page</a>.</p>

<p>I came up with the idea while taking <a href="https://sfpc.study/sessions/spring-23/solidarity-infra">“Solidarity Infrastructures”</a> at School for Poetic Computation a couple years back. In the class we were challenged to imagine online communities outside the hegemonic grasp of algorithmic curation and surveillance capitalism. Fortunately you don’t have too look too far back to understand that another internet is possible. Many of us remember a time before social media and AI summarizations when RSS feeds and free tools like Google Reader allowed you explore the many weird and wonderful corners of the web. When I found Miniflux, its simple design reminded me of this era and I was excited to share it with others. I now host an instance for a few friends on a raspberry pi in my living room and Feederss helps us keep tabs on what everyone else is reading.</p>

<p>If you want to try it out, there are instructions on <a href="https://gitlab.com/abelsonlive/feederss">Gitlab</a>.</p>]]></content><author><name></name></author><category term="code" /><category term="words" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://brian.abelson.live/" /><media:content medium="image" url="https://brian.abelson.live/" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">SaySynth: A Brief History of Speaking Machines</title><link href="https://brian.abelson.live/log/2025/12/20/saysynth-composition-codes.html" rel="alternate" type="text/html" title="SaySynth: A Brief History of Speaking Machines" /><published>2025-12-20T05:00:00-05:00</published><updated>2025-12-20T05:00:00-05:00</updated><id>https://brian.abelson.live/log/2025/12/20/saysynth-composition-codes</id><content type="html" xml:base="https://brian.abelson.live/log/2025/12/20/saysynth-composition-codes.html"><![CDATA[<p><em>These are expanded notes from a talk I gave at <a href="https://composition.codes/">composition.codes</a> on December 21, 2025. <a href="/slides/saysynth.html">Slides here</a>. <a href="https://www.youtube.com/watch?v=tX3nEPt0fKk">Video here</a>.</em></p>

<p><a href="https://gitlab.com/abelsonlive/saysynth">saysynth</a> is a synthesizer I built on top of macOS’s text-to-speech framework — more popularly known as the <strong>say</strong> command. To explain why I built it and why I think it matters, I want to take a detour through the history of speaking machines more broadly.</p>

<h2 id="a-typology-of-speaking-machines">A Typology of Speaking Machines</h2>

<p>There are roughly four kinds of speaking machines that have existed over time:</p>

<p><strong>Mechanical</strong> — Bellows forcing air through a reed, with different knobs, valves, and whistles shaping different formants and phonemes. The human operator is part of the instrument.</p>

<p><strong>Formant/Rule-Based</strong> — More like a synthesizer: an oscillator and a comb filter simulating the resonant shape of the vocal tract. The system models the acoustics of speech without recording any actual speech.</p>

<p><strong>Sample-Based (Concatenative)</strong> — From something as crude as a toy with a phonograph inside, all the way to sophisticated “diphone” synthesizers that splice together recordings of every possible phoneme transition. GPS voices and automated customer service phone lines of the ’90s and 2000s were built this way.</p>

<p><strong>Generative (Neural/AI)</strong> — What most people think of today. These are basically sample-based systems taken to an extreme: instead of recordings of phoneme pairs, you’re dealing with individual digital samples predicted by a neural network, sample by sample.</p>

<h2 id="a-brief-history">A Brief History</h2>

<h3 id="von-kempelens-speaking-machine-1773">Von Kempelen’s Speaking Machine (1773)</h3>

<video src="/assets/video/kemplens-speaking-machine.mp4" controls="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p><img src="/assets/img/vonkemplen-diagram.png" style="max-width:700px; width:100%; display:block; margin: 0 auto;" /></p>

<p>The first speaking machine most people point to. An operator pushes air through a reed and moves their hand around a piece of leather to simulate the shape of the vocal tract, while separate whistles handle noisier consonants like S and T. Crude, but the basic architecture — oscillator source, shaped by something simulating a vocal tract — is essentially what we still see in formant synthesizers today.</p>

<h3 id="joseph-fabers-euphonia-1845">Joseph Faber’s Euphonia (1845)</h3>

<p><img src="/assets/img/euphonia.png" style="max-width:700px; width:100%; display:block; margin: 0 auto; object-fit: contain;" /></p>

<p>Faber iterated on von Kempelen’s design into something far more sophisticated: sixteen keys, each generating a different phoneme. You can start to see the importance of the <em>operator</em> in these systems. To make it seem less threatening, Faber put a woman’s face on the front of it and, reportedly, sometimes hung a dress in front of the machinery. I suspect this had the opposite of its intended effect.</p>

<h3 id="edison-talking-dolls-1890s">Edison Talking Dolls (1890s)</h3>

<video src="/assets/video/edison-speaking-doll.mp4" controls="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p>Not quite a speaking machine in the traditional sense, but the first concatenative one: a doll with a miniature phonograph inside playing back recordings of children’s rhymes. Edison thought embedding recorded voices in a toy would help people get comfortable with the technology.</p>

<h3 id="voder-1939">VODER (1939)</h3>

<video src="/assets/video/voder-1939.mp4" controls="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p><img src="/assets/img/voder-diagram.gif" style="max-width:700px; width:100%; display:block; margin: 0 auto;" /></p>

<p>Demonstrated at the 1939 World’s Fair, the VODER was genuinely remarkable for its time — a monophonic synthesizer with an oscillator, a noise generator, and a set of controls for shaping phonemes in real time, with pitch controlled by a foot pedal. What I find most interesting about it is that its “impressiveness” was entirely dependent on its operators, women known as “Voderettes,” who trained for <em>years</em> to produce intelligible speech. The inventor got all the credit. The operators are largely nameless to history.</p>

<h3 id="musa--multichannel-speaking-automaton-1978">MUSA — Multichannel Speaking Automaton (1978)</h3>

<video src="/assets/video/musa-cselt-example.mp4" controls="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p>Developed in Italy, MUSA was one of the first practical diphone synthesizers. They even pressed a vinyl record of the results. It uses recordings of every possible phoneme transition (around 2,000 combinations) and then applies DSP to smooth them together. This approach became dominant in commercial TTS through the ’90s and 2000s.</p>

<h3 id="sam--software-automatic-mouth-1982">S.A.M. — Software Automatic Mouth (1982)</h3>

<p><img src="/assets/img/sam-ad.jpg" style="max-width:700px; width:100%; display:block; margin: 0 auto; object-fit: contain;" /></p>

<p>The first commercially available speech synthesizer, available for the Commodore 64, Atari, and Apple II. What makes SAM notable is that it exposed controls for pitch, speed, and inflection to the user. The company that made it later provided the technology underlying Macintosh’s Macintalk — which was the precursor to the <strong>say</strong> command.</p>

<h2 id="two-recurring-patterns">Two Recurring Patterns</h2>

<p>Before moving on, it’s worth noting two things that recur throughout this history.</p>

<p><strong>Speaking machines are often demonstrated through singing.</strong> From HAL 9000 singing “Daisy Bell” in <em>2001: A Space Odyssey</em> to Siri, singing has always been the ultimate proof-of-concept for TTS, because it forces the system to handle pitch variation, rhythm, and expressiveness. But there’s an implicit claim embedded in this: that singing is the pinnacle of human linguistic expression, and that a speaking machine isn’t truly “human” unless it can sing.</p>

<center>
<img src="/assets/img/hal-9000-eye.png" style="width:80px; display:inline-block; margin: 0 20px;" />
<img src="/assets/img/siri.gif" style="width:80px; display:inline-block; margin: 0 20px;" />
</center>

<p><strong>Speaking machines encode the biases of the culture that produces them.</strong> Faber put a female face on his Euphonia to make it seem less threatening. The Voderettes trained for years and are now forgotten. Most AI assistants today are female-coded by default. This isn’t incidental — it reflects a consistent pattern in how we try to make machines seem approachable by feminizing them, while making the actual human labor behind them invisible.</p>

<h2 id="macintalk-and-the-say-command">Macintalk and the <strong>say</strong> Command</h2>

<video src="/assets/video/fred-mac.mp4" controls="" style="max-width:700px; width:100%; display:block; margin: 0 auto;"></video>

<p>In 1984, Apple shipped Macintalk, a formant-based TTS system. At its launch, Steve Jobs had the Mac introduce itself — a demo that was received with the kind of collective rapture that, in retrospect, feels a little embarrassing.</p>

<p>If you had an Apple computer in the ’90s, you probably remember playing with voices like Bad News, Cellos, Bubbles, Whisper, or Princess. In 2001, with Mac OS X (Cheetah), Apple added a command-line interface to this capability:</p>

<p><img src="/assets/img/mac-osx-disk.png" style="max-width:120px; width:100%; display:block; margin: 0 auto;" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>say <span class="nt">-v</span> Fred <span class="s2">"I sure like being inside this fancy computer"</span>
</code></pre></div></div>

<p>What most people don’t know is that <strong>say</strong> (and the underlying speech framework) had a hidden, low-level DSL for controlling prosody at the phoneme level. Here’s what it looks like:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[[inpt TUNE]]
~
AA {D 120; P 176.9:0 171.4:22 161.7:61}
r {D 60; P 166.7:0}
~
y {D 210; P 161.0:0}
UW {D 70; P 178.5:0}
_
S {D 290; P 173.3:0 178.2:8 184.9:19 222.9:81}
...
[[inpt TEXT]]
</code></pre></div></div>

<p>Each phoneme can be assigned a duration (<strong>D</strong>, in milliseconds) and a pitch curve (<strong>P</strong>, as frequency-at-position pairs). That chunk above is roughly “are you brushing your teeth?” decomposed into its constituent sounds and then recomposed with explicit timing and pitch. You can get surprisingly expressive with it — not natural-sounding, but expressive in a different way.</p>

<p>I couldn’t find many examples of other people using this syntax. It was documented on an archived Apple developer site and is now deprecated, removed from current macOS. (Which is why I needed to bring an old Mac mini to the demo.)</p>

<h2 id="saysynth">SaySynth</h2>

<p>The idea behind saysynth is simple: if you can specify pitch per-phoneme in the <strong>say</strong> DSL, you can use it as a synthesizer. Instead of trying to produce legible speech, you push the tool in a direction it was never designed for.</p>

<p>Rather than writing raw DSL by hand, I built a YAML-based sequencer on top of it. Here’s an excerpt from a piece called “fire”:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">name</span><span class="pi">:</span> <span class="s">fire</span>
<span class="na">globals</span><span class="pi">:</span>
    <span class="na">start_bpm</span><span class="pi">:</span> <span class="m">65</span>
    <span class="na">rate</span><span class="pi">:</span> <span class="m">160</span>
    <span class="na">stereo</span><span class="pi">:</span> <span class="kc">true</span>
<span class="na">tracks</span><span class="pi">:</span>
    <span class="na">water</span><span class="pi">:</span>
        <span class="na">type</span><span class="pi">:</span> <span class="s">chord</span>
        <span class="na">options</span><span class="pi">:</span>
            <span class="na">root</span><span class="pi">:</span> <span class="s">F#2</span>
            <span class="na">text</span><span class="pi">:</span> <span class="s">wawer</span>
            <span class="na">voice</span><span class="pi">:</span> <span class="s">Victoria</span>
            <span class="na">chord_notes</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">-12</span><span class="pi">,</span> <span class="nv">-5</span><span class="pi">,</span> <span class="nv">0</span><span class="pi">,</span> <span class="nv">4</span><span class="pi">,</span> <span class="nv">9</span><span class="pi">,</span> <span class="nv">14</span><span class="pi">]</span>
            <span class="na">segment_count</span><span class="pi">:</span> <span class="s">1/32</span>
            <span class="na">randomize_segments</span><span class="pi">:</span> <span class="s">octaves,velocity</span>
            <span class="na">volume_range</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">0.01</span><span class="pi">,</span> <span class="nv">0.19</span><span class="pi">]</span>
    <span class="na">fire</span><span class="pi">:</span>
        <span class="na">type</span><span class="pi">:</span> <span class="s">chord</span>
        <span class="na">options</span><span class="pi">:</span>
            <span class="na">root</span><span class="pi">:</span> <span class="s">F#0</span>
            <span class="na">chord_notes</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">0</span><span class="pi">,</span> <span class="nv">12</span><span class="pi">]</span>
            <span class="na">text</span><span class="pi">:</span> <span class="s">fire!</span>
            <span class="na">segment_count</span><span class="pi">:</span> <span class="s">1/6</span>
            <span class="na">randomize_segments</span><span class="pi">:</span> <span class="s">octaves,velocity</span>
            <span class="na">volume_range</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">0.05</span><span class="pi">,</span> <span class="nv">0.4</span><span class="pi">]</span>
</code></pre></div></div>

<iframe style="border: 0; width: 100%; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=4231311876/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/" seamless=""><a href="https://abelsonlive.bandcamp.com/album/saysynth">saysynth by Brian Abelson</a></iframe>

<p>Each “chord” is produced by spawning multiple parallel <strong>say</strong> subprocesses, one per note. Because there’s no way to synchronize them precisely, they slowly drift in and out of phase. The system <em>failing</em> to do the thing it’s supposed to do is what makes it sound interesting — more organic, more human-like than it has any right to be.</p>

<p>I’ve also <a href="https://gitlab.com/abelsonlive/asclpy">been working on support for alternative tunings via Ableton’s Scala</a> (<strong>.ascl</strong>) format, which makes it possible to play in, say, Wendy Carlos’s tuning from <em>Beauty in the Beast</em> rather than standard 12-tone equal temperament.</p>

<h2 id="why-does-this-matter">Why Does This Matter?</h2>

<blockquote>
  <p>Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature… It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart.</p>

  <p>— Brian Eno</p>
</blockquote>

<p>The version of the future that tech companies sell us is one in which AI improves exponentially until it reaches “humanness” — the singularity.</p>

<p><img src="/assets/img/singularity-plot-1.png" style="max-width:700px; width:100%; display:block; margin: 0 auto;" /></p>

<p>What this story leaves out is that humanness isn’t a fixed target. Capitalism slowly dehumanizes people, narrows what we do and how we’re valued, until it becomes easier for AI to approximate what we’ve become. If you’re training machine learning models, working in a distribution center, or running the same script as a telemarketer, you’re already being forced to function like a machine in the relevant sense.</p>

<p><img src="/assets/img/singularity-plot-2.png" style="max-width:700px; width:100%; display:block; margin: 0 auto;" /></p>

<p>The history of speaking machines is, in part, a history of compressing the expressive range of human voice until it becomes usable — legible, predictable, efficient. Each generation of TTS gets more natural-sounding and less weird. The <strong>say</strong> command’s low-level phoneme DSL, which let you do genuinely strange things with pitch and timing, is now deprecated. SSML (the standardized modern alternative) lets you specify <em>relative</em> pitch but not actual frequencies. As TTS has gotten better at sounding human, it’s gotten less interesting as a creative tool.</p>

<p>I think there’s real value in working with tools that are supposed to do one thing and fail, tools that preserve the texture of their own limitation. Not for nostalgia’s sake, but because that texture <em>is</em> the thing — because art’s job right now might be to make strange what capitalism is trying to make invisible and ordinary.</p>

<p><img src="/assets/img/singularity-plot-2-warped.gif" style="max-width:700px; width:100%; display:block; margin: 0 auto;" /></p>

<hr />

<p><em>SaySynth is on <a href="https://gitlab.com/abelsonlive/saysynth">GitLab</a>. Music made with it is on <a href="https://abelsonlive.bandcamp.com/album/saysynth">Bandcamp</a>.</em></p>]]></content><author><name></name></author><category term="music" /><category term="code" /><summary type="html"><![CDATA[These are expanded notes from a talk I gave at composition.codes on December 21, 2025. Slides here. Video here.]]></summary></entry><entry><title type="html">time with friends on KEXP</title><link href="https://brian.abelson.live/log/2025/12/11/time-with-friends-on-kexp.html" rel="alternate" type="text/html" title="time with friends on KEXP" /><published>2025-12-11T22:36:00-05:00</published><updated>2025-12-11T22:36:00-05:00</updated><id>https://brian.abelson.live/log/2025/12/11/time-with-friends-on-kexp</id><content type="html" xml:base="https://brian.abelson.live/log/2025/12/11/time-with-friends-on-kexp.html"><![CDATA[<p><a href="https://www.hushhushseattle.com/">Alex Ruder</a> played <a href="https://abelsonlive.bandcamp.com/album/time-with-friends"><em>time with friends</em></a> on KEXP this past weekend. Always cool to hear your music on the radio and imagine aliens listening to it millions of years from now.</p>]]></content><author><name></name></author><category term="music" /><category term="video" /><summary type="html"><![CDATA[Alex Ruder played time with friends on KEXP this past weekend. Always cool to hear your music on the radio and imagine aliens listening to it millions of years from now.]]></summary></entry><entry><title type="html">Roasted Lemon Chicken Thighs and Potatoes</title><link href="https://brian.abelson.live/log/2025/10/29/roasted-lemon-chicken-thighs-and-potatoes.html" rel="alternate" type="text/html" title="Roasted Lemon Chicken Thighs and Potatoes" /><published>2025-10-29T19:51:00-04:00</published><updated>2025-10-29T19:51:00-04:00</updated><id>https://brian.abelson.live/log/2025/10/29/roasted-lemon-chicken-thighs-and-potatoes</id><content type="html" xml:base="https://brian.abelson.live/log/2025/10/29/roasted-lemon-chicken-thighs-and-potatoes.html"><![CDATA[<p>This is very much a delicious version of boomer mom dinner. (Stolen from <a href="https://cafehailee.com/recipes/roasted-lemon-chicken-thighs-and-potatoes/">cafehaillee.com</a>).</p>

<p>Ingredients:</p>

<ul>
  <li>½ cup fresh lemon juice, from about 4 lemons</li>
  <li>½ cup olive oil</li>
  <li>4 tsp 12g diamond crystal kosher salt *</li>
  <li>6 cloves garlic, grated</li>
  <li>1 Tbsp oregano</li>
  <li>½ tsp black pepper</li>
  <li>2 pounds yukon gold potatoes, scrubbed clean and cut into large wedges</li>
  <li>6 bone in skin on chicken thighs, (about 2 lbs)</li>
  <li>¼ cup chicken stock</li>
  <li>2 Tbsp chopped fresh parsley</li>
  <li>2 Tbsp chopped fresh dill</li>
</ul>

<p>Instructions:</p>

<ul>
  <li>Preheat oven to 425ºF.</li>
  <li>In a small bowl combine lemon juice, olive oil, salt, garlic, oregano and black pepper.</li>
  <li>Add potatoes to a 9×13” baking dish and pour half of the lemon olive oil mixture over. Toss to coat.</li>
  <li>Add chicken thighs on top of potatoes and pour the remainder of the mixture over the chicken. Rub mixture all over.</li>
  <li>Pour chicken stock around the chicken and over the potatoes.</li>
  <li>Bake until chicken is deep golden and cooked through, about 50-60 minutes.</li>
  <li>Remove chicken thighs from pan and set aside to rest. Turn broiler on to high and broil potatoes until golden brown, about 6-8 minutes.</li>
  <li>Top potatoes with parsley and dill.</li>
  <li>Serve chicken with potatoes and pan juices. The pan juices are so good in this don’t skip them!</li>
</ul>

<p>Notes:</p>
<ul>
  <li>If you don’t have diamond crystal kosher salt, use the weight measurement for the salt, as 4 tsp of Morton kosher salt will yield a much different (too salty) result.</li>
</ul>]]></content><author><name></name></author><category term="recipe" /><summary type="html"><![CDATA[This is very much a delicious version of boomer mom dinner. (Stolen from cafehaillee.com).]]></summary></entry><entry><title type="html">fuzzyy @ light and sound design, part 1</title><link href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-1.html" rel="alternate" type="text/html" title="fuzzyy @ light and sound design, part 1" /><published>2025-10-25T00:22:00-04:00</published><updated>2025-10-25T00:22:00-04:00</updated><id>https://brian.abelson.live/log/2025/10/25/lsd-mix-part-1</id><content type="html" xml:base="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-1.html"><![CDATA[<p><a href="https://www.lightandsound.design/">Light and Sound Design</a> is a treasure. One of the few remaining DIY spaces in the city, it features a vintage sound system sourced in part from <a href="http://magick.city/">Magick City</a> (RIP) and custom light installations built by the volunteers that run the space.</p>

<p>I’ve been to <a href="https://brian.abelson.live/shows/">many shows at L&amp;SD</a>, but only recently got the honor of DJ’ing there in support of <a href="https://www.willshore.com/">Will Shore’s</a> group, pedestrian, a 10-piece improvisational group which he led via conduction, a<a href="https://www.conduction.us/">n interactive method of conducting developed by Butch Morris</a> in which the players have an equal role in guiding the direction of their playing.</p>

<p><a href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-1.html">My mix</a> before their set aimed to set a mellow vibe centered on percussion-forward tracks around 80bpm. <a href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-2.html">Part two here.</a></p>]]></content><author><name></name></author><category term="dj" /><category term="music" /><category term="mix" /><summary type="html"><![CDATA[Light and Sound Design is a treasure. One of the few remaining DIY spaces in the city, it features a vintage sound system sourced in part from Magick City (RIP) and custom light installations built by the volunteers that run the space.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://brian.abelson.live/assets/img/posts/lsd-mix-flyer.jpg" /><media:content medium="image" url="https://brian.abelson.live/assets/img/posts/lsd-mix-flyer.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">fuzzyy @ light and sound design, part 2</title><link href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-2.html" rel="alternate" type="text/html" title="fuzzyy @ light and sound design, part 2" /><published>2025-10-25T00:22:00-04:00</published><updated>2025-10-25T00:22:00-04:00</updated><id>https://brian.abelson.live/log/2025/10/25/lsd-mix-part-2</id><content type="html" xml:base="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-2.html"><![CDATA[<p><a href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-1.html">Part one here.</a></p>

<p><a href="https://brian.abelson.live/log/2025/10/25/lsd-mix-part-2.html">My mix</a> after their set paid homage to the aesthetic and practice of <a href="https://en.wikipedia.org/wiki/Pauline_Oliveros">deep listening</a> which underlies the diverse range of sounds the space showcases.</p>]]></content><author><name></name></author><category term="dj" /><category term="music" /><category term="mix" /><summary type="html"><![CDATA[Part one here.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://brian.abelson.live/assets/img/posts/lsd-mix-flyer.jpg" /><media:content medium="image" url="https://brian.abelson.live/assets/img/posts/lsd-mix-flyer.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Month in review: June 2025</title><link href="https://brian.abelson.live/log/2025/07/09/month-in-review-june-2025.html" rel="alternate" type="text/html" title="Month in review: June 2025" /><published>2025-07-09T21:58:00-04:00</published><updated>2025-07-09T21:58:00-04:00</updated><id>https://brian.abelson.live/log/2025/07/09/month-in-review-june-2025</id><content type="html" xml:base="https://brian.abelson.live/log/2025/07/09/month-in-review-june-2025.html"><![CDATA[]]></content><author><name></name></author><category term="monthly-update" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Yuba Verde Sandwich From Superiority Burger</title><link href="https://brian.abelson.live/log/2025/07/05/yuba-verde-sandwich-from-superiority-burger.html" rel="alternate" type="text/html" title="Yuba Verde Sandwich From Superiority Burger" /><published>2025-07-05T20:14:00-04:00</published><updated>2025-07-05T20:14:00-04:00</updated><id>https://brian.abelson.live/log/2025/07/05/yuba-verde-sandwich-from-superiority-burger</id><content type="html" xml:base="https://brian.abelson.live/log/2025/07/05/yuba-verde-sandwich-from-superiority-burger.html"><![CDATA[<p>I love the yuba verde sandwich from <a href="https://www.superiorityburger.com/">superiority burger</a>. It’s the closest vegetarian approximation of deli meat I’ve had and also references a Philly Italian Pork Sandwich which is delicious and filled with broccoli rabe. I adapted this from my memory and also the intro paragraph to the <a href="https://bittmanproject.com/recipe/yuba-sandwich/">Bittman Project’s knock-off</a>, but I haven’t read that full recipe because it’s paywalled. My version adds cheese instead of a bean spread as well as mayo, so it’s def not vegan, but arguably more delicious. I’ve also used kale instead of broccoli rabe which is easier to eat in a sandwich, though I did miss its bitterness.</p>

<h2 id="ingredients">Ingredients</h2>

<p>For the vinaigrette / yuba marinade</p>

<ul>
  <li>1.5 cups olive oil</li>
  <li>1/3 cup red wine vinegar</li>
  <li>1/2 lemon juiced</li>
  <li>1 tbsp capers</li>
  <li>1/6-1/4 of a preserved lemon</li>
  <li>4 cloves garlic</li>
  <li>2-3 tsp dijon mustard</li>
  <li>1 cup packed parsley</li>
  <li>salt and pepper to taste</li>
</ul>

<p>For the broccoli rabe:</p>

<ul>
  <li>1 bunch brocolli rabe</li>
  <li>1-2 tbsp olive oil</li>
  <li>salt and pepper</li>
</ul>

<p>For the kale (if using instead of brocolli rabe):</p>

<ul>
  <li>1 bunch kale</li>
  <li>1-2 tbsp olive oil</li>
  <li>3 cloves garlic</li>
  <li>1/2 lemon</li>
  <li>salt and pepper</li>
</ul>

<p>For the yuba:</p>

<ul>
  <li><a href="https://www.hodofoods.com/product-details/organic-yuba-sheets">1 pack of yuba (5 oz)</a></li>
</ul>

<p>For assembling the sandwich:</p>

<ul>
  <li>kewpie mayo</li>
  <li><a href="https://shop.cento.com/products/cento-diced-hot-cherry-pepper-hoagie-spread-12-fl-oz">cento hoagie spread</a></li>
  <li>1.5 cups grated sharp cheddar cheese.</li>
  <li>2 heros</li>
  <li>other optional goodies (sliced tomatoes, pickled carrots, etc.)</li>
</ul>

<h2 id="instructions">Instructions</h2>

<p><strong>Make the vinaigrette and marinade the yuba</strong>:</p>

<ul>
  <li>Combine vinaigrette ingredients in a blender and pulse until its creamy and a nice light green color. Add salt and pepper, blend, and taste until it’s right.</li>
  <li>Pour a bit of vinaigrette in the bottom of a medium-size tupperware container. Separate the sheets of yuba and layer one sheet at a time pouring vinaigrette between each sheet like you were assembling a lasagna. Reserve the leftover vinaigrette.</li>
  <li>Let the yuba marinade in the fridge for at least an hour.</li>
</ul>

<p><strong>Make the broccoli rabe:</strong></p>

<ul>
  <li>pre-heat the oven to 400-425</li>
  <li>toss the broccoli rabe with olive oil and salt and pepper</li>
  <li>bake for ~ 20 minutes. you might want to take the leaves out sooner or else they’ll burn.</li>
  <li>before assembling the sandwiches you might want to roughly chop the brocolli rabe so it’s easier to eat.</li>
  <li><strong>NOTE</strong>: you can save some time by baking the brocolli rabe with the yuba</li>
</ul>

<p><strong>Make the kale (if using instead of broccoli rabe):</strong></p>

<ul>
  <li>cut out the kale stalks</li>
  <li>roll the kale up and cut it into thin strips</li>
  <li>dice the garlic and set aside</li>
  <li>heat the oil (on high) in a pan until it’s smoking</li>
  <li>add the kale and stir for about a minute until it changes color</li>
  <li>add the garlic and stir for 15-20 seconds</li>
  <li>squeeze the lemon juice over the kale and stir to incorporate</li>
  <li>turn off the heat and add salt and pepper to taste</li>
  <li>remove from the pan and set aside</li>
</ul>

<p><strong>Make the yuba</strong>:</p>

<ul>
  <li>pre-heat the oven to 400-425</li>
  <li>lightly grease a baking sheet (you might need two) and lay the yuba out so no sheets are overlapping</li>
  <li>bake for ~10 minutes until the yuba starts to bubble up off the pan and turn light brown</li>
  <li>finish under a broiler on high until the yuba has some brown spots, but don’t let it burn! this step helps give the yuba the taste and texture of smoked meat</li>
</ul>

<p><strong>Toast the bread and melt the cheese</strong>:</p>

<ul>
  <li>lightly brush olive oil on each half of the heros</li>
  <li>cover the top half in grated cheese</li>
  <li>place in the oven for 3-4 minutes</li>
  <li><strong>NOTE</strong>: You can save a bit of time by doing this while the yuba is browning under the broiler, but just put the bread on a lower rack.</li>
</ul>

<p><strong>Assemble the sandwich</strong></p>

<p>This is only my suggestion. Assembling a sandwich is a personal journey:</p>

<ul>
  <li>On the bottom half of the hero, lather mayo and hoagie spread.</li>
  <li>Stack up the yuba on top.</li>
  <li>Place the kale/broccoli rabe on top of the melted cheese</li>
  <li>Optionally add other goodies on top of the yuba (sliced tomatoes, spicy pickled cucumbers, whatever you like!)</li>
  <li>drizzle some of the vinaigrette marinade on top of the yuba and kale/broccoli rabe.</li>
  <li>put the two halves together.</li>
</ul>

<p>Eat!</p>]]></content><author><name></name></author><category term="recipe" /><summary type="html"><![CDATA[I love the yuba verde sandwich from superiority burger. It’s the closest vegetarian approximation of deli meat I’ve had and also references a Philly Italian Pork Sandwich which is delicious and filled with broccoli rabe. I adapted this from my memory and also the intro paragraph to the Bittman Project’s knock-off, but I haven’t read that full recipe because it’s paywalled. My version adds cheese instead of a bean spread as well as mayo, so it’s def not vegan, but arguably more delicious. I’ve also used kale instead of broccoli rabe which is easier to eat in a sandwich, though I did miss its bitterness.]]></summary></entry><entry><title type="html">Halal Guys Chicken Over Rice</title><link href="https://brian.abelson.live/log/2025/06/29/halal-guys-chicken-over-rice.html" rel="alternate" type="text/html" title="Halal Guys Chicken Over Rice" /><published>2025-06-29T14:40:00-04:00</published><updated>2025-06-29T14:40:00-04:00</updated><id>https://brian.abelson.live/log/2025/06/29/halal-guys-chicken-over-rice</id><content type="html" xml:base="https://brian.abelson.live/log/2025/06/29/halal-guys-chicken-over-rice.html"><![CDATA[<p>My first real job out of college was on 53st and 6th, right across the street from the original <a href="https://thehalalguys.com/">halal guys</a> truck and I would eat it all the time for lunch. Even back then there could be a line down the block and you had to show up early to beat the lunch rush.</p>

<p>I made this <a href="https://everylittlecrumb.com/halal-guys-chicken-and-rice/">copycat recipe</a> last night and it was convincingly accurate, maybe even better than the real thing.  I was out of cumin so substituted coriander, put less mayo in the sauce than it called for, grilled the chicken instead of sauteed, and used brown rice instead of white basmati in a rice cooker. You could probably make this with tofu or tempeh, too.</p>

<h2 id="ingredients">Ingredients</h2>

<p>For the chicken:</p>

<ul>
  <li>2 lbs chicken breasts 900 g, about 6</li>
  <li>1/4 cup olive oil</li>
  <li>2 tablespoon lemon juice</li>
  <li>1 tablespoon white vinegar</li>
  <li>3 garlic cloves, minced</li>
  <li>1 teaspoon salt</li>
  <li>1/2 teaspoon black pepper</li>
  <li>1 teaspoon oregano powder</li>
  <li>1 teaspoon all spice or seven spices</li>
  <li>1/2 teaspoon ginger powder</li>
  <li>1/2 teaspoon cumin powder</li>
  <li>1/2 teaspoon paprika powder</li>
  <li>1 tablespoon vegetable oil for cooking</li>
</ul>

<p>For the white sauce:</p>

<ul>
  <li>3/4 cup Greek yogurt 170g (6oz)</li>
  <li>1/2 cup mayonnaise 115 g</li>
  <li>1 tablespoon white vinegar</li>
  <li>1 tablespoon water</li>
  <li>1 teaspoon lemon juice</li>
  <li>1-2 teaspoon sugar</li>
  <li>1/2 teaspoon salt</li>
  <li>1/4 teaspoon black pepper</li>
</ul>

<p>For the rice:</p>

<ul>
  <li>2 tablespoon unsalted butter</li>
  <li>1/2 teaspoon turmeric powder</li>
  <li>1/4 teaspoon cumin powder</li>
  <li>1 1/2 cups basmati rice, soaked for 20 minutes then rinsed until water runs clear</li>
  <li>2 1/2 cups chicken stock or 1 stock cube dissolved in 2.5 cups hot water</li>
  <li>salt and pepper to taste, a pinch of each</li>
</ul>

<p>To assemble:</p>

<ul>
  <li>1 chopped tomato</li>
  <li>handful chopped parsley</li>
  <li>sriracha sauce</li>
</ul>

<h2 id="instructions">Instructions</h2>

<p><strong>For the chicken</strong>:</p>

<ul>
  <li>In a bowl, add all the ingredients for chicken marinade, like the olive oil, lemon juice, vinegar, garlic cloves, all the spices and the salt and pepper. Combine until well mixed, then add the chicken breast and toss to coat evenly. Cover the bowl with plastic wrap and marinade for 1-2 hours. (meanwhile you can make the white sauce).</li>
  <li>Heat the vegetable oil in a large skillet on medium high heat, then add the chicken. Cook for 5-6 minutes each side, or until golden brown and cooked through.</li>
  <li>Remove chicken to a cutting board, and let it rest for 10 minutes, before chopping roughly into 2 inch cubes.</li>
</ul>

<p><strong>For the white sauce</strong>:</p>

<p>Mix together all the ingredients for the sauce, and store in the fridge until ready to serve.</p>

<p><strong>For the rice</strong>:</p>

<ul>
  <li>Add the butter to a large saucepan over medium heat. Once melted, add the turmeric and cumin, and stir for 1 minutes or until spices are fragrant.</li>
  <li>Add the basmati rice, and toast the rice by stirring around in the pan for 4 minutes. Add the chicken stock, plus a pinch of salt and pepper to season. Stir and bring to a boil, then reduce heat to a simmer, cover and cook for 15 minutes.</li>
  <li>After rice cooking time, once all the water has been absorbed, remove pan from the heat and set aside for 15 minutes without disturbing. After 15 minutes, fluff gently with a fork.</li>
</ul>

<p><strong>To assemble</strong>:</p>

<p>Place the rice in your serving platter, top with the chicken, the white sauce, and chopped tomatoes and parsley. You can add some pita bread too. Optionally, but recommend, drizzle with sriraracha sauce!</p>]]></content><author><name></name></author><category term="recipe" /><summary type="html"><![CDATA[My first real job out of college was on 53st and 6th, right across the street from the original halal guys truck and I would eat it all the time for lunch. Even back then there could be a line down the block and you had to show up early to beat the lunch rush.]]></summary></entry><entry><title type="html">🙄 Spotify’s mental health resources</title><link href="https://brian.abelson.live/log/2025/06/25/spotifys-mental-health-resources.html" rel="alternate" type="text/html" title="🙄 Spotify’s mental health resources" /><published>2025-06-25T18:06:00-04:00</published><updated>2025-06-25T18:06:00-04:00</updated><id>https://brian.abelson.live/log/2025/06/25/spotifys-mental-health-resources</id><content type="html" xml:base="https://brian.abelson.live/log/2025/06/25/spotifys-mental-health-resources.html"><![CDATA[<p>Thank god that Spotify is providing mental health resources to artists who are struggling because they can’t earn a living wage from streaming.</p>]]></content><author><name></name></author><category term="tweet" /><category term="fuck-spotify" /><summary type="html"><![CDATA[Thank god that Spotify is providing mental health resources to artists who are struggling because they can’t earn a living wage from streaming.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://brian.abelson.live/assets/img/posts/2025-06-25--small.png" /><media:content medium="image" url="https://brian.abelson.live/assets/img/posts/2025-06-25--small.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>