sledsworth.comA site about Steve Ledsworth...or at least about his hobbies...or maybe it's about computers?https://sledsworth.comForm Input Groupshttps://sledsworth.com/posts/2026/form-input-groupshttps://sledsworth.com/posts/2026/form-input-groups<p>Should be simpler to implement.</p>
Mon, 16 Mar 2026 18:00:00 GMT<p>Let’s say your UX team is hellbent on maintaining a clear line of sight down a form, while also keeping labels right aligned in the left margin, before the input fields:</p>
<p><img alt="Form mockup" loading="lazy" width="1144" height="688" src="https://sledsworth.com/_astro/form.DDoyjkdx_ZWYut6.webp" /></p>
<p>You have, of course, heard about semantic HTML, so you instantly reach for your trusty <code>fieldset</code> and <code>legend</code> elements to structure your form:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span><</span><span>fieldset</span><span>></span></div></div><div><div><span> </span><span><</span><span>legend</span><span>></span><span>Label</span><span></</span><span>legend</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-1"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-1"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 1</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-2"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-2"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 2</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-3"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-3"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 3</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span></</span><span>fieldset</span><span>></span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>Great! Semantically beautiful and super-duper accessible!</p>
<p>…but ugly as sin:</p>
Label
Field 1
Field 2
Field 3
<p>That’s fine though, we can just override the default styles with a touch of CSS and add a lil’ <code>flex</code> to change the flow…good to go:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span><</span><span>fieldset</span><span> </span><span>class</span><span>=</span><span>"ex-2"</span><span>></span></div></div><div><div><span> </span><span><</span><span>legend</span><span>></span><span>Label</span><span></</span><span>legend</span><span>></span></div></div><div><div><span> </span><span><</span><span>div</span><span> </span><span>class</span><span>=</span><span>"checkbox-options"</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-1"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-1"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 1</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-2"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-2"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 2</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"field-3"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"field"</span><span> </span><span>id</span><span>=</span><span>"field-3"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 3</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span></</span><span>div</span><span>></span></div></div><div><div><span></</span><span>fieldset</span><span>></span></div></div><div><div><span><</span><span>style</span><span>></span></div></div><div><div><span> </span><span>fieldset</span><span>.</span><span>ex-2</span><span> </span><span>{</span></div></div><div><div><span> </span><span>display</span><span>:</span><span> </span><span>flex</span><span>;</span></div></div><div><div><span> </span><span>gap</span><span>:</span><span> </span><span>1</span><span>rem</span><span>;</span></div></div><div><div><span> </span><span>}</span></div></div><div><div><span> </span><span>.</span><span>checkbox-options</span><span> </span><span>{</span></div></div><div><div><span> </span><span>display</span><span>:</span><span> </span><span>flex</span><span>;</span></div></div><div><div><span> </span><span>flex-direction</span><span>:</span><span> </span><span>column</span><span>;</span></div></div><div><div><span> </span><span>gap</span><span>:</span><span> </span><span>.5</span><span>rem</span><span>;</span></div></div><div><div><span> </span><span>}</span></div></div><div><div><span></</span><span>style</span><span>></span></div></div></code></pre><div><div></div><div></div></div></figure></div>
Label
<div>
Field 1
Field 2
Field 3
</div>
<p>Well, that’s strange. Why isn’t the <code>legend</code> appearing to the left of the checkboxes?</p>
<p>Let’s try using a <code><div></code> instead of a <code><fieldset></code> to check our work:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span><</span><span>div</span><span> </span><span>class</span><span>=</span><span>"ex-3"</span><span>></span></div></div><div><div><span> </span><span><</span><span>legend</span><span>></span><span>Label</span><span></</span><span>legend</span><span>></span></div></div><div><div><span> </span><span><</span><span>div</span><span> </span><span>class</span><span>=</span><span>"checkbox-options"</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"ex-3-field-1"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"ex-3-field"</span><span> </span><span>id</span><span>=</span><span>"ex-3-field-1"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 1</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"ex-3-field-2"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"ex-3-field"</span><span> </span><span>id</span><span>=</span><span>"ex-3-field-2"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 2</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span><</span><span>label</span><span> </span><span>for</span><span>=</span><span>"ex-3-field-3"</span><span>></span></div></div><div><div><span> </span><span><</span><span>input</span><span> </span><span>type</span><span>=</span><span>"checkbox"</span><span> </span><span>name</span><span>=</span><span>"ex-3-field"</span><span> </span><span>id</span><span>=</span><span>"ex-3-field-3"</span><span>></span></div></div><div><div><span><span> </span></span><span>Field 3</span></div></div><div><div><span> </span><span></</span><span>label</span><span>></span></div></div><div><div><span> </span><span></</span><span>div</span><span>></span></div></div><div><div><span></</span><span>div</span><span>></span></div></div><div><div><span><</span><span>style</span><span>></span></div></div><div><div><span> </span><span>.</span><span>ex-3</span><span> </span><span>{</span></div></div><div><div><span> </span><span>all</span><span>:</span><span> </span><span>unset</span><span>;</span></div></div><div><div><span> </span><span>display</span><span>:</span><span> </span><span>flex</span><span>;</span></div></div><div><div><span> </span><span>gap</span><span>:</span><span> </span><span>1</span><span>rem</span><span>;</span></div></div><div><div><span> </span><span>}</span></div></div><div><div><span> </span><span>.</span><span>checkbox-options</span><span> </span><span>{</span></div></div><div><div><span> </span><span>display</span><span>:</span><span> </span><span>flex</span><span>;</span></div></div><div><div><span> </span><span>flex-direction</span><span>:</span><span> </span><span>column</span><span>;</span></div></div><div><div><span> </span><span>gap</span><span>:</span><span> </span><span>.25</span><span>rem</span><span>;</span></div></div><div><div><span> </span><span>}</span></div></div><div><div><span></</span><span>style</span><span>></span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<div>
Label
<div>
Field 1
Field 2
Field 3
</div>
</div>
<p>The style looks correct now, but we’ve lost our semantics and with it our accessibility. 🤔</p>
<p>So what is going on here? <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/fieldset#styling_with_css">According to MDN</a>, an anonymous box holding the contents of a <code>fieldset</code> is styled, but not the <code>legend</code> itself:</p>
<blockquote>
<p>If a <code><legend></code> is present, it is placed over the block-start border. The <code><legend></code> shrink-wraps, and also establishes a formatting context. The display value is blockified. (For example, display: inline behaves as block.)</p>
<p>There will be an anonymous box holding the contents of the <code><fieldset></code>, which inherits certain properties from the <code><fieldset></code>. If the <code><fieldset></code> is styled with display: grid or display: inline-grid, then the anonymous box will be a grid formatting context. If the <code><fieldset></code> is styled with display: flex or display: inline-flex, then the anonymous box will be a flex formatting context. Otherwise, it establishes a block formatting context.</p>
</blockquote>
<p>Weird… and also a big bummer.</p>
<p>So to match the style desired, we need to implement all the various accessibility features <code>fieldset</code> and <code>legend</code> provide for free. I’ve been working with forms on the web for many years and whenever I get a chance to dig back in I’m surprised at how little progress has been made on this front—the web is progressing in all sorts of ways, but forms don’t feel like one of them. If <a href="https://wpt.fyi/interop-2026">Interop 2026 </a>is any indication of priority, forms clearly aren’t it—yes, I’m aware of things like <a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Customizable_select">customizable select</a> and what not, but I feel like progress is fleeting and stalls before making it to baseline availability.</p>
<p>Guess it’s time to roll my own form input group element!</p>webdevSteve Ledsworth ([email protected])Chip Warhttps://sledsworth.com/posts/2026/chip-warhttps://sledsworth.com/posts/2026/chip-war<p>Who would have thought the brief history of silicon could be so packed with intrigue?</p>
Fri, 13 Mar 2026 18:00:00 GMT<p>If you have even a passing interest in computers or the silicon that powers our world, I cannot recommend <a href="https://bookshop.org/p/books/chip-war-the-fight-for-the-world-s-most-critical-technology-chris-miller/fcd9dd8f9f462852?ean=9781982172015&next=t">Chip War by Chris Miller</a> highly enough. Miller transforms a technical history into a gripping narrative filled with international espionage, sabotage, and intrigue.</p>
<p>The book highlights staggering feats of engineering—most notably the role of <a href="https://www.asml.com/">ASML</a>. Based in the Netherlands, ASML is the sole company on Earth capable of manufacturing Extreme Ultraviolet (EUV) lithography machines. These machines are marvels of modern science: each consists of roughly 450,000 components, costs upwards of $400 million, and each machine comes with on-site ASML personnel for the duration of its operation.</p>
<p>I knew about <a href="https://www.tsmc.com/english">TSMC</a> from following Apple and NVIDIA closely, but I don’t think I internalized how much of a lead they have over competition. They are currently the only firm capable of fully utilizing these EUV machines to mass-produce the advanced chips found in everything from iPhones to NVIDIA GPUs. Feels a bit dicy that the world relies on TSMC for advanced chips and they in turn rely on ASML for the machinery to produce them. 😬</p>
<p>Somewhat surprisingly, I finished this book feeling less anxious about China’s technological ascent. While they are certainly leading the charge in cheap renewable energy, the West maintains a (loosening) chokehold on the semiconductor industry. This bottleneck makes it highly unlikely that China will develop a self-sufficient, cutting-edge chip industry in the near term. Furthermore, Miller provides a compelling look at how the United States’ leadership in semiconductors serves as a deterrent against military aggression toward us or our allies.</p>
<p>If you don’t have the time to read the full book, I highly recommend spending an hour watching <a href="https://youtu.be/MiUHjLxm3V0">how ASML lithography machines work</a>. Seeing the process of hitting molten tin droplets with lasers 50,000 times a second to create plasma is absolutely mind-blowing!</p>Steve Ledsworth ([email protected])Share on Mastodonhttps://sledsworth.com/posts/2026/share-on-mastodonhttps://sledsworth.com/posts/2026/share-on-mastodon<p>I have nits, but it’s nice to have an officially supported way to handle sharing to Mastodon.</p>
Wed, 04 Mar 2026 01:43:28 GMT<p>Sharing to Mastodon isn’t as straightforward as most social sites due to its decentralized nature—the server a user is on needs to be known before sharing can happen.</p>
<p>The Mastodon developers have solved this by <a href="https://share.joinmastodon.org/">creating a single “landing” page</a> that allows adding server domain(s) to then share to your specific server. The domains are tracked in <code>localStorage</code>, so if you are using the same device and browser when you come across another “Share to Mastodon” button, it will populate your domains for you.</p>
<p>I’d venture to guess that most users only use a single account on a single server. I don’t have any data on this—just a hunch, so take that for what it is—but it feels a bit cumbersome to have users always go to the landing page when they only ever post to one place. I recognize it’s a tough problem, though—for instance, you could redirect to a server from the landing page if only one is present, but you’d then have to somehow be able to adjust your domains if you ever needed to.</p>
<p>At any rate, I welcome the “Share to Mastodon” button and have added it to my site until I get the chance to capture the server domain myself and skip the landing page altogether.</p>webdevSteve Ledsworth ([email protected])Oh how broken, window.open()https://sledsworth.com/posts/2026/windowopenhttps://sledsworth.com/posts/2026/windowopen<p>I know it’s 2026 and I shouldn’t be using <code>window.open</code>, but sometimes the path one travels leads you to display a good old-fashioned pop-up window.</p>
Wed, 11 Feb 2026 15:48:22 GMT<p>Here is a button.</p>
<p>Open Pop-up Window</p>
<p>It’s a button to open a pop-up window using <code>window.open</code>:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>document</span><span>.</span><span>getElementById</span><span>(</span><span>'openPopup'</span><span>)</span></div></div><div><div><span> </span><span>.</span><span>addEventListener</span><span>(</span><span>'click'</span><span>,</span><span> </span><span>()</span><span> </span><span>=></span><span> </span><span>{</span></div></div><div><div><span> </span><span>const</span><span> </span><span>saved</span><span> </span><span>=</span><span> </span><span>localStorage</span><span>.</span><span>getItem</span><span>(</span><span>'popupWindow'</span><span>)</span><span>;</span></div></div><div><div><span> </span><span>const</span><span> </span><span>{</span></div></div><div><div><span> </span><span>left</span><span> </span><span>=</span><span> </span><span>screen</span><span>.</span><span>availWidth</span><span>,</span></div></div><div><div><span> </span><span>top</span><span> </span><span>=</span><span> </span><span>0</span><span>,</span></div></div><div><div><span> </span><span>width</span><span> </span><span>=</span><span> </span><span>300</span><span>,</span></div></div><div><div><span> </span><span>height</span><span> </span><span>=</span><span> </span><span>500</span><span>,</span></div></div><div><div><span> </span><span>}</span><span> </span><span>=</span><span> </span><span>JSON</span><span>.</span><span>parse</span><span>(</span><span>saved</span><span> </span><span>??</span><span> </span><span>'{}'</span><span>)</span><span>;</span></div></div><div><div><span> </span><span>const</span><span> </span><span>features</span><span> </span><span>=</span><span> </span><span>`</span></div></div><div><div><span><span> </span></span><span>left=</span><span>${</span><span>left</span><span>}</span><span>,</span></div></div><div><div><span><span> </span></span><span>top=</span><span>${</span><span>top</span><span>}</span><span>,</span></div></div><div><div><span><span> </span></span><span>width=</span><span>${</span><span>width</span><span>}</span><span>,</span></div></div><div><div><span><span> </span></span><span>height=</span><span>${</span><span>height</span><span>}</span><span>,</span></div></div><div><div><span><span> </span></span><span>scrollbars=yes,</span></div></div><div><div><span><span> </span></span><span>resizable=yes`</span><span>;</span></div></div><div><div>
</div></div><div><div><span> </span><span>window</span><span>.</span><span>open</span><span>(</span></div></div><div><div><span> </span><span>`./popup?</span><span>${</span><span>features</span><span>.</span><span>replaceAll</span><span>(</span><span>','</span><span>,</span><span> </span><span>'&'</span><span>)</span><span>}</span><span>`</span><span>,</span></div></div><div><div><span> </span><span>'popupWindow'</span><span>,</span></div></div><div><div><span> </span><span>features</span></div></div><div><div><span><span> </span></span><span>)</span><span>;</span></div></div><div><div><span> </span><span>}</span><span>)</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>I know, in ye olde days, <code>window.open</code> was abused all over the place—and the only solution was to severely limit it. But now we have all sorts of safeguards like same-origin requirements, pop-up blockers, user-invocation restrictions, and what not—maybe, at the very least, it should work per spec now?</p>
<p>For instance, let’s say I use <code>window.open</code> to open a little chat support window. A nice feature to provide my users would be to remember the last position and size of the window so that it can be restored when the user opens the chat support window again.</p>
<p>In Chrome, if you pass a <code>width</code> and <code>height</code>, it will set the window to something <em>really close</em> to the specified dimensions—close enough to not be noticed initially, but enough to drive you to insanity over the course of a few days. On macOS Tahoe, it looks like 1px is removed from height each open. On Windows it adds 10px to width and 35px to height?!?! Madness!</p>
<p>In Safari, don’t even bother suggesting dimensions and locations. It’s going to open it wherever and however it wants—including just ignoring you altogether.</p>
<p>Firefox and Edge seem to be good citizens, at least in this regard.</p>
<p>All this to say—I probably should open some bugs against Chrome and Safari. Unfortunately, I’m pretty sure <a href="https://drafts.csswg.org/cssom-view/#the-features-argument-to-the-open()-method">the spec has <code>height</code> and <code>width</code> features as optional</a> to implement, so I can’t even <em>per spec</em> them—well at least Safari. I probably have a case against Chrome—nowhere does it say to add or subtract an arbitrary number of pixels from the viewport. 😅</p>
<p>Why am I going <code>window.open()</code> route and not doing literally anything else? Because of competing interests, inflexible vendor software, and a userbase that is already familiar with a chat solution that opens in a pop-up.</p>
<hr />
<h2><strong>Update</strong>: <code>DocumentPictureInPicture</code> Discovered!</h2>
<p>During my search to find a replacement for <code>window.open()</code>, I discovered <a href="https://developer.mozilla.org/en-US/docs/Web/API/DocumentPictureInPicture">the DocumentPictureInPicture API</a>. While I’ve known about the API that allows you to create a picture-in-picture window for a video content, I hadn’t seen the API to allow for arbitrary content to be chucked into a picture-in-picture window.</p>
<p>One of the main issues we were trying to solve is to avoid navigation or closing of the window resulting in the chat being closed—the window created by <code>DocumentPictureInPicture</code> will close if the user leaves the page.</p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Picture-in-Picture_API#how_does_it_work">Mozilla Developer Network:</a></p>
<blockquote>
<p>The Picture-in-Picture window is similar to a blank same-origin window opened via Window.open(), with some differences:</p>
<ul>
<li>The Picture-in-Picture window floats on top of other windows.</li>
<li><strong>The Picture-in-Picture window never outlives the opening window.</strong></li>
<li>The Picture-in-Picture window cannot be navigated.</li>
<li>The Picture-in-Picture window position cannot be set by the website.</li>
<li>The Picture-in-Picture window is limited to one per browser tab at a time, with the user agent potentially further restricting the global number of Picture-in-Picture windows open.</li>
</ul>
</blockquote>
<p>Here is a quick implementation of what something like that might look like:</p>
<aside>
<div>
<span></span>
<span>Chat Support</span>
</div>
<div>
<div>
<span>Support agent:</span>
<p>Hi! How can I help you today?</p>
</div>
<div>
<span>You:</span>
<p>My pop-up window keeps opening at the wrong size.</p>
</div>
<div>
<span>Support agent:</span>
<p>Ah, have you tried a different browser? Chrome likes to subtract a pixel or two.</p>
</div>
<div>
<span>You:</span>
<p>I've tried everything. Safari just ignores me entirely.</p>
</div>
</div>
Type a message
</aside>
<p>Your browser doesn't support the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Picture-in-Picture_API">Document Picture-in-Picture API</a>.</p>
<p>Bonus points for consistently maintaining window size and position across sessions!</p>
<p>While it’s not great for my needs, it’s a pretty interesting API that could be used to progressively enhance user experience—especially for chat windows.</p>
webdevSteve Ledsworth ([email protected])Pokemon Legends: Z-Ahttps://sledsworth.com/posts/2025/pokemon-legends-z-ahttps://sledsworth.com/posts/2025/pokemon-legends-z-a<p>Battling is about all this game gets right.</p>
Thu, 13 Nov 2025 15:32:03 GMT<p>I don’t think I’ve been excited about a Pokémon game since Gold and Silver were released in 2000. They refined the original formula and added Pokemon that were genuinely interesting. Since then, every game has felt like a rehash of the same ideas with new (boring) Pokemon thrown in. The Legends series is the exception—it tries something different, but never feels like it gets the budget or time needed to fully realize its vision.</p>
<p>Unfortunately, <em>Pokémon Legends: Z-A</em> doesn’t break that pattern. The story is totally forgettable and weird. Your “team”—Team MZ—is made up of a bunch of turds that seemingly cannot do anything for themselves and require your assistance at every turn. The second Naveen gave me that dumbass fedora and said I looked great, I knew I was in for it.</p>
<p>The Pokemon renders feel incredibly lazy—I haven’t liked the design of really any Pokemon after the initial 251—but even the renders of classics like Charizard feel boring. Don’t even get me started on how awful the Mega Evolutions are (<a href="https://bulbapedia.bulbagarden.net/wiki/Starmie_(Pok%C3%A9mon)#/media/File:Spr_9z_0121M.png">seriously, what the hell happened to Starmie?!?</a>).</p>
<p>With Lumiose City being the only place available in game, I expected it to be a little more lively. It feels fairly empty and the building textures are flat. There are Pokeballs all over with items in them, but I really didn’t care to venture out of my way to get them. For the second half of the game, I basically fast traveled everywhere. There were occasions where I’d see a fierce looking Pokemon (Alpha) on a distant building and I’d stumble my way over to battle it. Those were challenging battles with the potential reward of an Alpha Pokemon, but they aren’t unique in most cases and I’d already captured the Pokemon before.</p>
<p>What <em>does</em> work is the new real-time battle system. It adds a whole new layer of strategy now that battles aren’t bound to turns. Quick Attack becomes more useful to get in a finishing blow while the opponent is in mid-animation of their next attack. You can watch for cues to use defensive moves like Protect, making them actually useful unlike in the turn-based versions. Some moves even venture into giving you positioning options, but I found those to be clunky and not really possible to use effectively. It’s too bad because the foundation of a fantastic real-time battle system is there—it’s just not fully realized.</p>
<p>The system has its issues—sometimes my Pokemon would get stuck on something and be locked into its current move, not allowing me to do anything. My hope for the next iteration is to allow more control over movement and introduce the option to control two Pokemon at once in a battle. I still feel like there isn’t enough depth to a battle to really make you feel like the match isn’t mostly predetermined or playing itself—more Pokemon to manage at once or movement control would address that.</p>
<p>That said, the battle system changes made the wild zones a lot more interesting. Sometimes you’d have 4–5 Pokemon attacking you all at once and positioning and move selection became more important.</p>
<p>Overall, from the perspective of someone that hasn’t been all that into Pokemon for 25 years, Legends: Z-A is just okay. The battle system is a fun twist on the classic formula, but the rest of the game feels like a chore to get through. If you’re a diehard Pokemon fan, you might find more to enjoy here, but for me, it was just a passable experience. My hope is they build on the battle system and introduce it to a mainline Pokemon game that focuses on a more engaging world full of interesting Pokemon to capture.</p>Steve Ledsworth ([email protected])Alien: Earthhttps://sledsworth.com/posts/2025/alien-earthhttps://sledsworth.com/posts/2025/alien-earth<p>What if in the future LCD screens didn’t exist and Timothy Olyphant was boring?</p>
Tue, 04 Nov 2025 15:32:03 GMT<p>As someone who hasn’t seen a single <a href="https://en.wikipedia.org/wiki/Alien_(film)">Alien</a> property up to this point, I feel qualified to review this series. And my review is this:</p>
<p>It’s super weird.</p>
<p>But weird in a good way. Timothy Olyphant should be boring and stable and not <a href="https://www.imdb.com/title/tt5580540/">yelling at slack in the toaster oven knobs</a> all the time.</p>
<p><a href="https://en.wikipedia.org/wiki/Sydney_Chandler">Sydney Chandler</a> is something!</p>
<p>The Xenomorph is the least interesting of all the aliens in the series. The only other character that gave Sydney a run for her money was the <a href="https://www.polygon.com/alien-earths-eyeball-creature-stealing-the-show/">little eyeball alien</a>—that guy is going places!</p>
<p>Episode 5 was easily the best episode of the series—I’m a sucker for episodes out of time that change the pace and give some additional context (<a href="https://en.wikipedia.org/wiki/Fishes_(The_Bear)"><em>Fishes (The Bear)</em></a>).</p>
<p>Boy Kavalier is such a tech-bro Zuckerberg/Musk type, making him even more boring than synth Olyphant.</p>
<p>Also, did I mention <a href="https://en.wikipedia.org/wiki/Sydney_Chandler">Sydney Chandler</a> is pretty great?</p>Steve Ledsworth ([email protected])Getting Nintendo Switch 2 Digital Games Cheap(er)https://sledsworth.com/posts/2025/nintendo-buckshttps://sledsworth.com/posts/2025/nintendo-bucks<p>Nintendo has gotten a lot of flak over pricing with the Switch 2—I’m privileged enough to be fairly price-insensitive (and what isn’t getting more expensive these days?)—but I can understand being bummed out when cost inhibits one from experiencing incredible games, like <a href="https://www.nintendo.com/us/store/products/donkey-kong-bananza-switch-2/">Donkey Kong Bananza</a>. Also, let’s be real, <a href="https://www.nintendo.com/us/store/products/nintendo-switch-2-welcome-tour-switch-2/">Nintendo Welcome Tour</a> should have been a free game installed on every Switch 2 at launch. At any rate, here’s my strategy for keeping game prices closer to last generation pricing.</p>
Wed, 15 Oct 2025 19:17:39 GMT<p>Nintendo has gotten a lot of flak over pricing with the Switch 2—I’m privileged enough to be fairly price-insensitive (and what isn’t getting more expensive these days?)—but I can understand being bummed out when cost inhibits one from experiencing incredible games, like <a href="https://www.nintendo.com/us/store/products/donkey-kong-bananza-switch-2/">Donkey Kong Bananza</a>. Also, let’s be real, <a href="https://www.nintendo.com/us/store/products/nintendo-switch-2-welcome-tour-switch-2/">Nintendo Welcome Tour</a> should have been a free game installed on every Switch 2 at launch. At any rate, here’s my strategy for keeping game prices closer to last generation pricing.</p>
<p>I’m not sure if other wholesale stores have this option, but Costco sells <a href="https://www.costco.com/p/-/nintendo-eshop-four-25-egift-cards/4000152900">$100 Nintendo Bucks® for $90 US dollars</a>. That saves you 10% on digital purchases out of the gate.</p>
<p>It’s a bummer that the <a href="https://www.nintendo.com/us/store/products/nintendo-switch-game-vouchers/">Nintendo vouchers</a> <a href="https://www.theverge.com/news/703993/nintendo-switch-game-voucher-discontinued">are going away</a>—but they haven’t yet—so you can still buy two and net <a href="https://www.nintendo.com/us/store/products/pokemon-legends-z-a-switch/">Pokémon Legends: Z-A</a> and <a href="https://www.nintendo.com/us/store/products/metroid-prime-4-beyond-switch/">Metroid Prime 4</a> for $100. You’ll need to buy the two upgrade passes once the games are released, but you’ll have saved $20 plus tax compared with buying the games outright.</p>
<p>I basically got <a href="https://www.nintendo.com/us/store/products/hollow-knight-silksong-switch/">Hollow Knight: Silksong</a>, Metroid Prime 4, Pokémon Legends: Z-A, and Donkey Kong Bananza for about $180, which feels more than fair to me.</p>videogamesSteve Ledsworth ([email protected])Pepperhttps://sledsworth.com/posts/2025/pepperhttps://sledsworth.com/posts/2025/pepper<p>RIP, Pepper. We’ll miss you.</p>
<p><em>July 2008 – June 2nd, 2025</em></p>
Wed, 08 Oct 2025 19:11:01 GMT<p>RIP, Pepper. We’ll miss you. <em>July 2008 – June 2nd, 2025</em> ❤️</p>
<p>I started this post four months ago—a few days after the passing of our beloved cat, Pepper. I’ve begun, continued, and restarted this writing at least a dozen times. There’s a certain inadequacy in trying to capture the emotional roller coaster that loss puts you on—and even more so when you’re trying to explain it to a toddler every other day. I’m pretty sure Zoe still thinks Pepper is on an extended vacation… along with the ants she continues to squish.</p>
<p>So instead I’ll just subvert all the emotional stuff with some sweet pictures and silly anecdotes.</p>
<p><img alt="Pepper looking really fluffy sleeping in her bed" loading="lazy" width="4032" height="3024" src="https://sledsworth.com/_astro/sleepy-pep.DraxDYDl_Z1UzAwO.webp" /></p>
<p>My wife adopted Pepper when she was in grad school, after accepting that her attempts to get me to transfer to her college weren’t going to be successful. Pepper was a close confidant to Sam when she needed it most—and absolutely could not have cared less about me. For the first few visits, she was perfectly content hiding under the bed all weekend.</p>
<p>When Sam and I moved in together, Pepper began to tolerate me as the guy who cleaned up her poops off the carpet (it was always the carpet!). Pretty sure we didn’t get the deposit back on that apartment.</p>
<p>After who knows how many years, my nagging persistence finally paid off, and we became… pretty okay comrades. We’d snuggle up on the couch and watch the shows I could never convince Sam to get into (Game of Thrones, mostly). I’d give her pets, and she’d inevitably get her tail all mixed up in my evening snack—usually ice cream.</p>
<p><img alt="Pepper poking her head up on the couch to see what&#x27;s up" loading="lazy" width="5712" height="4284" src="https://sledsworth.com/_astro/hello-pep.DDfaYg_6_gMOF9.webp" /></p>
<p>She was unintentionally hilarious in that way—all these little annoying habits, an extraordinary lack of awareness to the nth degree. It always seemed so innocent, a little cute, and totally helpless. I’m writing this months later, and I still miss our little hairball of joy. I’m glad you finally warmed up to Zoe before the end, even if it might’ve been because you couldn’t see or hear—and were maybe just a bit senile.</p>
<p><img alt="Pepper tolerating Zoe laying next to her" loading="lazy" width="5712" height="4284" src="https://sledsworth.com/_astro/zoe-pepper.J1t_34Ye_Z1p3gde.webp" /></p>
<p>I loved you lots Pep—even if you were a dreadful coworker.</p>
<p><img alt="Pepper sitting on my open laptop" loading="lazy" width="3264" height="2448" src="https://sledsworth.com/_astro/work-1.D_PZyCBx_ZUVB0G.webp" />
<img alt="Pepper sitting on my desktop keyboard at my desk" loading="lazy" width="4032" height="3024" src="https://sledsworth.com/_astro/work-2.B4EHnmTE_ZRoGDH.webp" /></p>
<hr />
<p>As a side note, companies mostly suck—and I know Chewy is owned by PetSmart or whatever—but I’m happy to see that, even years after being bought, they’ve still kept some of what made them special: they actually give a damn about your pets!</p>
<p><img alt="Flowers from Chewy" loading="lazy" width="5712" height="4284" src="https://sledsworth.com/_astro/flowers.DSQ7GRB4_ZBBIOO.webp" /></p>
<p>Thanks, Chewy, for the thoughtful flowers.</p>personalSteve Ledsworth ([email protected])Nova Code Editorhttps://sledsworth.com/posts/2025/nova-app-salehttps://sledsworth.com/posts/2025/nova-app-sale<p><a href="https://nova.app/">Nova</a> is on sale for the next couple weeks, for those interested in a native Mac code editor.</p>
Wed, 01 Oct 2025 18:27:08 GMT<p>I buy pretty much everything <a href="https://panic.com">Panic</a> makes because they’re a company I believe <em>needs</em> to exist. Seriously—who else would publish a game like <em><a href="https://thankgoodness.game">Thank Goodness You’re Here</a></em> or create the <a href="https://play.date">cutest handheld game system</a>?</p>
<p>That said, almost nothing they do seems to make sense from a business standpoint. 😅</p>
<p>In a world with <a href="https://code.visualstudio.com">VS Code</a>, <a href="https://zed.dev">Zed</a>, <a href="https://developer.apple.com/xcode/">Xcode</a>, <a href="https://developer.android.com/studio">Android Studio</a>, and a million other free editors— it’s hard to imagine a paid editor like <a href="https://nova.app/">Nova</a> surviving. It’s not my primary editor, but it’s beautiful, thoughtfully designed, and deserves to exist. I’ll fire it up when I want to be alone with some HTML and CSS for a while—it feels like a special treat. If you haven’t tried it yet, now’s a good time—<a href="https://nova.app/">it’s 40% off</a>. As far as I know, this is the first time it has ever gone on sale.</p>applewebdevtechSteve Ledsworth ([email protected])C-200 Ultrasonic 8" Chef's Knifehttps://sledsworth.com/posts/2025/c-200https://sledsworth.com/posts/2025/c-200<p>There is a premium to be paid for non-stick potatoes.</p>
Sun, 21 Sep 2025 21:35:40 GMT<p>If you’ve read my site for any length of time, you know I’ve been following the <a href="https://seattleultrasonics.com/blogs/company/about-the-qkp">Quantified Knife Project</a> closely and have an unhealthy obsession with kitchen gadgets—especially chef’s knives.</p>
<p>Scott Heimendinger finally revealed what Seattle Ultrasonics has been working on: the <a href="https://seattleultrasonics.com/products/c-200-ultrasonic-8-chefs-knife?variant=41673675636832">C-200 Ultrasonic 8” Chef’s Knife</a>. It’s a knife that vibrates at ultrasonic frequencies to reduce friction and make cutting feel effortless. I ordered one before I even finished the video. I fully expect it to feel clunky, unbalanced, and awkward—but at this point I’m invested in Scott and want to support what he’s building (same reason I still pay for <a href="https://nova.app/">Nova</a>—not for me right now, but I want them to succeed). Plus, any knife with an <a href="https://en.wikipedia.org/wiki/International_orange">international orange</a> button that keeps my potatoes from sticking to the blade feels worth trying.</p>
<p>The knife runs $400 (oof) without the charging base, which feels essential. After emailing Scott, I learned the knife only holds about 20 minutes of charge. He assured me that’s enough to dice 40 potatoes—an odd metric, to be sure. For me, a typical dinner means about 15 minutes of prep, so the charging base is non‑negotiable. I’m not going to remember to unplug and recharge a knife battery every meal, so this thing is going to cost me $500 (yikes).</p>
<p>The first production run is slated for January 2026, so I should get mine around then. I’ll report back with my thoughts—so you don’t have to run your own $500 experiment.</p>personaltechSteve Ledsworth ([email protected])Chef's Knife Updatehttps://sledsworth.com/posts/2025/chef-knife-updatehttps://sledsworth.com/posts/2025/chef-knife-update<p>I’ve had a few weeks with the Tojiro chef knife now.</p>
Fri, 29 Aug 2025 20:02:13 GMT<p>I’ve been using the <a href="https://amzn.to/3GyMwd3">Tojiro Chef’s Knife</a> for a couple weeks now and oh boy is this puppy sharp!</p>
<p>…it’s also not all that confortable in my hand. I have a blister due to the way I pinch the bolster/blade spine and how thin it is. I’ve found myself reverting back to the ol’ trusty <a href="https://amzn.to/4kO7WRb">Victorinox</a>. It’s no looker, but it gets the job done better than these fancy $100-$200 knives.</p>
<p>As expected,<a href="https://seattleultrasonics.com/blogs/company/about-the-qkp">the robot’s</a> lack of fleshy fingers can’t quantify the whole experience.</p>personalSteve Ledsworth ([email protected])Team Cherry Announces a Release Date for Hollow Knight: Silksonghttps://sledsworth.com/posts/2025/silksong-releasehttps://sledsworth.com/posts/2025/silksong-release<p>In a totally reasonable and relaxed way that is incredibly refreshing to see in the games industry—and yet some people still have gripes.</p>
Wed, 27 Aug 2025 18:46:58 GMT<p>Team Cherry announced <a href="https://www.youtube.com/watch?v=6XGeJwsUP9c">a release date of <strong>September 4th</strong> for Hollow Knight: Silksong on their YouTube channel</a> last week. Along with the announcement, <a href="https://www.bloomberg.com/news/newsletters/2025-08-21/why-silksong-team-cherry-s-sequel-to-hollow-knight-took-so-long-to-make?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTc1NTc4NjYzOSwiZXhwIjoxNzU2MzkxNDM5LCJhcnRpY2xlSWQiOiJUMUNMTUpHUFdDUFcwMCIsImJjb25uZWN0SWQiOiJCMUVBQkI5NjQ2QUM0REZFQTJBRkI4MjI1MzgyQTJFQSJ9.oTN8q1m9pNWFv7oW-n3vzq-hRWAxrDx9B7iF80RdTzk&leadSource=uverify%20wall">Jason Schreier at Bloomberg</a> interviewed the team, and to my delight, they had an incredible response to the question of why it took so long:</p>
<blockquote>
<p>“We’ve been having fun,” Gibson said. “This whole thing is just a vehicle for our creativity anyway. It’s nice to make fun things.”</p>
<p>The lengthy production wasn’t the result of development challenges or obstacles, they said. They just needed all these years to ensure that Silksong was exactly the game they wanted to make.</p>
<p>“It was never stuck or anything,” Gibson said. “It was always progressing. It’s just the case that we’re a small team, and games take a lot of time. There wasn’t any big controversial moment behind it.”</p>
</blockquote>
<p>…They were having fun, and making a game takes a long time. That’s it. I love it. This is coming from a place of unquestionable privilege (#1 wishlisted game on Steam), but in an industry that is kind of in shambles, it’s nice to see people just having fun making games.</p>
<p>Of course, <a href="https://www.polygon.com/hollow-knight-silksong-gaming-industry-lead-time-announcement/">there are reviewers</a> frustrated that they aren’t getting early access codes, and that they have too short of a notice and need to shuffle their schedules around. There are indie developers delaying their games to make sure they aren’t blotted out by Silksong. I get it, but at the same time, as a player, I’m delighted that I only have to wait another week to get my hands on the game and that I get to experience it along with everyone else. Games like Hollow Knight are made to be experienced—not to be reviewed by embargo, spoiling some of the discovery for the rest of us.</p>
<p>Now I’ve got to get back to finishing the first Hollow Knight<sup><a href="#user-content-fn-1">1</a></sup>. 😅</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>I bounced off it when I started it back in 2017 because I had just come off <em>Ori and the Blind Forest</em>—which is one of my all-time favorite games (my devices are named after the characters from the game)—and I felt Hollow Knight wasn’t as polished at the time. I’m totally in now, and it’s been a great Switch 2 experience now that I’ve finished Donkey Kong Bananza. <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>videogamesSteve Ledsworth ([email protected])A Very Nerdy Quantified Knife Projecthttps://sledsworth.com/posts/2025/quantified-knife-projecthttps://sledsworth.com/posts/2025/quantified-knife-project<p>Some objective sharpness, hardness, and food cutting measures from Seattle Ultrasonics on chef knives.</p>
Thu, 17 Jul 2025 15:05:44 GMT<p><a href="https://seattleultrasonics.com/blogs/company/about-the-qkp">This was a marketing ploy</a> to get me to sign up for a mailing list so I can buy whatever knife Seattle Ultrasonics eventually makes (and it totally worked!), but also I find the results pretty interesting.</p>
<p>I’ve purchased my fair share of chef knives over the years, and I’ve got to say, of the knives on the list, my experience tracks fairly consistently with the <a href="https://seattleultrasonics.com/pages/knife-database">Food Cutting Rank</a>.</p>
<p>The knife I use the most is <a href="https://amzn.to/4kO7WRb">Victorinox 8” Chef’s Knife</a>, and I think it is genuinely the best value you can find. Paying $40-$60 for a knife that is comfortable to use and doesn’t give you nervous sweats of fear when sharpening is a fantastic trade-off to make, especially if you are new to knives.</p>
<p>I’ve owned the <a href="https://madeincookware.com/products/8-inch-chef-knife/olive-wood">Made In</a> and <a href="https://misen.com/products/chefs-knife">Misen</a> knives, and they are fine knives, but are not worth their price—I’d take the Victorinox over them every day. I’m surprised by how well the <a href="https://www.hedleyandbennett.com/products/chefs-knife">Hedley & Bennett</a> fared—when I first saw it, I was all like <em>stick to aprons, everyone doesn’t need to do everything!</em> The results seem to suggest my initial reaction was wrong—it looks like their knife is a fantastic value and much better looking than my beloved Victorinox. Also, there are <a href="https://www.hedleyandbennett.com/products/pac-man-chefs-knife">Pac-Man</a> and <a href="https://www.hedleyandbennett.com/products/batman-chefs-knife">Batman</a> editions!</p>
<p>I bought <a href="https://www.nytimes.com/wirecutter/reviews/the-best-chefs-knife-for-most-cooks/">the Mac MTH-80 at The Wirecutter’s recommendation</a> years ago, and while it’s really sharp, it’s not all that pleasant to use from a cutting perspective, which shows through in the Quantified Knife Project results.</p>
<p>All that said, while the project closely aligns with my experience, a lot of subjectivity comes into play when a human uses a knife, rather than a robot. Handle shape, weight, and bolster size are all matters of personal preference. It’s best to try a few and get a better understanding of the things you care about (definitely buy a <a href="https://amzn.to/4kO7WRb">Victorinox 8” Chef’s Knife</a> though 😅)—I went ahead and picked up the <a href="https://amzn.to/3GyMwd3">Tojiro</a> myself!</p>personalSteve Ledsworth ([email protected])Movie Surfhttps://sledsworth.com/posts/2025/movie-surfhttps://sledsworth.com/posts/2025/movie-surf<p>Inviting you to watch a movie tonight instead of scrolling Netflix—endlessly.</p>
Fri, 30 May 2025 20:13:07 GMT<p>Save for “What do you want for dinner?”, the most common—and irritating—question my wife and I ask each other is “What do you want to watch?“. It usually comes after a long day at work and an evening of wrangling a toddler to bed. We don’t want to make another decision—we just want to watch the goddamn TV for an hour and a half.</p>
<p>Sure, I have <a href="https://www.getsequel.app/">apps</a> to keep track of my <a href="https://letterboxd.com/sel/watchlist/">watchlist</a> and all sorts of filters to try to get at the relevant stuff, but there’s still a <em>decision</em> that needs to be made—not to mention that it’s a watchlist for me, not my wife.</p>
<p>Enter <a href="https://movie.surf">movie.surf</a>! Type a prompt, get a movie—simple as that. Of course, you can filter by streaming services, genre, or decade if you’d like to narrow the results further. My wife and I have been using it for the last couple of months, and I think we’re finally happy with the results.</p>
<article> <header> <div> <span></span> <span></span> <span></span> </div> <h2> <a href="https://movie.surf">🍿 Movie Surf</a> </h2> <div> </div> </header> <section> </section> </article>
<p>This isn’t to say the movie suggestions are all great (it is using “AI”<sup><a href="#user-content-fn-1">1</a></sup> afterall 😅), or that some real searching on our part wouldn’t result in a “better” choice. It’s to say that the choices mostly fit what we are looking for, and we avoided friction that often is enough to keep us from watching a movie in the first place.</p>
<h2>Technical Details</h2>
<p>While solving the issue of finding a movie when <em>I can’t even</em> was the main goal, I did have some technical goals in mind as well:</p>
<ol>
<li>Get a better handle on <a href="https://astro.build/">Astro</a> and the many features introduced recently: <a href="https://docs.astro.build/en/guides/view-transitions/">view transitions</a>, <a href="https://docs.astro.build/en/guides/sessions/">sessions</a>, and <a href="https://docs.astro.build/en/guides/actions/">actions</a>.</li>
<li>While I played around with AI a bit in my <a href="https://waffle.how/ai/">waffle.how recipe generator</a> I wanted to spend more time using it in a way that I deem practical and responsible (let’s be honest—the waffle generator was created as a dumb joke, and I pity the poor souls that actually used it).</li>
<li>The website should function without JavaScript.</li>
</ol>
<h3>Astro</h3>
<p>If you haven’t spent time with <a href="https://astro.build/">Astro</a> yet and are a web developer, I suggest you do—especially if you are working on content-heavy sites that could benefit from static site generation. It has the features you’d expect from a robust framework (component-based, routers, JSX, etc), while encouraging the use of native web standards and steering you away from decisions that lead to a poorly performing website.</p>
<p>A good example of this is the <a href="https://docs.astro.build/en/reference/modules/astro-transitions/">Astro View Transitions Router API</a>. The code is simple to implement by providing the <code><ClientRouter /></code> to the <code><head></code> of your page and uses the <a href="https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API/Using">native web view transitions API</a> behind the scenes.</p>
<p>Finally, in recent releases, we’ve seen incredibly powerful features like <a href="https://docs.astro.build/en/guides/sessions/">sessions</a>. It was straightforward to implement the session adapter to keep track of things like the movies a user had previously been shown as suggestions, so I don’t weigh them as heavily when finding another movie.</p>
<h3>AI</h3>
<p>I have a ton of mixed feelings about AI. For low-stakes, verifiable information, I think its value is undeniable. Of course, numerous ethical concerns and misuses undermine the usefulness, but that’s for another post. As a software developer, I feel it’s important to have an understanding of the technology and potential applications—all my complicated feelings aside.</p>
<p>For <a href="https://movie.surf">movie.surf</a>, I’m currently using <a href="https://openai.com/index/gpt-4-1/">OpenAI’s <em>gpt-4.1-mini</em></a>. I tried various other models and found that <em>gpt-4.1-mini</em> had the best trade-off between accuracy, speed, and cost (although, honestly, I have no idea what this thing will end up costing me if I get any reasonably large-scale userbase—<a href="https://buymeacoffee.com/sledsworth">please support my dumb sites!</a>). I have a system prompt to set the context that the chat is with a movie expert, and then iterate through the <code>FormData</code> collected from the user to build prompts with the search query and any applied filters (<a href="https://github.com/sledsworth/movie.surf/blob/main/src/data/openai.ts">source code</a>). This works fairly well, but a cardinal rule of using AI is never to trust anything it spits out because it doesn’t actually know anything. From here, I take the results OpenAI provided and verify their existence against <a href="https://www.themoviedb.org/?language=en-US">TMDB</a>, which I trust to have accurate data.</p>
<p>Currently, it’s all or nothing for a search—if a single filter doesn’t match the user’s input, the suggestion is discarded. If none of the movie suggestions match entirely, the first movie in the list is selected. This isn’t a great system, but it works well enough and was simple to get this thing out the door (<a href="https://github.com/sledsworth/movie.surf/issues/25">it’ll be fixed later</a>).</p>
<h3>No JavaScript Requirement</h3>
<p>We all love JavaScript—if you can’t do it with HTML or CSS, you likely <em>can</em> with JavaScript. This has led many web developers to do <em>everything</em> in JavaScript. I’m pretty <a href="https://infrequently.org/2024/11/if-not-react-then-what/">fatigued from frameworkism</a> and have shifted to the other extreme of attempting to build my sites with the least amount of JavaScript possible.</p>
<p>With this project, I attempted to build the thing without JavaScript—and gave up for 1.0! I bet you didn’t see that coming after the initial preamble I provided. The truth is that I ran into a <a href="https://sledsworth.com/posts/2024/safari-popover-woes/">few Safari bugs</a> that didn’t allow me to use the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/popover">Popover API</a> like I originally intended. The <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal">Modal Dialog</a> can only be opened via JavaScript, so I was on the hook given my desired design.</p>
<p>The Popover bugs have since been resolved, and with that unblocked, I can spend the time to <a href="https://github.com/sledsworth/movie.surf/issues/8">drop the JavaScript requirement in 1.1</a>.</p>
<p>While I didn’t achieve my 1.0 goal, the constraint did set me up to achieve it in the future. Each time I’ve reached for JavaScript to solve a problem, I’ve asked if HTML or CSS could be used instead—often it can be and is more elegant, albeit less obvious. In some cases, I couldn’t find a viable solution and happily added a bit of JavaScript to get me there. Deploying JavaScript sparingly and with intention makes you lean more heavily on HTML and CSS, and your application is better for it.</p>
<h2>Up Next</h2>
<p>Quite honestly, I wanted to get 1.0 out so I could move on to a few other projects I’ve been eager to start. I’m also a little unsure what the reception and use of this thing will be. I have a few features and improvements lined up for a <a href="https://github.com/sledsworth/movie.surf/milestone/1">1.1</a> that I’d like to see, but beyond that, the site does what I want it to do—I don’t foresee adding any features that require accounts or anything of that nature. Of course, I’m open to feedback on how the site is working for you and how it can be improved.</p>
<p>Happy movie night! 😊</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>The ship has long sailed, but I dislike that we use Artificial Intelligence as the term for these LLMs and appendages around them. It seems that the individuals who hijacked “AI” have now settled on <a href="https://en.wikipedia.org/wiki/Artificial_general_intelligence">Artificial General Intelligence (AGI)</a> to mean what everyone understood “AI” to actually be. Now “AI” means <a href="https://www.mcsweeneys.net/articles/a-company-reminder-for-everyone-to-talk-nicely-about-the-giant-plagiarism-machine">Giant Plagiarism Machine</a>, <a href="https://en.wikipedia.org/wiki/Pachinko">Pachinko with words</a>, or <a href="https://www.theverge.com/news/642620/trump-tariffs-formula-ai-chatgpt-gemini-claude-grok">expert tariff calculator</a> depending on who you ask. <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>personaltechSteve Ledsworth ([email protected])Playdate Season 2https://sledsworth.com/posts/2025/playdate-season-2https://sledsworth.com/posts/2025/playdate-season-2<p>The first 3 games are strong on variety: Weird TV, a clicker game, and one of the best uses of the crank yet.</p>
Thu, 29 May 2025 16:00:00 GMT<p>The <a href="https://play.date/games/seasons/two/">first batch of games from season 2</a> has been released! There will be two games released each week for the next six weeks, for a total of 12 games in season 2. I love the season format for these sorts of indie games (and shows, thankfully, we’re slowly moving back to that after Netflix made everything a binge) with a slow rollout over time. I’m playing <a href="https://eggplant.show/ep-a-year-of-ufo-50-introduction">UFO 50 in the same format</a> and find that the slower pace helps me appreciate the games more, leading to interesting discussions that wouldn’t happen otherwise.</p>
<p>This week includes a bonus game(?) called Blippo+. Panic publishes some incredibly weird games (<a href="https://thankgoodness.game">Thank Goodness You’re Here</a>)—<a href="https://play.date/games/blippo/">Blippo+</a> is no exception. It’s a quirky TV service equipped with a guide and a variety of programming you can surf through using the crank. It’s not my thing, but the world is a better place with more weird in it!</p>
<p><a href="https://play.date/games/dig-dig-dino/">Dig! Dig! Dino</a> is kind of like a clicker game<sup><a href="#user-content-fn-1">1</a></sup> in disguise. You move a cursor around a grid to dig up various items that are sold for currency at the end of a dig. A dig ends after so much energy is used digging. Currency can be used to make digging more efficient. Again, not my cup of tea, but if you are a fan of clicker games, numbers going up, or digging up dino bones, it may be yours.</p>
<p>Then there’s <a href="https://play.date/games/fulcrum-defender/">Fulcrum Defender</a>, which is totally my thing. It takes full advantage of the uniqueness of the Playdate’s crank, which is used to aim. The four D-Pad directions are used to fire your weapons at incoming geometric shapes. It gets frenetic, but is oddly calming due to the mellow soundtrack. Learning the game mechanics and how to effectively stack power-ups rewards the player. Each run, I’m getting further and feeling more competent, continuing to drive my score higher.</p>
<p>These first few games feel like they are meant to be played in bite-sized sessions—which is the perfect Playdate game for me, given how physically demanding this thing is for my old eyes and <a href="https://en.wikipedia.org/wiki/Repetitive_strain_injury">RSI</a>-riddled hands.</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>Or <a href="https://en.wikipedia.org/wiki/Incremental_game">incremental game</a> where you click to gain in-game currency, which leads to unlocks to help your clicks produce more currency. Generally, no fail state and light on skill requirements. Example: <a href="https://www.decisionproblem.com/paperclips/index2.html">Universal Paperclips</a>. <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>techvideogamesSteve Ledsworth ([email protected])Ukrainehttps://sledsworth.com/posts/2025/ukrainehttps://sledsworth.com/posts/2025/ukraine<p>We can show support for Ukraine and democracy without the help of our president.</p>
Sat, 01 Mar 2025 18:53:30 GMT<p>At this point, I’m generally not surprised by the Trump administration. I loathe everything about him and his actions, but I am unsurprised.</p>
<p>After watching <a href="https://www.axios.com/2025/02/28/trump-zelensky-meeting-vance-ukraine-minerals-deal">the exchange with Volodymyr Zelenskyy</a>, I can’t help but feel an incredible sadness. No kneejerk reaction of anger or outrage—just sadness. Sad for Zelenskyy and the Ukrainian people. Sad that we knew Trump would inevitably turn on Ukraine because there wasn’t anything tangible in the short term he could suck out of them. Sad that a majority of the citizens that bothered to show up for our election voted for him.</p>
<p>While it feels insufficient, I’ve donated to <a href="https://u24.gov.ua/">United24</a> to help Ukraine. Maybe if enough of us do the same, we can show that the US still supports allies and democracy.</p>politicsSteve Ledsworth ([email protected])TRMNLhttps://sledsworth.com/posts/2025/trmnlhttps://sledsworth.com/posts/2025/trmnl<p>A great little tinkering device with a few rough edges.</p>
Fri, 28 Feb 2025 19:07:43 GMT<p>I ordered a <a href="https://usetrmnl.com/">TRMNL</a> after hearing about it on <a href="https://atp.fm/">ATP</a> and Mastodon. I haven’t had time to build my own plugins yet, but I’ve had enough time with the device to form some opinions.</p>
<p>Right out the gate: It’s too small for what I planned to use it for. I wanted to hang it on the refrigerator as a family calendar with the weather (and Office quotes?!?). To support multi-plugin layouts, text has to be so small that it isn’t legible from more than a few feet away.</p>
<figure><img src="https://sledsworth.com/_astro/trmnl-fridge.C8ghlIIM_Z1fulXY.webp" alt="TRMNL attached to my refrigerator with a command strip." loading="lazy" width="5712" height="4284" /><figcaption>TRMNL attached to my refrigerator with a command strip.</figcaption></figure>
<p>My primary use is to display calendars for the family. Our calendars are tied to our Apple Accounts, and I’ve got to say, the Apple Calendar plugin hasn’t worked for me since day one. It has shown duplicate all-day events, was missing events, and is currently showing dates from a week ago.</p>
<p>Also, the build quality isn’t great. The device feels cheap, and the frame around my TRMNL is pretty messy—it looks like it was 3D printed.</p>
<figure><img src="https://sledsworth.com/_astro/trmnl-frame-1.nnuik2fD_12IV4U.webp" alt="TRMNL frame imperfections." loading="lazy" width="4032" height="3024" /><img src="https://sledsworth.com/_astro/trmnl-frame-2.D8BwFUtu_ZUByG4.webp" alt="TRMNL frame imperfections." loading="lazy" width="4032" height="3024" /><figcaption>My TRMNL frame with a rough edges.</figcaption></figure>
<p>With all that out of the way, I’m still happy to have bought it. I’m confident the calendar bugs will be resolved (the worst case is that I write my own calendar plugin). My wife and I enjoy a laugh each day from The Office quotes, and I love the freedom of knowing that if I ever find something valuable to display, there is an open API that allows me to build it.</p>
<p>The company owner seems incredibly friendly and open to feedback. He personally confirmed that the Apple Calendar plugin bug is being investigated and shared that they are actively developing a larger TRMNL product (No confirmation of when it would be available or what the screen size will be, but I’m guessing it’ll likely have <a href="https://www.waveshare.com/product/displays/e-paper/epaper-1/10.3inch-e-paper.htm?___SID=U">this 10.3 Waveform display</a>). It feels good to support good people.</p>
<p>One final gripe—I think this device should be more targeted towards tinkerers and include the development add-on for everyone. It feels a bit nickel-and-dime-y to charge $20 to develop for the thing—especially when you lean into it being open as a selling point.</p>
<p>So, should you buy one? If you are a nerd who likes tinkering, absolutely. If you just want to set up a display to show stuff without any fiddling, TRMNL may not be for you—at least not yet.</p>techSteve Ledsworth ([email protected])App Defaults, 2025https://sledsworth.com/posts/2025/app-defaultshttps://sledsworth.com/posts/2025/app-defaults<p>My currently used apps, 2025 edition!</p>
Mon, 24 Feb 2025 01:49:02 GMT<ul>
<li><strong>📨 Mail Client:</strong> <a href="https://mimestream.com/">Mimestream</a> on the Mac and Gmail on iOS. <a href="https://sparkmailapp.com/">Spark</a> got a bit too weird for me.</li>
<li><strong>📮 Mail Server:</strong> <a href="https://mail.google.com/">Gmail</a>—I know, Google is scraping all my personal information from my emails. I just like Gmail. 🤷♀️</li>
<li><strong>📝 Notes:</strong> Currently trying <a href="https://www.craft.do/">Craft</a>—they’ve shifted course and decided to focus on making a good documentation app instead of chasing the enterprise. I suspect it’s still too much for me, and I’ll go back to <a href="https://bear.app/">Bear</a> (I spent an hour one evening creating a collection of comic books I’ve recently purchased—why?).</li>
<li><strong>✅ To-Do:</strong> <a href="https://culturedcode.com/things/">Things</a> forever and always.</li>
<li><strong>📷 iPhone Photo Shooting:</strong> Camera.app and a subscription to <a href="https://halide.cam/">Halide</a> which I aspire to use at some point. 😅</li>
<li><strong>🟦 Photo Management:</strong> Photos.app and <a href="https://www.gentlemencoders.com/">RAW Power</a>.</li>
<li><strong>🧑🏼🎨 Photo Editing & Design:</strong> <a href="https://affinity.serif.com/en-gb/">Affinity Apps</a>. I’ve downgraded my Adobe subscription to InCopy. I have no idea what InCopy does, but $5 a month for Adobe Fonts is worth it to me.- <strong>📆 Calendar:</strong> <a href="https://flexibits.com/fantastical">Fantastical</a> is still great, but I don’t need the newer features, and Calendar.app would likely be fine enough.</li>
<li><strong>📁 Cloud File Storage:</strong> iCloud Drive and <a href="https://github.com/">Github</a>.</li>
<li><strong>📖 RSS:</strong> <a href="https://readwise.io/read">Readwise Reader</a>, but trialing a switch to <a href="https://hq.getmatter.com/">Matter</a>. I like Readwise Reader, but I’ve realized I don’t use a ton of features it provides. The features I do use are mostly covered by Matter. Matter feels a bit more polished and is cheaper. I also feel like I end up reading more and collecting less with Matter—which is a huge win.</li>
<li><strong>🙍🏻♂️ Contacts:</strong> <a href="https://flexibits.com/cardhop">Cardhop</a> and Contacts.app.</li>
<li><strong>🌐 Browser:</strong> What a heartbreaker this is. Last year, I was trying <a href="https://arc.net/gift/2715472e">Arc</a> and was skeptical. This year, I love Arc and am struggling to return to Safari.app (because The Browser Company has considered Arc feature complete and <a href="https://x.com/joshm/status/1850717644779110643">is all in on AI</a> with a second browser, <a href="https://www.diabrowser.com/">Dia</a> 😔).</li>
<li><strong>💬 Chat:</strong> Messages.app for personal use, <a href="https://slack.com/">Slack</a> and <a href="https://discord.com/">Discord</a> for work and larger communities.</li>
<li><strong>🔖 Bookmarks:</strong> <a href="https://readwise.io/read">Readwise Reader</a> (and trialing <a href="https://hq.getmatter.com/">Matter</a>) and an inbox space in <a href="https://arc.net/gift/2715472e">Arc</a>.</li>
<li><strong>📑 Read It Later:</strong> <a href="https://readwise.io/read">Readwise Reader</a> (and trialing <a href="https://hq.getmatter.com/">Matter</a>).</li>
<li><strong>📜 Word Processing:</strong> I still hate this category of app. Any writing I do is in <a href="https://ia.net/writer">iA Writer</a> rather than a full-fledged word processor. If I need a nice-looking document, I write some HTML and CSS.</li>
<li><strong>📈 Spreadsheets:</strong> Numbers.app and <a href="https://soulver.app/">Soulver</a>.</li>
<li><strong>📊 Presentations:</strong> I still avoid present if possible, but sometimes I get roped in. <a href="https://www.microsoft.com/en-us/microsoft-365/powerpoint">PowerPoint</a> is generally forced upon me, but if I had a choice, it’d be <a href="https://ia.net/presenter">iA Presenter</a>.</li>
<li><strong>🛒 Shopping Lists:</strong> Reminders.app</li>
<li><strong>🍴 Meal Planning:</strong> <a href="https://mela.recipes/">Mela</a>, although <a href="https://crouton.app/">Crouton</a> has got my attention.</li>
<li><strong>💰 Budgeting and Personal Finance:</strong> <a href="https://www.ynab.com/">YNAB</a> is still pretty great.</li>
<li><strong>📰 News:</strong> I used to be a news junkie, but I’ve dialed it way down this year to keep my sanity. It’s all still in <a href="https://readwise.io/read">Readwise Reader</a> or <a href="https://hq.getmatter.com/">Matter</a>.</li>
<li><strong>🎵 Music:</strong> Music.app, it’s bad, but I’m a captive audience. It’s included in the Apple One Premier bundle, and Spotify isn’t better enough to take on another subscription.</li>
<li><strong>🎤 Podcasts:</strong> <a href="https://overcast.fm/">Overcast</a>, but I’m not a big fan of the latest redesign. I’m not sure the other options are better, though—<a href="https://castro.fm/">Castro</a> was sold and is receiving more updates, but I’m not sure the new owners have the same taste and design sensibilities <a href="https://blog.supertop.co/">Supertop</a> had.</li>
<li><strong>🔐 Password Management:</strong> <a href="https://1password.com/">1Password</a>, but considering using Apple’s Passwords.app now that it’s standalone and not just a page in Settings.</li>
<li><strong>🐘 Mastodon:</strong> <a href="https://tapbots.com/ivory/">Ivory</a></li>
<li><strong>⌨️ Launcher:</strong> <a href="https://www.raycast.com/">Raycast</a></li>
<li><strong>🛤️ Habit Tracking:</strong> <a href="https://culturedcode.com/things/">Things</a></li>
<li><strong>🌤️ Weather:</strong> <a href="https://www.meetcarrot.com/weather/">Carrot Weather</a> and <a href="https://mercuryweather.app/">Mercury Weather</a>.</li>
<li><strong>👨🏻💻 Terminal:</strong> Terminal.app and testing <a href="https://www.warp.dev/">Warp</a>.</li>
<li><strong>🧮 Code Editor:</strong> <a href="https://code.visualstudio.com/">Visual Studio Code</a> and Xcode.app. I continue to hope <a href="https://nova.app/">Nova</a> succeeds. It’s a joy to use, but it is missing features I rely on and is not as stable as VS Code for me.</li>
<li><strong>🔎 Search:</strong> <a href="https://kagi.com/">Kagi</a> is great. I just mentioned above how I continue to use Gmail despite knowing they are abusing my personal information. I’d do the same for search, but Kagi is legitimately a better search engine and worth paying for (unless you are looking for local businesses or Maps—you still have to use Google for that).</li>
<li><strong>🤖 AI:</strong> I’m in a weird spot with AI. I see its uses, but in most cases <a href="https://bsky.app/profile/sledsworth.com/post/3livjrejqec2i">it’s just making products worse</a>. I do think one of its stronger use cases is in programming, which I use a combination of <a href="https://github.com/features/copilot">Github Copilot</a> and <a href="https://chatgpt.com/">ChatGTP</a> for.</li>
</ul>
<p>I’m guessing there will be more significant changes next year as I try to cut back on extra subscription costs, but at this point, I’m pretty happy with my tools, so who knows?</p>Steve Ledsworth ([email protected])US Mobilehttps://sledsworth.com/posts/2025/us-mobilehttps://sledsworth.com/posts/2025/us-mobile<p>A great carrier that leans into the strenghs of being an MNVO.</p>
Tue, 18 Feb 2025 20:49:37 GMT<p>When I first stumbled upon <a href="https://www.usmobile.com">US Mobile</a>, I thought it was too good to be true. $17.50 a month for unlimited data AND the ability to switch between all three major US carriers? Not a chance.</p>
<p>Some rough edges still come with <a href="https://en.wikipedia.org/wiki/Mobile_virtual_network_operator">MVNOs</a>—my Watch shows Verizon for the carrier instead of US Mobile. The setup is less than ideal—I had some pretty bad initial setup issues. My Apple Watch had to be reset multiple times, and I’m still not sure why the fourth time cellular finally started working. I had to install some questionable profiles on my iPhone and iPad to get cellular configured correctly.</p>
<p>After getting past the setup issues, I can deal with the oddities of US Mobile. Their customer support has been responsive and mostly helpful. Effectively having AT&T service on my iPad and Verizon service on my iPhone means I can practically travel anywhere in the US and have excellent service. If you are looking for a solo plan or have a small family, I’d definitely recommend giving them a try (more lines make the major carriers look more competitive, so it may not make sense for a large family).</p>
<p><a href="https://www.usmobile.com/referrals?referrer=43B6925B&name=Steven&utm_campaign=monster_referral">If you consider switching to US Mobile, I’d appreciate the support by using my referral link.</a></p>techSteve Ledsworth ([email protected])Five Callshttps://sledsworth.com/posts/2025/five-callshttps://sledsworth.com/posts/2025/five-calls<p>Turn your frustration with the Trump administration into action.</p>
Tue, 18 Feb 2025 16:09:06 GMT<p>Dunking on Trump and friends is fun—and boy, <a href="https://apnews.com/article/plane-crash-washington-dc-trump-dei-claims-3ac5486ec594d81e919e8ebbd9733869">do they make it easy</a>—<a href="https://www.404media.co/you-cant-post-your-way-out-of-fascism/">but ineffective</a>.</p>
<p>Without showing outrage on social media for every awful decision made, it can somehow feel like you are being complicit or at least indifferent about the atrocities committed. We know that <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=199668">trying to convince the opposition tends to push them further to the fringes</a>, so engaging online is likely to backfire.</p>
<p>I’m looking for concrete ways to help without being too dialed in on the news where I feel that sinking hopeless feeling. One that seems like a gimme is <a href="https://5calls.org/">Five Calls</a>, which helps walk you through calling your local representative and voicing your concerns for—<em>gestures wildly</em>—all the stuff going on.</p>
<p>If you have other actions you are taking, <a href="mailto:[email protected]">I’d love to hear them</a>—I want to do my part while ignoring the day-to-day exhaustion I can already feel setting in—and it’s only been a month.</p>personalpoliticsSteve Ledsworth ([email protected])Mario Kart 9https://sledsworth.com/posts/2025/mario-kart-9https://sledsworth.com/posts/2025/mario-kart-9<p>If I were a betting man, I’d have guessed Nintendo wanted to launch Mario Kart 9 (and the Switch 2) for the holiday of 2024.</p>
Fri, 24 Jan 2025 02:00:00 GMT<p>Last October, my mom—who works at McDonald’s<sup><a href="#user-content-fn-1">1</a></sup>—told me she was getting <a href="https://allfastfoodtoys.com/mcdonald-s-mario-kart-happy-meal-toys-complete-set-2024-collection-124283-MaRioK">Mario Kart toys</a> and mentioned she could get me a whole set and the display board (well, that she could get them for my daughter, but honestly we both knew who wanted them most). Once I got them, I found it incredibly strange that they were based on Mario Kart 8 Deluxe—an 8-year-old game.</p>
<p><img src="https://sledsworth.com/_astro/mario-kart-mcds-toys-2024.BZkAR_DM_Z2vc0I5.webp" alt="Mario Kart 8 Deluxe McDonald's Toys, 2024" loading="lazy" width="960" height="1280" /></p>
<p>Lego announced <a href="https://www.lego.com/en-us/themes/super-mario?icmp=TH-TPB-Standard-MAR_In_page_navigation_Products-TH-MAR-VZY2M2ZF4S">Mario Kart sets</a> a few months ago and released them on the first of this year. I bought a few (they are great!), and they definitely look new—not a rehash of previous Mario Kart designs.</p>
<p><img src="https://sledsworth.com/_astro/mario-kart-lego-2025.G1PwOzwM_ENOwW.webp" alt="Lego Mario Kart toys, 2025" loading="lazy" width="1280" height="960" /></p>
<p>I’d guess the lead time for a McDonald’s toy and a Lego set is far in advance. When it was clear that the Switch 2 (and Mario Kart 9) weren’t going to hit holiday 2024, Nintendo was able to reuse the<a href="https://kidsmeal.fandom.com/wiki/Mario_Kart_8_(McDonald%27s,_2014)"> old Mario Kart toys they previously had at McDonald’s</a>. Changing the Lego designs wouldn’t be practical, so we see the new designs here.</p>
<p>All of this is fun speculation that ultimately doesn’t matter—and this could have been planned from the start. I’m just looking for ways to convince myself that the Switch 2 and Mario Kart 9 are just around the corner and not holiday 2025—<a href="https://sledsworth.com/posts/2025/nintendo-switch-2">as I speculated earlier</a>.</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>She retired, got bored, and jumped to the hardest job I’ve ever had—not sure what that says about either of us. 😅 <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>videogameslegoSteve Ledsworth ([email protected])TV Tracking & Trakt Streaming Scrobblerhttps://sledsworth.com/posts/2025/trakt-streaming-scrobblerhttps://sledsworth.com/posts/2025/trakt-streaming-scrobbler<p>$60 is a small price to pay if Trakt Streaming Scrobbler does what it says it will.</p>
Tue, 21 Jan 2025 15:00:19 GMT<p>I’ve been using an app called <a href="https://www.getsequel.app/">Sequel</a> for all my media tracking for the last few years. It’s good-looking, reasonably simple, easy to chuck recommendations in on the fly, and uses <a href="https://trakt.tv/">Trakt</a> as a back-end so I can change apps in the future if needed. There are plenty of apps with greater feature sets for any individual media type—<a href="https://gametrack.app/">GameTrack</a> for games, <a href="https://www.tvtime.com/">TV Time</a> for TV, <a href="https://letterboxd.com/">Letterboxd</a> for movies (<a href="https://letterboxd.com/sel/">which I do use</a>)—but I continue to prefer simplicity over features.</p>
<p>One of the main benefits of a TV tracking app (above keeping track of recommended shows) is to keep track of what episode I’m on in any given series. I shouldn’t need to do this, but streaming services are so unreliable I’d trust <a href="https://www.theverge.com/2024/6/11/24176490/mm-delicious-glue">a pizza recipe from an LLM</a> before I’d start the episode a streaming app suggests is next. The problem is that manually checking a box after each episode is annoying and easy to forget.</p>
<p>Enter <a href="https://forums.trakt.tv/t/automatically-sync-your-streaming-services/34947">Trakt Stream Scrobbler</a><sup><a href="#user-content-fn-1">1</a></sup>. It allows you to give all your TV viewing habits to some likely untrustworthy third party with the promise that Trakt will then be able to <em>automatically</em> mark a show as watched. I’ve paid the $60 for VIP Trakt just to try this feature and plan to report back in a month on whether it actually works.</p>
<p>If you want to try Trakt Stream Scrobbler for yourself (for free!), I have an <a href="https://trakt.tv/vip/referral/d820d3e3fdd90632362a02911bbd4940">affiliate link</a> that’ll give you a month free.</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>Stream Scrobbler is a terrible name and very indicative of why so many apps are built on top of Trakt to make the service scrutable to humans. How many people know what <a href="https://en.wiktionary.org/wiki/scrobble">scrobbler</a> even means? <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>techSteve Ledsworth ([email protected])Nintendo Switch 2 Revealhttps://sledsworth.com/posts/2025/nintendo-switch-2https://sledsworth.com/posts/2025/nintendo-switch-2<p>How is it not called Super Nintendo Switch?</p>
Thu, 16 Jan 2025 15:17:52 GMT<p>It’s finally here! Well… at least a first-look trailer is! …and honestly, it’s just that. We see some fancy animations that show off the hardware—all but confirming rumors about the magnetic Joy-Cons that can also behave like a mouse. The new Mario Kart is shown briefly for the last 20 seconds of the reveal. Backward compatibility with the Switch is confirmed again. Nothing new that hasn’t been rumored, and there is no concrete release date. They do reveal that there will be a Nintendo Direct event on April 2nd with more details.</p>
<p>I bet Nintendo wanted to wait until the Nintendo Direct to unveil the Nintendo Switch 2 and be able to give more details and show off launch titles. With all the rumors swirling about, they felt it necessary to have more control over messaging and set expectations. I’m surprised that we didn’t see more and didn’t get a release date with this reveal—although they did a similar release with the original Switch (<a href="https://www.youtube.com/watch?app=desktop&v=iS-1tDfLxRQ&ab_channel=GameSpot">the reveal trailer was much better</a>).</p>
<p>It looks like we will be waiting a few more months to get details, and then <a href="https://www.nintendo.com/us/whatsnew/nintendo-switch-2-to-be-released-in-2025/">there will be hands-on experiences in select cities</a> for a few months after that. So, the soonest we will see a release is likely July—which is an odd time to release the system. I’m guessing this is going to be a fall launch now.</p>
<p>Finally, how did they not call it “Super Nintendo Switch”—it’s such a gimme. Pair it with two launch color options: the Super Nintendo purple and the Nintendo Super Famicom multi-color Joy-Cons (<a href="https://www.playstation.com/en-us/30th-anniversary/">Sony gets it</a>).</p>
<p><img src="https://sledsworth.com/_astro/super-nintendo._iiawpxC_Z2cqK0Q.webp" alt="Super Nintendo" loading="lazy" width="500" height="260" />
<img src="https://sledsworth.com/_astro/super-famicom.w1QiIjn2_ZiEXjW.webp" alt="Super Famicom" loading="lazy" width="2880" height="1497" /></p>videogamesSteve Ledsworth ([email protected])Reminders.apphttps://sledsworth.com/posts/2025/reminderapphttps://sledsworth.com/posts/2025/reminderapp<p>Time for my annual Reminders.app trial.</p>
Wed, 01 Jan 2025 05:26:21 GMT<p>It’s a new year, and with that comes my wholly normal and not-at-all-unhealthy venture into replacing <a href="https://culturedcode.com/things/">Things.app</a> for no reason at all other than the mere potential that there <em>could</em> be a better to-do tracking app out there for me.</p>
<p>It usually involves me taking a look at <a href="https://www.notion.com/product?fredir=1">Notion</a> and <a href="https://www.craft.do/">Craft</a>, only to realize they are still mostly notetaking apps, overly complex for what I need, and that I hate block-based text editors.</p>
<p>I eventually overcorrect and start moving everything I have to the Reminders.app. It’s feature-rich and stock on all Apple devices. Then, I try to reorganize a list. Ugh. On my Mac, I press <kbd>⌘ +</kbd>… only to hear the sad weep-beep of my computer refusing to increase the font to an acceptable size for these tired, old eyes.</p>
<p>Finally, I file a bug report and move Things.app back into the dock.</p>
<p><img src="https://sledsworth.com/_astro/reminder-app-bug-report.BggXMc6l_1kJGyd.webp" alt="Feedback Assistant app window with a bug report for not supporting variable font size in Reminders.app on the Mac. It's got a bit of snark, but it's 2025 and accessibility shouldn't be an afterthought." loading="lazy" width="2014" height="2706" /></p>
<p>Anyway, Happy New Year, all!</p>techSteve Ledsworth ([email protected])Kagi Searchhttps://sledsworth.com/posts/2024/kagi-searchhttps://sledsworth.com/posts/2024/kagi-search<p>It’s a fantastic alternative to Google Search.</p>
Thu, 05 Dec 2024 17:46:22 GMT<p>I’ve been using Kagi for a few years and find its results more useful than Google’s. It took time, but with Google increasing ads and shoving AI down our throats, it’s refreshing to pay money for a search engine that respects me and is tastefully built. Just <a href="https://help.kagi.com/kagi/why-kagi/ai-philosophy.html">take a look at their AI philosophy</a> compared to…the complete rest of the industry slapping LLMs to everything.</p>
<p>Anyway! Back to the whole reason I felt a post was needed: <a href="https://kagi.com/p/THANKSB8AD8A78"><strong>I’ve got 3 months of free Kagi search to give out to the first three of you to redeem them</strong></a>.</p>
<p>None of my family or friends were interested—they could not fathom paying for something that is their God-given right (yes, I know, it’s a free trial, but they were so upset with the thought of paying in 3 months that they didn’t even want to try). If you aren’t diametrically opposed to paying for good stuff like my family, give Kagi a try!</p>techSteve Ledsworth ([email protected])Safari Popover Woeshttps://sledsworth.com/posts/2024/safari-popover-woeshttps://sledsworth.com/posts/2024/safari-popover-woes<p>Mobile Safari really doesn’t want us web folk using the Popover API.</p>
Fri, 11 Oct 2024 16:43:01 GMT<p><strong>Update (April 1st, 2025):</strong> I haven’t had a chance to test it yet, but it looks like the <a href="https://webkit.org/blog/16574/webkit-features-in-safari-18-4/">fix has landed in Safari 18.4</a>. 🎉</p>
<blockquote>
<p>Fixed tabbing out of a popover causing a hang in certain cases. (143145544)</p>
</blockquote>
<hr />
<p><strong>Update (January 23rd, 2025):</strong> <a href="https://bugs.webkit.org/show_bug.cgi?id=285811">The bug causing the hang</a> when a focusable element within a <code>popover</code> is focused on or loses focus (<a href="#text-area-issue">see example below</a>) has been resolved! <a href="https://bsky.app/profile/ntim.bsky.social">Everyone should thank Tim</a>! 🎉</p>
<p>Here’s to hoping it lands in Safari for the next minor release on Apple platforms.</p>
<hr />
<p><strong>Update (January 4th, 2025):</strong> Nevermind, <code>popover</code> continues to be a mess in Safari for iOS/iPadOS. Light dismiss still isn’t always working. Clicking inside a <code>textarea</code> in a <code>popover</code> doesn’t bring up the keyboard and makes the website completely unresponsive—refreshing doesn’t even work. <a href="#text-area-issue">I’ve added an example below to demonstrate</a>.</p>
<hr />
<p><strong>Update (December 16th, 2024):</strong> As of iOS 18.2 both of these issues seem to have been resolved! 🎉</p>
<hr />
<p>As of this writing, the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Popover_API">Popover API is still in “Limited availability”</a> due to <a href="https://bugs.webkit.org/show_bug.cgi?id=267688">a bug in iOS and iPadOS Safari</a>, where the popover will not close when the user taps outside on the backdrop.</p>
<p>Not great.</p>
<p>While that one <em>might</em> be fixed in iOS/iPadOS 18.1 (<strong>Update:</strong> nope, it’s not), I’m pretty sure I found another iOS/iPadOS-specific popover-related bug that I haven’t seen any mention of, even though it feels like it’d be pretty common in practice. Any <code>popover</code> nested in a <code>form</code> will not open when clicking the <code>button</code>.</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span><</span><span>form</span><span>></span></div></div><div><div><span> </span><span><</span><span>button</span></div></div><div><div><span> </span><span>type</span><span>=</span><span>"button"</span></div></div><div><div><span> </span><span>popovertarget</span><span>=</span><span>"popover"</span></div></div><div><div><span> </span><span>></span><span>Open Popover</span><span></</span><span>button</span><span>></span></div></div><div><div><span> </span><span><</span><span>div</span></div></div><div><div><span> </span><span>popover</span></div></div><div><div><span> </span><span>id</span><span>=</span><span>"popover"</span></div></div><div><div><span> </span><span>></span></div></div><div><div><span> </span><span><</span><span>textarea</span><span> </span><span>row</span><span>=</span><span>"4"</span><span>></</span><span>textarea</span><span>></span></div></div><div><div><span> </span><span></</span><span>div</span><span>></span></div></div><div><div><span></</span><span>form</span><span>></span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p><strong>Popover Button without Form:</strong></p>
<p>This one works everywhere!</p>
<div>
Popover
<div>Popover Content</div>
</div>
<p><strong>Popover Button in Form:</strong></p>
<p>Go ahead, try to click this button in iOS/iPadOS Safari—I dare you!</p>
Form Popover
<div>Form Popover Content</div>
<p>Nothing, right?</p>
<p>I guess I’ll try the Popover API again next year.</p>
<h3>Text Area Issue</h3>
<p>I haven’t figured this out yet, but in certain circumstances, a <code>textarea</code> in a <code>popover</code> will make a website unresponsive (and turn your phone into a hand warmer). I originally moved this example to the top of the page, and it worked fine—I’m not ruling out that I’ve done something bone-headed, but even if that is the case, the whole tab shouldn’t crash and burn.</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span><</span><span>div</span><span>></span></div></div><div><div><span> </span><span><</span><span>button</span></div></div><div><div><span> </span><span>type</span><span>=</span><span>'button'</span></div></div><div><div><span> </span><span>popovertarget</span><span>=</span><span>'popover-textarea'</span></div></div><div><div><span> </span><span>></span><span>Text Area Popover</span><span></</span><span>button</span><span>></span></div></div><div><div><span> </span><span><</span><span>div</span></div></div><div><div><span> </span><span>popover</span></div></div><div><div><span> </span><span>id</span><span>=</span><span>'popover-textarea'</span></div></div><div><div><span> </span><span>><</span><span>textarea</span><span> </span><span>row</span><span>=</span><span>"4"</span><span>></</span><span>textarea</span><span>></span></div></div><div><div><span> </span><span></</span><span>div</span><span>></span></div></div><div><div><span></</span><span>div</span><span>></span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<div>
Text Area Popover
<div>
</div>
</div>
webdevSteve Ledsworth ([email protected])Halo Studios: New Name, New Engine, New Games, New Philosophyhttps://sledsworth.com/posts/2024/halo-studioshttps://sledsworth.com/posts/2024/halo-studios<p>343 Industries has become Halo Studios.</p>
Tue, 08 Oct 2024 16:05:35 GMT<p>With all the current turmoil in the games industry, we can all be excited that Halo has a future. I’ll reserve judgment until we have a game, but they didn’t say what I would say if I were trying to assure fans that moving to the Unreal 5 Engine was the right move. I’m glad it <em>looks</em> great, but I care more that it <em>feels</em> great to play—that’s what makes Halo.</p>
<p>I’m worried they took the wrong lessons from Halo Infinite: The problem was <a href="https://www.halopedia.org/Craig">Craig</a>—not that they shipped an unfinished, half-assed attempt at a live-service game.</p>
<p>Oh, and the new Halo Studios logo? Not great.</p>
<p><img alt="Halo Studios new logo> It&#x27;s blocky...and awkward...and does not remind me of Halo in the least." loading="lazy" width="866" height="650" src="https://sledsworth.com/_astro/halo-studios.JV8mGqo8_ZIzEXR.webp" /></p>videogamesSteve Ledsworth ([email protected])Oberun 2024https://sledsworth.com/posts/2024/oberun-2024https://sledsworth.com/posts/2024/oberun-2024<p>Finished with a respectable time of 26:25 for my first 5k race.</p>
Fri, 19 Jul 2024 00:00:00 GMT<p>I ran my first official 5k race and had tons of fun! To be honest I’m not sure why it’s taken me this long to finally run an official one—other than I’ve historically been one of those crotchety types: <em>why would I pay money to run when I can do it here for free</em>? I get it now though, there is something special—and a bit silly—about a whole herd of folks running around a course together.</p>
<p>At any rate, I feel like a time of <strong>26:25</strong> is respectible for my first race. I may have caught the runner’s bug—planning the next 5k and aiming for a sub-25 minute time.</p>exercisepersonalSteve Ledsworth ([email protected])Moving Onhttps://sledsworth.com/posts/2024/moving-onhttps://sledsworth.com/posts/2024/moving-on<p><strong>I’m currently looking for a Front-End Engineering position!</strong> Ideally working on a centralized team building out a component library or design system, but I’m open to anything interesting. 😄</p>
<p><a href="https://sledsworth.com/resume/">Check out my résumé</a> and <a href="mailTo:[email protected]">get in touch</a> if you’d think I’d be a good fit!</p>
Tue, 16 Jul 2024 08:30:00 GMT<p>Last week we got an email from a director stating that our work from home policy would be changing—the new expectation is two days a week in the office instead of once a month.</p>
<p>Months prior to COVID and our work from home policy change, my wife got a new job closer to Detroit that required us to move. My current employer was kind enough to allow me to work out of a satellite office. This office was all business and operation types, which led to lots questions about why various office—and personal—electronics weren’t working as expected. In the most polite way possible I tried to help solve the issues while also pointing them in the direction of our IT support team. Of course the IT support team wasn’t in the building and I had a lot of success fixing the printer issues (<em>unplug…1 Mississippi…2 Mississippi…3 Mississippi…plug</em>) so I still fronted most of the questions. Add in that their work mostly required constant phone calls and it becomes fairly clear that getting my work done in that particular office would be challenging. I don’t blame the individuals working at the satellite office—it’s reasonable for them to think I could help them with IT needs—but it was clear I wouldn’t be able to continue working with the company if I was required to go into that office.</p>
<p>Fast forward a few months and to my company’s credit, we scrambled to get everyone setup to be able to work from home rather smoothly. COVID was, and still is, awful—but the silver lining for me was the time I got back from the commute and the ability to have my own amenities throughout the day. I’ve been able to spend more time with my 20 month old toddler than I could have ever imagined having before work from home.</p>
<p>Throughout the last few years we had a couple of scares that work from home would be changing. I’d get real angry and do the whole song and dance of emailing our CEO to express all the downsides of changing the policy, especially for my fairly unique situation. There’d be enough outrage that they’d back off, but I always had the feeling that it was only a matter of time.</p>
<p>Enter last week when we received an email that the policy would be changing at the beginning of January. I may have been naive, but I assumed that the policy wouldn’t apply to me because I had been working remotely prior to the work from home policy—just out of a satellite office and not my home. All the reasons for bringing everyone back to the office didn’t apply to working from a satellite office (I doubt I’ll be doing much <em>innovating</em> with the folks there). The policy does apply to me and my options are to come into headquarters (which is an impractical drive) or go back to the satellite office (which they aren’t sure even has a desk for me anymore).</p>
<p>It’s not a great feeling and a younger me may have gotten upset and felt some sort of injustice. To be honest, I feel a bit bummed that the company doesn’t value me as much as I would have thought given my performance, but that’s how things go sometimes. No sense dwelling on the situation, at least I’ve been given six months to land on my feet elsewhere.</p>
<p><strong>All this to say, I’m currently looking for a Front-End Engineering position! Ideally working on a centralized team building out a component library or design system, but I’m open to anything interesting.</strong> 😄</p>
<p><a href="https://sledsworth.com/resume/">Check out my résumé</a> and <a href="mailTo:[email protected]">get in touch</a> if you’d think I’d be a good fit!</p>personalSteve Ledsworth ([email protected])Iconfactory Pixel Portraithttps://sledsworth.com/posts/2024/iconfactory-pixel-portraithttps://sledsworth.com/posts/2024/iconfactory-pixel-portrait<p>I gave them tough source material and the result shows.</p>
Fri, 21 Jun 2024 20:14:44 GMT<p>Here is the source material:
<img alt="Portrait of me" loading="lazy" width="1677" height="1677" src="https://sledsworth.com/_astro/avatar.D7mdapNK_Z2jniIK.webp" /></p>
<p>Here is the Iconfactory pixel portrait result:
<img alt="Iconfactory pixel portrait of me" loading="lazy" width="2048" height="2048" src="https://sledsworth.com/_astro/avatar-pixel-iconfactory.C-rbxhOM_2db4Xe.webp" /></p>
<p>😅 It’s not great. I’m guessing my eyes effectively being closed in the photo didn’t do me any favors.</p>
<p>That being said, I give them a pass—it was a $60 add-on to the Tapestry Kickstarter and while I’m not all that thrilled with the portrait, I’m pretty happy to be supporting a company that by and large does great work.</p>Steve Ledsworth ([email protected])Magnetarhttps://sledsworth.com/posts/2024/magentarhttps://sledsworth.com/posts/2024/magentar<p>A Playdate space adventure that will hopefully see the light of day.</p>
Tue, 30 Apr 2024 20:14:44 GMT<p>When the Playdate was first announced years ago I had thought up this game about traversing the universe as a neutron star. I finally found time to do a rough prototype and think it could have legs!</p>
<p>I created teaser splash screen! It’s this sort of thing that is totally not what I should be working on but also gets me excited to continue to progress on.</p>
<p>Your browser does not support the video tag.</p>videogamesdevSteve Ledsworth ([email protected])🧇 waffle.how Featured on Google Registry's get.howhttps://sledsworth.com/posts/2024/waffle-how-on-get-howhttps://sledsworth.com/posts/2024/waffle-how-on-get-how<p>My silly site <a href="https://waffle.how">waffle.how</a> was featured on <a href="https://get.how">get.how</a>, which is part of Google Registry’s domain marketing campaign.</p>
Tue, 30 Apr 2024 18:32:29 GMT<p>My silly site <a href="https://waffle.how">waffle.how</a> was featured on <a href="https://get.how">get.how</a>, which is part of Google Registry’s domain marketing campaign. I did approve the questionable copy (I tend to be overly agreeable in these instances), but I am pretty bummed that they somehow botched the image as well. 😅</p>Steve Ledsworth ([email protected])What Language Should Beginning Programmer's Choose?https://sledsworth.com/posts/2024/what-language-should-beginners-choosehttps://sledsworth.com/posts/2024/what-language-should-beginners-choose<p>I’m surprised it wasn’t mentioned in the blog post, but I find this incredibly easy to answer: <strong>The language that will help you build the thing that got you interested in programming to begin with.</strong></p>
Fri, 26 Apr 2024 03:10:08 GMT<p>I’m surprised it wasn’t mentioned in the blog post, but I find this incredibly easy to answer: <strong>The language that will help you build the thing that got you interested in programming to begin with.</strong></p>
<p>You want to make a website? HTML, CSS, and JavaScript (if needed). Something native to Apple platforms? Swift. A videogame? Buy a Playdate and learn C or Lua. And so on.</p>
<p>If you truly don’t have something you’d like to build in mind (there has to be something!), I’d just open a browser and write some JavaScript. No need for complex build tools and compilation, plenty of tutorials, and good work opportunities if you are looking to write software professionally in the future.</p>webdevSteve Ledsworth ([email protected])Stop the Madness of Junk Mailhttps://sledsworth.com/posts/2024/junk-mailhttps://sledsworth.com/posts/2024/junk-mail<p>I had no idea services existed to limit the junk mail received in the US.</p>
Thu, 18 Apr 2024 00:00:00 GMT<p>I cannot believe I hadn’t seen <a href="https://consumer.ftc.gov/articles/how-stop-junk-mail">these services to stop junk mail</a> before.</p>
<p>On principle I hate that I have to spend $5 to stop the relentless barrage that is junk mail, but if they can stop even a fraction it will be well worth the cost.</p>Steve Ledsworth ([email protected])Project Tapestry Development Detailshttps://sledsworth.com/posts/2024/project-tapestry-detailshttps://sledsworth.com/posts/2024/project-tapestry-details<p>Craig Hockenberry from Iconfactory discusses how to develop plug-ins for the timeline.</p>
Tue, 06 Feb 2024 18:41:46 GMT<p><a href="https://www.kickstarter.com/projects/iconfactory/project-tapestry">Project Tapestry was funded in 4 days</a>!</p>
<p>Craig Hokenberry introduced how plug-in development for Tapestry will look in a <a href="https://blog.iconfactory.com/2024/02/tapestry-unwoven/">blog post</a> and <a href="https://www.youtube.com/watch?app=desktop&v=H5C2_zwy8cQ">Youtube video</a>.</p>
<p>If you are like me, you’d rather just see the <a href="https://github.com/TheIconfactory/Tapestry">docs, which are available on Github</a>. I like the thought that went into security and while I’m biased, JavaScript as the scripting language makes a ton of sense to me. I’m definitely going to keep an eye out for plug-ins I could contribute.</p>Steve Ledsworth ([email protected])Iconfactory's Project Tapestryhttps://sledsworth.com/posts/2024/project-tapestryhttps://sledsworth.com/posts/2024/project-tapestry<p>Iconfactory announces their next project.</p>
Tue, 30 Jan 2024 19:11:29 GMT<p>The <a href="https://iconfactory.com/">Iconfactory</a> has a <a href="https://www.kickstarter.com/projects/iconfactory/project-tapestry">Kickstarter for a new iOS application called Project Tapestry</a>. The pitch is that the internet is too damn big and fragmented to keep up with all the things of interest–wouldn’t it be great if everything was all in one place?</p>
<p>I’m skeptical that this is a solvable problem. There are walled gardens that cannot be included. Hell, even <a href="https://en.wikipedia.org/wiki/RSS">RSS</a> feeds are a clickbait shell of what they used to be. I don’t know how much of the internet needs to be available in Tapestry to <em>feel</em> like I don’t need to check another dozen apps, but it surely is more than my Mastodon timeline and RSS feeds.</p>
<p>Yet, I can’t help but be excited to see what the folks at Iconfactory come up with. They’ve been making quality software for decades and they seem pretty jazzed with what they are cooking up.</p>
<p><a href="https://mastodon.social/@chockenberry/111846294050408458">Craig Hockenberry on Mastodon:</a></p>
<blockquote>
<p>I can’t wait to explain how we’re doing Project Tapestry. It’s simple, powerful, and most importantly, extensible. If anything, we’re underselling the capabilities in the video and pitch.</p>
</blockquote>
<p>Consider my interest piqued. Allowing for 3rd party extensions opens up all sorts of opportunities. I do wonder if this is something Apple will allow through app review though? Regardless, $40 feels like a small price to pay to support a great indie software shop and if they end up solving the internet fragmentation problem thats just icing.</p>Steve Ledsworth ([email protected])App Defaults, 2024https://sledsworth.com/posts/2024/app-defaultshttps://sledsworth.com/posts/2024/app-defaults<p>My currently used apps, 2024 edition!</p>
Mon, 29 Jan 2024 19:38:22 GMT<ul>
<li><strong>📨 Mail Client:</strong> <a href="https://mimestream.com/">Mimestream</a> on the Mac and <a href="https://sparkmailapp.com/">Spark</a> on iOS.</li>
<li><strong>📮 Mail Server:</strong> <a href="https://mail.google.com/">Gmail</a></li>
<li><strong>📝 Notes:</strong> <a href="https://bear.app/">Bear</a></li>
<li><strong>✅ To-Do:</strong> <a href="https://culturedcode.com/things/">Things</a></li>
<li><strong>📷 iPhone Photo Shooting:</strong> Camera.app and <a href="https://halide.cam/">Halide</a></li>
<li><strong>🟦 Photo Management:</strong> Photos.app and <a href="https://www.gentlemencoders.com/">RAW Power</a></li>
<li><strong>📆 Calendar:</strong> <a href="https://flexibits.com/fantastical">Fantastical</a></li>
<li><strong>📁 Cloud File Storage:</strong> iCloud Drive and <a href="https://github.com/">Github</a></li>
<li><strong>📖 RSS:</strong> <a href="https://readwise.io/read">Readwise Reader</a></li>
<li><strong>🙍🏻♂️ Contacts:</strong> <a href="https://flexibits.com/cardhop">Cardhop</a> and Contacts.app</li>
<li><strong>🌐 Browser:</strong> Safari.app mostly, but <a href="https://arc.net/blog/arc-search">Arc Search</a> has my attention. For web development I still tend to use <a href="https://www.google.com/chrome/">Chrome</a>.</li>
<li><strong>💬 Chat:</strong> Messages.app for personal use, <a href="https://slack.com/">Slack</a> and <a href="https://discord.com/">Discord</a> for work and larger communities.</li>
<li><strong>🔖 Bookmarks:</strong> <a href="https://readwise.io/read">Readwise Reader</a> and Safari.app</li>
<li><strong>📑 Read It Later:</strong> <a href="https://readwise.io/read">Readwise Reader</a></li>
<li><strong>📜 Word Processing:</strong> I kind of hate this category of app. I’m more inclined to use something like <a href="https://bear.app/">Bear</a> or <a href="https://ia.net/writer">iA Writer</a> than a full fledged word processor.</li>
<li><strong>📈 Spreadsheets:</strong> Numbers.app and <a href="https://soulver.app/">Soulver</a></li>
<li><strong>📊 Presentations:</strong> I’m terrified of presenting, but still do it occasionally because it’s “good for my career” and “an important skill”. Generally, <a href="https://www.microsoft.com/en-us/microsoft-365/powerpoint">PowerPoint</a> is forced upon me, but if I had a choice it’d be <a href="https://ia.net/presenter">iA Presenter</a>.</li>
<li><strong>🛒 Shopping Lists:</strong> Reminders.app</li>
<li><strong>🍴 Meal Planning:</strong> <a href="https://mela.recipes/">Mela</a></li>
<li><strong>💰 Budgeting and Personal Finance:</strong> <a href="https://www.ynab.com/">YNAB</a></li>
<li><strong>📰 News:</strong> <a href="https://readwise.io/read">Readwise Reader</a> (<a href="https://www.nytimes.com/">NY Times</a>, <a href="https://www.theatlantic.com/">The Atlantic</a>, <a href="https://www.theguardian.com/us">The Guardian</a>, <a href="https://www.propublica.org/">ProPublic</a>, <a href="https://www.politico.com/">Politico</a> for news-news, I have all sorts of other RSS feeds for different topics).</li>
<li><strong>🎵 Music:</strong> Music.app</li>
<li><strong>🎤 Podcasts:</strong> <a href="https://overcast.fm/">Overcast</a></li>
<li><strong>🔐 Password Management:</strong> <a href="https://1password.com/">1Password</a></li>
</ul>
<hr />
<ul>
<li><strong>🐘 Mastodon:</strong> <a href="https://tapbots.com/ivory/">Ivory</a></li>
<li><strong>⌨️ Launcher:</strong> Spotlight and <a href="https://www.raycast.com/">Raycast</a></li>
<li><strong>🛤️ Habit Tracking:</strong> <a href="https://culturedcode.com/things/">Things</a></li>
<li><strong>🌤️ Weather:</strong> <a href="https://www.meetcarrot.com/weather/">Carrot Weather</a></li>
<li><strong>👨🏻💻 Terminal:</strong> Terminal.app and testing <a href="https://www.warp.dev/">Warp</a></li>
<li><strong>🧮 Code Editor:</strong> Xcode.app, <a href="https://nova.app/">Nova</a> and <a href="https://code.visualstudio.com/">Visual Studio Code</a></li>
</ul>Steve Ledsworth ([email protected])A Tale of Basic Auth & Buffershttps://sledsworth.com/posts/2021/tale-of-basic-authhttps://sledsworth.com/posts/2021/tale-of-basic-auth<p>When does one stop installing dependencies and write some code for themselves?</p>
Thu, 22 Jul 2021 15:10:18 GMT<p>Recently, I was mentoring an intern and we had a need to make an HTTP call that required basic authorization in NodeJS. Having done this before, I came up with something like:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span> </span><span>function</span><span> </span><span>withBasicAuth</span><span>(</span><span>headers</span><span> </span><span>=</span><span> </span><span>{},</span><span> </span><span>username</span><span>,</span><span> </span><span>password</span><span>)</span><span> </span><span>{</span></div></div><div><div><span> </span><span>const</span><span> </span><span>encodedCredentials</span><span> </span><span>=</span><span> </span><span>Buffer</span><span>.</span><span>from</span><span>(</span><span>`</span><span>${</span><span>username</span><span>}</span><span>:</span><span>${</span><span>password</span><span>}</span><span>`</span><span>)</span><span>.</span><span>toString</span><span>(</span><span>'base64'</span><span>)</span></div></div><div><div><span> </span><span>return</span><span> </span><span>{</span></div></div><div><div><span> </span><span>...</span><span>headers</span><span>,</span></div></div><div><div><span><span> </span></span><span>Authorization</span><span>:</span><span> </span><span>`Basic </span><span>${</span><span>encodedCredentials</span><span>}</span><span>`</span></div></div><div><div><span> </span><span>}</span></div></div><div><div><span> </span><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>These being the important bits:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>Buffer</span><span>.</span><span>from</span><span>(</span><span>`</span><span>${</span><span>username</span><span>}</span><span>:</span><span>${</span><span>password</span><span>}</span><span>`</span><span>)</span><span>.</span><span>toString</span><span>(</span><span>'base64'</span><span>)</span></div></div><div><div><span>//</span><span> and</span></div></div><div><div><span>Authorization</span><span>:</span><span> </span><span>`Basic </span><span>${</span><span>encodedCredentials</span><span>}</span><span>`</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>In a code review for our intern my colleague suggested that the intern instead install the package <code>basic-authorization-header</code>, which has a dependency on <code>basic-auth-token</code>…which, at the end of the day does: <code>new Buffer(string).toString(ENCODING)</code>. Surely, this code is so simple that the <a href="https://github.com/wilmoore/basic-auth-token.js/commits/master">six years it’s gone without maintenance</a> should be fine, right?</p>
<p><a href="https://nodejs.org/en/docs/guides/buffer-constructor-deprecation/">Looking at the Node documentation</a> <code>new Buffer()</code> has been deprecated due to security and usability concerns in favor of using <code>Buffer.alloc</code> or <code>Buffer.from</code> constructor functions.</p>
<p>I didn’t recall seeing any deprecation warnings when running the code with <code>basic-authorization-header</code> installed, so I created a simple application to test it out in isolation:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>const</span><span> </span><span>token</span><span> </span><span>=</span><span> </span><span>require</span><span>(</span><span>'basic-auth-token'</span><span>)</span></div></div><div><div><span>console</span><span>.</span><span>log</span><span>(</span><span>token</span><span>(</span><span>'test'</span><span>,</span><span> </span><span>'test'</span><span>))</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>No deprecation warning. I also ran <code>npm audit</code> which didn’t seem to reveal any issues either.</p>
<p>Just for a sanity check, I did:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>const</span><span> </span><span>token</span><span> </span><span>=</span><span> </span><span>(</span><span>username</span><span>,</span><span> </span><span>password</span><span>)</span><span> </span><span>=></span><span> </span><span>new</span><span> </span><span>Buffer</span><span>(</span><span>`</span><span>${</span><span>username</span><span>}</span><span>:</span><span>${</span><span>password</span><span>}</span><span>`</span><span>)</span><span>.</span><span>toString</span><span>(</span><span>'base64'</span><span>)</span></div></div><div><div><span>console</span><span>.</span><span>log</span><span>(</span><span>token</span><span>(</span><span>'test'</span><span>,</span><span> </span><span>'test'</span><span>))</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>And sure enough I finally got the deprecation warning (I’m not sure if NodeJS just doesn’t warn code found in <code>node_modules</code> or what?).</p>
<p>At this point I was interested to see if the security concern would apply to this little library. With a little searching I found <a href="https://github.com/nodejs/node/issues/4660">the issue on Github</a> stating that if an attacker can get a <code>Number</code> passed to <code>new Buffer()</code> they would receive an uninitialized block of memory that could disclose sensitive data.</p>
<p>Fortunately, it appears our little library doesn’t have this issue, as it uses <code>[user, pass].join(':')</code> to coerce to a <code>String</code>.</p>
<p>Now, I’m sure there are maintained basic authorization libraries available out there, but why bother? At what point do you do the work yourself instead of consulting NPM?</p>webdevSteve Ledsworth ([email protected])First Impressions: iPhone 12 Prohttps://sledsworth.com/posts/2020/iphone-12-pro-first-impressionshttps://sledsworth.com/posts/2020/iphone-12-pro-first-impressions<p>I’m a few days in with the new iPhone and I’m not sure I’ll keep it.</p>
Tue, 27 Oct 2020 03:23:26 GMT<p>The iPhone 12 Pro is the first iPhone I’ve gotten that I have felt some amount of regression. This first impression may seem like I think the iPhone 12 Pro is bad, but it’s more a testament of how good the iPhone has become.</p>
<p>What I’ve noticed in my short time with the new device:</p>
<ul>
<li>My iPhone XS was already a touch too big—the iPhone 12 Pro is only slightly bigger, but it feels significant in my hand. It’s uncomfortable to use with one hand and doesn’t feel secure. The additional screen size doesn’t feel like it adds any value, so this feels like a huge loss for me. The matte glass back looks great and feels nice, but isn’t nearly as grippy as the glossy backs of the iPhone XS (or the standard iPhone 12). Finally, the flat edges look great, but I think it was a mistake to return to this. The rounded edges give you more surface area in your hand to grip the device, it’s more comfortable without sharp corners, and edge gestures feel better with the slightly rounded glass that leads into the rounded edge.</li>
<li>Fingerprints everywhere! This is mostly on me because I went with Pacific Blue instead of stainless steel or gold, but after a days worth of use this thing looks gross.</li>
<li>The ridiculously good—and huge—camera is heavy, leading to a weight distribution that is awkward and adds to the uncomfortable feel in a single hand.</li>
<li>The biggest issue for me (admittedly, no one else cares) is the loss of 3D touch. Losing it showed me how heavily I relied on it. Text insertion and selection, peak, and long press actions were all snappier when used on an iPhone with 3D touch. In fact, text selection cannot be done now while moving the cursor on the keyboard (it was a second level function when moving the cursor with the keyboard gesture). Again, most people probably didn’t know these actions existed, but I did and I do miss them. The device feels slow when I have to wait on it to respond to long presses instead of 3D touch.</li>
</ul>
<p>It’s hard to knock Apple for these changes (except maybe the size, which would have been better if they kept the screen size the same compared to the 11 and made the overall device smaller). Most of my other complaints are just trade-offs they made. More camera sensors are going to add weight and most find the camera more important than the slight awkwardness in hand that results from it. 3D touch wasn’t used and is responsible for making the iPhone 11’s battery life better and making the overall cost cheaper.</p>
<p>I’m on the fence about returning it and just refreshing my iPhone XS (it is pretty beat up and the battery health is under 80%). I’d really miss the camera on the iPhone 12 Pro (especially low light and the ultra wide lens). Other than that, I don’t really care about the newer features. Alternatively, I might just go with a iPhone 12 mini as it solves a ton of my problems listed, but it still doesn’t have 3D touch. I suppose I’ll give it another week.</p>techappleSteve Ledsworth ([email protected])Using San Francisco Rounded on the Webhttps://sledsworth.com/posts/2020/using-san-francisco-rounded-on-the-webhttps://sledsworth.com/posts/2020/using-san-francisco-rounded-on-the-webTue, 29 Sep 2020 19:56:08 GMT<p>I’ve been trying various fonts here in search of a combination that fits. The most recent being <a href="https://www.typography.com">Hoefler & Co.’s</a> excellent <a href="https://www.typography.com/fonts/gotham-rounded/overview">Gotham Rounded</a> and <a href="https://www.typography.com/fonts/sentinel/overview">Sentinel</a>.</p>
<p>As the user, you come here to engage with the words—making the font the most important aspect of this site. I want to make that interaction feel special and a good font provides that personality. Unfortunately, while Hoefler & Co. provides excellent fonts, their <a href="https://www.typography.com/webfonts">cloud.typography</a> plan looks great on paper, but leaves a lot to be desired from a performance standpoint<sup><a href="#user-content-fn-1">1</a></sup>. Being a personal site that exists as a hobby, I cannot justify footing the expense of the self-hosted plans, as Hoefler & Co. suggested I do when I brought up my issues with them. Long story short, I’m not using custom fonts for my next update to this site.</p>
<p>Looking at built in options, I’ve come to love the modern and soft feel of the <a href="https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/typography/">San Francisco Rounded</a> typeface. Interestingly, adding the font family directly to the CSS property worked in all modern browsers except Safari:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>h1</span><span>,</span><span> </span><span>h2</span><span>,</span><span> </span><span>h3</span><span> </span><span>{</span></div></div><div><div><span> </span><span>font-family</span><span>:</span><span> </span><span>"SF Pro Rounded"</span><span>,</span><span> system-ui</span><span>,</span><span> san-serif</span><span>;</span></div></div><div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>This led me to realize that Apple considers SF Rounded to be a variant of SF—another typeface, not a different font. I’m not sure that explains the decision to disallow targeting the font by name with <code>"SF Pro Rounded"</code>, but that is the best reason I could come up with. Doing a bit more searching led me to the system ui font variance <code>ui-rounded</code>, which is exactly what I needed:</p>
<div><figure><figcaption></figcaption><pre><code><div><div><span>h1</span><span>,</span><span> </span><span>h2</span><span>,</span><span> </span><span>h3</span><span> </span><span>{</span></div></div><div><div><span> </span><span>font-family</span><span>:</span><span> </span><span>ui-rounded</span><span>,</span><span> </span><span>"SF Pro Rounded"</span><span>,</span><span> system-ui</span><span>,</span><span> san-serif</span><span>;</span></div></div><div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
<p>Note that I kept <code>"SF Pro Rounded"</code> for browsers that don’t support <code>ui-rounded</code> yet.</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p>I’m hoping to get around to writing about my issues with <a href="https://www.typography.com/webfonts">cloud.typography</a> and the best solutions I could come up with for other’s running into similar performance bottlenecks. <a href="#user-content-fnref-1">↩</a></p>
</li>
</ol>
</section>webdevappleSteve Ledsworth ([email protected])Xbox Game Streaming Coming to iPhone?https://sledsworth.com/posts/2020/xbox-streaming-service-on-ioshttps://sledsworth.com/posts/2020/xbox-streaming-service-on-iosWed, 23 Sep 2020 12:28:09 GMT<p>No, not <a href="https://www.xbox.com/en-US/xbox-game-pass/cloud-gaming/home">xCloud</a>, the other service—called <em>Xbox Game Streaming</em>. Given AppStore rule <a href="https://developer.apple.com/app-store/review/guidelines/#minimum-functionality">4.2.7 Remote Desktop Clients</a>, it would seem just streaming the Xbox console content is allowed. In fact, <a href="https://apps.apple.com/us/app/ps4-remote-play/id1436192460">Sony’s Remote Play App</a> is already doing this.</p>
<p>I’m not sure what’s worse—<a href="https://www.polygon.com/2020/9/22/21451484/xbox-series-x-preorder-one-mistake-s-microsoft-naming">Xbox’s confusingly similar name for all of its endeavors</a>, or Apple’s user hostile rules and guidelines.</p>
<p>Ehh…it’s Apple’s hostile rules and guidelines.</p>techapplevideogamesSteve Ledsworth ([email protected])Microsoft Acquires Bethesdahttps://sledsworth.com/posts/2020/microsoft-acquires-bethesdahttps://sledsworth.com/posts/2020/microsoft-acquires-bethesdaMon, 21 Sep 2020 13:14:00 GMT<p>Remember the Xbox showcase a few months ago (yes, it feels like a lifetime ago in pandemic time) where <a href="https://sledsworth.com/xbox-july-showcase">I said GamePass was where the real value was for next-gen Xbox</a>? Well, it just got a lot more valuable.</p>techvideogamesSteve Ledsworth ([email protected])Nova, Panic's New Text Editorhttps://sledsworth.com/posts/2020/nova-app-releasehttps://sledsworth.com/posts/2020/nova-app-releaseSun, 20 Sep 2020 15:11:15 GMT<p>I’ve had a chance to test Nova for the last few months—it’s real good!</p>
<p>It’s a subscription model now, but—as expected from Panic—it’s extremely fair. Pay annually and you’ll continue to seamlessly get updates. Let your subscription lapse and you’ll get to keep using Nova at the version you stopped your subscription<sup><a href="#user-content-fn-1">1</a></sup>. $100 up front, $50 a year after that, discount of $20 if you are coming from Coda 2.</p>
<p>Competition in this field is fierce—with <a href="https://code.visualstudio.com">VS Code</a><sup><a href="#user-content-fn-2">2</a></sup> and <a href="https://atom.io">Atom</a> both being popular—and free—I worry that Nova won’t be able to compete. Nova is far from feature parity, Mac only, and is paid—it’s already lost the vast majority of potential users. What it does have, is Mac-like-ness and a modern feel, which is a niche that could be served<sup><a href="#user-content-fn-3">3</a></sup>. I’m definitely going to give it a fair try to see if it can meet my needs, because it is a joy to use. Finally, this is totally wishful thinking, but if they could provide an honest to goodness iPad editor with Nova—and it was bundled in the current subscription price—they’d have a competitive edge over editors like VS Code.</p>
<section><h2>Footnotes</h2>
<ol>
<li>
<p><a href="https://www.sketch.com/pricing/">Sketch App</a> is the first app I’m aware of using this model. I like it. 👍 <a href="#user-content-fnref-1">↩</a></p>
</li>
<li>
<p>Say what you want about Electron apps—VS Code is a fantastic editor that I use daily. <a href="#user-content-fnref-2">↩</a></p>
</li>
<li>
<p><a href="http://www.barebones.com/products/bbedit/index.html">BB Edit</a> is a Mac-like editor—but it definitely is not modern by my estimation. It feels clunky to me, a millennial, but there is a large group of Mac faithfuls that love the thing and I’m happy it exists for them. <a href="#user-content-fnref-3">↩</a></p>
</li>
</ol>
</section>appletechSteve Ledsworth ([email protected])Next Gen Xboxes Launch November 10thhttps://sledsworth.com/posts/2020/xbox-series-s-and-x-releasehttps://sledsworth.com/posts/2020/xbox-series-s-and-x-releaseThu, 10 Sep 2020 02:00:33 GMT<p>I’m really digging Microsoft’s strategy with the next generation of Xbox. No nonsense, inclusive, and meeting players where they are. Sure, there aren’t any day one exclusives—and won’t be any for some time—but there are still tangible benefits with smart delivery features bringing you the games you already own, but with shorter load times and better graphics. That may not sell a $500 console on its own, but Microsoft knows that. Enter Xbox All Access: pay $35 a month for hundreds of first party games, EA Play, Xbox Live, and the most powerful videogame console created to date, the Xbox Series X. As someone who already pays for Xbox Game Pass Ultimate, this is a steal—actually saving me money over the course of two years if I were to buy the Series X upfront. Sign me up!</p>
<p>Preorders for both the Series S and Series X start on September 22nd. In both cases, I believe the Xbox All Access packages are the way to go. There is a fairly good chance that you won’t need to buy any games if Xbox Game Pass continues to improve at this steady rate. Microsoft is on the cusp of Netflix for games—and I couldn’t be more excited!</p>videogamesSteve Ledsworth ([email protected])Nintendo marks the 35th anniversary of Super Mario Bros. with games, products and in-game eventshttps://sledsworth.com/posts/2020/mario-35th-anniversaryhttps://sledsworth.com/posts/2020/mario-35th-anniversaryThu, 03 Sep 2020 20:47:17 GMT<p>I’ve been holding my breath for a the 35th Super Mario Anniversary with hopes that the rumored 3D Mario Remaster would include Super Mario Galaxy 2 and Super Mario 3D World. Those are the two 3D Mario games that I haven’t had a chance to beat in their entirety, which is a shame, because Super Mario Galaxy 2 seemed excellent for the short time I played it. My wish came half true—sort of.</p>
<p><a href="https://www.nintendo.com/games/detail/super-mario-3d-world-plus-bowsers-fury-switch/?">Super Mario 3D World</a> will be released, but separately from the <a href="https://supermario3dallstars.nintendo.com">3D Mario Remaster</a>. Seems strange at first, but most ported Wii U games to the Switch have been remastered with additional content added, not to mention I never owned a Wii U (along with everyone else) so these games are new to me anyway.</p>
<p><a href="https://en.wikipedia.org/wiki/Super_Mario_Galaxy_2">Super Mario Galaxy 2</a>, on the other hand, is nowhere to be seen 😢. The Super Mario 3D Remaster includes <a href="https://supermario3dallstars.nintendo.com/super-mario-64/">Super Mario 64</a>, <a href="https://supermario3dallstars.nintendo.com/super-mario-sunshine/">Super Mario Sunshine</a>, and <a href="https://supermario3dallstars.nintendo.com/super-mario-galaxy/">Super Mario Galaxy</a>. I’ve beat Super Mario 64 at least 3 times over the years and while I’m still amazed at the design of that game for being Nintendo’s first hurray into 3D games, it is showing it’s age. Sunshine was good, but not my favorite. I’m not sure I want to spend my limited gaming time revisiting it. Super Mario Galaxy I remember loving, so I might get it just for a portable version of Galaxy to play on the go.</p>
<p>Those were the two biggest announcements today for me, although, if the Mario Kart Live: Home Circuit isn’t gimmicky (it looks real questionable), it could be a ton of fun. Definitely one of those get-it-for-your-neice-because-owning-it-as-a-full-grown-man-child-is-embarrassing type situations.</p>
<p>Finally, I’m always interested in random retro merchandise from Nintendo, so I’m hopeful that will be interesting.</p>
<p>All the announcements can be seen <a href="https://www.youtube.com/watch?v=s_UcjEq2Dgk">on the Nintendo Direct released today</a>.</p>
<p>Finally, Super Mario 3D Remaster is only going to be available through March 2021—which seems like such an odd choice. I can’t believe that they would remove the games without being able to get them in some other way. Nintendo has dabbled in subscriptions with <a href="https://www.nintendo.com/switch/online-service/">Nintendo Online</a>, maybe that expands to include some of these remakes? It’s unlikely, but I can’t believe they would put in the porting effort for it to only exist for 6 months.</p>videogamesSteve Ledsworth ([email protected])Why you should hire a frontend developerhttps://sledsworth.com/posts/2020/why-you-should-hire-a-frontend-developerhttps://sledsworth.com/posts/2020/why-you-should-hire-a-frontend-developerThu, 27 Aug 2020 04:12:20 GMT<p>It’s funny, I thought we were past the need to convince companies to hire front-end developers—then I realized the company I work for doesn’t do this outright. Sure, we hire generic developers with the expectation they can write HTML and JS (usually they can’t, at least not well).</p>
<p>This point <a href="https://technology.blog.gov.uk/author/matt-hobbs/">Matt Hobbs</a> touches on is one I’ve tried to argue to no avail:</p>
<blockquote>
<p>If you do not have a frontend developer there is a high risk that the good work the rest of the team does will not be presented to users in the best way.</p>
</blockquote>webdevSteve Ledsworth ([email protected])Halo Infinite Delayed to 2021https://sledsworth.com/posts/2020/halo-infinite-delayed-to-2021https://sledsworth.com/posts/2020/halo-infinite-delayed-to-2021Thu, 13 Aug 2020 14:01:39 GMT<p>Bummer. I’ve gotten into Halo 5 again as the pandemic continues to rage on and was really looking forward to spending some more time with the Chief in new and unfamiliar territories this winter.</p>
<p>In the grand scheme of things, I don’t think this will effect Xbox Series X launch too much—Halo Infinite is launching for both Xbox One and Xbox Series X, so the Series X isn’t required to play it to begin with.</p>
<p>What would hurt the Series X launch would be a mediocre Halo that, instead of showcasing the power of next-gen, was filled with <a href="https://www.windowscentral.com/halo-infinites-craig-brute-spiciest-meme-right-now">meme worthy Craigs</a>.</p>videogamesSteve Ledsworth ([email protected])Mozilla cuts 250 jobs, says Firefox development will be affectedhttps://sledsworth.com/posts/2020/mozilla-cuts-250-jobs-says-firefox-development-will-be-affectedhttps://sledsworth.com/posts/2020/mozilla-cuts-250-jobs-says-firefox-development-will-be-affectedWed, 12 Aug 2020 16:50:32 GMT<p><a href="https://developer.mozilla.org/en-US/">MDN</a> is arguably the most valuable web developer resource around—and its future now is in jeopardy. As an individual making my living developing for the web, I find this unsettling. Even more, I hadn’t a clue that <a href="https://www.zdnet.com/article/sources-mozilla-expected-to-extend-its-google-search-deal/">Google was responsible for the vast majority of Mozilla’s revenue</a>.</p>
<p>We are dangerously close to a world where Google has sole ownership of the web and the portal to access it.</p>techSteve Ledsworth ([email protected])Microsoft Cuts xCloud iOS Testing Early as its Future on Apple Devices Remains Unclearhttps://sledsworth.com/posts/2020/microsoft-cuts-xcloud-ios-testing-early-as-its-future-on-apple-devices-remains-unclearhttps://sledsworth.com/posts/2020/microsoft-cuts-xcloud-ios-testing-early-as-its-future-on-apple-devices-remains-unclearThu, 06 Aug 2020 00:00:00 GMT<p>Of course—games aren’t listed in Apple’s <a href="https://developer.apple.com/app-store/review/guidelines/#reader-apps">“reader” rules</a>. What nonsense.</p>appletechSteve Ledsworth ([email protected])When Microsoft's ambitious 'Netflix of gaming' service launches in September, it won't arrive on Apple devices – here's whyhttps://sledsworth.com/posts/2020/when-microsofts-ambitious-netflix-of-gaming-service-launches-in-september-it-wont-arrive-on-apple-devices--heres-whyhttps://sledsworth.com/posts/2020/when-microsofts-ambitious-netflix-of-gaming-service-launches-in-september-it-wont-arrive-on-apple-devices--heres-whyThu, 06 Aug 2020 00:00:00 GMT<blockquote>
<p>Given that Apple allows services like Netflix and Spotify without reviewing every piece of content, why not allow a similar service for gaming? The difference boils down to the medium, according to Apple: Games are interactive, unlike music and film, and there are consumer expectations baked into the App Store related to gaming.</p>
</blockquote>
<p>Ah yes, my expectations as a consumer are that if the game isn’t <a href="https://www.theatlantic.com/technology/archive/2013/07/ethics-candy-crush-pusher/312851/">riddled with psychological traps and dark UX patterns</a> to get users addicted and paying, Apple isn’t interested. Also—does Apple really think they have an edge in gaming? Imagine being so disconnected from reality to suggest Candy Crush is deserving over the likes of Halo or Destiny?</p>
<p>Snark aside, my expectation for this fall was that I would be able to play Destiny and Halo from my iPad with an Xbox controller, That doesn’t look like it’s going to happen anytime soon. Why add all this controller support and then shut out AAA games from existing on your platform?</p>appletechSteve Ledsworth ([email protected])Netlify Reaches One Million Devs!https://sledsworth.com/posts/2020/netlify-reaches-one-million-devshttps://sledsworth.com/posts/2020/netlify-reaches-one-million-devsMon, 03 Aug 2020 00:00:00 GMT<p>This is such a fun website. It reminds me of the <a href="https://css-tricks.com/in-defense-of-a-fussy-website/">article Sarah Drasner posted a few weeks back</a> calling for more care and excitement in our websites—unsurprisingly <a href="https://css-tricks.com/the-making-of-netlifys-million-devs-svg-animation-site/">she worked on the One Million Devs Netlify site</a>. The <a href="https://github.com/netlify/million-devs">code is available on GitHub</a> if you want to see how it was made.</p>techSteve Ledsworth ([email protected])Xbox Showcase: You Can’t Afford Not to Have Game Pass Ultimatehttps://sledsworth.com/posts/2020/xbox-july-showcasehttps://sledsworth.com/posts/2020/xbox-july-showcaseFri, 24 Jul 2020 00:00:00 GMT<p>On one hand, the Xbox Showcase was fairly underwhelming—it didn’t sell me on why the Xbox Series X is something I should have interest in. We knew Halo Infinite would be there, and what was shown was pretty safe, especially compared to the <a href="https://www.youtube.com/watch?v=bnWKCSsLOOU">brilliant Halo 2 E3 game demo</a>. Fable announcement was a surprise, but I’ve never been a huge fan of the franchise.</p>
<p>On the other hand, I will be able to play everything announced at the showcase without paying anything more than what I already pay for Xbox Game Pass. I would have spent $60 for Xbox Live, $60 in Destiny 2 expansions, and $60 for Halo Infinite—paying for the cost of Xbox Game Pass Ultimate for a year. Now I can play all sorts of additional content I may have missed as $60 is a fairly large barrier to entry when a purchase value is unknown. Icing on the cake? xCloud will be included in Game Pass Ultimate as well.</p>
<p>If you are an Xbox owner, Game Pass is what you can’t afford not to have. The Xbox Series X is nice, but Game Pass is where the real value lies.</p>videogamesSteve Ledsworth ([email protected])WWDC 2020 Predictions & Wishlisthttps://sledsworth.com/posts/2020/wwdc-2020-predictionshttps://sledsworth.com/posts/2020/wwdc-2020-predictions<p>A prediction on Apple’s WWDC announcements and my hopes moving forward as an Apple fan and developer.</p>
Sun, 21 Jun 2020 00:00:00 GMT<p>In my typical fashion, WWDC 2020 is a day away and I have yet to read through what rumors and predictions others have put out—let alone take the time to make my unqualified guesses. Usually my procrastination spoils the option of even having a take, as all the big secrets are already leaked. This WWDC seems to be fairly tightly wrapped, even with the theoretically less secure work from home setup Apple is running due to COVID-19.</p>
<h2>Predictions</h2>
<p>Some of these are absent of risk, but I’m hoping to really see a few through a bit more.</p>
<h3>iOS & iPadOS Dynamic Home Screen</h3>
<p>The headlining feature for iOS and iPadOS will be a more dynamic home screen. Thinking of what Apple already has that is close to this are the widgets on the left-most home screen pane—it’s logical to deprecate that screen entirely and extend that widget API to be a part of the home screen itself. I imagine it’ll be up to developers to decide the number of grid spaces a widget can expand, with some limitations set by Apple.</p>
<h3>Catalyst Improvements</h3>
<p>Catalyst <strong>has</strong> to get better. It’s just not a good experience—Apple has to know this. I do take some pause here though. Last year Craig Federighi made mention that it is more of a design decision than a technical limitation with Catalyst apps. Such a strange remark, given that clearly there are a lot of limitations developers have ran into over the course of the last year. Also, if it were a design decision, whoever thought that they ought to keep the iOS <code>UIPickerView</code> should be fired.</p>
<h3>ARM Mac Transition</h3>
<p>There is enough smoke here that I think this one is a give-me. How Apple positions itself and third-party developers is the more interesting question.</p>
<p>Providing transition hardware at the scale Apple would need to do so seems crazy—especially because it’d just be throw-away hardware. It they did provide hardware, it would be a puck device akin to the Apple TV or Mac Mini. This has other concerns, like the fact that Apple laptops are extremely popular among developers and you cannot make an assumption that they all have an external monitor available.</p>
<p>That leads me to believing the iPad Pro will be the developer hardware for testing macOS on ARM. It is weird and has it’s problems—like what does Apple do after the ARM Macs release? Or how do they handle the touchscreen on the iPad for macOS? These feel trivial to me compared to the issues of scaling developer hardware from nothing. The iPad Pro is already available in mass quantity and Apple doesn’t have a problem nickel-and-diming it’s developers. No need for external monitors. A decent number of developers probably already have one. Disabling the touchscreen when in macOS mode seems totally reasonable—and one of the reasons I feel like mouse support came to iPadOS at such a weird time. The iPad would be great developer transition hardware and would still be useful after the release of the ARM Mac, unlike dedicated hardware. The only thing that gets me hung up is what they do after ARM Macs are released.</p>
<p>I imagine if I had macOS on my iPad that I’d be hesitant to go back to iPadOS—and that isn’t a good look for Apple or iPadOS. I don’t know if Apple wants to let that genie out of the bottle yet, but my money is still on iPad as the developer device for ARM Macs</p>
<h3>Double Down on SwiftUI</h3>
<p>SwiftUI is rough around the edges, which is to be expected for such a young technology with such ambition. Professionally, I’m a web developer, so SwiftUI is especially exciting for me. It mimics a lot of the reactive, component driven UI frameworks you see on the web, like React. The first few weeks with SwiftUI last year was incredibly exciting. I was able to progress in ways that I couldn’t with <code>UIKit</code> <code>UIView</code>. It just clicked. Unfortunately, it didn’t take long to run into some insurmountable issues. There are pieces that are just incomplete, like a fair amount of components used to gather input from the user. There are plenty of bugs around the inputs that are there. Collection views seem to have their fair share of bugs and missing features as well.</p>
<p>Judging by the number of questions and guides online related to SwiftUI, I think Apple has a winner, but it needs to be refined and expanded on if they want to see it make it into more apps in the wild.</p>
<h2>Wishlist</h2>
<p>This one I’ll give in bullets:</p>
<ul>
<li><strong>Spritekit improvements</strong> or literally any sign to tell me it’s not being taken off life support. I’ve had fun with it, but there are bugs that are 3 years old that have gone without acknowledgement—not a good sign.</li>
<li><strong>SwiftUI improvements</strong>, I know I mentioned this in my predictions, but this could be the one thing that I believe will happen and that I also have been super excite by as well. 🤞</li>
<li><strong>Xcode for iPad</strong> would be great. I tend to gravitate to my iPad for consumption, but leave work to my Mac. It’s not that I don’t think an iPad can be used for work, it’s that I don’t want to jump through hoops to make it a work device. Also, as far as software development goes, it’s nearly impossible. With the distinction from iOS, I think Apple understands that for the iPad to move forward it needs to diverge from the phone. Pro apps is a pretty great way to start making that iPadOS distinction.</li>
<li><strong>AppStore economics</strong> are a mess. Look no further than the recent Hey debacle. Apple is asking for too much and as a result getting nothing, all the while developers and users suffer from ridiculous work-arounds. Personally, I don’t think the AppStore needs to be a loss-leader, but the Apple cut needs to be reevaluated—it’s just too damn much to blanket charge. There is a way for Apple, developers, and users to all profit—but that’s not gerrymandering the AppStore for the Amazons and Netflixes of the world and taking 30% of developers revenue.</li>
</ul>
<p>While the mishaps Apple has taken with developers recently and the inevitable format change COVID-19 will introduce I definitely feel the wind has been taken out of the sails a bit, but I’m still excited to see what comes out of WWDC 2020. The world is in a weird place, but it’s nice to get a boost of excitement instead of tragedy for a change. Even if it’s as silly as taking a guess at what the next year will look like for Apple.</p>appledevSteve Ledsworth ([email protected])