<?xml version="1.0" encoding="UTF-8"?>
  <rss version="2.0" 
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Jim Nielsen’s Blog</title>
      <description></description>
      <link>https://blog.jim-nielsen.com</link>
      <atom:link href="https://blog.jim-nielsen.com/feed.xml" rel="self" type="application/rss+xml" />
      
        <item>
            <pubDate>Tue, 08 Sep 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/bulldoze-ui/</link>
            <title>The Bulldozing of an Interface</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/bulldoze-ui/</guid>
            <description>&lt;p&gt;Marcin Wichary has a lovely article titled &lt;a href=&quot;https://unsung.aresluna.org/photoshops-challenges-with-focus-pt-2/&quot; &gt;“Photoshop’s challenges with focus, pt. 2”&lt;/a&gt;. If you’re into the minutiae of interface design, this is a good ‘un. It perfectly illustrates how impossible it is to try and compare two interfaces side by side as static images.&lt;/p&gt;
&lt;p&gt;What matters in an interface is how it works, i.e. how you interface with it.&lt;/p&gt;
&lt;p&gt;And when you bulldoze an interface to build a new one, comparing the old vs. new side-by-side to make sure you “captured everything” is a lie. It’s never obvious what has been lost because the interactive pieces are missing from the static images — and those are what matter most because it’s how the feature works!&lt;/p&gt;
&lt;p&gt;I’ve found this to be true a lot as of late. Lots of tiny details that were meticulously crafted over years with specific rationales tied to real-world use cases, all completely bulldozed in a giant refactor. (All made possible by the great omniscient power of AI.)&lt;/p&gt;
&lt;p&gt;Few notice what’s gone because few can see what’s being lost in the first place.&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/bulldoze-ui/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Thu, 03 Sep 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/stop-with-the-uptime-percentage/</link>
            <title>Can We Stop With the Uptime Percentages?</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/stop-with-the-uptime-percentage/</guid>
            <description>&lt;p&gt;I was reading Jason Gorman’s article &lt;a href=&quot;https://codemanship.wordpress.com/2026/08/28/the-wall-confronting-reliable-coding-agent-autonomy/&quot; &gt;“The Wall Confronting Reliable Coding Agent Autonomy”&lt;/a&gt; and he says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the journey from 90% to 99% reliability is just as hard as it was to get to 90%. And from 99% to 99.9% is just as hard again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This stood out, as I’ve been experiencing more and more “downtime” in my day-to-day work. GitHub’s down. CI’s down. AI’s down. Slack’s down. Downtime’s going mainstream! More and more I find myself visiting service &lt;a href=&quot;https://www.githubstatus.com/&quot; &gt;status&lt;/a&gt; &lt;a href=&quot;https://status.claude.com/&quot; &gt;pages&lt;/a&gt;, where I’m confronted with a wall of colors and numbers like this:&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/uptime-claude-github.png&quot; width=&quot;603&quot; height=&quot;656&quot; alt=&quot;Screenshot of the mobile status pages for Claude and GitHub, each showing charts and uptime percentage numbers.&quot; data-og-image /&gt;

&lt;/p&gt;&lt;p&gt;100%? 99.72%? 99.09%? 98.98%? Those don’t all seem so different or bad? I mean, those are all an A in grade school.&lt;/p&gt;
&lt;p&gt;Then I have to remind myself of Jason’s point and re-interpret the numbers, which is more like reading &lt;a href=&quot;https://en.wikipedia.org/wiki/Richter_scale&quot; &gt;earthquake measurements&lt;/a&gt;. The difference between a 6.2 and a 7.8 might not seem that big, but it represents a massive difference in magnitude. Uptime percentages have a similar problem: 99.9% and 99.99% look pretty much the same, but the latter is 10× less!&lt;/p&gt;
&lt;p&gt;Infrastructure people understand this. They even have a shorthand for it: two nines, three nines, four nines. They intuitively grasp the difference because they swim in these numbers every day.&lt;/p&gt;
&lt;p&gt;But the audience for status pages isn’t just infra people anymore. It’s increasingly &lt;em&gt;everybody&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I understand the math is straightforward. Percent uptime is a good metric for those in the industry. But it’s a lousy interface for people who don’t care about the best way to measure infrastructure reliability in a standardized, reliable, compliant way.&lt;/p&gt;
&lt;p&gt;And status pages are the public interface for understanding the reliability of a service. I just want to know, “Dude, how much have you been down lately? Seems like a lot…”&lt;/p&gt;
&lt;p&gt;So how about, and I’ll just throw this out there, instead of:&lt;/p&gt;
&lt;p&gt;GitHub Actions: 98.31% uptime.&lt;/p&gt;
&lt;p&gt;We say something like:&lt;/p&gt;
&lt;p&gt;GitHub Actions: 12 hours affected in the last 30 days (98.31% uptime).&lt;/p&gt;
&lt;p&gt;One requires you to understand the nonlinear significance of numbers near 100%. The other requires knowing what an hour is.&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/stop-with-the-uptime-percentage/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Tue, 01 Sep 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/nobody-believes-it-everybody-does-it/</link>
            <title>Nobody Believes It, Everybody Does It</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/nobody-believes-it-everybody-does-it/</guid>
            <description>&lt;p&gt;Speaking of &lt;a href=&quot;https://blog.jim-nielsen.com/2026/nuance-for-me-none-for-you/&quot; &gt;things we know individually, but let slide collectively&lt;/a&gt;, here’s &lt;a href=&quot;https://adactio.com/journal/22296&quot; &gt;Jeremy Keith talking about how we all used Flash&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Remember when almost every website had a Flash intro? Everyone knew they were annoying and uneccessary, but everyone else was doing it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And here’s &lt;a href=&quot;https://daringfireball.net/linked/2026/06/02/blueball-dickovers&quot; &gt;John Gruber writing about his experience&lt;/a&gt; with those marketing schemes that trade your personal information for a discount:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The marketing shitbirds who press for these schemes  […]  do so by pointing to data that shows that they do convert some number of users. “It works” they claim, pointing to data. What doesn’t show up in their data are interactions like mine. They don’t have analytics that measure that I now consider their website an antagonist to avoid at all costs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There’s a funny thing about us humans: we place trust in systems that our own individual experience tells us are flawed. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KPIs: we know metrics get optimized at the expense of reality, but leadership treats dashboards as a reflection of truth.&lt;/li&gt;
&lt;li&gt;Performance reviews: we know they’re political and subjective, yet companies leverage them for promotions, compensation, even firings.&lt;/li&gt;
&lt;li&gt;Standardized testing: we know tests don’t measure real ability, but institutions rely on them for admissions, funding, and rankings.&lt;/li&gt;
&lt;li&gt;Terms of Service: nobody reads them, but the legal system acts like informed consent is given.&lt;/li&gt;
&lt;li&gt;Privacy notices / cookie banners: everybody clicks through them mindlessly while companies claim transparency and compliance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This behavior is best summed up by Scott Berkun in &lt;em&gt;Confessions of a Public Speaker&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I know I avoid most surveys I’m asked to fill out, as do many of you, which begs the question why we place so much faith in survey-based research.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What’s convenient at scale becomes a substitute for the reality we experience as individuals (because scale excludes the parts of reality it cannot conveniently capture).&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/nobody-believes-it-everybody-does-it/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Mon, 31 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/nuance-for-me-none-for-you/</link>
            <title>My Experience Has Nuance, Yours Is a Data Point</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/nuance-for-me-none-for-you/</guid>
            <description>&lt;p&gt;Eric Bailey has &lt;a href=&quot;https://ericwbailey.website/published/a-proposal-for-new-netflix-content-rating-icons/&quot; &gt;a fun little post&lt;/a&gt; about how we need more than a few icons to express the nuance of our shared human experience.&lt;/p&gt;
&lt;p&gt;For example, he suggests Netflix provide some feedback buttons to indicate the kinds of experiences we all share consuming and rating media:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Just because I expressed interest in this show does not mean I want to be inundated with recommendations for its genre”&lt;/li&gt;
&lt;li&gt;“Disregard that I pressed ‘thumbs up’ my cat walked over the keyboard”&lt;/li&gt;
&lt;li&gt;“I am making bad choices and hatewatching this”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What’s great about the examples in Eric’s post is how familiar they are. We can read them and laugh because we’ve had the same thought — “I’m pressing ‘thumbs up’ here, but what I really mean is…” &lt;/p&gt;
&lt;p&gt;We know when we click that button that it’s a reductive expression of our experience that’ll be erroneously interpreted, but we do it anyway. &lt;a href=&quot;https://notes.jim-nielsen.com/n/2026-08-18-1006/&quot; &gt;As Bryan Cantrill shared&lt;/a&gt; from his experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There&amp;#39;s no way to indicate, “I’m engaging with this, but I hate myself for doing it.” I need another mouse button that is like, “I’m clicking on this, but I’m rage clicking on it and for my own mental health could you not drag more of this in front of me please?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We know these feedback mechanisms are often a misrepresentation of our actual experience.&lt;/p&gt;
&lt;p&gt;Yet we turn around in our professional contexts and see numbers like “142,432 users gave this a ‘thumbs up’” and we forget everything we knew about our own individual experience with these systems. We make it mean what we want it to mean, what’s convenient for measurement and reporting e.g. “Wow, what a great insight about our offerings! Let’s restructure our entire catalog around this new, objective, &lt;a href=&quot;https://blog.jim-nielsen.com/2025/product-pseudoscience/&quot; &gt;(pseudo)&lt;/a&gt;scientific fact that so many people obviously like this thing!”&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.jim-nielsen.com/2024/seeing-others-in-data-but-not-ourselves/&quot; &gt;We reduce the experiences of others to mere data, but grant ourselves exemption from such oversimplifications.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where’s the conversation around:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Values, e.g. “Should we provide more of this? &lt;a href=&quot;https://blog.jim-nielsen.com/2026/say-no-to-data/&quot; &gt;We can say no to the data…&lt;/a&gt;”&lt;/li&gt;
&lt;li&gt;Nuance, e.g. “What do people really mean when they click ‘thumbs up’ in this interface?”&lt;/li&gt;
&lt;li&gt;Vision, e.g. “If we provide more of this, where will that lead us?”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But that’s too introspective. Introspection is slow. &lt;a href=&quot;https://blog.jim-nielsen.com/2026/speed-not-conducive-to-wisdom/&quot; &gt;Ain’t nobody got time for that.&lt;/a&gt;&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/nuance-for-me-none-for-you/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
      &lt;p&gt;
        Related posts linking here:
        &lt;a href=&quot;/2026/nobody-believes-it-everybody-does-it/&quot;&gt;(2026) Nobody Believes It, Everybody Does It&lt;/a&gt;
      &lt;/p&gt;
    
  </description>
        </item>
      
        <item>
            <pubDate>Thu, 27 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/blog-calendar-view/</link>
            <title>A Calendar View For My Blog</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/blog-calendar-view/</guid>
            <description>&lt;p&gt;807 blog posts across 14 years.&lt;/p&gt;
&lt;p&gt;That’s how much I’ve published on my blog at the time of this writing.&lt;/p&gt;
&lt;p&gt;And here’s the question I’ve been turning over in my mind: “How do I convey that kind of volume across time in a more interesting way than a mere reverse-chronological list?”&lt;/p&gt;
&lt;p&gt;I’m not hating on reverse-chronological lists. I love &lt;a href=&quot;https://blog.jim-nielsen.com/archive&quot; &gt;my list view&lt;/a&gt;. I use it all the time to find stuff I’ve written.&lt;/p&gt;
&lt;p&gt;But it’s only one way of navigating and digesting all my posts.&lt;/p&gt;
&lt;p&gt;“What would be another way?”&lt;/p&gt;
&lt;p&gt;Surely there are many answers to that question. And I’ll probably be exploring them more and more over time.&lt;/p&gt;
&lt;p&gt;But I had an idea for a new view that I built out and shipped: my calendar view.&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/calendar-view-website.png&quot; width=&quot;670&quot; height=&quot;790&quot; alt=&quot;Screenshot of the calendar archive on Jim Nielsen’s blog where it shows a calendar for 2026 with red dots on various days through the year.&quot; data-og-image /&gt;

&lt;/p&gt;&lt;p&gt;It’s also just a reverse-chronological view, but it’s meant to convey a sense of posting patterns through time more than it is meant to be a good browsing experience of content.&lt;/p&gt;
&lt;p&gt;The view is simple: a calendar view of days in each year, and if I posted on a day, it gets a circle (bonus: if a post hit hacker news, it gets an orange square instead).&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/calendar-view-month.png&quot; width=&quot;272&quot; height=&quot;244&quot; alt=&quot;Screenshot of the month of July with its day. A few days have a red circle and one day has an orange square, with a pop-up tied to it denoting the post’s title and that it hit hacker news.&quot; /&gt;

&lt;/p&gt;&lt;p&gt;You can click on the dots to see the names of the posts from that day (and follow the link to them, but really this view is basically to scratch an itch of mine.&lt;/p&gt;
&lt;p&gt;Because you can just make stuff for yourself, and that’s what I’ve done here. And now I’m writing about it because that means I get another little circle for today! Good job, Jimbo.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.jim-nielsen.com/archive/calendar&quot; &gt;Check it out&lt;/a&gt;&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/blog-calendar-view/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Tue, 25 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/shipping-microlighter/</link>
            <title>Have You Heard the Good News About Microlighter?</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/shipping-microlighter/</guid>
            <description>&lt;p&gt;Dave Rupert &lt;a href=&quot;https://daverupert.com/2026/08/microlighter/&quot; &gt;wrote&lt;/a&gt; about shipping &lt;a href=&quot;https://davatron5000.github.io/microlighter/&quot; &gt;microlighter&lt;/a&gt;: a tool for handling syntax highlighting using &lt;a href=&quot;https://www.bram.us/2024/02/18/custom-highlight-api-for-syntax-highlighting/&quot; &gt;the CSS Custom Highlights API&lt;/a&gt;. &lt;a href=&quot;https://mastodon.social/@jimniels/117123353673091732&quot; &gt;I saw&lt;/a&gt; his post the day he released it, and I had an implementation PR up for my blog by end of day.&lt;/p&gt;
&lt;p&gt;Then, like I do with so many things, I let it sit there.&lt;/p&gt;
&lt;p&gt;This is the period where my subconscious takes over. It does the work of, “How do I actually feel about that? Do I want to merge it? Do I have any regrets about what I did?” If I still want to merge it after a few days, that’s usually a good sign that I’ll be happy with the work. (Sometimes after a few days I say, “What the hell was I thinking?” and then it’s easy to simply close the PR with zero regrets.)&lt;/p&gt;
&lt;p&gt;Well it’s a few days later and I still feel good about it, so time to ship!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jimniels/blog/pull/85/changes&quot; &gt;My PR&lt;/a&gt; for this is pretty straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove &lt;code&gt;highlight.js&lt;/code&gt; dependency (and related plumbing)&lt;/li&gt;
&lt;li&gt;On paths that 1) match my post pages (i.e. &lt;code&gt;/YYYY/:slug&lt;/code&gt;), and 2) have code on them, pull microlighter deps from a CDN and run it.&lt;/li&gt;
&lt;li&gt;Done.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Granted, there are trade-offs to this approach. I get it. Dave’s explainer for this tool on &lt;a href=&quot;https://shoptalkshow.com/729/&quot; &gt;The ShopTalk Show&lt;/a&gt; vibed with me because I’ve been in his shoes many times: “Whoops, somehow syntax highlighting on my blog is broken again. Guess I need to fix it. Ugh. I’ve done &lt;a href=&quot;https://prismjs.com&quot; &gt;prism&lt;/a&gt;, I’ve done &lt;a href=&quot;https://highlightjs.org&quot; &gt;highlight.js&lt;/a&gt;, I’ve done &lt;a href=&quot;https://shiki.style&quot; &gt;shiki&lt;/a&gt;. What should I do this time? Could I do this in a way that’s just &lt;em&gt;less&lt;/em&gt;?” He clarifies:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’m not coming at this like, “Everyone is doing it wrong!” I was just kind of like, “Could I do this in a way that suited me?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, this approach suites me.&lt;/p&gt;
&lt;p&gt;There’s a kind of conceptual elegance to it where syntax highlighting lives in the realm of a styling operation rather than a content transformation plus styling. In short: syntax highlighting, i.e. styling text, is a styling concern so solve it with CSS — no DOM manipulation required!&lt;/p&gt;
&lt;p&gt;Plus, I mean, how cool is it that the code on the website is the same as the code in the DOM?!?&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/microlighter.png&quot; width=&quot;1152&quot; height=&quot;683&quot; alt=&quot;Screenshot of the microlighter website with the webpage code sample on the left and the devtools open on the right to the same code in the DOM and there are no span tags wrapping the code!&quot; data-og-image /&gt;

&lt;/p&gt;&lt;p&gt;I guess this is how I know I still like working on the web, because seeing browsers do stuff like this that they couldn’t do before still feels really cool!&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/shipping-microlighter/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Sun, 23 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/use-llm-to-add-color-metadata/</link>
            <title>Getting an LLM to Make Me a Tool for Enriching the Color Metadata in My Icon Collection</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/use-llm-to-add-color-metadata/</guid>
            <description>&lt;p&gt;On my &lt;a href=&quot;https://www.iosicongallery.com&quot; &gt;icon&lt;/a&gt; gallery &lt;a href=&quot;https://www.macosicongallery.com&quot; &gt;sites&lt;/a&gt;, I have metadata I’ve manually added over the years to tag certain icons as being predominantly &lt;a href=&quot;https://www.iosicongallery.com/colors/blue/&quot; &gt;“blue”&lt;/a&gt; or &lt;a href=&quot;https://www.iosicongallery.com/colors/orange/&quot; &gt;“orange”&lt;/a&gt; or some other color.&lt;/p&gt;
&lt;p&gt;Then I use this metadata to present icons of (roughly) the same color. It’s kinda neat to be able to browse a wall of icons that  are all the same color.&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/llm-colors-ios-purple.png&quot; width=&quot;1567&quot; height=&quot;975&quot; alt=&quot;Screenshot of a wall of icons tagged as “purple” on iosicongallery.com&quot; /&gt;

&lt;/p&gt;&lt;p&gt;The thing is: I know there are a lot of icons I’ve missed tagging over the years. But I have no idea how many, and figuring that out seems like a really arduous task. How do I go through 2,000+ icons and find all the ones that look predominantly “orange” but haven’t been tagged as such yet?&lt;/p&gt;
&lt;p&gt;Seems like a good task to throw at an LLM. But I don’t want to just say, “Go tag everything that’s missing” and blindly trust the output. I need to be able to make a decisions as to whether I think a particular color is “orange” or not.&lt;/p&gt;
&lt;p&gt;What I need is a tool for the job. I’m a very visual thinker, so to continue curating these color categorizations, I need some way for the computer to do its thing really, really fast, and then pull me into the loop to visually make decisions.&lt;/p&gt;
&lt;p&gt;Here’s how I am thinking about about accomplishing this task:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a page with a list of colors on the left (red, green, orange, blue, etc.)&lt;/li&gt;
&lt;li&gt;When a color is clicked, show two columns. 1) All icons I currently have tagged for that color, and 2) all icons that might be that color but aren’t tagged as such (you, computer, process all my icons and do the work to figure this out and make recommendations).&lt;/li&gt;
&lt;li&gt;Allow me to select one or more icon(s) in the “not yet tagged as this color” column. Once I have all the ones I perceive as missing, give me a button to say “Copy” which copies the IDs of those icons.&lt;/li&gt;
&lt;li&gt;I’ll paste the IDs back here in the chat and you go add the corresponding metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That seems like it would be a good tool to put me in control of visual decision making around color categorization. So I tell the LLM to run with it.&lt;/p&gt;
&lt;p&gt;We chat back and forth. I think, “You probably need to run all the icons through some model to make the correlation?” But it’s like, “Nah bro, just make a ‘hue histogram’.” It tells me how. For a color like “orange”, I can:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[process] each PNG, skip transparent pixels, skip low-saturation gray, convert the rest to HSV, and score how much of the remaining mass sits in the orange hue band (roughly 15–45°). Rank icons that don’t already have colorId: &lt;code&gt;orange&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ok, sure. That sounds reasonable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[This] scores each icon PNG by share of opaque pixels per color bucket, then writes a standalone HTML page: tagged vs maybe-missing, per color.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let’s just make it, and then I’ll decide whether it’s good enough.&lt;/p&gt;
&lt;p&gt;After a few iterations, the computer going “brr…”, and me saying “explain that like I’m dumb”, I have a really effective little tool!&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/llm-colors-orange-picker.png&quot; width=&quot;1519&quot; height=&quot;1136&quot; alt=&quot;Screenshot of a tool showing a collection of orange icons side-by-side, representing icons that have been tagged orange in my collection vs. ones that haven’t.&quot; data-og-image /&gt;

&lt;/p&gt;&lt;p&gt;The little threshold slider is a nice touch. It lets me fiddle around with the fidelity of the matches. In some cases, sliding it down reveals more icons I would’ve otherwise missed. In other cases, I’m like “What are you thinking? I don’t see that as ‘yellow’ at all!”&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://cdn.jim-nielsen.com/blog/2026/llm-colors-browse.mp4&quot; width=&quot;866&quot; height=&quot;540&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Supper effective little tool. I go through each color, select the ones I think are missing, paste the IDs back into the LLM, and then have it update each icon&amp;#39;s metadata.&lt;/p&gt;
&lt;p&gt;Boom, done! That all would’ve taken &lt;em&gt;so&lt;/em&gt; long before. I would’ve never done it.&lt;/p&gt;
&lt;p&gt;Takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The LLM is good at making throw-away code. This doesn’t need to be “production-grade” code I depend on. Just something that’s good enough for me to get a job done, then toss. The resulting metadata is the goal, not the tool I use to get to the goal.&lt;/li&gt;
&lt;li&gt;The LLM is good at making one-off HTML pages for a specific task. In my case, all these images were hosted on a CDN, easy enough to just point at and have a standalone &lt;code&gt;.html&lt;/code&gt; file that I can locate on my hard drive and open directly as a &lt;code&gt;file://&lt;/code&gt; URL. No bundling. No transpilation. None of that. I don’t even need a web server! Keeping things &lt;em&gt;very&lt;/em&gt; basic on this project is paying off: I had really elemental building blocks that didn’t require additional third-party tooling. Just HTML, CSS, a little in-page JS, and images on a server!&lt;/li&gt;
&lt;li&gt;It’s fun to say, “Don’t do the work for me. Instead, help me make a custom-fit tool that facilitates me doing the work in the most empowering, correct way possible.”&lt;/li&gt;
&lt;/ul&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/use-llm-to-add-color-metadata/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Thu, 20 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/sloppy-ui-is-security-liability/</link>
            <title>A Sloppy Interface Is a Security Liability ￼</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/sloppy-ui-is-security-liability/</guid>
            <description>&lt;p&gt;In his talk &lt;a href=&quot;https://www.youtube.com/watch?v=XnP3td72tng&quot; &gt;“Why AI Is Breaking Software Security As We Know It”&lt;/a&gt; (&lt;a href=&quot;https://notes.jim-nielsen.com/n/2026-08-20-0947/&quot; &gt;my notes here&lt;/a&gt;), Feross Aboukhadijeh talks about &lt;a href=&quot;https://socket.dev/blog/attackers-hunting-high-impact-nodejs-maintainers&quot; &gt;the Axios npm incident&lt;/a&gt; and how the maintainer got phished by succumbing to (amongst other things) a faux Microsoft Teams interface:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;this is the kind of thing that AI makes easy to do, because it can vibe code that whole fake Microsoft Teams interface pretty trivially&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You’ve probably seen these: interfaces designed to look like some other product in order to provide a facade of authenticity and exploit someone.&lt;/p&gt;
&lt;p&gt;What struck me in listening to Feross was this idea of how the quality of your interfaces can be a protection mechanism against attackers.&lt;/p&gt;
&lt;p&gt;I don’t know if I’ve ever heard someone say that out loud — interface and interaction design as a security control — but I’m saying it.&lt;/p&gt;
&lt;p&gt;Now, of course, not everyone will consciously notice the level of polish that world-class professionals imbue in digital interfaces. But some will.&lt;/p&gt;
&lt;p&gt;Personally, I’ve always used the quality and care of digital  experiences as a heuristic for judging authenticity — and competency to be honest, e.g. “If this UI is so bad, what else will surely be bad?”&lt;/p&gt;
&lt;p&gt;Granted, it was a much more dependable heuristic before AI came along. But even now, I can still suss out slop and carelessness which is a skill that continues to be a reliable, protective form of digital literacy (for me).&lt;/p&gt;
&lt;p&gt;That’s all to say: a sloppy, careless approach to interface design  not only hurts your brand in terms of customer perception, but it can be an attack vector. The easier it is to sloppily reproduce what you sloppily ship, the easier it will be for your product or brand to be leveraged as a vehicle for exploiting your customers.&lt;/p&gt;
&lt;p&gt;If everything you make was produced from a single prompt, then everyone else is one prompt away from imitating you. The easier something is to make, the more likely it’ll be in the genre of “easy to exploit”.&lt;/p&gt;
&lt;p&gt;One way to protect yourself (it’s not the only one way, security is never a binary “you are / are not secure”) is to do that extra work to make your experiences go above and beyond what you can easily get out of an LLM.&lt;/p&gt;
&lt;p&gt;The protection here is having an interface and experience that is hard to replicate with the same level of fidelity that discerning users will notice — things like micro-interactions, loading behavior, UI copy and voice, handling of edge-cases, etc. That’s the stuff that’s hard (and expensive) to fake because it’s hard (and expensive) to notice you need to fake it.&lt;/p&gt;
&lt;p&gt;tl;dr — Fidelity to craft is not only valuable from a product standpoint, but it’s also valuable from security standpoint. If attackers are going after low-hanging fruit, your fruit will be harder to reach if it’s up high.&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/sloppy-ui-is-security-liability/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Sun, 16 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/oops-shouldve-thought-of-that/</link>
            <title>Oops, Should’ve Thought of That</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/oops-shouldve-thought-of-that/</guid>
            <description>&lt;p&gt;Gordon Brander &lt;a href=&quot;https://newsletter.squishy.computer/p/agents-want-flexible-schemas&quot; &gt;writes&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The thing about computers is that they can do anything you wish, so long as you specify your wish in exacting detail. However, LLMs relieve this constraint. An LLM can extrapolate what you mean (more or less) from just a few words. So computers can do vibes now.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It used to be that computers could only ever do exactly what you told them to do, nothing more.&lt;/p&gt;
&lt;p&gt;If they did something unexpected (a.k.a. a bug), it was because you failed to 1) anticipate it could happen, or 2) specify with greater detail that it shouldn’t happen.&lt;/p&gt;
&lt;p&gt;But in this new world, computers can extrapolate your intent.&lt;/p&gt;
&lt;p&gt;LLMS can act like a fill-in-the-gap machine, which alleviates you from &lt;a href=&quot;https://blog.jim-nielsen.com/2026/pedantry-of-computing/&quot; &gt;the pedantic demands of coding from years past&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There’s going to be a lot more “Oops, I didn’t mean to do that” in the future.&lt;/p&gt;
&lt;p&gt;This &lt;em&gt;should&lt;/em&gt; be what separates professional practitioners from hobbyists. &lt;/p&gt;
&lt;p&gt;A good practitioner recognizes that leveraging some foresight is part and parcel of the job in order to mitigate unintended consequences.&lt;/p&gt;
&lt;p&gt;Meanwhile, a hobbyist or amateur doesn’t even have the capability or experience to understand the assumed intent of an LLM until it’s too late and users have been affected.&lt;/p&gt;
&lt;p&gt;Software we use everyday, software that many aspects of our lives increasingly depend on, needs less unintended consequences. Less “Oops, should’ve thought of that.”&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/oops-shouldve-thought-of-that/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
        <item>
            <pubDate>Fri, 14 Aug 2026 19:00:00 GMT</pubDate>
            <link>https://blog.jim-nielsen.com/2026/its-not-just-me/</link>
            <title>Oh Hey, It’s Not Just Me</title>
            <guid isPermaLink="true">https://blog.jim-nielsen.com/2026/its-not-just-me/</guid>
            <description>&lt;p&gt;My whole life I’ve felt like I have great eyesight (and I still do).&lt;/p&gt;
&lt;p&gt;But lately I’ve been noticing what feels like…some slippage.&lt;/p&gt;
&lt;p&gt;Nothing big. Just this feeling in the morning like, as my brain and body wake up, my vision needs to as well.&lt;/p&gt;
&lt;p&gt;The strange novelty of this phenomenon was operating in some small part of my subconscious the other day when I was scrolling the internet and come across &lt;a href=&quot;https://bsky.app/profile/chriscoyier.net/post/3ms2kti2s6s2x&quot; &gt;this post from Chris Coyier&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;you ever get to your mid fourties and have your eyesight drop off a friggin cliff&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And I’m all like:&lt;/p&gt;
&lt;p class=&quot;image-container&quot;&gt;&lt;img src=&quot;https://cdn.jim-nielsen.com/blog/2026/get-me.jpg&quot; width=&quot;500&quot; height=&quot;511&quot; alt=&quot;Leonardo DiCaprio Pointing Meme where he’s sitting on the couch pointing past the camera as if he is identifying and connecting with something. Caption says “Yes! It me!”&quot; data-og-image /&gt;

&lt;/p&gt;&lt;p&gt;And then even more people weighed in on Chris’ thread, like “Hey me too!”&lt;/p&gt;
&lt;p&gt;This is why I love the web. I continually get that feeling of, “Oh hey, it’s not just me!” On both a personal and a professional level.&lt;/p&gt;
&lt;p&gt;And for that I’m grateful.&lt;/p&gt;
&lt;p&gt;I love being able to connect with people in a way that makes me not feel so alone (or weird) in my experience of life.&lt;/p&gt;
&lt;p&gt;In a polarized digital world, it’s good to remember that the web can still draw you to folks rather than push them away.&lt;/p&gt;
&lt;p&gt;We’ve got a lot in common.&lt;/p&gt;

    &lt;hr /&gt;
    

    &lt;p&gt;
      Reply via:
      

      &lt;a
        href=&quot;mailto:jimniels%2Bblog@gmail.com?subject=Re:%20blog.jim-nielsen.com/2026/its-not-just-me/&quot;
        &gt;Email&lt;/a
      &gt;
      · &lt;a href=&quot;https://mastodon.social/@jimniels&quot;&gt;Mastodon&lt;/a&gt; ·

      &lt;a href=&quot;https://bsky.app/profile/jim-nielsen.com&quot;&gt;Bluesky&lt;/a&gt;
    &lt;/p&gt;

    
  </description>
        </item>
      
    </channel>
  </rss>
  