<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
    <title>~cartwright's Minimalist Blog</title>
    <link>https://tilde.club/~cartwright/blog/</link>
    <description>Built with Perl 5.8</description>
        <item>
            <title>The Architecture of Flash: SSDs, Write Cycles, and the Engineering Behind Modern Silicon Storage</title>
            <link>https://tilde.club/~cartwright/blog/2026/07/04/the-architecture-of-flash-ssds-write-cycles-and-the-engineering-behind-modern-silicon-storage.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/07/04/the-architecture-of-flash-ssds-write-cycles-and-the-engineering-behind-modern-silicon-storage.html</guid>
            <description>&lt;h2&gt;Introduction: The Shift from Platters to Silicon&lt;/h2&gt;
&lt;p&gt;For decades, digital storage relied on mechanical magnetic read/write heads hovering nanometers above spinning platters. Hard Disk Drives (HDDs) excelled at linear read/write operations but were fundamentally limited by physics. Solid-State Drives (SSDs) discarded moving parts entirely, replacing mechanical latency with the speed of moving electrons. Yet, silicon storage operates under a completely different, unpredictable set of chemical and electronic rules. To manage these rules, computer engineers had to build complex translation layers that mask the true nature of flash memory from your operating system.&lt;/p&gt;

&lt;h2&gt;Flash Memory: The Beginning of NAND and NOR&lt;/h2&gt;
&lt;p&gt;All flash memory tracks back to the invention of the floating-gate transistor (MOSFET). However, the market split early on into two distinct topological architectures named after the logic gates they resemble: &lt;strong&gt;NOR&lt;/strong&gt; and &lt;strong&gt;NAND&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;strong&gt;NOR Flash:&lt;/strong&gt; In a NOR configuration, cells are connected in parallel. This allows the system to access individual memory locations directly (byte-addressability). Because it supports random access, it features fast read speeds and allows a processor to execute code directly from the flash chip without copying it to RAM first (Execute-in-Place). However, the parallel wiring requires more physical space, leading to low storage densities and slow write and erase times. Today, NOR is reserved for BIOS chips, routers, and embedded firmware.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;NAND Flash:&lt;/strong&gt; In a NAND configuration, cells are connected in series. This eliminates the bulky wiring of parallel circuits, allowing cells to be packed tightly together for maximum density and low manufacturing costs per gigabyte. The trade-off is that NAND cannot be accessed by individual bytes; it must be read and written in larger clusters called &lt;strong&gt;pages&lt;/strong&gt;, and erased in even larger units called &lt;strong&gt;blocks&lt;/strong&gt;. Because of its massive density advantage, NAND became the undisputed foundation of SSDs, smartphones, and memory cards.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Battle for Density: SLC to QLC, Trading Longevity for Size&lt;/h2&gt;
&lt;div style=&quot;background-color: #f4f7f6; border-left: 5px solid #2980b9; padding: 20px; margin: 25px 0; border-radius: 4px; font-family: -apple-system, BlinkMacSystemFont, &apos;Segoe UI&apos;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #2c3e50;&quot;&gt;
  &lt;p style=&quot;margin-top: 0; font-weight: bold; color: #2980b9; font-size: 1.1em; display: flex; align-items: center; gap: 8px;&quot;&gt;
    💧 The Bucket Analogy: Why Density Causes Corruption
  &lt;/p&gt;
  &lt;p style=&quot;margin-bottom: 10px;&quot;&gt;
    To visualize this engineering battle, imagine a single flash memory cell as a &lt;strong&gt;bucket of water&lt;/strong&gt;, where the water represents trapped electrons.
  &lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 15px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;SLC (1 Bit):&lt;/strong&gt; You only care if the bucket is empty (0) or has water in it (1). Even if a few drops spill or some water evaporates over time, as long as there is &lt;em&gt;any&lt;/em&gt; water left, the computer safely reads it as a 1. It is incredibly hard to corrupt.
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;QLC (4 Bits):&lt;/strong&gt; Instead of empty or full, you must divide that exact same bucket into &lt;strong&gt;16 precise water levels&lt;/strong&gt; to store different combinations of data. 
    &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p style=&quot;margin-bottom: 0; background-color: #fff; padding: 12px; border-radius: 4px; border: 1px dashed #bdc3c7; font-style: italic;&quot;&gt;
    &lt;strong&gt;The Risk of Corrupt Data:&lt;/strong&gt; Because the physical walls of the cell degrade with use, electrons will slowly leak out. In an SLC bucket, a little evaporation doesn&apos;t change the state. But in a QLC bucket, losing just a few drops of water drops you into the wrong level entirely, causing &lt;strong&gt;data corruption&lt;/strong&gt;.
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;At its microscopic core, a NAND flash cell stores data by trapping electrons inside an isolated pocket (a floating gate). The drive controller determines what data is inside the cell by applying a voltage and measuring how much electrical resistance those trapped electrons create. &lt;/p&gt;

&lt;p&gt;As manufacturing advanced, engineers realized they didn&apos;t have to treat a cell as just &quot;empty&quot; or &quot;full&quot;. By measuring highly precise gradations of electrical charge, they could squeeze multiple bits of data into a single physical cell pocket:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SLC (Single-Level Cell):&lt;/strong&gt; Stores 1 bit per cell. It only needs to distinguish between 2 voltage states (0 or 1). It is incredibly fast, highly accurate, and handles extreme wear, but it is prohibitively expensive and low-capacity.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MLC (Multi-Level Cell):&lt;/strong&gt; Stores 2 bits per cell. It must precisely isolate and measure 4 distinct voltage states. &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;TLC (Triple-Level Cell):&lt;/strong&gt; Stores 3 bits per cell. It requires managing 8 distinct voltage states within the exact same miniature pool of electrons. This is the current standard for mainstream consumer computing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;QLC (Quad-Level Cell):&lt;/strong&gt; Stores 4 bits per cell. It forces the controller to map out 16 incredibly precise voltage states. While it yields massive drive capacities at cheap price points, reading and writing becomes an exercise in extreme mathematical precision, which degrades performance and longevity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;NAND Cell Type Comparison&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Cell Type&lt;/th&gt;
      &lt;th&gt;Bits per Cell&lt;/th&gt;
      &lt;th&gt;Voltage States&lt;/th&gt;
      &lt;th&gt;Typical Write Endurance (P/E Cycles)&lt;/th&gt;
      &lt;th&gt;Primary Use Case&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;SLC&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;50,000 to 100,000&lt;/td&gt;
      &lt;td&gt;Enterprise enterprise logging, military, high-end caching&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;MLC&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;3,000 to 10,000&lt;/td&gt;
      &lt;td&gt;Industrial hardware, legacy premium drives&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;TLC&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;1,000 to 3,000&lt;/td&gt;
      &lt;td&gt;Operating system boot drives, gaming consoles&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;QLC&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;100 to 1,000&lt;/td&gt;
      &lt;td&gt;Mass secondary storage, media archiving arrays&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/section&gt;

&lt;h2&gt;Breaking Through the Sub-15nm Wall: 3D NAND&lt;/h2&gt;
&lt;p&gt;For years, manufacturers increased SSD capacities by shrinking the physical size of the cells on a flat, two-dimensional plane (2D Planar NAND). However, when cells were shrunk below 15 nanometers, they hit a hard wall of physics. Because the cells were so small and close together, the insulating walls thinned down to a few atoms, allowing electrons to spontaneously leak out via quantum tunneling. This caused severe data corruption.&lt;/p&gt;

&lt;p&gt;To bypass this limitation, the industry pivoted to &lt;strong&gt;3D NAND&lt;/strong&gt; (or V-NAND). Instead of squeezing cells closer together on a flat sheet, engineers built up. They laid down alternating layers of materials and etched deep vertical channels, stacking memory cells on top of one another like microscopic skyscrapers. By expanding into the third dimension, manufacturers could use larger, more stable cell sizes while vastly increasing total capacities. Modern SSDs regularly ship with architectures stacked over 100 to 200 layers high.&lt;/p&gt;

&lt;h2&gt;The Flash Translation Layer (FTL) and Out-of-Place Writes&lt;/h2&gt;
&lt;p&gt;Your operating system (like Linux, Windows or macOS) is fundamentally stubborn: it still thinks it is talking to a traditional hard drive. It expects to overwrite data directly by sending a command to change specific sectors in place. &lt;/p&gt;

&lt;p&gt;NAND flash cannot do this due to an asymmetry in its physics: &lt;strong&gt;Data can be read and written at the Page level, but can only be erased at the Block level.&lt;/strong&gt; A block consists of dozens or hundreds of pages. If you want to change a single sentence in a text file stored on Page 1 of Block A, the SSD cannot simply overwrite Page 1. It must erase the entire Block A first. But Block A contains other valuable, unrelated files!&lt;/p&gt;

&lt;p&gt;To solve this, every SSD includes an onboard microprocessor running an internal map called the &lt;strong&gt;Flash Translation Layer (FTL)&lt;/strong&gt;. When you modify a file, the FTL directs the update to a completely clean, empty page somewhere else on the silicon. It then updates its internal map to point to this new location, while marking the old page as &quot;stale&quot; or invalid. This is called an &lt;strong&gt;out-of-place write&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;strong&gt;Garbage Collection &amp; Wear Leveling:&lt;/strong&gt; Because the drive keeps abandoning old pages, it eventually runs out of clean space. The FTL constantly runs an background maintenance routine called &quot;Garbage Collection.&quot; It identifies a block full of stale pages, copies the remaining good pages to an entirely separate block, and then runs a high-voltage clear command on the old block, restoring it to a clean slate. Furthermore, because flash cells degrade every time they are written to, the FTL utilizes &lt;strong&gt;Wear Leveling&lt;/strong&gt; algorithms to spread incoming data evenly across the entire drive, ensuring no single block burns out prematurely.
&lt;/blockquote&gt;

&lt;h2&gt;The SMR Equivalent in the SSD World: Caching and ZNS&lt;/h2&gt;
&lt;p&gt;In mechanical hard drives, Shingled Magnetic Recording (SMR) is a trick used to boost drive density by overlapping write tracks like shingles on a roof. While SMR drives read data perfectly fine, writing data requires them to carefully rewrite adjacent overlapping tracks, resulting in horrible write performance drops during heavy, prolonged random workloads.&lt;/p&gt;

&lt;p&gt;The SSD world deals with its own version of this exact performance dynamic, driven by QLC NAND and caching layers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;strong&gt;Pseudo-SLC Caching (The Behavioral Equivalent):&lt;/strong&gt; Native QLC memory is incredibly slow to write to because the controller has to carefully calculate 16 precise voltage points. To hide this lag from users, manufacturers set aside a portion of the drive to run as a &quot;Pseudo-SLC Cache&quot;. When you write files to the drive, the controller temporarily treats those cells as fast 1-bit SLC cells. However, if you perform a massive, sustained file transfer that exhausts this temporary cache, the drive&apos;s performance collapses. The controller is suddenly forced to accept new data while simultaneously transferring and compressing the old data from the SLC cache into slow 16-state QLC cells.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Zoned Namespaces (The Architectural Solution):&lt;/strong&gt; Much like high-end cloud datacenters use host-managed SMR drives to control precisely where data lands on spinning disks, modern enterprise NVMe drives utilize &lt;strong&gt;Zoned Namespaces (ZNS)&lt;/strong&gt;. ZNS bypasses the traditional FTL map entirely. It exposes the raw internal physical blocks of the flash drive to the operating system as isolated, sequential-write zones. By aligning the OS file system directly with the physical geometry of the NAND, ZNS completely eliminates unpredictable internal garbage collection cycles, lowers write amplification, and heavily extends the physical life of the drive.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Critical Vulnerabilities: Power Failures and Bricking Risks&lt;/h2&gt;
&lt;p&gt;While SSDs are impervious to drops and physical vibration, they are uniquely susceptible to catastrophic sudden power loss.&lt;/p&gt;

&lt;p&gt;Because writing data to NAND takes time and requires complex lookup tracking, SSDs rely heavily on super-fast, volatile DRAM chips to act as a workspace cache. This DRAM holds the incoming files and the master FTL mapping layout. If a user pulls out an external drive or suffers a sudden power failure mid-operation, whatever data is sitting inside that volatile DRAM cache is lost.&lt;/p&gt;

&lt;p&gt;The real danger here isn&apos;t just losing your open document—it is &lt;strong&gt;FTL corruption&lt;/strong&gt;. If the power cuts while the FTL is actively modifying its master map, the directory file can become corrupted or truncated. When power returns, the SSD controller boot sequence reads a broken map and completely forgets where its millions of pages are physically stored. The drive instantly goes into a panicked, locked state, showing up to the computer as an unreadable, uninitialized device with a capacity of 0 bytes. The drive is effectively &quot;bricked&quot;. &lt;/p&gt;

&lt;p&gt;Enterprise drives protect against this with &lt;strong&gt;Power Loss Protection (PLP)&lt;/strong&gt;: a row of hardware capacitors that hold a few milliseconds of emergency backup electricity—just enough time for the controller to safely flush the volatile FTL map down into safe, permanent silicon before shutting off.&lt;/p&gt;

&lt;h2&gt;The Quiet Decay (Bit Rot): Long-Term Data Retention&lt;/h2&gt;
&lt;div style=&quot;background-color: #fcf8e3; border-left: 5px solid #f0ad4e; padding: 20px; margin: 25px 0; border-radius: 4px; font-family: -apple-system, BlinkMacSystemFont, &apos;Segoe UI&apos;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #2c3e50;&quot;&gt;
  &lt;p style=&quot;margin-top: 0; font-weight: bold; color: #df8a13; font-size: 1.1em; display: flex; align-items: center; gap: 8px;&quot;&gt;
    ⚡ The Silent Repair: Block Refresh Algorithms
  &lt;/p&gt;
  &lt;p style=&quot;margin-bottom: 10px;&quot;&gt;
    To fight this constant leakage, some modern drive controllers use an internal maintenance system called a &lt;strong&gt;Block Refresh Algorithm&lt;/strong&gt;. Think of it as a hidden patrol guard that checks the water levels in every bucket.
  &lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 15px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;Active Scanning:&lt;/strong&gt; While the drive is powered on, the controller quietly reads data blocks in the background, checking to see if their voltage levels have started to decay.
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;Rewriting to Repair:&lt;/strong&gt; If the controller detects that electrons are dangerously close to leaking past a readable threshold, it copies that data to a brand-new, healthy block and marks the old one for erasing.
    &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p style=&quot;margin-bottom: 0; background-color: #fff; padding: 12px; border-radius: 4px; border: 1px dashed #f0ad4e; font-style: italic;&quot;&gt;
    &lt;strong&gt;The Catch:&lt;/strong&gt; This self-repairing process cannot happen if the drive is sitting unpowered in a drawer. Furthermore, the scan runs at a low priority so it doesn&apos;t slow down your daily work. For a large drive to completely cycle through and refresh all its old data, the computer often needs to be left &lt;strong&gt;turned on and idle for multiple days at a time&lt;/strong&gt;.
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Many customers incorrectly treat flash drives and SSDs as permanent archival vaults. They are not. NAND flash is a form of electronic storage that relies on physical insulation, not permanent chemical states.&lt;/p&gt;

&lt;p&gt;The electrons inside a NAND cell are trapped behind an ultra-thin insulating barrier of silicon oxide. Every single time a cell undergoes a Program/Erase (P/E) cycle, the high voltage applied physically degrades this atomic insulation layer. Over time, the wall develops tiny, microscopic fractures. &lt;/p&gt;

&lt;p&gt;If an SSD is left unpowered sitting in a drawer, those trapped electrons will slowly leak out through the degraded insulation over time—a phenomenon called &lt;strong&gt;charge migration&lt;/strong&gt;. Eventually, the voltage level drops past a readable threshold, causing &quot;bit rot&quot; and unrecoverable data corruption. While a brand-new, healthy drive can retain data unpowered for a few years, an old drive that has consumed most of its rated write cycles can begin losing its data integrity after just a few months of sitting completely unpowered, especially if stored in hot environments.&lt;/p&gt;

&lt;h2&gt;Solid-State Technology Time lines&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;1984:&lt;/strong&gt; Dr. Fujio Masuoka invents both NOR and NAND flash memory while working at Toshiba, laying down the theoretical and physical groundwork for all modern solid-state storage.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;1989:&lt;/strong&gt; Toshiba releases the world’s first commercial discrete NAND flash chip to market.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;1991:&lt;/strong&gt; SanDisk builds the first commercial 20 Megabyte PC Card SSD for IBM ThinkPad laptops, costing upwards of $1,000.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2003:&lt;/strong&gt; The storage industry begins its first massive scale transition from high-cost, low-capacity consumer SLC chips over to multi-bit MLC cells.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2009:&lt;/strong&gt; Mass commercial production of TLC flash memory arrives, drastically lowering cost barriers and accelerating the displacement of mechanical HDDs as primary boot drives. SanDisk and Toshiba demonstrate QLC.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2013:&lt;/strong&gt; Samsung breaks the physical planar layout limit by pioneering V-NAND (3D NAND), commercially stacking memory cells vertically for the first time.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2018:&lt;/strong&gt; High-density QLC consumer SSDs hit the broader retail market, introducing affordable multi-terabyte internal solid-state form factors.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2021:&lt;/strong&gt; The NVM Express consortium officially rolls out the Zoned Namespaces (ZNS) standard into the core NVMe 2.0 technical specification blueprint, providing hyperscale cloud architectures with direct physical management over silicon storage layouts.&lt;/li&gt;
&lt;/ol&gt;</description>
            <pubDate>July 4, 2026</pubDate>
        </item>
        <item>
            <title>The 4th of July: How fireworks, and sparklers work &lt;span style=&quot;animation: smooth-flash 1s linear infinite;&quot;&gt;&lt;i&gt;&lt;b style=&quot;color:rgb(0,0,255);&quot;&gt;4th of July special&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;style&gt;@keyframes smooth-flash { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } &lt;/style&gt;</title>
            <link>https://tilde.club/~cartwright/blog/2026/07/04/the-4th-of-july-how-fireworks-and-sparklers-work.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/07/04/the-4th-of-july-how-fireworks-and-sparklers-work.html</guid>
            <description>&lt;h2&gt;The Launch &amp;amp; Ejection&lt;/h2&gt;
&lt;p&gt;Aerial fireworks use black powder to launch a shell into the air. At peak altitude, an internal burst charge detonates, violently ejecting small pellets of metal powder and oxidizers (called &quot;stars&quot;) into the sky.&lt;/p&gt;
&lt;p&gt;Sparklers do this on a slower scale. A chemical fuel and metal grains are glued to a wire with a binder. As the binder burns down, gas expansion continually throws off tiny, molten metal particles into the air.&lt;/p&gt;

&lt;h2&gt;Rapid Oxidation &amp;amp; The Glow&lt;/h2&gt;
&lt;p&gt;Once these metal particles are ejected, they hit extreme heat and open oxygen. Internal oxidizers release oxygen, causing the metals to burn intensely. This rapid &lt;strong&gt;oxidation&lt;/strong&gt; releases a massive amount energy, causing the metal to glow brightly through two methods:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Incandescence:&lt;/strong&gt; High heat makes solid metal particles glow white or gold.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Luminescence:&lt;/strong&gt; Energy excites electrons in the gas phase; when they drop back down, they emit specific colors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Metal Color Palette&lt;/h2&gt;
&lt;p&gt;The specific metal mixed into the composition dictates the exact color or effect you see:&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;background-color: #f5f5f5;&quot;&gt;
      &lt;th&gt;Metal Element&lt;/th&gt;
      &lt;th&gt;Visual Effect / Color&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Iron / Steel&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Classic golden, branch-like sparks (the backbone of backyard sparklers)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Strontium&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Deep Red&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Barium&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Vibrant Green&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Copper&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Electric Blue (the hardest to produce &amp; expensive)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Sodium&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Intense Yellow&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Magnesium / Aluminum&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Blinding White / Silver flashes&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;center&gt;Happy 4th of July! Enjoy the show and stay safe.&lt;/center&gt;&lt;/p&gt;</description>
            <pubDate>July 4, 2026</pubDate>
        </item>
        <item>
            <title>47,000 Hours, Zero Bad Sectors: Why My 2011 WD Scorpio Blue Keeps Working</title>
            <link>https://tilde.club/~cartwright/blog/2026/06/27/47000-hours-zero-bad-sectors-why-my-2011-WD-scorpio-blue-keeps-working.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/06/27/47000-hours-zero-bad-sectors-why-my-2011-WD-scorpio-blue-keeps-working.html</guid>
            <description>&lt;p&gt;We have all been conditioned to accept the inevitable failure of spinning rust. Hard drives are complex mechanical systems with microscopic tolerances, constantly fighting friction, thermal expansion, and physical wear. Conventional wisdom says that after 3 to 5 years of heavy daily usage, a consumer hard drive will start throwing reallocated sectors before finally breaking down.&lt;/p&gt;

&lt;p&gt;Yet, the drive I am typing this blog post from completely defies that logic. Sitting inside my laptop right now is a 2.5-inch &lt;b&gt;Western Digital Scorpio Blue&lt;/b&gt; manufactured back in 2011. This isn&apos;t a drive I just dug out of an old storage bin; it is a drive that has been actively running, and one that I have personally watched the S.M.A.R.T. health logs of for years. I am continually amazed to see absolutely zero problems.&lt;/p&gt;

&lt;h3&gt;The S.M.A.R.T. Stats&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Drive Model:&lt;/b&gt; WD Scorpio Blue WD1600BEVT (2011, 2.5-inch)&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Power-On Hours:&lt;/b&gt; ~47,000 Hours (Over 5.3 Years of Net Runtime)&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Reallocated Sectors Count:&lt;/b&gt; 0&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Current Pending Sectors:&lt;/b&gt; 0&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Status:&lt;/b&gt; Healthy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Forty-seven thousand hours of real-world, active usage, and not a single bad sector. Amazed by this incredible longevity, I decided to do some deep research into the engineering history of this specific era of Scorpio Blue drives to find out why it still works perfectly today.&lt;/p&gt;

&lt;h2&gt;The Secret: A Single Glass Platter&lt;/h2&gt;
&lt;p&gt;When I dug into the internal architecture of this drive, I discovered something fascinating about its build. While Western Digital’s official documentation completely sidesteps naming the raw materials—likely because marketing teams worried the word &quot;glass&quot; would scare customers into thinking the drive was fragile. By tracking down industry supply chains, I found out that the glass-ceramic substrate was actually sourced from the &lt;a href=&quot;https://www.hoya.com/en/&quot;&gt;&lt;b&gt;HOYA Corporation&lt;/b&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To confirm this for my exact model, I looked up pictures of its interior. Seeing the inside of the drive makes it immediately obvious: when platters are made of glass-ceramic, they lose that bright, shiny, mirror-like chrome look found on traditional aluminum ones. Instead, they have a distinctly deep, darker, and slightly translucent appearance because of how the magnetic layers bond to the underlying glass core.&lt;/p&gt;

&lt;p&gt;Glass platters were a massive engineering milestone. Glass is structurally stiffer and far more thermally stable than aluminum. In a drive that sees constant daily use, temperature fluctuations can cause aluminum to microscopically expand and warp, which leads to head-tracking errors and bad sectors. Glass, however, maintains its perfectly flat shape regardless of how warm the drive gets, ensuring flawless head tracking over decades of continuous spinning.&lt;/p&gt;

&lt;h2&gt;The Magnetic &quot;Paint&quot; Coated Layer&lt;/h2&gt;
&lt;p&gt;The magic doesn&apos;t stop at the glass itself. For data to actually be written, that glass platter has to be coated in a magnetic medium—what engineers of the era sometimes colloquially referred to as a &quot;magnetic paint,&quot; though it is vastly more complex than a standard coat of pigment.&lt;/p&gt;

&lt;p&gt;In these drives, Western Digital used an incredibly precise thin-film deposition technique. This magnetic coating consists of a cobalt-chromium-platinum alloy applied in microscopic, uniform layers over a glass-polishing base. Because glass can be polished to a significantly smoother finish than aluminum, this magnetic layer could be applied with extreme uniformity. No microscopic bumps meant no accidental contact between the head and the disk, drastically reducing the risk of a catastrophic head crash over my thousands of hours of usage.&lt;/p&gt;

&lt;h2&gt;Built-In Mechanical Protections&lt;/h2&gt;
&lt;p&gt;Hardware composition is only half the battle; Western Digital&apos;s built-in mechanical behaviors played a massive role in keeping my drive alive:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;SecurePark Technology:&lt;/b&gt; This system ensures that the recording heads are physically away from the disk surface during spin-up, spin-down, and whenever the drive idles. The head never parks on the data zone, meaning it never rubs against that precious magnetic &quot;paint,&quot; eliminating wear from friction.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;WhisperDrive Algorithms:&lt;/b&gt; These algorithms smooth out the movements of the actuator arm. By eliminating abrupt, jerky movements as the head hunts for data, it minimized mechanical stress on the arm bearings and lowered heat generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Final Thoughts: A Masterclass in Legacy Engineering&lt;/h2&gt;
&lt;p&gt;Watching this drive pass every health check year after year has been incredible. Discovering that it relies on a single, perfectly smooth glass platter coated in a resilient magnetic matrix explains exactly why it refuses to fail. It represents a peak era of mechanical storage engineering—a time when the 2.5-inch form factor was perfected right before Solid State Drives took over the market.&lt;/p&gt;

&lt;p&gt;My Scorpio Blue is a living testament to what happens when material science, structural engineering, and firmware align perfectly. It continues to spin, read, and write without a single problem.&lt;/p&gt;</description>
            <pubDate>Jun 27, 2026</pubDate>
        </item>
        <item>
            <title>Rolling My Own: Leaving Bashblog for Perl 5.8</title>
            <link>https://tilde.club/~cartwright/blog/2026/06/26/rolling-my-own-leaving-bashblog-for-perl-5-8.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/06/26/rolling-my-own-leaving-bashblog-for-perl-5-8.html</guid>
            <description>&lt;p&gt;For a while, bashblog did exactly what I needed it to do. It was a single script, it didn&apos;t require a database, and it kept things out of the corporate cloud. But eventually, the cracks started to show. The moment you want to fix the markdown formatting issues, change how files are structured, tweak the layout logic, or manage index compilation without losing your mind, hacking away at a massive shell script feels less like minimalism and more like fighting a tool that wasn&apos;t built for your specific workflow.&lt;/p&gt;

&lt;p&gt;So, I did what anyone would do: I went looking for an alternative.&lt;/p&gt;

&lt;p&gt;The state of modern web software is excessively bloated. I spent a couple of hours digging through the current landscape of &quot;lightweight&quot; blogging engines and static site generators. Most of what I found was bloated beyond belief—engines wrapped in heavy JavaScript frameworks, massive Python dependency trees, used overly complex PHP (not that I have anything against PHP on its own) or tools that require pulling down hundreds of megabytes of packages just to compile a few plain text files into HTML. Even the self-proclaimed minimalist options still felt over-engineered for what should be a simple text-processing pipeline.&lt;/p&gt;

&lt;p&gt;Nothing was even close. If you want something done cleanly without the extra weight, you usually have to write it yourself.&lt;/p&gt;

&lt;p&gt;The final spark came when I was looking through &lt;a href=&quot;https://lovie.dev&quot;&gt;Levi&apos;s&lt;/a&gt; website repository and saw their &lt;a href=&quot;https://git.lovie.dev/levi/website/src/branch/master/newpost.sh&quot;&gt;newpost.sh&lt;/a&gt; script. It’s a beautifully simple, no-nonsense shell utility designed to stream-line making a new entry. It reminded me how straightforward the process should be. But instead of sticking strictly to a shell script pipeline for the entire compiler backend, I wanted a dedicated language built from the ground up for heavy text manipulation.&lt;/p&gt;

&lt;p&gt;I decided to roll my own static site compiler in Perl 5.8.&lt;/p&gt;

&lt;p&gt;Yes, Perl 5.8. It’s a tool from a different era, but it is absolutely unbeatable. It is blazingly fast, runs natively on virtually any Unix-like box you throw it at, handles regular expressions like second nature, and has zero external runtime dependencies.&lt;/p&gt;

&lt;p&gt;My new setup reads basic text files with custom metadata headers, runs them through a simple template block, and compiles the entire site—including the master index and an RSS feed—in just a few milliseconds. No Node modules, no complex database configurations, and no overhead. Just raw text, strict logic, and clean HTML.&lt;/p&gt;

&lt;p&gt;It feels good to finally have a setup where I know exactly what every single line of code is doing.&lt;/p&gt;</description>
            <pubDate>Jun 26, 2026</pubDate>
        </item>
        <item>
            <title>Architectural Analysis: CMR vs. SMR Hard Drive Technologies (I know this is not written in the blog tone)</title>
            <link>https://tilde.club/~cartwright/blog/2026/06/25/cmr_vs_smr_comprehensive_analysis.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/06/25/cmr_vs_smr_comprehensive_analysis.html</guid>
            <description>&lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
            line-height: 1.6;
            color: #333333;
            max-width: 850px;
            margin: 40px auto;
            padding: 0 24px;
            background-color: #ffffff;
        }
        header {
            border-bottom: 2px solid #eaedf0;
            padding-bottom: 20px;
            margin-bottom: 32px;
        }
        h1 {
            font-size: 22pt;
            color: #1a202c;
            margin-bottom: 8px;
            line-height: 1.2;
        }
        .subtitle {
            font-size: 13pt;
            color: #4a5568;
            margin-top: 0;
            margin-bottom: 16px;
            font-weight: 400;
        }
        .meta {
            font-size: 10pt;
            color: #718096;
            display: block;
        }
        h2 {
            font-size: 15pt;
            color: #2d3748;
            margin-top: 36px;
            margin-bottom: 16px;
            border-left: 4px solid #4a5568;
            padding-left: 12px;
        }
        h3 {
            font-size: 12pt;
            color: #2d3748;
            margin-top: 24px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        p {
            font-size: 11pt;
            margin-top: 0;
            margin-bottom: 16px;
            text-align: justify;
        }
        ul, ol {
            margin-top: 0;
            margin-bottom: 16px;
            padding-left: 24px;
        }
        li {
            font-size: 11pt;
            margin-bottom: 8px;
            text-align: justify;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 28px 0;
            font-size: 10.5pt;
        }
        th, td {
            border: 1px solid #cbd5e0;
            padding: 12px;
            text-align: left;
            vertical-align: top;
        }
        th {
            background-color: #edf2f7;
            color: #2d3748;
            font-weight: 600;
        }
        tr:nth-child(even) td {
            background-color: #f7fafc;
        }
        .callout {
            background-color: #fff5f5;
            border-left: 4px solid #e53e3e;
            padding: 16px;
            margin: 24px 0;
            border-radius: 0 4px 4px 0;
        }
        .callout-title {
            font-weight: 700;
            color: #c53030;
            margin-bottom: 6px;
            font-size: 11pt;
        }
        .callout p {
            margin-bottom: 0;
            color: #9b2c2c;
        }
        strong {
            color: #1a202c;
        }
    &lt;/style&gt;
        &lt;div class=&quot;subtitle&quot;&gt;A Comprehensive Study on Data Corruption, Power Failures, Copy-on-Write Filesystem Incompatibilities, and the Contemporary Market Landscape&lt;/div&gt;
    &lt;!--     &lt;div class=&quot;meta&quot;&gt; --&gt;
    &lt;!--         &lt;strong&gt;Author:&lt;/strong&gt; Benjamin D. &amp;nbsp;|&amp;nbsp; &lt;strong&gt;Date:&lt;/strong&gt; June 2026 &amp;nbsp;|&amp;nbsp; &lt;strong&gt;Tags:&lt;/strong&gt; storage, cmr, smr, hdd, zfs --&gt;
    &lt;!--     &lt;/div&gt; --&gt;
    &lt;!-- &lt;/header&gt; --&gt;

&lt;section&gt;
        &lt;h2&gt;1. Technological Foundations: CMR vs. SMR&lt;/h2&gt;
        &lt;p&gt;Hard disk drive (HDD) architectures rely on magnetic recording techniques to read and write data onto spinning platters. As physical storage demands surpassed theoretical areal density limits, manufacturers shifted from standard Perpendicular Magnetic Recording (PMR) variants to two primary operational models: Conventional Magnetic Recording (CMR) and Shingled Magnetic Recording (SMR).&lt;/p&gt;
        
        &lt;p&gt;&lt;strong&gt;Conventional Magnetic Recording (CMR):&lt;/strong&gt; In a CMR drive, physical data tracks are written parallel to one another across the disk surface without any overlap. The write head, which is physically wider than the read head, writes a track size that matches its footprint exactly. Read operations occur directly over the center of these distinct, separated tracks. This guarantees that writing to an individual sector has absolutely zero impact on adjacent blocks, allowing for predictable, sustained random write behaviors.&lt;/p&gt;
        
        &lt;p&gt;&lt;strong&gt;Shingled Magnetic Recording (SMR):&lt;/strong&gt; SMR modifies this physical layout to overcome the physical limits of track narrowing. Because read heads are substantially smaller than write heads, SMR overlappingly writes data tracks, mimicking shingles on a residential roof. Each new track partially covers a portion of the previously written track. While this drastically increases areal density (up to 25% or higher per platter), it introduces a critical structural limitation: a track cannot be overwritten individually without corrupting or destroying the data on the adjacent tracks that overlap it.&lt;/p&gt;

&lt;h3&gt;Core Architecture Comparison&lt;/h3&gt;
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Metric / Feature&lt;/th&gt;
                    &lt;th&gt;Conventional Magnetic Recording (CMR)&lt;/th&gt;
                    &lt;th&gt;Shingled Magnetic Recording (SMR)&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Track Structure&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Isolated, parallel tracks with guard bands.&lt;/td&gt;
                    &lt;td&gt;Overlapping tracks resembling roof shingles.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Random Write Performance&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;High and predictable; direct sector overwrite.&lt;/td&gt;
                    &lt;td&gt;Extremely low under sustained loads; requires full zone rewrites.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Internal Architecture&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Direct pass-through mapping from OS to physical sectors.&lt;/td&gt;
                    &lt;td&gt;Uses a complex Drive-Managed Translation Layer (similar to SSD FTL).&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Best Suited For&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;NAS, RAID arrays, Databases, Boot drives, High-write environments.&lt;/td&gt;
                    &lt;td&gt;Archival storage, sequential backups, cold data storage.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;2. Operational Mechanics &amp;amp; Drive-Managed Architecture&lt;/h2&gt;
        &lt;p&gt;To make SMR drives backwards-compatible with standard computer architectures, manufacturers developed Drive-Managed SMR (DMSMR). The host operating system treats the device as a standard random-access sector block device, unaware of the physical shingling layout. To handle the overwrite limitation, the disk surface is segmented into &apos;Bands&apos; or &apos;Zones&apos; (typically 256 MB or higher in size), bounded by non-overlapping isolation guards.&lt;/p&gt;
        
        &lt;p&gt;When a single sector within an SMR zone must be modified, the drive cannot simply flip the magnetic orientation of that specific sector. Instead, it must read the entire zone into a cache, alter the targeted sector in volatile memory, and write back the entire zone sequentially from the beginning.&lt;/p&gt;
        
        &lt;p&gt;To mitigate the severe latency penalties of this process, DMSMR drives integrate a high-speed volatile RAM cache alongside a physical, non-shingled CMR &apos;landing zone&apos; on the outer edge of the platters. Incoming write operations are initially routed directly to this fast CMR cache. When the drive is idle, an internal garbage collection algorithm executes background migrations, reading data from the CMR cache, combining it, and writing it sequentially to the shingled zones.&lt;/p&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;3. Power Failure Vulnerabilities &amp;amp; Internal Data Corruption&lt;/h2&gt;
        &lt;p&gt;The illusion that an SMR drive behaves exactly like a CMR drive is maintained by an internal abstraction layer known as the Drive Translation Layer (DTL) or Device Managed Translation Layer. Similar to the Flash Translation Layer (FTL) in Solid State Drives (SSDs), the DTL translates logical block addresses (LBAs) requested by the operating system into physical addresses on the shingled platters. This architectural dependency creates acute vulnerabilities during sudden power loss events.&lt;/p&gt;
        
        &lt;h3&gt;Critical Risk: Drive Translation Layer Corruption&lt;/h3&gt;
        &lt;p&gt;A sudden loss of system power during active background garbage collection or zone allocation table flushes can cause a complete mismatch between the DTL lookup table and the physical sectors on the platters, effectively bricking or destroying data readability across healthy portions of the disk.&lt;/p&gt;
        
        &lt;p&gt;Specific corruption modes directly tied to SMR power failure profiles include:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Metadata and Allocation Table Desynchronization:&lt;/strong&gt; SMR drives maintain tracking metrics regarding active zones, clean zones, and CMR cache maps. If a power failure occurs while the drive is writing updated allocation tables from internal RAM to a persistent system track, the DTL can become corrupted. Upon reboot, the drive may fail to initialize, report a RAW filesystem, or register incorrect disk sizes (e.g., 0 bytes), requiring specialized hardware-level physical restoration.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;In-Fight Zone Overwrite Destabilization:&lt;/strong&gt; If power is interrupted while the drive is executing a full-zone rewrite (shingling back modified data), the sequence will cut off mid-zone. Because the track write head partially covers adjacent tracks during operation, an incomplete write compromises not only the specific block intended for modification but also destroys valid downstream user data located in adjacent, overlapping tracks within the same zone.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Volatile Write-Cache Data Loss:&lt;/strong&gt; SMR drives acknowledge writes to the host operating system immediately upon reaching the volatile RAM cache or the CMR landing zone. In a power loss event where the OS has received a write verification, data that was still residing strictly in volatile RAM, or data queued for migration from the CMR cache to the shingled space, vanishes entirely. This leads to profound metadata inconsistency between the OS filesystem and the physical disk.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;4. The Copy-on-Write (CoW) Conflict: ZFS / Btrfs / bcachefs and SMR Drives&lt;/h2&gt;
        &lt;p&gt;The deployment of Drive-Managed SMR drives within Copy-on-Write (CoW) filesystems, such as ZFS, Btrfs, or within software RAID architectures (like mdadm or TrueNAS Core/SCALE), represents a severe operational mismatch. ZFS was fundamentally designed with the assumption that the underlying physical storage medium is a deterministic, fast-response block device that handles random and sequential write commands predictably.&lt;/p&gt;
        
        &lt;p&gt;ZFS optimizes write pathways by gathering allocations and committing them via transaction groups (txgs) through a Copy-on-Write methodology. Instead of modifying blocks in-place, ZFS writes modified data to entirely new physical locations on the disk, subsequently modifying pointers up the metadata tree. This architectural design creates a highly destructive cascading performance cliff when paired with SMR technology.&lt;/p&gt;
        
        &lt;h3&gt;The Resilvering and Timeout Cascade Failure&lt;/h3&gt;
        &lt;p&gt;When a standard drive fails inside a ZFS VDEV (Virtual Device), a replacement drive is added, initiating a process known as resilvering. Resilvering scans the entire pool&apos;s metadata and writes the parity-constructed data back to the new drive. Because ZFS traverses metadata trees sequentially by object rather than physical sector order, the resulting write distribution looks highly randomized to the target drive.&lt;/p&gt;
        
        &lt;p&gt;When an SMR drive is introduced as a resilver target, the following failure sequence occurs:&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;Initial streams fill up the SMR drive&apos;s on-disk CMR landing zone cache almost instantly (typically within the first tens of gigabytes).&lt;/li&gt;
            &lt;li&gt;Once the CMR cache is fully saturated, the drive&apos;s firmware forces an immediate, non-interruptible garbage collection loop to clear space, trying to read-modify-write data out to shingled zones.&lt;/li&gt;
            &lt;li&gt;Because the incoming write stream is ongoing and highly fragmented, the drive must continuously execute zone rewrites. Data throughput collapses from ~150 MB/s to single-digit megabytes per second, or stalls completely.&lt;/li&gt;
            &lt;li&gt;The internal drive controller becomes so overwhelmed with background input/output operations that it ceases responding to external ATA command requests from the operating system host bus adapter (HBA).&lt;/li&gt;
            &lt;li&gt;The ZFS kernel module waits for a predetermined command timeout threshold (typically 30 seconds). When the SMR drive fails to respond within this window, ZFS assumes the drive has suffered a hardware failure or disconnected completely.&lt;/li&gt;
            &lt;li&gt;ZFS ejects the drive from the pool, marking it as &lt;strong&gt;FAULTED&lt;/strong&gt; or &lt;strong&gt;REMOVED&lt;/strong&gt;.&lt;/li&gt;
        &lt;/ol&gt;

&lt;div class=&quot;callout&quot;&gt;
            &lt;div class=&quot;callout-title&quot;&gt;Systemic Pool Degradation Danger&lt;/div&gt;
            &lt;p&gt;If multiple SMR drives are present within a RAIDZ array, the intensive write activity of a single resilver can cause multiple drives to hit the latency timeout threshold simultaneously. This triggers a multi-drive drop out, leading to immediate pool destruction and total data loss.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;5. Improper Drive Shutdown Timelines and Host Violations&lt;/h2&gt;
        &lt;p&gt;When a computer operating system initiates a shutdown or unmount sequence, it issues strict architectural commands to all connected storage media. This involves sending an ATA FLUSH CACHE command followed by standby or power-down directives. For a standard CMR drive, processing a flush command is simple: any write commands remaining in the volatile onboard RAM cache are instantly flushed to their permanent, non-overlapping track locations, and the drive heads park safely within milliseconds.&lt;/p&gt;
        
        &lt;p&gt;For a Device-Managed SMR drive, a FLUSH CACHE command behaves in a fundamentally different and non-deterministic manner. The drive&apos;s internal firmware considers data &apos;flushed&apos; when it has successfully cleared volatile RAM and moved it into the permanent, non-shingled CMR landing zone cache. It then reports success back to the operating system.&lt;/p&gt;
        
        &lt;p&gt;Crucially, the hard work of migrating data from the CMR landing zone into the shingled bands has not yet occurred. The drive firmware requires an extended period of system inactivity (frequently stretching into minutes or hours after data transfer stops) to perform background zone consolidation.&lt;/p&gt;
        
        &lt;p&gt;If an operational environment utilizes improper drive shutdown timelines—such as immediately cutting power to external drive enclosures, hard-resetting enterprise servers via IPMI commands, or pulling portable USB-powered drives right after a file copy indicator completes—the drive is abruptly de-powered while its background firmware is actively running. Over time, these interrupted states cumulatively degrade the efficiency of the internal allocation tables, leading to sector tracking errors, read latency anomalies, and progressive file structure degradation.&lt;/p&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;6. Historical Timeline of SMR Market Integration&lt;/h2&gt;
        &lt;p&gt;The introduction of SMR into the commercial market was characterized by an initial phase of transparent archival targeting, followed by a highly controversial period of unannounced integration into mainstream desktop and NAS product lines.&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;2013-2014: Initial Introduction&lt;/strong&gt; – Seagate introduces the first commercial SMR drives under the &apos;Archive HDD&apos; nomenclature. These drives were clearly designated for cold storage, data preservation, and sequential access profiles. They were explicitly marketed as inappropriate for random write, server, or RAID workloads.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;2015-2018: Stealth Integration&lt;/strong&gt; – As manufacturers hit density limits on standard 1TB and 2TB per platter configurations, they quietly integrated Drive-Managed SMR into standard 2.5-inch mobile notebook drives and lower-tier 3.5-inch consumer desktop drives without explicitly documenting the change on spec sheets.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;2018-2019: Expansion into Network Attached Storage (NAS)&lt;/strong&gt; – Western Digital began substituting CMR configurations with SMR designs inside its highly popular WD Red NAS line (specifically the 2TB through 6TB models, such as the WD40EFAX), completely undocumented.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;2020: The Industry Transparency Scandal&lt;/strong&gt; – System administrators and home server enthusiasts worldwide began noticing catastrophic RAID degradation and resilvering failures when deploying newly purchased WD Red drives. Following intense public backlash, independent hardware investigations, and threatened class-action litigation, Western Digital, Seagate, and Toshiba were forced to publish complete, comprehensive disclosures detailing exactly which drives utilized SMR. Western Digital subsequently re-branded its product stack, keeping SMR in the baseline &apos;Red&apos; tier, while introducing the &apos;Red Plus&apos; and &apos;Red Pro&apos; lines to guarantee CMR availability.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;7. Contemporary Market Reference Guide&lt;/h2&gt;
        &lt;p&gt;The following guide highlights the architectural layout of the modern hard drive marketplace. Consumers and enterprise engineers must rigorously parse model numbers to ensure SMR models do not enter high-availability or CoW environments.&lt;/p&gt;
        
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Manufacturer&lt;/th&gt;
                    &lt;th&gt;Product Line / Brand&lt;/th&gt;
                    &lt;th&gt;Recording Technology Type&lt;/th&gt;
                    &lt;th&gt;Capacity Thresholds &amp;amp; Notes&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Western Digital&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;WD Blue (Desktop 3.5&quot;)&lt;/td&gt;
                    &lt;td&gt;SMR (Majority)&lt;br&gt;CMR (Select models)&lt;/td&gt;
                    &lt;td&gt;Most 2TB, 3TB, 4TB, and 6TB variants are SMR. High-capacity or specific 1TB models remain CMR.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Western Digital&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;WD Red (Standard NAS)&lt;/td&gt;
                    &lt;td&gt;SMR (All)&lt;/td&gt;
                    &lt;td&gt;Models from 2TB to 6TB (e.g., EFAX series) are strictly SMR. &lt;strong&gt;Banned for ZFS usage.&lt;/strong&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Western Digital&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;WD Red Plus / Red Pro&lt;/td&gt;
                    &lt;td&gt;CMR (All)&lt;/td&gt;
                    &lt;td&gt;Explicitly designated for RAID/NAS arrays. Guaranteed CMR across all capacities.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Western Digital&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;WD Black / WD Gold&lt;/td&gt;
                    &lt;td&gt;CMR (All)&lt;/td&gt;
                    &lt;td&gt;Performance and Enterprise lines; exclusively CMR across all capacities.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Seagate&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;BarraCuda (Compute 3.5&quot;)&lt;/td&gt;
                    &lt;td&gt;SMR (Majority)&lt;/td&gt;
                    &lt;td&gt;Mainstream desktop lines (2TB, 4TB, 8TB) are SMR. Explicitly designed for light compute only.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Seagate&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;IronWolf / IronWolf Pro&lt;/td&gt;
                    &lt;td&gt;CMR (All)&lt;/td&gt;
                    &lt;td&gt;NAS-focused product line. Seagate maintains a strict no-SMR policy for all IronWolf models.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Seagate&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;Exos (Enterprise)&lt;/td&gt;
                    &lt;td&gt;CMR / HM-SMR&lt;/td&gt;
                    &lt;td&gt;Standard Exos models are pure CMR. Select cloud hyperscale models use Host-Managed SMR (managed by server OS).&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Toshiba&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;P300 (Client Desktop)&lt;/td&gt;
                    &lt;td&gt;SMR / CMR Split&lt;/td&gt;
                    &lt;td&gt;Newer high-capacity iterations (e.g., 4TB, 6TB P300) are SMR. Older or lower capacity models remain CMR.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;strong&gt;Toshiba&lt;/strong&gt;&lt;/td&gt;
                    &lt;td&gt;N300 / MG Series&lt;/td&gt;
                    &lt;td&gt;CMR (All)&lt;/td&gt;
                    &lt;td&gt;NAS and Enterprise Critical lines; exclusively CMR across all production models.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

&lt;section&gt;
        &lt;h2&gt;Summary Recommendation for Storage Engineering&lt;/h2&gt;
        &lt;p&gt;For any deployments involving ZFS, RAID configurations, high-frequency database logging, or critical infrastructure, it is absolutely essential to mandate the purchase of drives explicitly validated as CMR (such as WD Red Plus, Seagate IronWolf, or Enterprise lines). SMR drives must remain strictly quarantined to sequential cold-archival write streams or disconnected single-drive consumer backup tasks.&lt;/p&gt;
    &lt;/section&gt;</description>
            <pubDate>Jun 25, 2026</pubDate>
        </item>
        <item>
            <title>From Claude Code to Micro-Agent: The Rabbit Hole of AI Coding Agents on Vintage Hardware</title>
            <link>https://tilde.club/~cartwright/blog/2026/06/23/from-claude-code-to-micro-agent-the-rabbit-hole-of-ai-coding-agents-on-vintage-hardware.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/06/23/from-claude-code-to-micro-agent-the-rabbit-hole-of-ai-coding-agents-on-vintage-hardware.html</guid>
            <description>&lt;p&gt;Every developer knows the feeling. You see a shiny new tool, your brain sparks with possibilities, and you immediately try to run it on hardware that has no business hosting it(well maybe only me).&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;This is the story of how a simple desire to try &lt;b&gt;Claude Code&lt;/b&gt; led me down a rabbit hole of instruction set failures, API translation layer frustration, context-window blowouts, and ultimately, writing my own lightweight AI coding agent in Ruby.&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;The Catalyst: Fighting with Claude Code&lt;/h2&gt;

&lt;p&gt;It started innocently enough. I wanted to see what Claude Code could do.&lt;/p&gt;&lt;/p&gt;

&lt;p&gt;My weapon of choice? An old, trusty &lt;b&gt;Dell laptop&lt;/b&gt; powered by an &lt;b&gt;Intel Core 2 Duo P8700&lt;/b&gt; processor. I kicked off the installation, only to watch it pull down a massive package over &lt;b&gt;280MB&lt;/b&gt; in size. For a CLI tool, that felt extremely bloated.&lt;/p&gt;

&lt;p&gt;But the real kicker came when I tried to run it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
Illegal Instruction
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The harsh reality of legacy hardware hit home. Claude Code (or its underlying Node binaries) compiled down to modern instruction sets requiring &lt;b&gt;AVX and AVX2&lt;/b&gt;, extensions that my Core 2 Duo completely lacks. 280MB of bandwidth, gone.&lt;/p&gt;

&lt;h2&gt;The Pubnix &amp; Proxy Detour&lt;/h2&gt;

&lt;p&gt;Refusing to give up, I shifted tactics and moved to a &lt;b&gt;pubnix&lt;/b&gt; (a public UNIX server). Of course, running an AI agent on a shared public server comes with an obvious caveat: &lt;i&gt;someone could easily sniff your process arguments or environment variables and steal your API key.&lt;/i&gt; Worse yet, I didn&apos;t actually have a dedicated Anthropic API key on hand. I wondered: &lt;i&gt;How hard could it be to use an Anthropic-to-OpenAI API translator?&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;I found two translation projects via a quick web search. What followed was a classic developer nightmare: Python version conflicts, NPM dependency hell, and incompatible environments. Frustrated, I sat down and wrote my own custom API translator from scratch.&lt;/p&gt;

&lt;p&gt;It finally ran! I hooked up Claude Code to my translator, typed a command, and... absolute silence.&lt;/p&gt;

&lt;p&gt;Only the basic &lt;code&gt;/btw&lt;/code&gt; command functioned. The moment Claude Code tried to do anything involving actual file editing, it failed completely. As it turns out, Claude Code passes a &lt;b&gt;gargantuan list of tools and system instructions&lt;/b&gt; out of the box. This massive payload instantly saturated the OpenAI-compatible endpoint&apos;s context limit.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;All that work, and the context window choked before the model could even think.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;The Birth of &lt;code&gt;Micro Agent&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;If you can&apos;t use a heavy tool, you build a precise one. I abandoned the bloated frameworks and wrote a lean, custom AI coding agent called &lt;b&gt;Micro Agent&lt;/b&gt;, implemented as a lightweight Ruby CLI.&lt;/p&gt;

&lt;p&gt;Micro-Agent features a flexible architecture allowing it to pivot between different LLM backends using profile commands. To test it, I decided to give it a classic litmus test: &lt;b&gt;Write a simple program to output &quot;Hello, World!&quot; in amd64 NASM assembly for Linux, along with a Makefile to compile it&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;I hooked it up to a local, smaller model profile (&lt;code&gt;gemma4:e2b&lt;/code&gt;) to see how an optimized, smaller intelligence would handle low-level engineering tasks. What followed was a glorious, looping comedy of errors.&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;The Battle of the Assembly Code: A Log Summary&lt;/h2&gt;

&lt;p&gt;While Micro-Agent successfully integrated with system tools, the smaller model architecture struggled immensely with syntax, build systems, and execution guardrails. It took far more prompts and manual intervention to get a &quot;Hello, World&quot; binary compiled than it ever would have taken to write it by hand.&lt;/p&gt;

&lt;p&gt;Here is the condensed, sanitized screen dump showing the agent trying to complete the task:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
ben@box5:~/Projects/micro-agent/a$ ../micro-agent.rb
💻 Welcome to MicroAgent CLI
micro-agent &gt; /api use 0
🎯 Switched active profile targeting to Context ID Engine Node: [0: gemma4:e2b]

&lt;p&gt;micro-agent &gt; make a simple program to say &quot;Hello, World!&quot; in amd64 NASM for linux, and make a makefile for it
🤖 Thinking... Writing hello.asm and initial Makefile...
... [15+ Security Gate Permission Prompts Condensed] ...&lt;/p&gt;

&lt;p&gt;❌ FAILURE 1: The model generates a flawed Makefile with invalid space indentation.
&apos;make&apos; throws a &quot;missing separator&quot; syntax error.
🤖 Thinking... Correcting Makefile syntax...&lt;/p&gt;

&lt;p&gt;❌ FAILURE 2: The model rewrites the Makefile but ruins the dependency logic, 
blindly repeating strings and breaking standard GNU Make patterns.
🤖 Thinking... Attempting to execute &apos;make&apos; again... Target fails.&lt;/p&gt;

&lt;p&gt;❌ FAILURE 3: The model decides to bypass &apos;make&apos; entirely and chain commands via the shell:
🛠️  Executing: execute with args: {&quot;command&quot;=&gt;&quot;nasm -f elf64 hello.asm -o hello.o &amp;&amp; ld hello.o -o hello&quot;}
⚠️  Execution blocked! The micro-agent core engine explicitly bans command chaining (&amp;&amp;) for security.&lt;/p&gt;

&lt;p&gt;❌ FAILURE 4: The model attempts a raw NASM compilation but fails because it used Python/C shell style &apos;#&apos; characters for comments inside hello.asm.
micro-agent &gt; nasm does not support using &apos;#&apos; for comments, use &apos;;;&apos; instead.&lt;/p&gt;

&lt;p&gt;🤖 Thinking... Rewriting hello.asm with proper &apos;;;&apos; comment syntax...
... [More Permission Prompts] ...&lt;/p&gt;

&lt;p&gt;micro-agent &gt; run the make command
❌ FAILURE 5: The model panics, completely loses track of the directory state, 
deletes/overwrites the Makefile with broken targets, and accidentally purges hello.asm.
When it tries to recreate hello.asm, the user manually rejects the file write out of sheer exhaustion.&lt;/p&gt;

&lt;p&gt;⚠️  [Security Gate] Grant agent permission to &apos;write_file&apos; on &apos;hello.asm&apos;? (y/n): n
✅ Objective reached or agent stopped.
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h2&gt;Taking Back Control&lt;/h2&gt;

&lt;p&gt;At this point, the agent hit an environmental wall, forcing me to temporarily suspend the process (&lt;code&gt;^Z&lt;/code&gt;) and inspect the damage.&lt;/p&gt;

&lt;p&gt;The agent had left behind an absolute mess in the build script (&lt;code&gt;build.sh&lt;/code&gt;). It had attempted to use &lt;code&gt;gcc&lt;/code&gt; to link a raw entry-point assembly file. When executed, the GNU linker threw a massive fit:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&gt; /usr/bin/ld: hello.o: in function `_start&apos;:
&gt; hello.asm:(.text+0x0): multiple definition of `_start&apos;;
&gt; (.text+0x17): undefined reference to `main&apos;
&gt; collect2: error: ld returned 1 exit status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Because &lt;code&gt;gcc&lt;/code&gt; automatically injects the standard C runtime (&lt;code&gt;crt1.o&lt;/code&gt;), it provides its own &lt;code&gt;_start&lt;/code&gt; symbol and looks for a developer-defined &lt;code&gt;main&lt;/code&gt; function. My assembly file explicitly defined &lt;code&gt;_start&lt;/code&gt; and lacked a &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To fix it, I manually bypassed the broken script and linked it directly using the raw linker:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
ben@box5:~/Projects/micro-agent/a$ ld hello.o -o hello
ben@box5:~/Projects/micro-agent/a$ ./hello 
Hello, World!
Segmentation fault
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Success... followed immediately by a &lt;b&gt;Segmentation Fault&lt;/b&gt;. The agent&apos;s code printed the string via system calls but failed to clean up the stack or invoke the proper &lt;code&gt;sys_exit&lt;/code&gt; sequence. I had to manually jump into &lt;code&gt;emacs&lt;/code&gt; to fix the register placements and structural bugs inside &lt;code&gt;hello.asm&lt;/code&gt; myself until it finally executed cleanly.&lt;/p&gt;

&lt;p&gt;When I brought Micro-Agent back to the foreground (&lt;code&gt;fg&lt;/code&gt;) and asked it to review the modifications, it admitted its own execution blindness, noting that security restrictions prevented it from testing its own output.&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;Lessons Learned&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;b&gt;Model Size Dictates Logical Rigor:&lt;/b&gt; Small local models like &lt;code&gt;gemma4:e2b&lt;/code&gt; are fantastic for text processing or basic scripts, but they break down when navigating multi-step compilation pipelines. They struggle to retain context over strict formatting rules (like Makefile tabs vs spaces) and will loop endlessly when a command fails.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Larger Contexts Shine:&lt;/b&gt; When switching Micro-Agent over to heavier, remote configurations—such as &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;—the loops disappear. Higher-parameter models anticipate linking requirements, comment rules, and runtime environments effortlessly.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;The Irony of Automation:&lt;/b&gt; Sometimes, setting up an autonomous agent to automate a 10-line assembly script takes 10x more time, prompts, and debugging than just pulling up a text editor and typing the assembly code out yourself.&lt;/li&gt;
&lt;/ul&gt;
Yet, despite the hiccups, &lt;b&gt;Micro-Agent works&lt;/b&gt;. It&apos;s ultra-lightweight, it runs on virtually any machine, it doesn&apos;t suffer from modern instruction set bloat, and it keeps the developer firmly in control of the security gates. For vintage laptop enthusiasts and minimalist developers alike, building your own agent is a journey well worth taking.

&lt;p&gt;---&lt;/p&gt;</description>
            <pubDate>Jun 23, 2026</pubDate>
        </item>
        <item>
            <title>How I got started programming</title>
            <link>https://tilde.club/~cartwright/blog/2026/06/22/how-i-got-started-programming.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/06/22/how-i-got-started-programming.html</guid>
            <description>&lt;p&gt;I decided to write down a bit about how I originally got into computers and coding. It all started when I was 12 years old, when my dad taught me Perl. That was my first real introduction to writing scripts and getting things to run.&lt;/p&gt;

&lt;p&gt;After that, I just kept building on it. For the next 12 years, I spent my time diving into different systems and learning a bunch of languages.&lt;/p&gt;

&lt;h2&gt;The Toolkit&lt;/h2&gt;
During those 12 years, I heavily focused on learning C, C++, Java, ASM (x86), and Ruby. Working with x86 Assembly and C gave me a good understanding of low-level systems, while Ruby became a great tool for writing clean scripts.

&lt;p&gt;Along the way, I also picked up a little bit of Rust, Python, and Perl 6 (raku). To figure out how the web side of things worked, I learned javascript and some web design stuff, like html, css, and a little bit of xhtml.&lt;/p&gt;

&lt;h2&gt; Down to the Silicon&lt;/h2&gt;
As I got deeper into programming, I wanted to know exactly how everything worked under the hood. Over the years, I&apos;ve learned pretty much everything about computers from the chipset and bootloader level on up.

&lt;p&gt;Instead of treating operating systems like a black box, I&apos;ve spent hours exploring the NetBSD and Linux source code to see how they handle things at the core. To actually apply that, I&apos;ve built a simple bootloader from scratch, written my own kernel, and even patched BIOS images to manually unlock hardware virtualization features like VT-x.&lt;/p&gt;</description>
            <pubDate>Jun 22, 2026</pubDate>
        </item>
        <item>
            <title>New version of searchvista is out!</title>
            <link>https://tilde.club/~cartwright/blog/2026/05/14/new-version-of-searchvista-is-out.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/05/14/new-version-of-searchvista-is-out.html</guid>
            <description>&lt;p&gt;New version features better search results, and faster search times.
Next month (June 14th 2026), We will be trying out pagerank.&lt;/p&gt;

&lt;h2&gt;PageRank&lt;/h2&gt;
PageRank is an algorithm for measuring a webpage&apos;s relative importance or 
authority based on its link structure. It works by treating links as &quot;votes&quot; 
where votes from more authoritative pages count more.
So like if tilde.club is pointed to my 15 other sites, that means that tilde.club will have a higher score, and the score will be even better if the those 15 sites were pointed to by someone else, the more sites on the tree pointing torwards tilde.club the better score. Not all votes are equal because a site with many links dilutes its own power.</description>
            <pubDate>May 14, 2026</pubDate>
        </item>
        <item>
            <title>Switching to Window Maker from TWM</title>
            <link>https://tilde.club/~cartwright/blog/2026/04/30/switching-to-window-maker-from-twm.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/04/30/switching-to-window-maker-from-twm.html</guid>
            <description>&lt;p&gt;Much smoother than TWM for normal use.&lt;/p&gt;</description>
            <pubDate>April 30, 2026</pubDate>
        </item>
        <item>
            <title>Another post</title>
            <link>https://tilde.club/~cartwright/blog/2026/04/02/another-post.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/04/02/another-post.html</guid>
            <description>&lt;p&gt;Another post about nothing.&lt;/p&gt;</description>
            <pubDate>April 02, 2026</pubDate>
        </item>
        <item>
            <title>Switching to TWM from GNOME</title>
            <link>https://tilde.club/~cartwright/blog/2026/01/21/switching-to-twm-from-gnome.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/01/21/switching-to-twm-from-gnome.html</guid>
            <description>&lt;p&gt;Switched to TWM from GNOME, because gnome takes nearly 15% CPU while idle, and while playing video about 200% CPU usage.&lt;/p&gt;</description>
            <pubDate>January 21, 2026</pubDate>
        </item>
        <item>
            <title>SearchVista mirror systems upgrade</title>
            <link>https://tilde.club/~cartwright/blog/2026/01/11/searchvista-mirror-systems-upgrade.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/01/11/searchvista-mirror-systems-upgrade.html</guid>
            <description>&lt;p&gt;Upgrade went smooth and only 1 minute of down time!&lt;/p&gt;</description>
            <pubDate>January 11, 2026</pubDate>
        </item>
        <item>
            <title>SearchVista mirror systems software upgrades</title>
            <link>https://tilde.club/~cartwright/blog/2026/01/11/searchvista-mirror-systems-software-upgrades.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/01/11/searchvista-mirror-systems-software-upgrades.html</guid>
            <description>&lt;p&gt;Mirror #1 (https://xuser.publicvm.com) will be down for the max of 48 hours for system upgrades within the next 7 days.&lt;/p&gt;</description>
            <pubDate>January 11, 2026</pubDate>
        </item>
        <item>
            <title>SearchVista index</title>
            <link>https://tilde.club/~cartwright/blog/2026/01/09/searchvista-index.html</link>
            <guid>https://tilde.club/~cartwright/blog/2026/01/09/searchvista-index.html</guid>
            <description>&lt;p&gt;The index update has finished and all mirrors are updated.&lt;/p&gt;</description>
            <pubDate>January 09, 2026</pubDate>
        </item>
        <item>
            <title>SearchVista index update</title>
            <link>https://tilde.club/~cartwright/blog/2025/12/29/searchvista-index-update.html</link>
            <guid>https://tilde.club/~cartwright/blog/2025/12/29/searchvista-index-update.html</guid>
            <description>&lt;p&gt;The index will be updated starting from now, until jan-5-2025&lt;/p&gt;</description>
            <pubDate>December 29, 2025</pubDate>
        </item>
</channel>
</rss>
