<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Geir&apos;s Everything</title>
    <description>Philosophy - Sciences - Geekery - Art - Life - Coaching - Fun &lt; Simplify Everything</description>
    <link>https://isene.org/</link>
    <atom:link href="nathanrooy.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 02 Sep 2026 16:57:29 +0000</pubDate>
    <lastBuildDate>Wed, 02 Sep 2026 16:57:29 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
      
    
    <item>
        <title>Seven apps since the map</title>
        <description>&lt;p&gt;&lt;a href=&quot;/assets/posts/since-the-map.jpg&quot;&gt;&lt;img src=&quot;/assets/posts/since-the-map.jpg&quot; alt=&quot;A map with seven new towns drawn in fresh orange ink&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A month ago I drew &lt;a href=&quot;https://isene.org/2026/08/Map.html&quot;&gt;a map of everything I have built&lt;/a&gt;. It is already out of date. Seven apps have landed since. Six on the laptop, one on the phone.&lt;/p&gt;

&lt;p&gt;I’m not standing still. Speed is crazy these days.&lt;/p&gt;

&lt;h2 id=&quot;fleet&quot;&gt;fleet&lt;/h2&gt;

&lt;p&gt;I run several Claude Code sessions at once. Which one has finished and waits for me? Which workspace is it on? How much context has it burned? &lt;a href=&quot;https://github.com/isene/fleet&quot;&gt;fleet&lt;/a&gt; is my TUI app for that. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; jumps to the session, and a new session opens on the workspace and with the background colour I set for it.&lt;/p&gt;

&lt;h2 id=&quot;hl2web&quot;&gt;hl2web&lt;/h2&gt;

&lt;p&gt;When writing a &lt;a href=&quot;https://isene.org/hyperlist/&quot;&gt;HyperList&lt;/a&gt; I used to distribute it as a PDF or a screenshot. &lt;a href=&quot;https://github.com/isene/hl2web&quot;&gt;hl2web&lt;/a&gt; turns it into one HTML file: folding, search and the colours from my original hyperlist.vim. No frameworks, nothing but the html file. The first one I made was &lt;a href=&quot;https://isene.org/freewill&quot;&gt;the TEG argument&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;hl&quot;&gt;hl&lt;/h2&gt;

&lt;p&gt;I keep a lot of HyperLists. The question is often “where did I write that?”. &lt;a href=&quot;https://github.com/isene/hl&quot;&gt;hl&lt;/a&gt; has every list I have into one solution. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hl --open&lt;/code&gt; shows every unchecked box across all of them. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hl --tag teg&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hl --ref &quot;THEOREM&quot;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hl --tree&lt;/code&gt; get hits that grep can’t get to. Monday morning in one screen.&lt;/p&gt;

&lt;h2 id=&quot;beam&quot;&gt;beam&lt;/h2&gt;

&lt;p&gt;With a workspace pinned to the projector, its active tab is what the room sees. &lt;a href=&quot;https://github.com/isene/beam&quot;&gt;beam&lt;/a&gt; shows thumbnails of the windows parked there. I pick one, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt;, and the room sees it… while I keep typing on the laptop, with the keyboard where it was.&lt;/p&gt;

&lt;h2 id=&quot;folio&quot;&gt;folio&lt;/h2&gt;

&lt;p&gt;I’ve used zathura for many years. I needed something even better. A PDF is two documents in one: the words, and the rendered page. Most readers show only the rendered page. &lt;a href=&quot;https://github.com/isene/folio&quot;&gt;folio&lt;/a&gt; shows either, or both side by side. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;z&lt;/code&gt; blows a scan up to the width of the terminal. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e&lt;/code&gt; opens the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.md&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.tex&lt;/code&gt; beside the PDF, rebuilds on save and reloads the page. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s&lt;/code&gt; searches every PDF I have indexed. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;y&lt;/code&gt; copies the text with file name and page number attached.&lt;/p&gt;

&lt;h2 id=&quot;yank&quot;&gt;yank&lt;/h2&gt;

&lt;p&gt;CopyQ hung a helper process every time it fought my terminal over the clipboard. Its process swarm ate my X server’s (frame) selection slots. I wanted something simpler. &lt;a href=&quot;https://github.com/isene/yank&quot;&gt;yank&lt;/a&gt; records every copy and every mouse selection, woken only by frame when a selection changes. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Mod4+v&lt;/code&gt; opens the history in a terminal window. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; pastes the entry into the window I came from. No tray icon. No polling. Nothing running between copies.&lt;/p&gt;

&lt;h2 id=&quot;fresh&quot;&gt;fresh&lt;/h2&gt;

&lt;p&gt;On the phone: &lt;a href=&quot;https://github.com/isene/nomad&quot;&gt;fresh&lt;/a&gt; lists the ten most recently installed apps, newest first. Tap to open, long-press to uninstall. I install a lot of apps to try them, and this is where I keep or ditch them easily.&lt;/p&gt;

&lt;h2 id=&quot;under-the-hood&quot;&gt;Under the hood&lt;/h2&gt;

&lt;p&gt;Two new libraries carry shared plumbing: &lt;a href=&quot;https://github.com/isene/feed&quot;&gt;feed&lt;/a&gt; parses RSS and Atom, &lt;a href=&quot;https://github.com/isene/mail&quot;&gt;mail&lt;/a&gt; does the pure-logic parts of email. The desktop &lt;a href=&quot;https://github.com/isene/kastrup&quot;&gt;kastrup&lt;/a&gt; and the phone kastrup now share one implementation instead of earning the same bugs twice.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Seven apps in a month. The map keeps morphing.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/09/Since-The-Map.html&lt;/p&gt;
</description>
        <pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/09/Since-The-Map.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>Harald V, King of Norway (1937-2026)</title>
        <description>&lt;p&gt;&lt;a href=&quot;/assets/posts/king-harald-tribute.jpg&quot;&gt;&lt;img src=&quot;/assets/posts/king-harald-tribute.jpg&quot; alt=&quot;Han stod stolt i storm og vær. In memory of Harald V, King of Norway (1937-2026)&quot; style=&quot;width:100%&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo by my good friend Trond Alexander Tune (Zander).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our King died yesterday.&lt;/p&gt;

&lt;p&gt;He represented Norway in a transition from the old and formal to the modern age. His warmth and inclusive mindset helped shape Norway to what it is today. He was funny and serious, down-to-earth and yet royal. He did most everything right.&lt;/p&gt;

&lt;p&gt;He even died at the right time. Missteps by other members of the royal family had been weighing down the support for the monarchy in the population. I believe his death will wash away much of that corrosion.&lt;/p&gt;

&lt;p&gt;A man of integrity and heart. I hope he will make further impact in his next time around.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/08/King-Harald.html&lt;/p&gt;
</description>
        <pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/08/King-Harald.html</link>
          
        
            <category>Personal</category>
        
            <category>Norway</category>
        
          
        
          
      </item>
    
    <item>
        <title>A map of itches scratched</title>
        <description>&lt;p&gt;&lt;a href=&quot;/assets/posts/fe2o3-map.svg&quot;&gt;&lt;img src=&quot;/assets/posts/fe2o3-map.svg&quot; alt=&quot;A map of everything I have built&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started programming when I was 13. Basic, then lots of work in FOCAL on the HP-41 calculator, then OPL, Pascal, MCODE, Assembly, Visual Basic, Ruby, Fortran, Python, Forth and more obscure languages. Lately with the use of Claude Code it’s been a massive amount of Rust and Assembly.&lt;/p&gt;

&lt;p&gt;I’m starting to lose track of it all, and being a somewhat visual guy, I decided to make a map of most of my programming projects. There are more fringe projects also, but here are the main ones: 146 programs. Seven shelves. In one map.&lt;/p&gt;

&lt;p&gt;Click it for the full size. The arrows move, and they move the way they point.&lt;/p&gt;

&lt;h2 id=&quot;what-the-shelves-are&quot;&gt;What the shelves are&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;HP-41&lt;/strong&gt; is where the line starts. Programs, ROMs and the tools around them for a calculator from 1979, plus the other machines that came with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt; is the first shelf on a computer. Twenty-three gems, and ten of them have a descendant somewhere else on the map.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fe₂O₃&lt;/strong&gt; is the Rust terminal suite as it stands: 30 apps, seven libraries and the four configurators, which sit in their own group because they configure something that is not Rust at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CHasm&lt;/strong&gt; is that something. A shell, a terminal emulator, a window manager, a status bar, a pager, a font rasteriser, a screen locker, presenter tools and fifteen tiny status widgets. All of it in x86_64 assembly, with no libc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nomad&lt;/strong&gt; is the phone. Thirteen Android apps, most of them the desktop tool again in a different shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simpler&lt;/strong&gt; is a programming language small enough to hold in a prompt, and it compiles itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplicity OS&lt;/strong&gt; is bare metal, where everything is a WORD. Inspired by Forth.&lt;/p&gt;

&lt;h2 id=&quot;what-the-lines-say&quot;&gt;What the lines say&lt;/h2&gt;

&lt;p&gt;Three kinds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dotted amber: was rewritten as.&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rsh&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rush&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bare&lt;/code&gt;. The shell has been written three times: Ruby, Rust, assembly. Each one faster and smaller than the last.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rcurses&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crust&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RTFM&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pointer&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;termpix&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glow&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;termchart&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;plot&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;astropanel&lt;/code&gt; became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;astro&lt;/code&gt;. And &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xrpn&lt;/code&gt;, an HP-41 in Ruby, became &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rpnx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashed blue: the same idea, other platform.&lt;/strong&gt; Nine of them, all between Fe₂O₃ and the phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solid grey: uses.&lt;/strong&gt; The libraries and the four configurators, each reaching across to the assembly tool it sets up.&lt;/p&gt;

&lt;h2 id=&quot;the-shape-of-it&quot;&gt;The shape of it&lt;/h2&gt;

&lt;p&gt;Nothing on this map was planned as a map. Every one of those programs was an itch that I scratched. The pattern only shows up afterwards: the same tools keep getting rebuilt, one layer closer to the metal, and the ideas keep crossing to whatever machine is in my hand.&lt;/p&gt;

&lt;p&gt;That is decades of scratching, in one screen.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;The map is drawn by a small program, so it can be redrawn whenever a shelf grows. The logos come straight from the app repos. Shape says what a thing is, colour says what it is for, and the arrows say where it came from.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/08/Map.html&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/08/Map.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>Pictures out of text</title>
        <description>&lt;p&gt;Been doing digital art since the mid-90s. Since I am living in the terminal, I decided to improve the ascii part of image displays. Usually I get images to show inline in the terminal via the kitty protocol, but now and then I am on a server via ssh and still want to see some images - or at least what they look like. Hence an update to my graphics engine.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/glow-lighthouse.png&quot; alt=&quot;Three ways to draw a picture in a terminal&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Kitty on the left is the real thing: actual pixels, handed to the terminal through the graphics protocol. The other two are text. Every cell is a character with a colour on it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/glow-logo.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-middle-one-is-new&quot;&gt;The middle one is new&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/isene/glow&quot;&gt;glow&lt;/a&gt; is the suite’s image library. It has always had a text fallback for terminals with no graphics protocol. That fallback was poor. It lit a braille dot wherever a pixel came out darker than a fixed threshold, and everything in between was lost. A bright photo came out empty, a dark one solid.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now it draws half blocks. A cell gets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;▀&lt;/code&gt;, the foreground colour painting the top half and the background the bottom, so every cell carries two full-colour pixels. A cell is about twice as tall as it is wide, so both come out square.&lt;/p&gt;

&lt;p&gt;Two more things came along with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The braille renderer dithers.&lt;/strong&gt; A dot lights when its own value clears an ordered threshold. How many light up inside a cell now tracks the brightness there. Flat grey gives four dots of eight, where the old cut gave none or all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scaling happens in linear light.&lt;/strong&gt; Average sRGB bytes directly and every shrunken picture comes out too dark. Half black and half white gives 128, where the real answer is 188. glow converts to linear, averages the source rectangle each output pixel covers, and converts back.&lt;/p&gt;

&lt;p&gt;No external program needed. PNG, JPEG, GIF, WebP, BMP and TIFF are decoded in-process. ImageMagick is only there for the formats the Rust decoder cannot read.&lt;/p&gt;

&lt;h2 id=&quot;which-one-wins&quot;&gt;Which one wins&lt;/h2&gt;

&lt;p&gt;That depends on the picture.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://isene.org/assets/art/lighthouse_o.jpg&quot;&gt;lighthouse&lt;/a&gt; at the top is all gradient. Half blocks keep the glow around the sun smooth. &lt;a href=&quot;https://hpjansson.org/chafa/&quot;&gt;chafa&lt;/a&gt; breaks it into steps and lays horizontal streaks across the water.&lt;/p&gt;

&lt;p&gt;Now &lt;a href=&quot;https://isene.org/assets/art/Prison.jpg&quot;&gt;a picture&lt;/a&gt; made of nothing but fine structure:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/glow-prison.png&quot; alt=&quot;the same three, on a fractal interior&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here chafa wins. It picks from a wide set of glyphs, so a cell can hold a corner or an edge, and the lattice survives. Half blocks have one shape to work with and the detail turns to mush.&lt;/p&gt;

&lt;p&gt;Gradients to the blocks, fine structure to the glyphs.&lt;/p&gt;

&lt;h2 id=&quot;the-five-second-mystery&quot;&gt;The five second mystery&lt;/h2&gt;

&lt;p&gt;chafa also looked unusable. Five and a half seconds for one picture, every time. The same command piped to a file took a third of a second.&lt;/p&gt;

&lt;p&gt;It was waiting. chafa asks the terminal what it can do and waits up to five seconds for an answer. &lt;a href=&quot;https://github.com/isene/glass&quot;&gt;glass&lt;/a&gt;, my terminal, never answers, so chafa sat out the full timeout on every image.&lt;/p&gt;

&lt;p&gt;One flag. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--probe off&lt;/code&gt;, since glow has already decided what it wants:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;lighthouse, 4000x3000&lt;/th&gt;
      &lt;th&gt;fractal, 1920x1080&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;kitty protocol&lt;/td&gt;
      &lt;td&gt;27 ms&lt;/td&gt;
      &lt;td&gt;101 ms&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;glow, half blocks&lt;/td&gt;
      &lt;td&gt;221 ms&lt;/td&gt;
      &lt;td&gt;59 ms&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;chafa, before&lt;/td&gt;
      &lt;td&gt;5356 ms&lt;/td&gt;
      &lt;td&gt;5072 ms&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;chafa, after&lt;/td&gt;
      &lt;td&gt;358 ms&lt;/td&gt;
      &lt;td&gt;63 ms&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The kitty numbers move around because glow caches the scaled image on disk, and the lighthouse was already in there. The text renderers cache nothing.&lt;/p&gt;

&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imgcompare&lt;/code&gt; puts any picture in three panels and times each one.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/isene/glow
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;glow &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; cargo run &lt;span class=&quot;nt&quot;&gt;--release&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--example&lt;/span&gt; imgcompare &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; photo.jpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Built with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt;. Eight tests cover the light tables, the linear-light average, the alpha weighting and the dither staircase. “The picture looks about right” is not a test.&lt;/p&gt;

&lt;p&gt;The lesson I keep relearning: measure the thing where it runs. Piped to a file, chafa looked fine.&lt;/p&gt;

&lt;p&gt;Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/glow&quot;&gt;glow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/Pictures-Out-Of-Text.html&lt;/p&gt;
</description>
        <pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/Pictures-Out-Of-Text.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>Three more science apps</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-science2.png&quot; alt=&quot;Three more science apps&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’ve always been drawn to the really big and the really small. From
astrophysics and cosmology to particle physics and quantum mechanics.&lt;/p&gt;

&lt;p&gt;I am fascinated about what happens at the edges of reality. I started wondering about the elements beyond 120 when I was
a little boy and the structure of those nuclei and their break-downs. I read frontier articles on astronomy and wondered
what a 6-star system would be like. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Remembrance_of_Earth%27s_Past&quot;&gt;books&lt;/a&gt; and the
&lt;a href=&quot;https://en.wikipedia.org/wiki/3_Body_Problem_%28TV_series%29&quot;&gt;series&lt;/a&gt; 3-body-problem explore that. Then the exoplanets
started cropping up, then pouring in. I’ve been following that frontier ever since.&lt;/p&gt;

&lt;p&gt;It’s also interesting to zoom in and out in mathematics, so fractals caught my eye.&lt;/p&gt;

&lt;p&gt;So, here we are; Three more TUI apps in the science category.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-isotopes.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;isotopes&quot;&gt;isotopes&lt;/h2&gt;

&lt;p&gt;The chart of the nuclides. Neutrons run across, protons up, one cell per nuclide, 3,386 of them. The valley of stability is not drawn in. It falls out of the data, the way the main sequence falls out of an HR diagram.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-isotopes.png&quot; alt=&quot;isotopes&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Colour by decay mode and the chart sorts itself. White down the middle where the stable ones sit. Blue below for the neutron-rich, red above for the proton-rich, gold at the heavy end where alpha takes over.&lt;/p&gt;

&lt;p&gt;Five colour modes in all. Half-life over 26 decades. Binding energy, where the iron peak is right there in the middle. Natural abundance. The year each one was first reported, which fills the chart outward over a century.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; on uranium-238.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-isotopes-chain.png&quot; alt=&quot;the U-238 decay chain&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Fourteen steps down to lead-206, every half-life on the way, from 4.468 billion years to 164 microseconds. A chain follows the dominant mode only. Bi-214 splits 99.979 to 0.021 and it takes the big side, but the detail line shows every branch.&lt;/p&gt;

&lt;p&gt;The data is the IAEA’s evaluated table: half-lives, decay modes with their branchings, spin and parity, binding energy, mass excess. It ships inside the binary. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;z&lt;/code&gt; for all 3,386 at once in braille, eight nuclides per character.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/isene/elements&quot;&gt;elements&lt;/a&gt; knows about it too. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i&lt;/code&gt; on any element and the chart opens on that element’s isotopes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-exoplanets.svg&quot; align=&quot;right&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;exoplanets&quot;&gt;exoplanets&lt;/h2&gt;

&lt;p&gt;Every known world outside the solar system. How far out it orbits runs across, how big it is runs up, 6,309 of them.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-exoplanets.png&quot; alt=&quot;exoplanets&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Our own eight are in white for scale, and once you see where they sit the rest of the picture reads itself. Jupiter is out at 5 AU with almost nothing around it. The blue pileup at the top left is hot Jupiters, gas giants closer to their star than Mercury is to ours. Orange is the wobble method, which finds the heavy ones far out. Green at the right edge is direct imaging.&lt;/p&gt;

&lt;p&gt;The gap at 1.8 Earth radii is real. Planets avoid it.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; and the system unfolds.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-exoplanets-system.png&quot; alt=&quot;the TRAPPIST-1 system&quot; /&gt;&lt;/p&gt;

&lt;p&gt;TRAPPIST-1, seven planets around a red dwarf, all of them closer in than Mercury. The green band is where water could stay liquid on a rocky world, worked out from the star’s size and temperature. For that star it lands between 0.0225 and 0.0324 AU, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e&lt;/code&gt; sits in it.&lt;/p&gt;

&lt;p&gt;Numbers from the NASA Exoplanet Archive. 747 of the orbits came with only a period or only a distance. The app fills in the other with Kepler’s third law and marks it. Without that the microlensing finds would have nowhere to stand.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-fractal.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;fractal&quot;&gt;fractal&lt;/h2&gt;

&lt;p&gt;Five pictures of one idea: repeat something simple, and watch what it settles into.&lt;/p&gt;

&lt;p&gt;If you want the gentle version first: 3Blue1Brown on &lt;a href=&quot;https://www.youtube.com/watch?v=gB9n2gHsHN4&quot;&gt;what a fractal actually is&lt;/a&gt;, and Numberphile on &lt;a href=&quot;https://www.youtube.com/watch?v=FFftmWSzgmk&quot;&gt;the Mandelbrot set&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-fractal.png&quot; alt=&quot;the Mandelbrot set&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Mandelbrot set, in braille. Arrows pan, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;+&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-&lt;/code&gt; zoom, and the iteration count climbs as you go deeper. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;J&lt;/code&gt; and the point you are standing on becomes the c of its own Julia set. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;J&lt;/code&gt; again and you are back where you were.&lt;/p&gt;

&lt;p&gt;A braille cell is 2x4 dots and one colour, which is a choice. The dots carry eight times the detail, the colour only one value per cell. So the dots are dithered. How many light up inside a cell tracks the value there, and the colour is that cell’s average. Fine structure in the dots, broad shape in the colour.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-fractal-logistic.png&quot; alt=&quot;the logistic map&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The logistic map. One fixed point, then two, then four, then chaos, with windows of order inside it. δ = 4.669199 and the r = 3.569946 where the doubling gives way are computed while the app runs, not looked up. It hunts the superstable cycles and measures the gaps. Veritasium made &lt;a href=&quot;https://www.youtube.com/watch?v=ovJcsL7vyrk&quot;&gt;a whole film about this one picture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then the &lt;a href=&quot;https://en.wikipedia.org/wiki/Lorenz_system&quot;&gt;Lorenz attractor&lt;/a&gt; with ρ on a knob, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/H%C3%A9non_map&quot;&gt;Hénon map&lt;/a&gt;, 300,000 points folded onto a fractal.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Three apps, built with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt;. Same rules as the rest of the suite: a single static binary, instant start, everything offline, zero cost when idle. Nothing animates and nothing polls. A frame is drawn when a key asks for one.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; in any of them and ask Claude about whatever is on screen, with the numbers as context.&lt;/p&gt;

&lt;p&gt;Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-science-shelf&quot;&gt;The science shelf&lt;/h2&gt;

&lt;p&gt;Seven apps now, covering some 36 orders of magnitude. From a quark, smaller than an attometre, out to a star 500 light-years away.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/astro&quot;&gt;astro&lt;/a&gt;: the sky tonight, the moon, the planets, your telescope&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/stars&quot;&gt;stars&lt;/a&gt;: the Hertzsprung-Russell diagram&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/particles&quot;&gt;particles&lt;/a&gt;: the Standard Model, down to one quark&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/elements&quot;&gt;elements&lt;/a&gt;: the periodic table&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/isotopes&quot;&gt;isotopes&lt;/a&gt;: the chart of the nuclides&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/exoplanets&quot;&gt;exoplanets&lt;/a&gt;: the known worlds&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/fractal&quot;&gt;fractal&lt;/a&gt;: chaos and fractals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them are in the &lt;a href=&quot;https://github.com/isene/fe2o3&quot;&gt;fe2o3&lt;/a&gt; launcher, which will install them for you.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/Three-More-Science-Apps.html&lt;/p&gt;
</description>
        <pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/Three-More-Science-Apps.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>The sky, drawn in braille</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/astro-sky.png&quot; alt=&quot;The sky chart in astro&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I love our sky. I love the terminal. Now they fuse.&lt;/p&gt;

&lt;p&gt;My &lt;a href=&quot;https://github.com/isene/astro&quot;&gt;astro&lt;/a&gt; app has always shown a star chart for the hour I pick. It fetched it from a website, as a picture, one per hour, converted through ImageMagick and cached on disk.&lt;/p&gt;

&lt;p&gt;Now it draws its own… in braille.&lt;/p&gt;

&lt;h2 id=&quot;what-it-draws&quot;&gt;What it draws&lt;/h2&gt;

&lt;p&gt;9,096 stars from the Yale Bright Star Catalogue, and the constellation figures. The sun, moon and planets where they actually are for that hour. Zenith at the centre, horizon at the rim, north up and east to the left.&lt;/p&gt;

&lt;p&gt;Every star wears its own colour, worked out from its B-V index. Braille cells carry a 2x4 dot matrix, and those dots come out close to square. So the sky is round without any fudging.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/astro-sky-pane.png&quot; alt=&quot;The sky in the main pane&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It sits in the main pane and follows the hour selected on the left. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s&lt;/code&gt; and it takes the whole screen, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;←&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;→&lt;/code&gt; walk the night an hour at a time. The left pane follows along.&lt;/p&gt;

&lt;h2 id=&quot;details&quot;&gt;Details&lt;/h2&gt;

&lt;p&gt;The faintest star it plots comes from the Bortle number in the config. Bortle 4 gives magnitude 6.4, Bortle 9 gives 4.0. A city sky draws a city sky.&lt;/p&gt;

&lt;p&gt;The chart also scales to the room it has. Two thousand stars in a pane fifteen rows high is one solid block of braille. Star counts run about half a magnitude per factor of ten… invert that, fill a tenth of the dots, and the pattern comes back.&lt;/p&gt;

&lt;p&gt;The moon covers 13 degrees of sky in a day. Positions had to move to the hour, not the day, or it lands a handful of moon widths off.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Built with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt; in a couple of hours. The sky drawn in astro needs no network, no image protocol, no cache. Just arithmetic over two tables in the binary. One frame takes 2 ms, and between keypresses it does nothing at all.&lt;/p&gt;

&lt;p&gt;Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/astro&quot;&gt;astro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/The-Sky-Drawn-In-Braille.html&lt;/p&gt;
</description>
        <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/The-Sky-Drawn-In-Braille.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>A rusty front door</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-launcher.png&quot; alt=&quot;The fe2o3 launcher&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Two days ago I posted &lt;a href=&quot;/2026/07/Five-New-Rust-Tools.html&quot;&gt;five new tools&lt;/a&gt;. Yesterday &lt;a href=&quot;/2026/07/Stars-And-Particles.html&quot;&gt;two more&lt;/a&gt;. That puts 27 apps in the &lt;a href=&quot;https://isene.org/fe2o3/&quot;&gt;Fe₂O₃ suite&lt;/a&gt;, and I am starting to lose sight of all the wonderful apps. So the suite got a front door, simply called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fe2o3&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-grid&quot;&gt;The grid&lt;/h2&gt;

&lt;p&gt;Every app as a card: its logo, what it is, one line on why. Arrow keys move. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; runs it in the same terminal, and when you quit you are back on the grid. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?&lt;/code&gt; pops up that app’s own help, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;w&lt;/code&gt; opens its repo, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/&lt;/code&gt; filters.&lt;/p&gt;

&lt;p&gt;Six groups, each with its own tint; daily drivers, desk, science, media, play, system. Plus the retired shelf, where rush and crush now sit.&lt;/p&gt;

&lt;h2 id=&quot;it-installs-too&quot;&gt;It installs, too&lt;/h2&gt;

&lt;p&gt;Grab this one binary and it fetches the rest.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i&lt;/code&gt; downloads the app under the cursor from its latest release. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;I&lt;/code&gt; downloads every missing one on screen. Solid frame and a green tick means you have it. Dashed frame and an amber down-arrow means it’s one keypress away.&lt;/p&gt;

&lt;p&gt;You can take the launcher, walk the grid, and pick up only what you fancy.&lt;/p&gt;

&lt;p&gt;Binaries land in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/bin&lt;/code&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.local/bin&lt;/code&gt; if you have no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/bin&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Built with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt; in an evening. One static binary, logos baked in. It does one blocking read on stdin and nothing else while it waits, like the rest of the suite.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -L &quot;https://github.com/isene/fe2o3/releases/latest/download/fe2o3-linux-x86_64&quot; \
  -o ~/bin/fe2o3 &amp;amp;&amp;amp; chmod +x ~/bin/fe2o3
fe2o3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;I&lt;/code&gt; for all of it, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i&lt;/code&gt; for the one you want.&lt;/p&gt;

&lt;p&gt;Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/fe2o3&quot;&gt;fe2o3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/A-Rusty-Front-Door.html&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/A-Rusty-Front-Door.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>Stars and particles</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-science.png&quot; alt=&quot;Stars and particles&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Yesterday I posted &lt;a href=&quot;/2026/07/Five-New-Rust-Tools.html&quot;&gt;five new tools&lt;/a&gt;. Today there are two more, and they are both science.&lt;/p&gt;

&lt;p&gt;My mother got me going when I was 8. She pointed to the sky just above the apartment building where we lived (Tveita, Oslo) and said, “Do you see those three stars up there? That’s the belt of Orion”. I was hooked. Four years later I was hanging out at Oslo University bugging professors in astrophysics with questions about the cosmos. Then I got into particle physics and started pestering professors at the physics campus as well.&lt;/p&gt;

&lt;p&gt;Together the two new apps cover about 36 orders of magnitude. Betelgeuse is 500 light-years out. A quark is smaller than an attometre. Both fit in a terminal.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-stars.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;stars&quot;&gt;stars&lt;/h2&gt;

&lt;p&gt;The Hertzsprung-Russell diagram. Temperature across, luminosity up. Stars land where their physics puts them, and the shape that falls out of that is the main sequence, running diagonally from the hot blue stars down to the cool red dwarfs.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-stars.png&quot; alt=&quot;stars&quot; /&gt;&lt;/p&gt;

&lt;p&gt;461 named stars from the HYG catalog. Walk the diagram cell by cell with the arrow keys. Several stars often share one cell, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tab&lt;/code&gt; cycles them and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt; lists them all. Each one brings its numbers and its full Wikipedia article, cached locally.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; and a schematic evolutionary track is laid over the plot: 1, 5 or 15 solar masses, with every stage named below. Up the giant branch, back across the top at constant brightness while the core burns out, then down and left onto the white dwarf cooling track. The one solar mass track is the Sun’s future.&lt;/p&gt;

&lt;p&gt;Measured values come from Wikidata. The rest are derived from spectral type and absolute magnitude, and one color mode paints the diagram by which is which.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-particles.svg&quot; align=&quot;right&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;particles&quot;&gt;particles&lt;/h2&gt;

&lt;p&gt;The Standard Model. Seventeen fundamental particles, three generations of quarks and leptons, the four force carriers, the Higgs, plus the proton and neutron they build.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-particles.png&quot; alt=&quot;particles&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mass, charge, spin, color charge, which of the four forces it feels, its antiparticle, the year it was found. The neutrinos only have upper limits.&lt;/p&gt;

&lt;p&gt;Then press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tab&lt;/code&gt; and it takes a carbon atom apart. Four levels, each labelled with its real size. The atom, almost entirely empty. The nucleus, six protons and six neutrons. One proton. One quark.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-particles-proton.png&quot; alt=&quot;a proton&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That is a proton: three valence quarks, red, green and blue, held by gluon flux tubes, in a haze of virtual pairs. The quarks account for about 1% of its mass. The rest is the energy of the field itself.&lt;/p&gt;

&lt;p&gt;One level down you try to pull a quark out. The string stretches, stores energy, and snaps into a new quark-antiquark pair. You end up holding two mesons. You never get a free quark.&lt;/p&gt;

&lt;p&gt;It rotates with the arrow keys. There is no animation loop, so a still model costs nothing. Drawn in braille, eight sub-pixels per character cell.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Two apps, both built today with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt;. “particles” was an Opus 5 one-shot from a rather slim prompt (but with knowledge drawn from “stars” and “elements”). Same rules as the rest of the suite: a single static binary, instant start, zero cost when idle.&lt;/p&gt;

&lt;p&gt;Both fetch once and then work offline. Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; and ask Claude about whatever is on screen, with the data and the article as context.&lt;/p&gt;

&lt;p&gt;Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/stars&quot;&gt;stars&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isene/particles&quot;&gt;particles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/Stars-And-Particles.html&lt;/p&gt;
</description>
        <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/Stars-And-Particles.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>Five new Rust tools</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-new.png&quot; alt=&quot;Five new Fe2O3 tools&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I keep building the tools I use. I know, the world doesn’t need another calculator, but I do. My &lt;a href=&quot;https://isene.org/fe2o3/&quot;&gt;Fe₂O₃ suite&lt;/a&gt; of Rust terminal tools has swallowed almost everything I run in a day. Over the last five weeks it got five new members.&lt;/p&gt;

&lt;p&gt;I have an itch. I scratch. Or I get an urge, and by evening it was a binary in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/bin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-elements.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;elements&quot;&gt;elements&lt;/h2&gt;

&lt;p&gt;The periodic table in the terminal. All 118 of them, plus the hypothesized ones out to 126 that nobody has made yet. Move with the arrow keys. Every element brings its full Wikipedia article, cached locally. No browser, no network, snappy.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-elements.png&quot; alt=&quot;elements&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The colors are the fun part. Eight modes recolor the whole table: category, phase, block, electronegativity, melting point, density. My favourite is cosmic origin, which paints each element by how it came into existence. Hydrogen and helium from the Big Bang. Carbon and lead from dying stars. Gold and platinum from neutron stars colliding. The heavy end made by us. You can see the history of the universe in one screen of colored squares.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; and you get &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt; in the pane, with that element’s data and article as context. I asked why Osmium is so dense and got lanthanide contraction, relativistic orbitals and hexagonal packing… a better answer than I would have found on my own.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-rpnx.svg&quot; align=&quot;right&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;rpnx&quot;&gt;rpnx&lt;/h2&gt;

&lt;p&gt;The HP-41 grabbed me when I was a young teen and just wouldn’t let go. Reverse Polish Notation has no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;=&lt;/code&gt; and no parentheses. You push values on a stack and the operators act on what is there. Once that is in your fingers, everything else feels like extra typing… no parenthesis and you see every intermediate result.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-rpnx.png&quot; alt=&quot;rpnx&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The X/Y/Z/T stack, Last X, the full math, trig, log, stats and base-conversion set. It also runs &lt;a href=&quot;https://github.com/isene/xrpn&quot;&gt;XRPN&lt;/a&gt; programs, so my old HP-41 FOCAL code still executes. The calculation engine is a shared crate. The terminal version and the one on my phone give identical answers.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-typo.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;typo&quot;&gt;typo&lt;/h2&gt;

&lt;p&gt;A touch typing tutor. It’s idiotic that I still can’t touch type at the age of 59. This app is long overdue for me. Eight lessons, home row to full sentences. Strict mode, live WPM and accuracy, personal bests. It knows the US and Norwegian layouts. Here æ, ø and å get their own drills.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-typo.png&quot; alt=&quot;typo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Strict means the drill does not move until you hit the right key. No skipping ahead, no fudging the numbers. Typing is the one interface I use for everything, so it needs sharpening.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-melody.svg&quot; align=&quot;right&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;melody&quot;&gt;melody&lt;/h2&gt;

&lt;p&gt;A piano roll in the terminal. Put notes down, jam freely on the keyboard, or record against a metronome. What you play is quantized to the grid. Then tweak each note’s pitch, length and strength until the line sits right.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-melody.png&quot; alt=&quot;melody&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It exports a clean WAV, which is the whole point. I sketch a melody here and hand it to something bigger to build a real track around. No audio library. Notes are synthesised to raw PCM and streamed to whatever player is on the system. The WAV file is written by hand. The sound device only wakes when something actually plays.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-logo-fonts.svg&quot; align=&quot;left&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;fonts&quot;&gt;fonts&lt;/h2&gt;

&lt;p&gt;A font picker that shows you the actual font, in your terminal. Every family on the system, rendered in its own typeface as you move down the list.&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/fe2o3-fonts.png&quot; alt=&quot;fonts&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It exists because I was tired of running xfontsel or guessing from names. It hands back the family and point size. My editor &lt;a href=&quot;https://github.com/isene/scribe&quot;&gt;scribe&lt;/a&gt; calls it as a picker, the way it calls &lt;a href=&quot;https://github.com/isene/prism&quot;&gt;prism&lt;/a&gt; for colors. The preview in that screenshot is the &lt;a href=&quot;/2026/07/A-Font-For-Amar.html&quot;&gt;Amar font&lt;/a&gt; Claude made for my role-playing world.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Five tools, five weeks, all built with &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt; in the evenings. Each is a single static binary. It starts instantly and burns nothing while it waits. That is the rule the whole suite obeys: when idle, it does NOTHING. No timers, no polling, no wakeups.&lt;/p&gt;

&lt;p&gt;All of it is Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;. Take it, fork it, or ignore it.&lt;/p&gt;

&lt;p&gt;Software built for everyone fits everyone a little. This fits one person exactly. That person can be you too, if you build your own.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/Five-New-Rust-Tools.html&lt;/p&gt;
</description>
        <pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/Five-New-Rust-Tools.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
          
        
          
      </item>
    
    <item>
        <title>A font for Amar</title>
        <description>&lt;p&gt;&lt;img src=&quot;/assets/posts/amarfont.png&quot; alt=&quot;A font for Amar&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For a couple of years I have used one task as my litmus test for AI models: Create a fantasy font suitable for &lt;a href=&quot;http://d6gaming.org&quot;&gt;the Kingdom of Amar&lt;/a&gt;, my role-playing world. I want a TTF file I can install and write with. Every model has failed. Say hello to Fable.&lt;/p&gt;

&lt;p&gt;Why is this hard? A font is pure geometry. The model must place every point of every letter by numbers, blind. It cannot look at what it draws. If the leg of the R lands wrong, the R is broken. And a font is a hundred glyphs that must also look like family.&lt;/p&gt;

&lt;p&gt;Here is what Opus 4.7 delivered in December:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/amarfont-opus.png&quot; alt=&quot;The Opus 4.7 attempt&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There is no font here. It painted a PICTURE of an alphabet and declared victory. The S is in two pieces, the small r lost its arm, the 3 and the 5 fell apart. Opus 4.8 was not much better.&lt;/p&gt;

&lt;p&gt;Today I handed the same task to &lt;a href=&quot;https://claude.com/claude-code&quot;&gt;Claude&lt;/a&gt;  &lt;a href=&quot;https://www.anthropic.com/news/claude-fable-5-mythos-5&quot;&gt;Fable 5&lt;/a&gt;. It read up on the Amar world and picked a chisel-cut style, like letters carved in stone. Then he wrote a program that outputs a real TTF, rendered a specimen sheet, looked at his own work and fixed what he did not like. Then he installed the font on my machine and showed me this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/amarfont-chisel.png&quot; alt=&quot;Amar - the chisel-cut font&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Runes with diamond accents. Every letter solid, consistent and readable. This is an actual font. But straight strokes are the easy part of type design, so I raised the bar: make me a more Celtic one, one that is even more suitable to the Kingdom of Amar.&lt;/p&gt;

&lt;p&gt;Minutes later I had an uncial font in the style of the Book of Kells. Curved strokes drawn with a simulated broad-nib pen. Thick verticals, thin horizontals, wedge serifs. Even the old insular letterforms are there; the g is the flat-topped squiggle the monks actually wrote:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/amarfont-celtic.png&quot; alt=&quot;Amar Celtic - the uncial font&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Both fonts are Public Domain, like &lt;a href=&quot;/2026/04/MyTools.html&quot;&gt;everything I make&lt;/a&gt;. My litmus test finally has a passing grade. Now I need a new test.&lt;/p&gt;

&lt;p&gt;Got any ideas?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Link to this post: https://isene.org/2026/07/A-Font-For-Amar.html&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate>
        
        <link>/2026/07/A-Font-For-Amar.html</link>
          
        
            <category>Geekery</category>
        
            <category>Technology</category>
        
            <category>Amar RPG</category>
        
          
        
          
      </item>
    
  </channel>
</rss>
