Shellsharks Blogroll - BlogFlock2026-06-22T14:28:42.171ZBlogFlockAdepts of 0xCC, destructured, Aaron Parecki, Trail of Bits Blog, fLaMEd, Westenberg, gynvael.coldwind//vx.log (pl), James' Coffee Blog, joelchrono, Evan Boehs, Kev Quirk, cool-as-heck, Posts feed, Sophie Koonin, cmdr-nova@internet:~$, <span>Songs</span> on the Security of Networks, Werd I/O, Johnny.Decimal, Robb Knight, Molly White, Hey, it's Jason!, Terence Eden’s BlogCybersecurity for the paranoid business traveller - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=644192026-06-22T11:34:18.000Z<p>Over the years, I've worked for organisations with various levels of risk tolerance for business travellers. Some have been (rightly) paranoid and others have been (wrongly) placid about the threats their employees face.</p>
<p>The fact is, individuals are often targeted for espionage, blackmail, or other state-sponsored attacks.</p>
<p>Here's a list of some of the different advice I've received, roughly sorted into levels of suitability. Start at the top and work your way down until you reach a suitable level.</p>
<h2 id="usb-sticks-no-thanks"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#usb-sticks-no-thanks">USB sticks? No thanks!</a></h2>
<p>At some point, you'll be given a gift of a decorative USB pen drive. It'll either be part of a goodie-bag or you'll be told it has all of this quarter's TPS reports on it.</p>
<p>You should thank them for their kind gift. On your way back to the hotel, drop the stick in a bin.</p>
<p>There's just too much which can go wrong with a USB stick. Maybe it has a virus. Maybe it is an exfiltration device. Maybe it has extreme pornography and the police will catch you with it. Just chuck it. If anyone asks, say you couldn't get it to work and can they please email you the information.</p>
<h2 id="usb-power-play-it-safe"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#usb-power-play-it-safe">USB Power? Play it safe!</a></h2>
<p>USB powers everything from your phone and laptop, to your headphone and eReader. But USB cables also carry data. Some devices can be silently hacked by plugging them in to a dodgy power port.</p>
<p>Is it <em>likely</em> that the USB socket on the airport bus has been set up to exfiltrate travellers' data? Probably not - but why take the risk?</p>
<p>The best thing you can do is to always charge from your own device. Get a travel charger or, ideally, a portable battery and <em>only</em> use that for charging.</p>
<p>For extra paranoia, you can buy USB condoms and charging-only cables - but they tend to be slower at charging.</p>
<h2 id="reduce-your-app-attack-surface"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#reduce-your-app-attack-surface">Reduce Your App Attack Surface</a></h2>
<p>Do you <em>need</em> all those apps on your phone? Will you cope without your banking apps, dating apps, streaming apps? Each one is a potential vector for abuse.</p>
<p>Is it legal for you to date your preferred romantic partner in your intended destination? You shouldn't have to hide yourself, but having an illegal app on your phone is a great way to get picked up by the police.</p>
<p>Go through your phone and uninstall anything which isn't important to the trip.</p>
<h2 id="a-vpn-probably-draws-more-attention-than-it-is-worth-but-browse-cautiously"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#a-vpn-probably-draws-more-attention-than-it-is-worth-but-browse-cautiously">A VPN probably draws more attention than it is worth, but browse cautiously</a></h2>
<p>This is slightly counter-intuitive. Every important site on the web uses HTTPS. The really important ones <a href="https://hstspreload.org/">are on a special list</a> which means your browser will <em>only</em> use a secure connection. The chances of your data being intercepted is minimal.</p>
<p>But using a VPN immediately makes your traffic look suspicious and, in some countries, may be illegal.</p>
<p>That said, while the contents of your communications will be private, their destination is easy to figure out. Don't browse pornography or any other site which is liable to get you in trouble. This may include news sites from outside the country.</p>
<h2 id="what-passwords-do-you-need"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#what-passwords-do-you-need">What passwords do you need?</a></h2>
<p>Hopefully you use a password manager - and hopefully all your passwords are unique. But do you really need to carry around <em>all</em> of them? You password manager almost certainly allows you to create a sub-account into which you can deposit anything you need for your trip.</p>
<p>Similarly, you don't need <em>all</em> your MFA codes with you. If you <em>do</em> need MFA please make sure it isn't coming through SMS.</p>
<h2 id="theyre-not-flirting-with-you"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#theyre-not-flirting-with-you">They're not flirting with you.</a></h2>
<p>Mate, you're a middle-aged sales rep who scored a trip to a conference in an exotic country. Do you <em>really</em> think that pretty young thing is enthralled by your tales of middle-management?</p>
<p>No.</p>
<p>At best, the photos will be used to blackmail you. At worst the police will claim that they're under the age of consent and <em>that</em> will be used to blackmail you.</p>
<h2 id="laptops-and-liability"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#laptops-and-liability">Laptops and Liability</a></h2>
<p>Your IT team has provided you with a laptop which is encrypted and biometricly secured, right? But do you need that <em>specific</em> laptop?</p>
<p>Grab a cheap laptop. Fill it with only the documents you need. When you get back home, toss it.</p>
<p>I'm quite serious, a £200 Chromebook is a cheap price to pay to prevent your secrets getting stolen or your network being infiltrated.</p>
<h2 id="what-else"><a href="https://shkspr.mobi/blog/2026/06/cybersecurity-for-the-paranoid-business-traveller/#what-else">What Else?</a></h2>
<p>Possibly you think some of these are overkill. Perhaps you think I'm not being paranoid enough. What would you add to the list?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64419&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">Over/Under Interview - Robb Knight • Posts • Atom Feedhttps://rknight.me/blog/over-under-interview/2026-06-22T09:55:58.000Z<p><strong>Avengers</strong></p>
<p>The movies, overrated with the exception of Infinity War/Endgame which was some of the best movie experiences I've ever had.</p>
<p>The comics, underrated. The stories from the comics is where it's at but it's not a medium that everyone can enjoy. There are so many great Avengers and Avengers-adjacent stories available if you're willing to give it a try. My recommendation is <a href="https://www.marvel.com/comics/series/25575/west_coast_avengers_2018_2019">Kelly Thompson's West Coast Avengers run</a>.</p>
<p><strong>Weeknotes</strong></p>
<p>Underrated. I <em>love</em> reading people's weeknotes and I've found it a useful tool to get out random thoughts I've had as well as share fun things I've seen online that week. The pressure to do them every week though, massively overrated. You don't need to do that to yourself, post when you want.</p>
<p><strong>Stickers</strong></p>
<p>Underrated. What a fun item stickers are but you've <em>got to use them</em>. Stick them on anything. Maybe <a href="https://maique.eu/tag/stickerSpotter">Maique will spot one you stuck somewhere</a>. I love stickers.</p>
<p><strong>BuJo</strong></p>
<p>This is a tough one. Bullet Journal the <em>brand</em>? Overrated. Intentionally or not, one look at the website shows that it exists now to sell courses, books, and other related services.</p>
<p>Bullet Journal the <em>system</em> on the other hand has a lot of good ideas. I don't do all of them, nor do I follow it strictly but the things I did take from the (the bullet system itself, migrating tasks, monthly spreads) have been massively helpful. Slightly underrated if only because the website no longer reflects the system and rather serves as the business side.</p>
<p><strong>Tacos</strong></p>
<p>Underrated. I'm in the UK where we have a troubling lack of mexican-inspired food available but whats not to love? Meat, sauce, taco shell, lettuce, it's got it all.</p>
<p><strong>What are the two best books you couldn't live without and that you recommend?</strong></p>
<p><a href="https://en.wikipedia.org/wiki/How_to_Lie_with_Statistics">How to Lie with Statistics</a>. I read this when I was 17 or so and it blew my mind the way you can present data in different ways to elicit different reactions or prove your point. Fair warning this was written in 1954 so some of the language would not be appropriate in 2025, but the ideas are solid.</p>
<p><a href="https://en.wikipedia.org/wiki/So_You%27ve_Been_Publicly_Shamed">So You've Been Publicly Shamed</a>. This one serves have a warning both about what one might post online, as well as how wild online mobs can get.</p>People and Blogs Interview - Robb Knight • Posts • Atom Feedhttps://rknight.me/blog/people-and-blogs-interview/2026-06-22T09:48:50.000Z<p><strong>Let's start from the basics: can you introduce yourself?</strong></p>
<p>I'm a developer and dad to two girls living in Portsmouth on the south coast of the UK. By day I work for a SaaS company and in my own time I work on my <a href="https://rknight.me/projects">many side projects</a>. In a previous life I worked at a certain clown's restaurant which is where I met my wife some 15 years ago.</p>
<p>Although developer is what I get paid to do I'm trying to move towards more <em>making</em>; websites, <a href="https://rknight.me/blog/stickers-maths-and-postage/">stickers</a>, shirts, art, whatever. I have no idea what that looks like yet or how it's going to pay my bills. I have a whole host of <a href="https://rknight.me/projects">side projects</a> I've worked on over the years; they're not all winners but they all serve, or served, a purpose. If I get lucky, they resonate with other people which is always nice.</p>
<p><strong>What's the story behind your blog?</strong></p>
<p>I've had a lot of blogs over the years, most of which would get a handful of posts before being abandoned. There was a version that ran on Tumblr which I did do for at least a year or two — any interesting posts from that have been saved. The current iteration is by far the longest serving and will be the final version. There's no chance of me wiping it all and starting again.</p>
<p>This current version is part of my main website which is where I put <em>everything</em>. My toots on Mastodon start life as a <a href="https://rknight.me/notes">note post</a>, I post <a href="https://rknight.me/links/">interesting links I find</a>, and I log all the media I watch/play/whatever (I don't want to say consume, that's gross) in <a href="https://rknight.me/almanac/">Almanac</a>, which itself is on the third or fourth iteration.</p>
<p>As I said above, I had done a few posts on the Tumblr-powered blog but if I look at my stats for posts, it was around 2022 when Twitter started to fall apart that I started to blog more. I was moving away from posting things directly onto social media sites and getting it onto my own site.</p>
<p>I started writing more posts that just had a short idea or helpful tip because I realised not every post has to be some incredible think piece. My analytics show that these posts also tend to be the most popular which probably says more about the state of large, ad-riddled websites than it does about my writing. For example <a href="https://rknight.me/blog/convert-spotify-facebook-to-email-login/">this post about disconnecting Facebook from Spotify</a> is consistently in the top five posts on my site but you're never going to read that post unless you specifically need it. It's not a "good" post, it just exists.</p>
<p><strong>What does your creative process look like when it comes to blogging?</strong></p>
<p>To call what I have a process would be a very liberal use of the word "process". If I have nothing to write about I just won't write anything, I have no desire to keep to a schedule and write just for the sake of it. Usually, I'll get prompted by something someone asks like "How did you do X on your website?" or I feel like I have something to say that would be interesting other people.</p>
<p>I write my posts in Obsidian, then when they're ready to go I'll add them to my site. If I'm on my <s>proper computer</s> laptop I use <a href="https://rknight.me/blog/my-blogging-workflow/">my CLI tool</a> to add a new post. If I'm on mobile, I use the very <a href="https://github.com/rknightuk/knightcms">haphazard CMS</a> I built.</p>
<p>I'll proof read most things myself before posting and I rarely ask for anyone else's input but if I do want a second opinion it's going to be previous <a href="https://manuelmoreale.com/interview/keenan">P&B interviewee</a>, <a href="https://gkeenan.co">Keenan</a>. Usually I'm able to get out what I want to say fairly succinctly without too much editing.</p>
<p><strong>Do you have an ideal creative environment? Also do you believe the physical space influences your creativity?</strong></p>
<p>A proper keyboard and ideally a desk to sit at is what I prefer when I'm writing (or coding) but I can live with just the keyboard. My desk setup makes some people's skin crawl because there's so much going on but I like having all the trinkets and knick knacks around me.</p>
<figure><img src="https://cdn.rknight.me/site/desk-2025.jpg" alt="A desk surrounded by bookshelves and pegboard with various items hanging from them" /></figure>
<p>I deeply dislike using my phone for most things outside of scrolling lists, like social media so I rarely write long posts on it. The small form factor just doesn't work for me at all but I also kind of need it to exist in the world.</p>
<p><strong>A question for the techie readers: can you run us through your tech stack?</strong></p>
<p>All my domains are registered with <a href="https://porkbun.com">Porkbun</a> and I manage the DNS with <a href="https://dnscontrol.org/">DNSControl</a> - my main domain, <a href="http://rknight.me">rknight.me</a>, has nearly 50 records for subdomains so managing those without DNSControl would not be a fun activity. Speaking of DNS I use <a href="https://bunny.net">Bunny</a> for my DNS management and also use their CDN for images and other files I need to host.</p>
<p>The website itself is, as are many of my side projects, built with <a href="https://www.11ty.dev">Eleventy</a>. Eleventy gives me the flexibility to do some interesting things with the posts and other content on my site which would be much harder with some other systems.</p>
<p>The site gets built on <a href="https://forge.laravel.com/">Forge</a> to a <a href="https://www.hetzner.com/">Hetzner</a> server whenever I push an update to GitHub either via command line, or through the aforementioned CMS, and is also triggered at various points in the day to pull in my Mastodon posts.</p>
<p><strong>Given your experience, if you were to start a blog today, would you do anything differently?</strong></p>
<p>Assuming I actually had to the time to do it, I think I would start with the CMS first, before building anything of the actual site. It is a pain to update things when I'm not at my laptop but jamming features into my CMS is equally frustrating.</p>
<p>If I wanted something off the shelf and easier to maintain I suspect I would choose <a href="https://ghost.org/">Ghost</a> or <a href="https://pika.page/">Pika</a>.</p>
<p><strong>Financial question since the Web is obsessed with money: how much does it cost to run your blog? Is it just a cost, or does it generate some revenue? And what's your position on people monetising personal blogs?</strong></p>
<p>Many of these costs are part of my freelancing so are bundled with other sites I run and somewhat hidden but I'll do my best to outline what I do use.</p>
<p>I have a single server on Hetzner that serves my main site as well as another 30 or so side projects so the cost is negligible per-site but it costs about $5 a month. Forge costs $12 a month to deploy my site along with other sites. The domain is $20 a year I think but that's it.</p>
<p>I have a <a href="https://oneamonth.club/">One a Month Club</a> <a href="https://buymeacoffee.com/rknightuk/membership">here</a> and I have a handful of people supporting that way. I also use affiliate links for services I use and like which occasionally pays me a little bit.</p>
<p>I think monetising blogs is fine, if it's done in a tasteful way. Dumping Google ads all over your site is terrible for everyone but hand-picked sponsors or referrals is a good way to find new services. Just keep it classy.</p>
<p><strong>Time for some recommendations: any blog you think is worth checking out? And also, who do you think I should be interviewing next?</strong></p>
<p>I want to read sites that are about the person writing them. Photos of things people have done, blog posts about notebooks, wallpaper, food, everything. Things people enjoy.</p>
<p>This is the second time I'm going to mention <a href="https://gkeenan.co/avgb/">Keenan</a> here because they write so wonderfully. They also have a podcast with <a href="https://cygnoir.net/about">Halsted</a> called <a href="https://friendship-material.simplecast.com">Friendship Material</a> which is all kinds of lovely and joyful and everyone should listen.</p>
<p><a href="https://alexwlchan.net">Alex</a> writes some really interesting computing-related posts, like this one about using <a href="https://alexwlchan.net/2024/static-websites/">static websites as tiny archives</a>.</p>
<p><a href="https://anniemueller.com">Annie</a> is so smart and honest in her writing it brings me joy every time I see a new post from her. <a href="https://anniemueller.com/posts/how-i-a-non-developer-read-the-tutorial-you-a-developer-wrote-for-me-a-beginner">This post is a masterpiece</a>.</p>
<p><strong>Final question: is there anything you want to share with us?</strong></p>
<p>I'd be a terrible business boy if I didn't at least mention <a href="https://echofeed.app">EchoFeed</a>, an RSS cross posting service I run.</p>
<p>I also <a href="https://ruminatepodcast.com">have a podcast</a> that used to be about tech but is now about snacks.</p>I Am A Link Curator - The Weblog of fLaMEdhttps://flamedfury.com/posts/i-am-a-link-curator/2026-06-22T08:49:05.000Z<p>What’s going on, Internet? Friend of the site <a href="https://jamesg.blog/" rel="noopener">James</a> recently shared a new post <a href="https://jamesg.blog/blogger-archetypes" rel="noopener">Blogger Archetypes</a> which asks a series of questions to help you narrow down your character as a member of the blogging community. A bit of indie web fun.</p>
<p>Here are my results:</p>
<blockquote>
<p><strong>You are a Link curator</strong></p>
<p>The web is not just its pages, but the connections between pages. You have internalised this and love spending your time exploring the web and sharing what you find with the world.</p>
<p><strong>You are also a Culture maker</strong></p>
<p>You love to help push the blogging community forward by starting discussions, encouraging thought, and sharing what’s on your mind.</p>
</blockquote>
<p>And the other archetypes on offer:</p>
<blockquote>
<p><strong>Explorer:</strong> To you, the web feels like a library that’s open all hours and has everything you could ever imagine! You love reading others blogs, and know how important readers are to the whole of the indie web community!</p>
<p><strong>Community gardener:</strong> You love to help contribute to building the blogging community, either through your writing or how you share the spirit of writing on the web with friends.</p>
<p><strong>Author:</strong> You love writing and have a growing backlog of posts on your website! Words are your best friend and you’re always thinking about what to write next.</p>
</blockquote>
<p>Link curator feels about right. A lot of what I do here is exactly that. Surfing the web, finding the good stuff, and passing it along. The <a href="https://flamedfury.com/bookmarks">bookmarks</a>, the links back to other people’s writing (which I need to get back into doing regularly). That’s the fun part for me.</p>
<p>If you’ve got a blog, go and <a href="https://jamesg.blog/blogger-archetypes" rel="noopener">take the quiz</a> and write up what you got. Send it my way, I’d love to to see what you got. 🤙</p>
<p>Hey, thanks for reading this post in your feed reader! Want to chat? <a href="mailto:hello@flamedfury.com?subject=RE: I Am A Link Curator">Reply by email</a> or add me on <a href="xmpp:flamed@omg.lol">XMPP</a>, or send a <a href="https://flamedfury.com/posts/i-am-a-link-curator/#webmention">webmention</a>. Check out the <a href="https://flamedfury.com/posts/">posts archive</a> on the website.</p>
📝 2026-06-22 09:39: The fox continues to prowl around our chickens. This morning we caught it in the... - Kev Quirkhttps://kevquirk.com/2026-06-22-09392026-06-22T08:39:00.000Z<p>The fox continues to prowl around our chickens. This morning we caught it in the GARDEN a few feet from our favourite chicken. Luckily the magpies warned us and we were able to scare it away.</p>
<p>It's not nice keeping the little cluckers cooped up in this heat, but needs must unfortunately.</p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-06-22%2009%3A39">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-06-22-0939#comments">leave a comment</a>.</p>
</div>No, I don't want you to summarise the page! - Kev Quirkhttps://kevquirk.com/no-i-dont-want-you-to-summarise-the-page2026-06-22T08:04:00.000Z<p>I've talked about LLMs a few times here - the TL;DR is that I find them useful <em>for certain use cases</em>.</p>
<p>Searching something complex? Great.</p>
<p>Checking my code, or helping me with a problem in said code? Count me in.</p>
<p>But summarising a page I'm reading? Absofuckinglutely not.</p>
<p>One of the things I really enjoy about the web is surfing it and <em>reading</em>. Reading is one of the great joys I get from the web, and <a href="https://kevquirk.com/?type=book">in general</a>. Why would I want a bastardised version of your words presented to me by a computer when I can read the actual words you took time to write?</p>
<p>LLMs have their place and are useful tools in my opinion, but I'm getting sick of them being crammed into every facet of computing.</p>
<p>Hopefully the bubble will burst soon and we can all enjoy an LLM <em>enriched</em> web, not an LLM <em>hijacked</em> web.</p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=No%2C%20I%20don%27t%20want%20you%20to%20summarise%20the%20page%21">reply to this post by email</a>, or <a href="https://kevquirk.com/no-i-dont-want-you-to-summarise-the-page#comments">leave a comment</a>.</p>
</div>Registration review: Taiwan - Johnny.Decimalhttps://johnnydecimal.com/blog/0224-rego-review-taiwan/2026-06-22T06:53:29.000Z<p>Vehicle registration plates provide a ubiquitous numbering scheme that's easy to enjoy: just walk around the streets and pay attention. Each country offers its own variant of the form, so in this series I will review each country's registration plates as I encounter them.</p>
<blockquote>
<p>These reviews are not scientific and should not be quoted as authoritative.</p>
</blockquote>
<h2 id="introduction">Introduction</h2>
<p>Taiwan's scheme was refreshed in 2012. This review only considers the post-refresh scheme. Older plates are still very common.</p>
<h2 id="schema">Schema</h2>
<p>A simple, consistent scheme: <code>AAA-0000</code>. The usual suspects are omitted from the letter prefix – <code>O</code>, <code>I</code> – but <code>Q</code> remains, as we'll see below.</p>
<p>Absurdly, the number <code>4</code> is no longer used. I thought this was user preference, as I did see <em>one</em> in the wild. But it seems that the user preference was so strong, they elected to remove it. The plate I saw must have been from an older range.</p>
<p>This broad omission of <code>4</code> is common across Asia – it sounds like the word 'death' – as is the equally absurd omission of the West's superstition, <code>13</code>.<sup><a href="#user-content-fn-thirteen" id="user-content-fnref-thirteen" data-footnote-ref="" aria-describedby="footnote-label" class="footnote">1</a></sup> (Combined with the fact that the ground floor is represented as <code>1</code> means that a room on the 14th floor isn't quite as high as one might hope.)</p>
<p>The scheme allows a theoretical maximum of <code>24^3 × 9^4 = 90,699,264</code> plates. Given Taiwan's population of 23.5m people this is a touch under 4 cars each. This doesn't feel like enough, but the most recent plate I saw began <code>CCD</code> indicating that about 10% of plates have been issued in 14 years. So we don't need to worry about them running out.</p>
<h3 id="special-cases">Special cases</h3>
<p>There are special cases for electric vehicles <code>E__-____</code>, rentals <code>R__-____</code>, and so on. I appreciate this additional information being encoded in the plate.</p>
<p>They've also removed a whole bunch of three-letter words from the pool so bad luck if you wanted <code>GAY-0000</code>. Inexplicably, <code>ANT</code> is disallowed. Because that's … an ant?</p>
<h3 id="issue-date">Issue date</h3>
<p>The scheme encodes issue date gracefully: it's pretty obvious by looking at cars that they started at <code>AAA</code> and they're currently somewhere in the early-to-mid-<code>C__</code>s.</p>
<p>This avoids issues of specifically encoding a year into the plate, as we'll see the next time I visit the UK. It also provides a free street game: find the latest plate!</p>
<h3 id="region-awareness">Region awareness</h3>
<p>There appears to be no region encoding in the plate. Taiwan is a relatively small island so this probably isn't necessary, but I do like knowing where someone is from.</p>
<h3 id="schema-45">Schema: 4/5</h3>
<ul>
<li>Pro: simple, obvious, and consistent.</li>
<li>Con: no regional coding, the <code>4</code> thing, and it feels punitive to have excluded <code>ANT</code>.</li>
</ul>
<h2 id="design">Design</h2>
<p>A simple plate, stamped metal, black on white in its standard form. I prefer an embossing over a cheaper-looking laminate so top marks here.</p>
<p>The typeface is slightly condensed which looks nice on the plate. But I like a plate to fill the space given for it on the vehicle, and a narrow plate rarely does that.</p>
<figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="A close-up photo of a Taiwanese registration plate, BQD-2793. The Q has a strong diagonal line that cuts across the entire character, starting half way down the left side and clearly jutting out of the lower-right of the figure." height="326" loading="lazy" src="https://johnnydecimal.com/blog/0224A-Taiwan_rego_Q-798x326.png" width="798"> </picture> </figure>
<p>Theoretically that's a <code>-</code> dash separating the letters and numbers, but it's shown as a dot on most (all?) plates. I would have stretched that out a little, at least on cars where there's plenty of room.</p>
<h3 id="points-for-a-nice-q">Points for a nice <code>Q</code></h3>
<p>If you're going to use a <code>Q</code> you really have to make sure it looks like a <code>Q</code>. Taiwan is a clear pass in this category.</p>
<h3 id="markings-at-the-bottom">Markings at the bottom</h3>
<p>Apparently they moved the screw holes exclusively to the top to allow for those markings, barely visible, at the bottom. I wouldn't have bothered.</p>
<h3 id="design-35">Design: 3/5</h3>
<ul>
<li>Pro: stamped metal. A nice typeface.</li>
<li>Con: no other adornments. Kinda plain. Doesn't fill the space.</li>
</ul>
<h2 id="summary">Summary</h2>
<p>Overall Taiwan scores 7/10: not bad for our first entrant. It's an inoffensive plate that does the job without trying to get in your face. I just wish that they'd put a <em>touch</em> more into its design.</p>
<div data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-thirteen">
<p><code>13</code> is <em>not</em> excluded from the registration scheme, to be clear. I refer to its common omission from building floor numbers. <a href="#user-content-fnref-thirteen" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref footnoteBackLink">↩</a></p>
</li>
</ol>
</div>Finished reading Book of the Dead - Molly White's activity feed6a39376f91f30f1ebedb9f5f2026-06-22T00:12:23.000Z<article class="entry h-entry hentry"><header><div class="description">Finished reading: </div></header><div class="content e-content"><div class="book h-entry hentry"><a class="book-cover-link" href="https://www.mollywhite.net/reading/books?search=Book%20of%20the%20Dead"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1442534083i/6526.jpg" alt="Cover image of Book of the Dead" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Kay Scarpetta</i> series, book <span class="series-number">15</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">Book of the Dead</i> </div><div class="byline">by <span class="p-author h-card">Patricia Cornwell</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2007">2007</time>. 511 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-06-20">June 20, 2026</time>; completed June 21, 2026. </div></div></div></div></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-06-22T00:12:23+00:00" title="June 22, 2026 at 12:12 AM UTC">June 22, 2026 at 12:12 AM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=crime" title="See all books tagged "crime"" rel="category tag">crime</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=mystery" title="See all books tagged "mystery"" rel="category tag">mystery</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=thriller" title="See all books tagged "thriller"" rel="category tag">thriller</a>. </div></div></footer></article>Removing prefixes and suffixes in Python - James' Coffee Bloghttps://jamesg.blog/2026/06/22/removing-prefixes-and-suffixes-in-python2026-06-22T00:00:00.000Z
<style media="(prefers-color-scheme: dark)">pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #49483e }
.highlight { background: #272822; color: #F8F8F2 }
.highlight .c { color: #959077 } /* Comment */
.highlight .err { color: #ED007E; background-color: #1E0010 } /* Error */
.highlight .esc { color: #F8F8F2 } /* Escape */
.highlight .g { color: #F8F8F2 } /* Generic */
.highlight .k { color: #66D9EF } /* Keyword */
.highlight .l { color: #AE81FF } /* Literal */
.highlight .n { color: #F8F8F2 } /* Name */
.highlight .o { color: #FF4689 } /* Operator */
.highlight .x { color: #F8F8F2 } /* Other */
.highlight .p { color: #F8F8F2 } /* Punctuation */
.highlight .ch { color: #959077 } /* Comment.Hashbang */
.highlight .cm { color: #959077 } /* Comment.Multiline */
.highlight .cp { color: #959077 } /* Comment.Preproc */
.highlight .cpf { color: #959077 } /* Comment.PreprocFile */
.highlight .c1 { color: #959077 } /* Comment.Single */
.highlight .cs { color: #959077 } /* Comment.Special */
.highlight .gd { color: #FF4689 } /* Generic.Deleted */
.highlight .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */
.highlight .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #F8F8F2 } /* Generic.Error */
.highlight .gh { color: #F8F8F2 } /* Generic.Heading */
.highlight .gi { color: #A6E22E } /* Generic.Inserted */
.highlight .go { color: #66D9EF } /* Generic.Output */
.highlight .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */
.highlight .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #959077 } /* Generic.Subheading */
.highlight .gt { color: #F8F8F2 } /* Generic.Traceback */
.highlight .kc { color: #66D9EF } /* Keyword.Constant */
.highlight .kd { color: #66D9EF } /* Keyword.Declaration */
.highlight .kn { color: #FF4689 } /* Keyword.Namespace */
.highlight .kp { color: #66D9EF } /* Keyword.Pseudo */
.highlight .kr { color: #66D9EF } /* Keyword.Reserved */
.highlight .kt { color: #66D9EF } /* Keyword.Type */
.highlight .ld { color: #E6DB74 } /* Literal.Date */
.highlight .m { color: #AE81FF } /* Literal.Number */
.highlight .s { color: #E6DB74 } /* Literal.String */
.highlight .na { color: #A6E22E } /* Name.Attribute */
.highlight .nb { color: #F8F8F2 } /* Name.Builtin */
.highlight .nc { color: #A6E22E } /* Name.Class */
.highlight .no { color: #66D9EF } /* Name.Constant */
.highlight .nd { color: #A6E22E } /* Name.Decorator */
.highlight .ni { color: #F8F8F2 } /* Name.Entity */
.highlight .ne { color: #A6E22E } /* Name.Exception */
.highlight .nf { color: #A6E22E } /* Name.Function */
.highlight .nl { color: #F8F8F2 } /* Name.Label */
.highlight .nn { color: #F8F8F2 } /* Name.Namespace */
.highlight .nx { color: #A6E22E } /* Name.Other */
.highlight .py { color: #F8F8F2 } /* Name.Property */
.highlight .nt { color: #FF4689 } /* Name.Tag */
.highlight .nv { color: #F8F8F2 } /* Name.Variable */
.highlight .ow { color: #FF4689 } /* Operator.Word */
.highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */
.highlight .w { color: #F8F8F2 } /* Text.Whitespace */
.highlight .mb { color: #AE81FF } /* Literal.Number.Bin */
.highlight .mf { color: #AE81FF } /* Literal.Number.Float */
.highlight .mh { color: #AE81FF } /* Literal.Number.Hex */
.highlight .mi { color: #AE81FF } /* Literal.Number.Integer */
.highlight .mo { color: #AE81FF } /* Literal.Number.Oct */
.highlight .sa { color: #E6DB74 } /* Literal.String.Affix */
.highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */
.highlight .sc { color: #E6DB74 } /* Literal.String.Char */
.highlight .dl { color: #E6DB74 } /* Literal.String.Delimiter */
.highlight .sd { color: #E6DB74 } /* Literal.String.Doc */
.highlight .s2 { color: #E6DB74 } /* Literal.String.Double */
.highlight .se { color: #AE81FF } /* Literal.String.Escape */
.highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */
.highlight .si { color: #E6DB74 } /* Literal.String.Interpol */
.highlight .sx { color: #E6DB74 } /* Literal.String.Other */
.highlight .sr { color: #E6DB74 } /* Literal.String.Regex */
.highlight .s1 { color: #E6DB74 } /* Literal.String.Single */
.highlight .ss { color: #E6DB74 } /* Literal.String.Symbol */
.highlight .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #A6E22E } /* Name.Function.Magic */
.highlight .vc { color: #F8F8F2 } /* Name.Variable.Class */
.highlight .vg { color: #F8F8F2 } /* Name.Variable.Global */
.highlight .vi { color: #F8F8F2 } /* Name.Variable.Instance */
.highlight .vm { color: #F8F8F2 } /* Name.Variable.Magic */
.highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */ .highlight .nn, .highlight .n{color: light-dark(black, var(--dark-foreground-color)) }</style><style media="(prefers-color-scheme: light)">pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #F00 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #04D } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */
.highlight .no { color: #800 } /* Name.Constant */
.highlight .nd { color: #A2F } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #00F } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #666 } /* Literal.Number.Bin */
.highlight .mf { color: #666 } /* Literal.Number.Float */
.highlight .mh { color: #666 } /* Literal.Number.Hex */
.highlight .mi { color: #666 } /* Literal.Number.Integer */
.highlight .mo { color: #666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #00F } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666 } /* Literal.Number.Integer.Long */</style>
<style>
@font-face {
font-family: 'MonaspaceArgon';
src: url('/assets/fonts/MonaspaceArgon-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
}
pre, code {
font-family: 'MonaspaceArgon', ui-monospace, monospace;
}
</style>
<p>A few weeks ago, I learned about the <code>removeprefix</code> method in Python. It lets you remove a specific prefix from the beginning of a string. For example, I can use the following code to remove <code>www.</code> from the beginning of a domain name:</p><div class="highlight"><pre><span></span><span class="s2">"www.jamesg.blog"</span><span class="o">.</span><span class="n">removeprefix</span><span class="p">(</span><span class="s2">"www."</span><span class="p">)</span>
</pre></div>
<p>If the string doesn’t contain the prefix, nothing happens; if the string does contain the prefix, the prefix is removed.</p><p><em>Note: If you are parsing URLs in Python, you should use a library like </em><a href="https://docs.python.org/3/library/urllib.parse.html" rel="noreferrer"><em>urllib.parse</em></a><em> to extract parts of a URL.</em></p><p>I did some digging and, via <a href="https://stackoverflow.com/questions/16891340/remove-a-prefix-from-a-string">a mention of the method in Stack Overflow</a>, I learned that Python 3.9 added support for methods for <a href="https://docs.python.org/3/whatsnew/3.9.html">removing prefixes and suffixes from strings</a>: <code>removeprefix</code> and <code>removesuffix</code>.</p><p>When I learned about <code>removeprefix</code>, I felt a little bit of joy. I have been using Python for years and had no idea about this method.</p><p>Instead of doing the trick to measure the length of a string I want to remove, and then removing that number of characters from the beginning of a string using indexing if the string <code>startswith</code> the string I want to remove, I now can use a single method: <code>removeprefix</code> (and <code>removesuffix</code> to do the same at the end of a string).</p><h2 id="addendum:-lstrip-and-rstrip">Addendum: lstrip and rstrip</h2><p>While the <code>lstrip()</code> and <code>rstrip()</code> methods, which remove either whitespace or specified characters from the start or end of a string, may sound like they do the same thing, they remove all instances of the specified characters. For example, if I use this code:</p><div class="highlight"><pre><span></span><span class="s2">"www.w.jamesg.blog"</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"www."</span><span class="p">)</span>
</pre></div>
<p>The code returns:</p><pre><code>jamesg.blog</code></pre><p><code>lstrip()</code> has removed all <code>w</code> and <code>.</code> characters that would start the string.</p><p>I thought I would document this because for a while I wasn’t aware this was the behaviour of <code>lstrip</code> and <code>strip</code>.</p><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a0f9ebd3aeafe718',t:'MTc4MjExNzM0Mw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
<a class="tag" href="https://docs.python.org/3/library/urllib.parse.html">urllib.parse</a>
<a class="tag" href="https://docs.python.org/3/whatsnew/3.9.html">removing prefixes and suffixes from strings</a>
<a class="tag" href="https://stackoverflow.com/questions/16891340/remove-a-prefix-from-a-string">a mention of the method in Stack Overflow</a>
📝 2026-06-21 18:42: It's handy when your riding buddy is a photographer. You end up with some nice... - Kev Quirkhttps://kevquirk.com/2026-06-21-18422026-06-21T17:42:00.000Z<p>It's handy when your riding buddy is a photographer. You end up with some nice photos.</p>
<p><img src="https://kevquirk.com/content/images/2026-06-21-1842/1000009851.webp" alt="1000009851" /></p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-06-21%2018%3A42">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-06-21-1842#comments">leave a comment</a>.</p>
</div>📝 2026-06-21 09:35: Some goats, just goating around, watching me mow the field. - Kev Quirkhttps://kevquirk.com/2026-06-21-09352026-06-21T08:35:00.000Z<p>Some goats, just goating around, watching me mow the field.</p>
<p><img src="https://kevquirk.com/content/images/2026-06-21-0935/1000009800.webp" alt="1000009800" /></p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-06-21%2009%3A35">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-06-21-0935#comments">leave a comment</a>.</p>
</div>Finished reading Predator - Molly White's activity feed6a39374091f30f1ebedb9f2f2026-06-21T01:25:44.000Z<article class="entry h-entry hentry"><header><div class="description">Finished reading: </div></header><div class="content e-content"><div class="book h-entry hentry"><a class="book-cover-link" href="https://www.mollywhite.net/reading/books?search=Predator"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1310552145i/6528.jpg" alt="Cover image of Predator" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Kay Scarpetta</i> series, book <span class="series-number">14</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">Predator</i> </div><div class="byline">by <span class="p-author h-card">Patricia Cornwell</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2005">2005</time>. 453 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-06-19">June 19, 2026</time>; completed June 20, 2026. </div></div></div></div></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-06-21T01:25:44+00:00" title="June 21, 2026 at 1:25 AM UTC">June 21, 2026 at 1:25 AM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=crime" title="See all books tagged "crime"" rel="category tag">crime</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=mystery" title="See all books tagged "mystery"" rel="category tag">mystery</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=thriller" title="See all books tagged "thriller"" rel="category tag">thriller</a>. </div></div></footer></article>Little moments of joy - James' Coffee Bloghttps://jamesg.blog/2026/06/21/little-moments-of-joy-today2026-06-21T00:00:00.000Z
<p>As I write, the lowering sun is gently shining on the monstera plant in the living room, casting a shadow on the wall. I am enjoying the changes in light outside as the longest day draws to a close. The birds sing quietly outside.</p><p>Yesterday, the clouds started to move away for the first time in days, leaving a sky so clear at sunset I couldn’t see a cloud out the window. The clarity carried on to this day: for all the day there have been few clouds in the sky. I look out the window and see a few clouds. I briefly imagine what a city in the clouds would be like, but I can’t formulate a complete picture in my imagination. The clouds themselves say so much that I am preoccupied by studying what I see.</p><p>I write down little moments of joy as I go around the world: “the joy of watching the sun set under a clear sky,” “the joy of someone seeing you so clearly after only saying a few words,” “the joy of singing a song to yourself while waiting for the bus”. These moments come at random. That is what makes them so special.</p><p>Earlier today, after leaving a shop, a car parked nearby which had their windows down and was loudly playing Taylor Swift’s <em>Delicate</em>. I started to sing along. Was that their favourite song? I’ll never know, but it is fun to imagine. The moment was fleeting, but one I knew I had to write down – if a moment is fleeting, words can help it exist a little bit longer.</p><p>The light beaming onto my monstera is fading. The shadow cast by the two tallest leaves that are closely interspersed looks like a palm tree: a vision of the tropical in the Scottish summer. The contours of some of the shadows of leaves are still well defined, but others fade into a haze. Soon, the sun will set. I think about how special it is to watch this moment: to see the last slivers of sunlight peek through a low cloud on the horizon on the longest day of the year.</p><p>The colour from the lingering lavender cast onto the sparse clouds, possible only because the sun is where it now is in the sky, makes me smile; oh! how wonderful the changes in colours through Day and Night are.</p>
Small wishes - James' Coffee Bloghttps://jamesg.blog/2026/06/21/small-wishes2026-06-21T00:00:00.000Z
<p>I like to wish people a happy day, and so many of my conversations start with “Happy Sunday”, or similar. Today I was able to add an additional well-wish: “Happy Solstice!” As I write, it is 9pm and the sun is still radiating over the hills. Trees cast long shadows over the quiet fields. The pattern of branches at the top of a tree reminded me of a village Kirk I saw earlier today.</p><p>I started my morning with a long walk followed by a (decaf) coffee. I love when I can start the day with a walk: when I have time to watch the world go by, listen to some music, and notice the world around me. Within thirty minutes my environment can change from the plain walls of my bedroom to Nature in which, no matter how much I look around, there will always be a new detail to appreciate.</p><p>After my coffee, a thought came to mind: I hope that one day I can see the countryside from a double-decker bus. It’s a small wish. It may never happen but I hold onto the thought any way. The wish pops into my mind sometimes when I am travelling. Maybe I need to travel at a different time of day to have a higher likelihood of catching the double decker bus that sometimes runs. But then again I like the feeling of holding a tiny hope – something that makes me feel “what if?”</p><p>While at the bus station I skimmed through new blog posts. I opened one in which the author had shared a photo of a pancake with a face made of butter on top. It was a tiny moment, but one shared across continents through the medium that we call the web. I smiled, my heart already warm from the light of the day and the coffee and the tiny wish of seeing the countryside from a double-decker bus.</p><p>I looked up to the sky and saw blue wherever I looked. I thought about the contrast between the greens of Earth and the blues of the sky and let a few moments pass while I admired the contours of the trees in the middle distance.</p><p>On my journey, I saw the countryside with new clarity: the day is clearer than many I remember from recently. The trees and fields and valleys and peaks were all so vibrant, their colours illuminated by the warm sun: a warmth that will linger today longer than any other: therein, the joy of Solstice.</p><p>Travelling further through the fields and hills, I thought about how even a tree far away can have an impact on me. A tree may be a mile or two away by distance, but yet it can still feel close. Our hearts can interpret what we see no matter how far away what we are looking at may be.</p><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a0f5d2f97dc957eb',t:'MTc4MjA3NDM4Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
Which Copyleft Licence is Suitable for an SVG? - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=687412026-06-20T11:34:22.000Z<p>The Scalable Vector Graphics (SVG) format is amazing. It allows you to precisely define how an image should look. Written in XML, it uses various mathematical operations to display an image which looks crisp and clear at any size.</p>
<p>Here's a trivial example:</p>
<pre><code class="language-SVG"><svg height="100" viewBox="0 0 100 100" width="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" fill="#fff" r="100"/>
</svg>
</code></pre>
<p>That code produces this circle:</p>
<svg height="100" viewBox="0 0 100 100" width="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" fill="#f00" r="50"></circle>
</svg>
<p>You could print that out with a kilometre radius and it would still be a perfect circle - unlike a traditional raster image which is just a grid of blocky pixels.</p>
<p>But suppose you wanted to freely share your SVG with others - and ensure that they <em>also</em> freely share it. What sort of "Copyleft" licence would you give it?</p>
<h2 id="creative-commons"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#creative-commons">Creative Commons</a></h2>
<p>The obvious choice seems to be a Creative Commons Share-Alike licence. SVGs are images. Images are creative works. Creative Commons is suitable for creative works. Job done!</p>
<p>But…</p>
<p>SVGs are <em>not</em> images. The are code which <em>produce</em> images. If we assume that an SVG is software, this entry in the FAQ becomes relevant:</p>
<blockquote><p><a href="https://creativecommons.org/faq/#can-i-apply-a-creative-commons-license-to-software"><strong>Can I apply a Creative Commons license to software?</strong></a></p>
<p>We recommend against using Creative Commons licenses for software.</p>
<p>[…]</p>
<p>Unlike software-specific licenses, CC licenses do not contain specific terms about the distribution of source code, which is often important to ensuring the free reuse and modifiability of software.</p>
<p>[…]</p>
<p>Additionally, our licenses are currently not compatible with the major software licenses, so it would be difficult to integrate CC-licensed work with other free software. Existing software licenses were designed specifically for use with software and offer a similar set of rights to the Creative Commons licenses.</p></blockquote>
<p>At the end of that FAQ, they also say:</p>
<blockquote><p>While we recommend against using a CC license on software itself, CC licenses may be used for software documentation, as well as for separate artistic elements such as game art or music.</p></blockquote>
<p>So, that's a <em>perhaps?</em></p>
<h2 id="gpl"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#gpl">GPL</a></h2>
<p>But let us assume that an SVG is a piece of media rather than software. Would it be suitable to use a software licence for it?</p>
<p>The various Gnu Public Licences have this to say:</p>
<blockquote><p><a href="https://www.gnu.org/licenses/gpl-faq.en.html#GPLOtherThanSoftware"><strong>Can I use the GPL for something other than software?</strong></a></p>
<p>You can apply the GPL to any kind of work, as long as it is clear what constitutes the “source code” for the work. The GPL defines this as the preferred form of the work for making changes in it.</p></blockquote>
<p>A photo JPEG might be derived from the RAW image file. In which case, the RAW is suitable for being GPL'd, not the resultant JPEG.</p>
<p>Similarly, the Photoshop file of a complex and multi-layered illustration would suitable, but not the outputted PNG.</p>
<p>An SVG can straddle both worlds. It's possible to build an SVG with layers, groups, and transformations, and then simplify it for output. You <em>could</em> edit the optimised version, but it's hardly the preferred format.</p>
<p>I read <a href="https://www.gnu.org/licenses/gpl-3.0.en.html">the GPL</a> (so you don't have to) and right at the start it says:</p>
<blockquote><p>The GNU General Public License is a free, copyleft license for software and <strong>other kinds of works</strong>.</p></blockquote>
<p>(Emphasis added.)</p>
<p>But do they mean that?</p>
<blockquote><p><a href="https://www.gnu.org/licenses/licenses.en.html#OtherWorks"><strong>Licenses for Other Types of Works</strong></a></p>
<p>[…]</p>
<p>We don't take the position that artistic or entertainment works must be free, but if you want to make one free, we recommend the <a href="https://directory.fsf.org/wiki/License:LAL-1.3">Free Art License</a>.</p></blockquote>
<p>But, as delightful as the Free Art License is, the FSF say:</p>
<blockquote><p>Please don't use it for software or documentation, since it is incompatible with the GNU GPL and with the GNU FDL.</p></blockquote>
<h2 id="is-an-svg-software-or-not"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#is-an-svg-software-or-not">Is an SVG software or not?</a></h2>
<p>I think so.</p>
<ul>
<li>It's written in plain text.</li>
<li>It contains definitions, variables, and instructions.</li>
<li>It can contain scripting.</li>
</ul>
<p>That sure looks like software to me!</p>
<p>But, at the same time, the user <em>experiences</em> it as a graphic. An animated GIF, for example, contains a small amount of code-like data to say how long each frame should last for and when to stop running. Is a GIF software? Is the basic circle above software? How much code do you need before something becomes software?</p>
<h2 id="are-svgs-libraries"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#are-svgs-libraries">Are SVGs Libraries?</a></h2>
<p>Licences like the <a href="https://www.gnu.org/licenses/lgpl-3.0.en.html">LGPL</a> and <a href="https://www.mozilla.org/en-US/MPL/2.0/">MPL</a> allow copyleft libraries to be integrated into non-free software.</p>
<p>A proprietary application could treat an SVG as a library by asking the SVG to render the output and then displaying that. A bit of a reach, perhaps?</p>
<h2 id="what-about-embedded-raster-graphics"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#what-about-embedded-raster-graphics">What about embedded raster graphics?</a></h2>
<p>Just to complicate things, an SVG can <em>also</em> contain raster graphics. That is, it is possible to embed a PNG, JPEG, or any other traditional image within an SVG.</p>
<p>In this case, the embedded image <em>can</em> be Creative Commons licenced because <a href="https://wiki.creativecommons.org/wiki/ShareAlike_compatibility:_GPLv3">CC BY-SA is compatible with GPLv3</a>.</p>
<blockquote><p>When someone creates an adaptation of a BY-SA licensed work and includes it in a GPLv3-licensed project, both licenses apply and downstream users must comply with both licenses. However, Section 2(a)(5)(B) of BY-SA 4.0 allows anyone who receives the adapted material downstream to satisfy the conditions of both BY-SA and GPLv3 (i.e. attribution and ShareAlike) <strong>in the manner dictated by the GPLv3</strong>.</p></blockquote>
<p>(Emphasis added.)</p>
<p>The barest of SVGs containing only an embedded image probably wouldn't count as software. But what if you started applying programmatic transformations to them? This SVG embeds an image and uses software to rotate it upside down.</p>
<pre><code class="language-svg"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64">
<image x="0" y="0" width="64" height="64"
transform="rotate(180)"
href="data:image/png;base64,iVB…" />
</svg>
</code></pre>
<p>Is that enough code to count as software?</p>
<h2 id="wisdom-of-the-crowds"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#wisdom-of-the-crowds">Wisdom of the Crowds</a></h2>
<p>I conducted a rigorously accurate public survey. Here are the results:</p>
<blockquote class="mastodon-embed" data-embed-url="https://mastodon.social/@Edent/116221315864205051/embed" style="background: #FCF8FF; border-radius: 8px; border: 1px solid #C9C4DA; margin: 0; max-width: 540px; min-width: 270px; overflow: hidden; padding: 0;"> <a href="https://mastodon.social/@Edent/116221315864205051" target="_blank" style="align-items: center; color: #1C1A25; display: flex; flex-direction: column; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif; font-size: 14px; justify-content: center; letter-spacing: 0.25px; line-height: 20px; padding: 24px; text-decoration: none;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 79 75"><path d="M63 45.3v-20c0-4.1-1-7.3-3.2-9.7-2.1-2.4-5-3.7-8.5-3.7-4.1 0-7.2 1.6-9.3 4.7l-2 3.3-2-3.3c-2-3.1-5.1-4.7-9.2-4.7-3.5 0-6.4 1.3-8.6 3.7-2.1 2.4-3.1 5.6-3.1 9.7v20h8V25.9c0-4.1 1.7-6.2 5.2-6.2 3.8 0 5.8 2.5 5.8 7.4V37.7H44V27.1c0-4.9 1.9-7.4 5.8-7.4 3.5 0 5.2 2.1 5.2 6.2V45.3h8ZM74.7 16.6c.6 6 .1 15.7.1 17.3 0 .5-.1 4.8-.1 5.3-.7 11.5-8 16-15.6 17.5-.1 0-.2 0-.3 0-4.9 1-10 1.2-14.9 1.4-1.2 0-2.4 0-3.6 0-4.8 0-9.7-.6-14.4-1.7-.1 0-.1 0-.1 0s-.1 0-.1 0 0 .1 0 .1 0 0 0 0c.1 1.6.4 3.1 1 4.5.6 1.7 2.9 5.7 11.4 5.7 5 0 9.9-.6 14.8-1.7 0 0 0 0 0 0 .1 0 .1 0 .1 0 0 .1 0 .1 0 .1.1 0 .1 0 .1.1v5.6s0 .1-.1.1c0 0 0 0 0 .1-1.6 1.1-3.7 1.7-5.6 2.3-.8.3-1.6.5-2.4.7-7.5 1.7-15.4 1.3-22.7-1.2-6.8-2.4-13.8-8.2-15.5-15.2-.9-3.8-1.6-7.6-1.9-11.5-.6-5.8-.6-11.7-.8-17.5C3.9 24.5 4 20 4.9 16 6.7 7.9 14.1 2.2 22.3 1c1.4-.2 4.1-1 16.5-1h.1C51.4 0 56.7.8 58.1 1c8.4 1.2 15.5 7.5 16.6 15.6Z" fill="currentColor"></path></svg> <div style="color: #787588; margin-top: 16px;">Post by @Edent@mastodon.social</div> <div style="font-weight: 500;">View on Mastodon</div> </a> </blockquote>
<script data-allowed-prefixes="https://mastodon.social/" async="" src="https://mastodon.social/embed.js"></script>
<h2 id="final-thoughts"><a href="https://shkspr.mobi/blog/2026/06/which-copyleft-licence-is-suitable-for-an-svg/#final-thoughts">Final Thoughts</a></h2>
<p>Personally, I think SVGs <em>are</em> software. I understand the argument that they're suitable for Creative Commons, but I disagree with it. Even the simplest SVG is distributed in a way that its contents are <em>executed</em> by the computer.</p>
<p>While SVGs may be minified and stripped of comments, they still retain the essence of source code. I suppose you could <em>try</em> to obfuscate them, or package them up in a quasi-binary form, but I maintain the source is still viewable and editable.</p>
<p>If you choose to use a Creative Commons Share-Alike licence, it probably won't cause any harm. But given CC's reluctance to endorse its use on software, it probably makes sense to use a copyleft source-code licence.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68741&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">Day - James' Coffee Bloghttps://jamesg.blog/2026/06/20/day2026-06-20T00:00:00.000Z
<p>The warm glow at the door, intensified by the morning sun beaming and then reflecting on the blank walls of the hallway, is the first colour I notice when I wake. I then look around and see the blue around the blinds – colour from the evening before, but seen from a new perspective: the hybrid of restfulness and tiredness that occupies the first few moments of the day.</p><p>My eyes are heavy, lingering between the last moments of sleep and the beginning of the new day. When I close my eyes I dream of the day ahead. Idle thoughts come to mind: when will I get up? More serious thoughts arise, too: how can I comprehend the contradictions of modernity? Such thoughts pass. I haven’t had a cup of tea yet.</p><p>I hear the birds sing. When the bird song recedes, I notice breath – life – is the loudest sound I can hear.</p><p>I wake up to a bluer sky than I have seen in a week. I later hear that the weather for the next week is to be sunny. That reminds me: the solstice is coming soon: the longest day. We are always so close to Nature. Memories of music and tales of travel come to mind. Mornings feel like the space for reminiscing and dreaming and waking.</p><p>As I get ready to go on my morning walk – a walk to which I have been looking forward for days, with the sky now clear – I find in my pocket the five pence coin I found outside of a museum. I remember the phrase “Find a penny pick it up, and all day you’ll have good luck. If you pass it to a friend, then your luck will never end.” </p><p>Leaving the house, I sing the songs I played yesterday evening with the world waking up around me: the melody of day.</p><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a0e9f28b4ca7f07d',t:'MTc4MTk0OTg0Ng=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
Search Is Broken - Kev Quirkhttps://kevquirk.com/search-is-broken2026-06-19T20:28:00.000Z<p>I was listening to <a href="https://latenightlinux.com/late-night-linux-episode-390/">Late Night Linux 390</a> during my evening walking with the pooches tonight, and they were talking about (among other things) <a href="https://kagi.com">Kagi search</a>.</p>
<p>I've tried Kagi myself, but ultimately <a href="https://kevquirk.com/note-20250615-1655">cancelled my subscription</a> as I didn't really see the point in paying for it when I could get similar results with <a href="https://duckduckgo.com">DuckDuckGo</a>.</p>
<p>This isn't because DDG or Kagi are inherently bad, it's because no matter which service you use, the web has been SEO'd to within an inch of its life, so we're fucked either way. That's why I stopped using Kagi as I didn't see the point in paying $10/month for a service that can't fix the web despite having some interesting options to help filter the noise.</p>
<h2>What I do instead</h2>
<p>What I've started doing instead is to use DDG for simple queries that I can quickly and easily get the answer to. For anything more complex, I go to my LLM of choice (currently Gemini) and I ask the question there.</p>
<p>This is because it saves me a tonne of time sifting through all the SEO crap, and I can ask follow up questions too. Win/win.</p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=Search%20Is%20Broken">reply to this post by email</a>, or <a href="https://kevquirk.com/search-is-broken#comments">leave a comment</a>.</p>
</div>Metroid Prime Remastered - Joel's Log Fileshttps://joelchrono.xyz/blog/metroid-prime-remastered2026-06-19T17:50:00.000Z<p>I love Metroid.</p>
<p>While I was aware of emulation from a young age, thanks to Ocarina of Time and Mario Kart 64, I never quite understood that there’s more emulators out there besides the old Project 64 until an older friend showed me his computer running them.</p>
<p>Along <em>Pokémon Fire Red</em> and <em>Final Fantasy I & II</em>, <em>Metroid Fusion</em> was one of the first ever Game Boy Advance games I saw emulated. <em>Fusion</em> and<em>Zero Mission</em> were some of the first games I ever completed, and <em>Metroid Dread</em> was the first game I ever finished with 100% items.</p>
<p>Back in the day, when I was less than ten years young. My mom would visit a friend of hers, and they would talk about whatever moms talk about. Mom’s friend babysit me when I was a youngling, she was older than mom and had a son who was also older than me. He had a Wii, and would let me play games like <em>Wii Sports</em>, and even <em>Super Mario Galaxy</em>.</p>
<p>There was one title there that I had seen, featuring that orange armored bounty hunter that I had seen in <em>Super Smash Bros Brawl</em> too, Samus. I remember clearly reading <em>Metroid Prime 3: Corruption</em>, and reading the back of the case a few times. It looked interesting for sure, but I never got around to even ask for permission to play it.</p>
<p>Alas, it was one of many titles back then, but as I grew familiar with the mainline 2D games, I was interested on seeing this side of Metroid too, obviously starting from the first game.</p>
<p>While there are many unofficial ways to play the original trilogy, I have a Nintendo Switch and knew that <em>Metroid Prime Remastered</em> was praised as the ultimate way to play the first entry of the trilogy. With this in the back of my mind, I visited my local physical store one day, saw it, and bought it!—<em>then realized it was much, much cheaper to buy online, but whatever.</em></p>
<p>Years went by and my <a href="/blog/every-physical-game-I-have/">collection kept growing</a>, I decided I would give this title a go for the <a href="/blog/summer-game-challenge-2026">Summer Game Challenge</a>, and I’m happy to say: I have experienced a masterpiece.</p>
<p><img src="/assets/img/blogs/2026-06-19-metroid-prime-remastered.webp" alt="Cover of the game" /></p>
<h2 id="story">Story</h2>
<p><em>Metroid Prime Remastered</em> begins with Samus investigating a Space Pirate ship orbiting the planet Tallon IV. After an encounter with some mutated life forms, Samus is forced to escape when the ship’s self-destruct sequence is triggered—something that usually happens until the end of every game—and her power suit suffers some damage, causing her to lose most of her upgrades.</p>
<p>As she escapes she finds a familiar foe, Ridley, flying towards the planet. As weakened as Samus is, she is still fearless, and chases after him, about to begin a new adventure.</p>
<p>Samus will find her way through many environments and locations, to find out what the Space Pirates are doing here. The planet once housed a settlement of the Chozo civilization, but only ruins remain. She will be able to recover her powers by overcoming every obstacle that comes her way, defeating different bosses, and getting a bit lost, from time to time.</p>
<p>The Chozo are an ancient species who raised Samus in her youth. they expanded all over the galaxy, but they suddenly faded away. The game will feature plenty or murals portraying information and a backstory behind everything going on. The same is true for the Space Pirates, who will have logs of their research and plans. As the story continues, there are also mentions of Samus’ arrival and the actions taken by the enemy to try and counteract her progress.</p>
<p><img src="/assets/img/blogs/2026-06-19-metroid1.webp" alt="The landing zone and Samus' ship" /></p>
<p>I really, really enjoyed the way this title’s backstory is exposed, it felt like what <em>Outer Wilds</em>—a game I’m yet to beat but played for 11 hours—does for its own exploration. Letting you catch glimpses of what happened, not always in the right order, and allowing you to piece everything togeter until you have a full narrative.</p>
<p>You can find and read all these during the game, but they are also easy to miss and pretty much optional. The way things develop during the game is also interesting, as you see the planet change because of what’s going on, you can tell the influence of the Space Pirates and their plans in effect.</p>
<p>There’s basically no dialogue throughout the whole game, Samus is isolated the whole time. The bounty hunter will face her destiny, and Samus is not here to lose.</p>
<h2 id="gameplay">Gameplay</h2>
<p>Nintendo called this a “First Person Adventure”, where the focus is not on shooting, but exploring your way around the planet. There are many areas to explore, the Chozo ruins, Tallon IV’s Overworld, the Magmoor Mines, the Phendrana Drifts, and many locations within those regions. It’s just a Metroidvania in first person okay?</p>
<p>For exploration, Samus counts with a variety of movement options, that will let you reach different areas of the map. Upgrades like the morph ball and the grapple beam are classic at this point, smooth and satisfying to use. There are many more upgrades and some movement options. I would rather not spoil them as some of them are unique to <em>Metroid Prime</em>. There was a lot of thought put into how these powers would be brought to the third dimension. I’d say all of them were adapted perfectly.</p>
<p>Another unique feature of <em>Prime</em> is the visor. The developers put a lot of care making sure the player is inmersed into their role as Samus. When something explodes, for example, the light will reflect and you’ll see a glimpse of your own face. When there is sand, or smoke, the visor will be obstructed or foggy. There are other conditions which affect your vision, and these are a highlight of the game worth experiencing.</p>
<p><img src="/assets/img/blogs/2026-06-19-metroid2.webp" alt="Samus' face is reflected in the visor" /></p>
<p>The visor also has upgrades to unlock. The scan function allows you to investigate targets in your field of vision. This is essential to find clues to defeat enemies, translate writings on walls or decrypt computer logs. They are key to interacting with machinery, disabling enemy barriers and many other uses. Future visor upgrades will let you see behind walls or trace heat signatures.</p>
<p>The remaster features dual stick controls akin to <em>Halo</em> and modern FPS titles, but there’s also layouts that mimmick the original Game Cube or Wii. I played with the modern control scheme during the whole game.</p>
<p>As enemies can attack from every angle and come in a variety of sizes, there is an automatic lock-in system built into the game. Unlike regular shooters, trying to aim yourself is not really worth it. Instead, exploring your surroundings is encouraged. As you backtrack through areas, simply avoiding enemies becomes easier than trying to kill them all everytime, like classic 2D Metroid.</p>
<p>There is no denying this: <em>Samus is slow as a tank</em>, jumps are floaty and somewhat difficult to get used to. In <em>Metroid Dread</em> you can pretty much fly through the whole game at max speed and you feel like the most agile being in the galaxy, sliding under obstacles and running at fast speeds. Not here. However, upgrades will at least help you optimize some routes.</p>
<p>As an old title, some mechanics can put off players used to modern quality of life features. There is no autosave, there are no retries for rooms or boss fights, there are no quick travel options. The world will connect to areas and have have multiple ways to access them, but the trips won’t get any shorter. Some areas in the game will be true challenges, with barely any save rooms in between constant enemy fire. This game really wants to test your skill to make sure you are ready for the final moments, if you can’t make progress through those, you probably missed a lot of health or missile upgrades you could go search for.</p>
<p>The map is interesting. A full 3D representation of the world, divided in regions and then more detailed maps for each. You can see your location and your direction, as well as all the doors you’ve accessed and their colors indicating what unlocks them. The map will also show hints from time to time, indicating you where to go next, but you may not be able to get there yet, and you won’t know the exact path to take. This is a great feature in my opinion. The one miss here is the lack of any indication when a room has been fully explored and all the items in it have been taken. A bit annoying when hunting for upgrades and not knowing where they are.</p>
<p><img src="/assets/img/blogs/2026-06-19-metroid4.webp" alt="The spider ball climbing up a rail" /></p>
<p><strong>Boss fights</strong> in the game were a bit of a mixed bag, because of the lock-in shooting, most of them are built around waiting and waiting around and avoiding attacks until a weak spot is exposed. Some weak spots will be invisible unless you use a special visor mode, and some of them require you to use a specific beam attack or missile. This requires constant switching around of the beam and visor modes, and it was part of my main struggles with the controls scheme of the game.</p>
<p>In <em>Breath of the Wild</em> switching weapons or equipment freezes the screen and lets you take choose what to do at your leisure. In <em>Metroid Prime</em>, you have to switch beams and visors while on the move, and there will be an animation of a few seconds between each change. I never quite learned the button combinations until the very end, and even then it was still a bit of a mess. The worst of this happens when the door to the next room also requires a different beam to be opened. Most 2D titles in the franchise stacked beam effects on top of one another, or would let you toggle them in the pause menu.</p>
<p>Honestly, I don’t hate this decision. There even are occasions when multiple enemies will appear that will require different beams to be beaten. Each encounter requires you to pay attention and be efficient with your attacks—or run away to the next door and ignore everything trying to avoid as much damage as possible. The mechanic is fun, I just wish the controls were a bit better. I am not sure what I would have done myself.</p>
<p>Overall, the classic Metroid gameplay was adapted to perfection to the 3D world, there’s a reason this game was the best sold Metroid until <em>Metroid Dread</em> came along. I loved playing through it, even if traversal especially because of backtracking, was a bit annoying.</p>
<h2 id="the-art-and-music">The art and music</h2>
<p>Despite all this, the truth of the matter is that exploring Tallon IV is an absolute delight.</p>
<p><em>Metroid Prime</em> came out in 2002, and it already featured incredible graphics for the time. <em>Metroid Prime Remastered</em> manages to do the same in modern times, offering an incredible level of visuals and performance that I never thought possible on the Nintendo Switch. This is easily the best looking game I’ve played on the system, it runs at 60 FPS without any struggles at all.</p>
<p>This smooth as butter movement and camera controls were a blessing I didn’t expect, and I’m thankful for them.</p>
<p>Another highlight has to be the HUD, the interface around Samus’s helmet looks amazing. I already talked about how it reacts to the environment, but the overall design deserves a lot of praise as well. The stylization of the visorts is excellently done.</p>
<p>Same goes for the music. The score of this game has been familiar to me since 2012, when I first saw some of those YouTube playlists with a title like <em>“Relaxing Nintendo Music to Study and Work”</em>. When Nintendo released their <a href="https://music.nintendo.com">Nintendo Music</a> app, their <em>Tallon IV Exploration</em> playlist quickly became a favorite of mine. I recognized it as soon as the game booted up, and I was incredibly surprised at how much it fully immersed me into this world. When I first visited the Phendrana Drifts, I stood there in awe as the music played.</p>
<p>The score contains reinterpretations of classic Metroid soundtracks. It is very fitting and iconic to this day. This soundtrack is simply beautiful, some of the best atmospheric music ever.</p>
<p>The Remastered version also let’s you access a ton of extras. 3D Models of the characters and enemies, conceptual artwork of the original Metroid Prime and the Remastered, and the soundtrack can be unlocked too!</p>
<p><img src="/assets/img/blogs/2026-06-19-metroid3.webp" alt="Samus discovers there are Metroid in Tallon IV" /></p>
<h2 id="the-good">The good</h2>
<ul>
<li>The music is fantastic and very immersive, fading perfectly as you traverse the world.</li>
<li>The visor, the effects around it, its interface and everything truly make you feel like Samus.</li>
<li>The power-ups from the classic Metroid are expertly brought to the third dimension, and new powers that work great because of this.</li>
<li>If you are lost, there are helpful hints that trigger after some time, letting you know where to go next, but not how.</li>
<li>The lock-in shooting let’s you deal with enemies swiftly while strafing around them.</li>
<li>The world design is great, it’s fun to realize how everything connects.</li>
<li>The story shown through scans and logs is very interesting and adds a lot to Metroid’s lore.</li>
<li>Performance is smooth as butter, and mastering the movement and controls is satisfying.</li>
</ul>
<h2 id="the-bad">The bad</h2>
<ul>
<li>The movement can be hard to get used to and feels slow at first.</li>
<li>Switching weapons/visor modes can be confusing and annoying in the heat of combat.</li>
<li>No quick travel options, backtracking can take a long time.</li>
<li>Scanning every room and looking for clues can be annoying.</li>
<li>No easy way to mark locations to remember any dead ends you may want to return to.</li>
<li>Some boss fights amount to waiting around a long time until you can shoot at a weakspot.</li>
<li>There are no indicators for rooms with missing items or upgrades.</li>
<li>You can only save via save rooms, no auto-save. <em>This could be a positive for people looking for challenge</em></li>
</ul>
<h2 id="some-tips-and-tricks">Some tips and tricks</h2>
<ul>
<li>Be ready to accept your defeat when you are far from a save spot. Also make sure to check for any enemy spawning areas to recover health easily.</li>
<li>Make sure to spot every door and truly analyze your surroundings. There are areas you can reach very early which you may still miss.</li>
<li>Screenshots! The Nintendo Switch let’s you easily take screenshots. Take one of your view and then the location in the map.</li>
<li>Each room in the map has a name! If you don’t fancy screenshots, just save a note somewhere to return there.</li>
<li>Be ready to shot at weird looking walls, and especially pillars! There are a few things that can be hidden there.</li>
<li>Keep scanning everything you see! There’s a progress percentage of your scans and a lot of story to read.</li>
<li>There is a difference in your jumps when you are targetting an enemy and when you are not, one is faster and to the sides, the normal one has more heights.</li>
<li>Most attacks are actually very easy to avoid, just stay at a safe distance and figure out patterns first.</li>
<li>Seriously, scan every boss you face. It will give you an idea of how to defeat it. Also scan any suspicious things in the arena itself, it might give you hints too.</li>
</ul>
<h2 id="final-thoughts">Final thoughts</h2>
<p>I loved this game so much! However there is a grave mistake I made that cost me hours of playtime. Make sure to always remember to look for every door. I already mentioned in the tips and tricks. But there was this area that exposed me to a lot of the early story, that I completely missed for like ten hours.</p>
<p>Most playthroughs of this game are about 12 hours long. Mine was 18 hours, and my playtime on Switch was about 25 hours.</p>
<p>To be clear. I <em>loved</em> pretty much everything about it. But having to drag myself across already visited areas because I missed some pretty obvious clues with items I needed to collect could have been a bit of a chore. Again, I was happy to do it, because I loved the movement by the end and the control I had of Samus and knowing my way around the world, but you may end up very annoyed by it all, or not as thrilled about the slowness of it all.</p>
<p>This game features the best graphics on the Nintendo Switch, the best performance, one of the most fantastic atmospheric music of all time. One of the best transitions to the third dimension in a franchise ever. The familiar sense of progression in the series that started its own genre. I am baffled I didn’t play this sooner, but I am extremely glad I did.</p>
<p>Yes some boss fights are meh and missing out on some scans is annoying. Backtracking will never be for everyone and the lack of a run button may cause some people to riot. Nonetheless, this is amazing stuff.</p>
<p>The original title has a score of 97 in Metacritic, while the remaster has a 94. No matter how you look at it, this is one of the greats! I highly, highly recommend giving it a go. It was a fantastic journey that gripped me the whole way through.</p>
<p>I’ve been able to play and focus on individual games lately, and I’m not sure if that is a change in my own mindset, or if the games are just that good. In any case, this was a blast. A contender for my favorites of the year.</p>
<p>This is day 80 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>
<p>
<a href="mailto:me@joelchrono.xyz?subject=Metroid Prime Remastered">Reply to this post via email</a> |
<a href="https://fosstodon.org/@joel/116778123105412854">Reply on Fediverse</a>
</p>Note published on June 19, 2026 at 3:36 PM UTC - Molly White's activity feed6a3561e7f3a5676bc2fa56672026-06-19T15:36:07.000Z<article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>very cool illustration of ranked choice voting and how it worked in Maine’s gubernatorial Democratic primary</p><p>via <a href="https://www.reddit.com/r/Maine/comments/1ua4e7n/sankey_diagram_of_the_democratic_gubernatorial/">Reddit</a></p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/515376bef66e5d26e8a1_c7bnml9v798h1.png" data-fslightbox=cd59f328417c1b3761bd><img src="https://storage.mollywhite.net/micro/515376bef66e5d26e8a1_c7bnml9v798h1.png" alt="A Sankey diagram showing how votes from Troy Jackson, Shenna Bellows, and Angus King III contributed to Hannah Pingree’s victory in the Maine Democratic primary for the gubernatorial race, even though Nirav Shah had more votes than Pingree in the first round of voting" /></a></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202606191133"><time class="dt-published" datetime="2026-06-19T15:36:07+00:00" title="June 19, 2026 at 3:36 PM UTC">June 19, 2026 at 3:36 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/116777508550249694" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mono3ykqvk2f" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/maine" title="See all micro posts tagged "Maine"" rel="category tag">Maine</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/politics" title="See all micro posts tagged "politics"" rel="category tag">politics</a>. </div></div></footer></div></article>📝 2026-06-19 12:25: Little chicks are starting to venture out from under mum. 🐥 - Kev Quirkhttps://kevquirk.com/2026-06-19-12252026-06-19T11:25:00.000Z<p>Little chicks are starting to venture out from under mum. 🐥</p>
<p><img src="https://kevquirk.com/content/images/2026-06-19-1225/1000009784.webp" alt="1000009784" /></p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-06-19%2012%3A25">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-06-19-1225#comments">leave a comment</a>.</p>
</div>