<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>yummers</title>
    <link>https://yummers.dev/</link>
    <description>Articles about realtime graphics, math, and programming.</description>
    <language>en</language>
    <atom:link href="https://yummers.dev/rss.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>23 Oct 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>a more general FFT</title>
      <link>https://yummers.dev/a-more-general-fft.html</link>
      <guid isPermaLink="true">https://yummers.dev/a-more-general-fft.html</guid>
      <pubDate>23 Oct 2026 00:00:00 GMT</pubDate>
      <description>In my last article, I talked about how to write a fast scalar-mode FFT on the CPU. This produced two simple-ish implementations: one with a radix-4 butterfly, and one with a radix-8 butterfly. The problem with these radix-4 and radix-8 butterflies is that they impose constraints on the power-of-two length inputs we can process. If our input has length 2^s, then a radix-4 butterfly limits us to s divisible by 2, and a radix-8 butterfly to s divisible by 3.</description>
    </item>
    <item>
      <title>a fast CPU FFT</title>
      <link>https://yummers.dev/a-fast-cpu-fft.html</link>
      <guid isPermaLink="true">https://yummers.dev/a-fast-cpu-fft.html</guid>
      <pubDate>08 Sep 2026 00:00:00 GMT</pubDate>
      <description>The fast Fourier transform (FFT) is one of the most important algorithms in computer science. Modern telephony, image compression, signal analysis, and many other applications rely on the FFT at their core. It’s correspondingly well researched, and has been implemented many times over. I will be reimplementing it myself, (1) because it’s fun, and (2) because I’ll need an unusual version of it for my ocean water simulation. This document serves as a follow-along derivation of my optimized CPU implementation, which exceeds the performance of rustfft’s scalar code at the input sizes I care about.</description>
    </item>
    <item>
      <title>fft water: the plan</title>
      <link>https://yummers.dev/fft-water-the-plan.html</link>
      <guid isPermaLink="true">https://yummers.dev/fft-water-the-plan.html</guid>
      <pubDate>07 Aug 2026 00:00:00 GMT</pubDate>
      <description>About a year ago I took a stab at reimplementing Tessendorf’s ocean water. I got some decent results, but the implementation was sloppy and not particularly organized. I also never implemented Bruneton’s “geometry to BRDF” method , partially because the implementation was sloppy.</description>
    </item>
    <item>
      <title>how do you evenly tile a column?</title>
      <link>https://yummers.dev/how-do-you-evenly-tile-a-column.html</link>
      <guid isPermaLink="true">https://yummers.dev/how-do-you-evenly-tile-a-column.html</guid>
      <pubDate>12 Jul 2026 00:00:00 GMT</pubDate>
      <description>While walking through town the other day, I saw a pillar that looks a bit like this:</description>
    </item>
    <item>
      <title>histogram-preserving tri-planar projection</title>
      <link>https://yummers.dev/histogram-preserving-tri-planar-projection.html</link>
      <guid isPermaLink="true">https://yummers.dev/histogram-preserving-tri-planar-projection.html</guid>
      <pubDate>31 Mar 2026 00:00:00 GMT</pubDate>
      <description>I’ve been messing around with Burley’s “On Histogram-Preserving Blending for Randomized Texture Tiling” (link) for a couple days. The core idea is to pre-process images into a “Gaussianized” form where the histogram of the image’s colors follows a Gaussian distribution. Once in Gaussian form, there is a closed-form way to blend multiple samples with barycentric weights such that the Gaussian’s variance is preserved (Equation 2 in the paper). Finally, you can run the blended colors through a lookup table (LUT) to get a result in the original image’s color space. The results are outstanding. (These ideas build on those laid out by Heitz and Neyret in an earlier paper. I will reference Heitz a few times.)</description>
    </item>
    <item>
      <title>using linux as a desktop os in 2026</title>
      <link>https://yummers.dev/using-linux-as-a-desktop-os-in-2026.html</link>
      <guid isPermaLink="true">https://yummers.dev/using-linux-as-a-desktop-os-in-2026.html</guid>
      <pubDate>09 Feb 2026 00:00:00 GMT</pubDate>
      <description>About a month ago, my PC’s boot drive died. I had been running Windows 11 with moderate dissatisfaction for a few months, so I decided to switch over to Linux as my primary OS. These are some notes on that process. My motivation is to give an accurate portrayal of what to expect out of the switching process and the day-to-day operation.</description>
    </item>
    <item>
      <title>hemi-octahedral impostors</title>
      <link>https://yummers.dev/hemi-octahedral-impostors.html</link>
      <guid isPermaLink="true">https://yummers.dev/hemi-octahedral-impostors.html</guid>
      <pubDate>14 Jan 2026 00:00:00 GMT</pubDate>
      <description>Note: this blog post is only like half way complete. I may or may not circle back to it. The stuff on octahedral mappings is all finished, but the impostor application below is not.</description>
    </item>
    <item>
      <title>6 wave dispersion relations with derivatives</title>
      <link>https://yummers.dev/wave-dispersion-relations-with-derivatives.html</link>
      <guid isPermaLink="true">https://yummers.dev/wave-dispersion-relations-with-derivatives.html</guid>
      <pubDate>21 Sep 2025 00:00:00 GMT</pubDate>
      <description>Tessendorf’s 2005 paper “Simulating Ocean Water” describes three basic dispersion relations:</description>
    </item>
    <item>
      <title>meow meow meow meow</title>
      <link>https://yummers.dev/meow-meow-meow-meow.html</link>
      <guid isPermaLink="true">https://yummers.dev/meow-meow-meow-meow.html</guid>
      <pubDate>10 Sep 2025 00:00:00 GMT</pubDate>
      <description>meow meow meow meow meow meow meow meow’meow meow meow meow meow. meow meow meow meow.</description>
    </item>
    <item>
      <title>rasterized ray marching at scale</title>
      <link>https://yummers.dev/rasterized-ray-marching-at-scale.html</link>
      <guid isPermaLink="true">https://yummers.dev/rasterized-ray-marching-at-scale.html</guid>
      <pubDate>11 Jun 2025 00:00:00 GMT</pubDate>
      <description>I’ve long had the dream of creating high resolution chains on characters with raymarching. The problem is that Unity’s object transform is based on the character’s hip bone, so making raymarched geometry “stick” to characters is impossible.</description>
    </item>
    <item>
      <title>how much CO2 do American cars produce?</title>
      <link>https://yummers.dev/how-much-co2-do-american-cars-produce.html</link>
      <guid isPermaLink="true">https://yummers.dev/how-much-co2-do-american-cars-produce.html</guid>
      <pubDate>23 May 2025 00:00:00 GMT</pubDate>
      <description>TLDR: About 1.520 \cdot 10^{12} kg/year. This increases the CO_2 in the atmosphere by about 0.048% per year.</description>
    </item>
    <item>
      <title>“big llms are memory bound”</title>
      <link>https://yummers.dev/big-llms-are-memory-bound.html</link>
      <guid isPermaLink="true">https://yummers.dev/big-llms-are-memory-bound.html</guid>
      <pubDate>22 May 2025 00:00:00 GMT</pubDate>
      <description>There is wisdom oft repeated that “big neural nets are limited by memory bandwidth.” This is utter horseshit and I will show why.</description>
    </item>
    <item>
      <title>meow meow meow meow</title>
      <link>https://yummers.dev/meow-meow-meow-meow-1.html</link>
      <guid isPermaLink="true">https://yummers.dev/meow-meow-meow-meow-1.html</guid>
      <pubDate>14 Apr 2025 00:00:00 GMT</pubDate>
      <description>meow meow meow meow meow meow meow meow. meow meow meow meow, meow meow meow meow meow meow meow.</description>
    </item>
    <item>
      <title>riding crop</title>
      <link>https://yummers.dev/riding-crop.html</link>
      <guid isPermaLink="true">https://yummers.dev/riding-crop.html</guid>
      <pubDate>07 Apr 2025 00:00:00 GMT</pubDate>
      <description>Click here to download my riding crop from gumroad. See the gumroad page for setup instructions.</description>
    </item>
    <item>
      <title>a panoply of frameworks</title>
      <link>https://yummers.dev/a-panoply-of-frameworks.html</link>
      <guid isPermaLink="true">https://yummers.dev/a-panoply-of-frameworks.html</guid>
      <pubDate>03 Apr 2025 00:00:00 GMT</pubDate>
      <description>I want to use electron. I know that raw CSS sucks dick so let’s use a framework. Bootstrap sucks so let’s use tailwind. Oh wait tailwind has a build step? Okay let’s use the CLI. Wait, I’m going to need to be able to plumb runtime data eventually. I think that’s what react is for right? Uhhh if I’m using react is the tailwind CLI going to be good enough? It seems like vite is what people are using for tailwind+react. Okay let’s just commit to that. Hmm this is a lot of setup, should I use a template? Oh wait the main template people are using advertises “full access to node.js apis from the renderer process.” That seems like a terrible fucking idea. Good thing I actually read the electron docs.</description>
    </item>
    <item>
      <title>electron first impressions</title>
      <link>https://yummers.dev/electron-first-impressions.html</link>
      <guid isPermaLink="true">https://yummers.dev/electron-first-impressions.html</guid>
      <pubDate>01 Apr 2025 00:00:00 GMT</pubDate>
      <description>Occasionally I want to build some throwaway app for use by other people. CLIs are nice and all, but they’re hard to launch from VR, and most people have never interacted with a terminal. So I need some way to write a GUI. Enter electron.</description>
    </item>
    <item>
      <title>hello world :3</title>
      <link>https://yummers.dev/hello-world-3.html</link>
      <guid isPermaLink="true">https://yummers.dev/hello-world-3.html</guid>
      <pubDate>20 Mar 2025 00:00:00 GMT</pubDate>
      <description>me rn </description>
    </item>
  </channel>
</rss>
