{"@attributes":{"version":"2.0"},"channel":{"title":"inessential.com","link":"https:\/\/inessential.com\/","description":"Brent Simmons's weblog.","language":"en","item":[{"title":"I Tried to Explain What I Do","link":"https:\/\/inessential.com\/2026\/03\/03\/i-tried-to-explain-what-i-do.html","guid":"https:\/\/inessential.com\/2026\/03\/03\/i-tried-to-explain-what-i-do.html","pubDate":"Tue, 03 Mar 2026 09:15:08 -0800","description":"<p>I\u2019ve known for decades that most of family and friends (except for family and friends in tech) have no idea what I do \u2014 they just think it\u2019s math-heavy and mysterious.<\/p>\n\n<p>Well. It\u2019s definitely not math-heavy and it shouldn\u2019t be mysterious. So I figured I\u2019d write up <a href=\"https:\/\/inessential.com\/what-i-do.html\">What I Do<\/a>.<\/p>\n\n<p>Even if I never actually send this page around to everybody \u2014\u00a0because that would actually be kind of weird, like giving them homework to understand <em>me<\/em>, me who suddenly (suddenly?) seems like a complete narcissist \u2014 it was a good exercise for me to do anyway. Especially the part about explaining why I write NetNewsWire.<\/p>"},{"title":"Seattle Xcoders Talks This Week Considered Unmissable","link":"https:\/\/inessential.com\/2026\/03\/02\/seattle-xcoders-talks.html","guid":"https:\/\/inessential.com\/2026\/03\/02\/seattle-xcoders-talks.html","pubDate":"Mon, 02 Mar 2026 11:09:01 -0800","description":"<p>The title is a little over the top, but barely \u2014\u00a0we have two fantastic talks this Thursday (March 5) that you should go to. (I\u2019ll be there!)<\/p>\n\n<p><a href=\"https:\/\/xcoders.org\/2026\/02\/27\/xcoders-talk-by-laura-savino.html\">Laura Savino will present<\/a> \u201cLearn Out Loud\u201d:<\/p>\n\n<blockquote>\n<p>As devs today, we\u2019re supposed to demonstrate immediate skills in tools whose configs change once a fortnight, while shipping cutting-edge features in long-standing apps (that may still have a legacy bug or two). Laura is a trained teacher and Photoshop engineer who brings humor and solidarity to today\u2019s dev environment with concrete advice on the mechanics of real learning and change, including encouraging without proselytizing, being vulnerable about what you don\u2019t know, and staying curious amidst existential dread.<\/p>\n<\/blockquote>\n\n<p>If you\u2019ve seen Laura talk before, then you know how good she is, and you know how you come away with insights and ways to be a better engineer and better human-who-works-with-people. Every single time.<\/p>\n\n<p>This is one of those very rare chances to see Laura in a small setting before she does this talk at a conference keynote. Like seeing the Beatles in a small bar in Liverpool, only it\u2019s Laura in Seattle. \ud83c\udfb8<\/p>\n\n<p><a href=\"https:\/\/xcoders.org\/2026\/03\/02\/xcoders-talk-by-jake-savin.html\">Jake Savin will present<\/a> a talk on using Claude to do a really big ambitious job \u2014\u00a0rebuilding UserLand Frontier as a modern app:<\/p>\n\n<blockquote>\n<p>It\u2019s a huge job and Jake\u2019s made a ton of progress \u2014 and he\u2019s learned a lot about how to use Claude to make these kinds of projects work. As we learn to use LLMs to do more and more ambitious things, we\u2019ll be walking in Jake\u2019s footsteps. Jake will provide a map of this new territory.<\/p>\n<\/blockquote>\n\n<p>I\u2019m not the only one to have a try \u2014\u00a0more than one try, actually, as recently as last year \u2014 at rebuilding Frontier. It took Jake and Claude together to make this work (and it\u2019s not done yet, but <em>far<\/em> advanced from any previous try).<\/p>\n\n<p>I\u2019m so ready to have Frontier back in my toolbox \u2014\u00a0and ready to learn from Jake on how he\u2019s making this happen.<\/p>\n\n<p>What\u2019s Frontier?<\/p>\n\n<blockquote>\n<p>UserLand Frontier is <a href=\"http:\/\/scripting.com\/\">Dave Winer<\/a>\u2019s app from the \u201990s, and it was with that app that Dave invented and\/or fleshed-out and popularized much of the open web that we take for granted today: blogs, RSS, podcasts, and web services, for starters. This is a historically important piece of software, and Jake is bringing it to the modern age.<\/p>\n<\/blockquote>\n\n<p>Anyway \u2014\u00a0here\u2019s the scoop on where and when to be:<\/p>\n\n<p><strong>Where<\/strong><br>\nNorth Seattle College <br>\n9600 College Way N<\/p>\n\n<p>Room LB 1106 in the library<\/p>\n\n<p><strong>When<\/strong><br>\nThursday, March 5, 2026<br>\n6:30 pm \u2014 gather and mingle<br> \n7:00 pm \u2014 watch Jake\u2019s and Laura\u2019s talks<\/p>\n\n<p>For anyone who wants to hang out after \u2014 we go to the nearby <a href=\"https:\/\/www.watershedpub.com\/\">Watershed Pub and Kitchen<\/a> (all ages friendly).<\/p>"},{"title":"Why Objective-C","link":"https:\/\/inessential.com\/2026\/02\/27\/why-objective-c.html","guid":"https:\/\/inessential.com\/2026\/02\/27\/why-objective-c.html","pubDate":"Fri, 27 Feb 2026 17:21:48 -0800","description":"<p><a href=\"https:\/\/inessential.com\/2026\/02\/18\/why-not-objective-c.html\">In my previous post<\/a> I talk about how I got rid of hundreds of thousands of lines of Objective-C code while at Audible and I explain <em>why<\/em> keeping Objective-C code around is a terrible idea. And I explain that\u2026<\/p>\n\n<blockquote>\n<p>I\u2019m not stuck in the old ways; I\u2019m not the guy insisting on the supremacy of Objective-C despite the obvious evidence against. I\u2019m the guy who got rid of Objective-C \u2014 with glee and (oops, sorry Audible marketing team for the screwup) wild abandon!<\/p>\n<\/blockquote>\n\n<p>Then of course I wrote some Objective-C code recently and really, really loved it.<\/p>\n\n<h3>Command line app<\/h3>\n\n<p>I wanted to replace my homegrown static website\/blog generator because I no longer wanted to use the language it was written in, for reasons.<\/p>\n\n<p>I took it as an opportunity to learn Python \u2014 but it turned out that my heart wasn\u2019t in it (not Python\u2019s fault; great language) and I ended up screwing it up. (See <a href=\"https:\/\/inessential.com\/2026\/02\/01\/blog-fuckup.html\">Blog Fuckup<\/a>).<\/p>\n\n<p>I thought about some alternatives: Swift, which I know well; Rust and Go, which would have the advantage of helping me branch out from the Apple ecosystem; and good old C, my happy-go-lucky friend who still sprints faster than every brash new language.<\/p>\n\n<p>Of those I was leaning toward C because speed is an issue. I wanted to make rendering this blog, over 25 years old and with thousands of posts, to happen in under one second. The system I was replacing took a few seconds. But I wanted more speed (personality flaw).<\/p>\n\n<p>And then I thought, I swear just for a split second, about how great it would be if C had something a little nicer than C structs for modeling my app\u2019s data \u2014\u00a0and oh well too bad there\u2019s nothing like that.<\/p>\n\n<p>And then I remembered Objective-C, which is C plus some things a little nicer than C structs. \ud83c\udfa9\ud83e\udd96<\/p>\n\n<h3>Objective-C looks insane<\/h3>\n\n<p>Anyone new to Objective-C thinks it\u2019s difficult and maybe a bit harsh because <code>[[those squareBrackets] lookInsane:YES]<\/code>.<\/p>\n\n<p>Once you get past that, which takes a day or two given a good-faith effort, you\u2019ll realize how small a language it is, how easy to hold in your palm and turn around and understand all sides of it. And you\u2019ll appreciate how easy it is to make good decisions when you don\u2019t have a surplus of language features to choose from.<\/p>\n\n<p>And you\u2019d be reassured to know that Objective-C is probably never going to change, which means tech debt will accumulate much more slowly than with newer languages. (Unless, of course, you count Objective-C itself as tech debt. You don\u2019t have to, though.)<\/p>\n\n<p>It\u2019s a clich\u00e9 to call Objective-C a more elegant weapon for a more civilized age. It\u2019s better thought of, these days, as a loaded footgun.<\/p>\n\n<p>But I did absolutely love writing this code! So much fun. And now I\u2019ve got another little thing brewing, also in Objective-C, coming soon-ish.<\/p>\n\n<p>PS <a href=\"https:\/\/codeberg.org\/brentsimmons\/SalmonBay\">The website\/blog generator app is called SalmonBay<\/a>. I really don\u2019t expect anyone else in the world to use it, and I expect no contributions, but it is available as open source. (I put it on Codeberg, for reasons.)<\/p>\n\n<p>PPS SalmonBay does a clean build of this blog in under a second. \ud83c\udfb8<\/p>"},{"title":"Why Not Objective-C","link":"https:\/\/inessential.com\/2026\/02\/18\/why-not-objective-c.html","guid":"https:\/\/inessential.com\/2026\/02\/18\/why-not-objective-c.html","pubDate":"Wed, 18 Feb 2026 15:00:00 -0800","description":"<p>At my last job, at Audible (hi Audible folks, if you\u2019re reading this!), I led the effort to port our remaining Objective-C to Swift. When I started that project, Objective-C was about 25% of the code; when I retired it was in the low single digits (and has gone even lower since, I\u2019ve heard).<\/p>\n\n<p>Why do this? It was working code! Don\u2019t we all know not to rewrite working code?<\/p>\n\n<h3>Why get rid of Objective-C<\/h3>\n\n<p>Well, we knew a few things: one was that our Objective-C code was where a lot of our crashing bugs and <em>future<\/em> crashing bugs (and bugs of all kinds) lived.<\/p>\n\n<p>So it was working code, yes, but we knew there were crashes hidden in there, and that some of those crashes were ambush hunters, playing the long game, waiting for years before pouncing. Best just to rewrite it all in Swift, the safer language.<\/p>\n\n<p>A second thing we knew was that having to interoperate between Swift and Objective-C is a huge pain. It often means dumbing-down the Swift code and not using modern features, which limited our options for good Swift code.<\/p>\n\n<p>And a third thing we knew was that very few of our engineers had a background writing Objective-C. Maintaining that code \u2014\u00a0fixing bugs, adding features \u2014\u00a0was more expensive than it was for Swift code. (Duh, right? When you have many engineers working on a project, it\u2019s best if the language you use is one everybody knows well.)<\/p>\n\n<h3>Not that this went perfectly<\/h3>\n\n<p>This is still risky, by the way. Rewriting code is always risky.<\/p>\n\n<p>At one point I was responsible for a bug where we sent an integer to some API and it should have been a boolean \u2014\u00a0because the original code was using NSNumber and it wasn\u2019t obvious which it should be. This caused a partial outage of push notifications, which I estimated (very roughly) to have cost the company a few hundred thousand dollars.<\/p>\n\n<p>(Really? A little bug like this? NS-fucking-Number cost all this money? Yes. Audible scale may not be Facebook scale, but it\u2019s far beyond the scale of indie apps. Before Audible I always worked for smaller companies with smaller audiences \u2014 working on something with many millions of users was enlightening and terrifying.)<\/p>\n\n<p>But here\u2019s the thing: this proved my point. Someone trying to maintain that code as Objective-C might have easily made the same mistake and caused the same outage. The Swift code we replaced it with is type-safe: it\u2019s unmistakably and clearly a boolean and not an integer (once we fixed it; other way around at first). Replacing Objective-C code with Swift is clearly a win.<\/p>\n\n<h3>Goodbye to all those square brackets<\/h3>\n\n<p>I didn\u2019t count how many hundreds of thousands of lines of Objective-C my project was responsible for rewriting (and sometimes just deleting). It was a lot. Multiple entire apps could fit in those lines-of-code counts.<\/p>\n\n<p>And if you look at <a href=\"https:\/\/github.com\/Ranchero-Software\/NetNewsWire\">NetNewsWire\u2019s code<\/a>, you see that it\u2019s almost entirely Swift, with just a little Objective-C for the various parsers and FMDB. It\u2019s not just a Swift app but a modern Swift app that uses async await and structured concurrency. (Mostly modern \u2014\u00a0there\u2019s still some code to update to async await. Work continues.)<\/p>\n\n<p>I say all of the above to show that I\u2019m not stuck in the old ways; I\u2019m not the guy insisting on the supremacy of Objective-C despite the obvious evidence against. I\u2019m the guy who got rid of Objective-C \u2014 with glee and (oops, sorry Audible marketing team for the screwup) wild abandon!<\/p>\n\n<p>I want you to know all the above in advance because in my next post I\u2019m going to talk about how I wrote some new code in Objective-C and loved it.<\/p>"},{"title":"Blog Fuckup","link":"https:\/\/inessential.com\/2026\/02\/01\/blog-fuckup.html","guid":"https:\/\/inessential.com\/2026\/02\/01\/blog-fuckup.html","pubDate":"Sun, 01 Feb 2026 17:00:00 -0800","description":"<p>I\u2019ve been working on my blog software (a static site generator) and I managed to screw things up enough that random old posts got published on the site and in the RSS feed.<\/p>\n\n<p>As soon as I saw the issue I fixed it, but I\u2019ve been getting email from folks about some of the posts, so I know they got picked up by some RSS readers.<\/p>\n\n<p>Those posts are ancient! Sorry for the confusion.<\/p>"},{"title":"Email from Family in Minnesota","link":"https:\/\/inessential.com\/2026\/01\/21\/email-from-minnesota-family.html","guid":"https:\/\/inessential.com\/2026\/01\/21\/email-from-minnesota-family.html","pubDate":"Wed, 21 Jan 2026 13:24:00 -0800","description":"<p>Our family in Minnesota knows we worry about them, and so yesterday they sent a family-wide email.<\/p>\n\n<p>This is surely one of many thousands like it. Maybe you\u2019ve written one of these. Maybe you will write one of these.<\/p>\n\n<p>Below is the email from Jen (with permission and with original formatting):<\/p>\n\n<h3>Update from MN<\/h3>\n\n<p>Hello family and friends outside of Minnesota,<\/p>\n\n<p>Many of you have reached out to see how we are doing and Pete and I both thank you for that. We appreciate it. As middle-class White people, Pete and I are largely ok. Technically, speaking. And I cannot believe that is a sentence I just typed in the year 2026. But here we are. Our neighborhood is relatively quiet. For now. We are doing what we can to support those that we can. We are speaking out and calling our representatives. So far 20,000 people in this state have taken conscientious bystander training. As actors, Pete and I have created\/rehearsed monologues or responses if we find ourselves witnessing the illegal doings of these \"agents\". The people here are subdued, but not hopeless. Defiant, but not violent. We are doing our best to protest peacefully as this is what our constitution allows.<\/p>\n\n<p>Why do I write to you of these things?<\/p>\n\n<p>For a few reasons: \n1. Depending on what media you are seeing you may be getting no coverage on this or varying degrees of truth to outright propaganda. I thought it best you hear it from someone who is actually living in MN right now. \n2. No matter where you fall on the political spectrum I believe we can all agree that we have rights in this country: free speech, the right to peacefully protest, the right to due process to name a few. \n3. Any support we can get, even if it is simply trying to combat disinformation with truth, from within our country or around the world is helpful and important. \n4. If you wish to do other things, this is a good website which compiles many places\/groups that are trying to help combat this situation. <a href=\"https:\/\/www.standwithminnesota.com\/\">https:\/\/www.standwithminnesota.com\/<\/a>.<\/p>\n\n<p>Now to some things that are happening here:<\/p>\n\n<p>In addition to Jonathon Ross murdering Renee Good, the very same day they went to a high school and attempted to arrest students and staff. One day after this, 6 men with guns kicked in the door of someone's home <strong>without a legal warrant<\/strong> and dragged the husband out in cuffs. He is an American citizen. Today local law enforcement in and around the Twin Cities held a press conference calling out these \"agents\" in breaking the law. They are now targeting and attempting to detain off-duty officers. Every single one of the officers they targeted are people of color. It is straight up racial profiling. They are smashing car windows and tear-gassing people including toddlers. <em>People are carrying their passports and birth certificates around with them<\/em> and often they are not even allowed to show these \"agents\" their paperwork before they are beaten and\/or abducted.<\/p>\n\n<p>I have a dear friend who passed her citizenship test 6 years ago and is now carrying her documentation with her wherever she goes. She did everything \"the right way\" yet she is worried. Frankly, because she doesn't look Hispanic or African she will probably be ok. Again, I can't believe I just typed this sentence. Our nephew's elementary school (in a very affluent, predominantly White suburb) canceled their school's International Night for fear it would draw Immigrant Enforcement to the school. Pete and I are witnessing field trips to the Science Museum cancel left and right because schools are afraid they will target the children.<\/p>\n\n<p>These people  are not targeting the \"worst of the worst\" as they claimed they would do. They are not following the law or allowing due process. Minnesota is under siege. They are now telling observers who are giving witness and recording these crimes that \"they should learn a lesson or they will be next.\" Currently, these \"agents\" outnumber our local law enforcement 4 to 1. Donald Trump and Noem have particularly targeted Minnesota even though our state falls far behind other states in the amount of undocumented workers. Everyone is on edge. No one is untouched by this chaos.<\/p>\n\n<p>I don't know what is going to happen. I don't know what has happened to empathy and humanity. I do know that I wouldn't be here if it weren't for my ancestors who immigrated here from Sweden, England, Ireland, and the Netherlands. But they did. So for their legacy and for the little kids who deserve to live without fear I will continue to show up and help where I can.<\/p>\n\n<p>Thanks for taking the time to read this and feel free to share this with those who may be curious to what is actually happening in Minnesota.<\/p>\n\n<p>Love to all of you. Take care of each other.<br>\nJen and Pete<\/p>"},{"title":"NetNewsWire 6.2: RSS Plus Markdown","link":"https:\/\/inessential.com\/2025\/11\/05\/rss-plus-markdown.html","guid":"https:\/\/inessential.com\/2025\/11\/05\/rss-plus-markdown.html","pubDate":"Wed, 05 Nov 2025 13:24:30 -0800","description":"<p>On the NetNewsWire blog I\u2019ve just announced NetNewsWire 6.2 for Mac and iOS.<\/p>\n\n<p>This release is almost entirely bug fixes \u2014\u00a0but it does add a couple small features and one potentially interesting one: it now supports Markdown in RSS (via the <code>source:markdown<\/code> element). <a href=\"https:\/\/netnewswire.blog\/2025\/11\/05\/netnewswire-for-mac-and-ios.html\">Read all about it<\/a> on the NetNewsWire blog.<\/p>\n\n<p>(And now we\u2019re working on NetNewsWire 7, which <a href=\"https:\/\/netnewswire.blog\/2025\/10\/07\/the-liquid-glass-plan.html\">will adopt the new Liquid Glass UI<\/a>.)<\/p>"}]}}