Really vibe with this post from Mike Swanson. In the post Mike goes into some of the history and motivations why software has become so obnoxious and why the problem has become so wide spread. His term for software that stays away from this trend is backseat software, I like to think of it as quiet software.
I’ve started to think of this as backseat software: the slow shift from software as a tool you operate to software as a channel that operates on you. Once a product learns it can talk back, it’s remarkably hard to keep it quiet.
One of the comments below the post nails, in my view, the reason: advertising. Not just in the sense of promoting the product directly, but promoting either a feature or the users action resulting in the product being promoted.
Everytime I get the popup to ask for a review, I feel that they are not at all interested in my opinion, but the only reason for me to review is that it will help with App Store ranking.
I see no quick or easy solution to getting back to software that is more quiet. If anything, I think for the next couple of years with vibe coded apps it will only get worse.
But I really like this concept and I will try to keep my software as quiet as I can.
Ever since I got my first iPhone (a white 3G) I’ve wanted to build my own iOS app. I tried a few times and even got quite far, but I never ended up shipping anything to the App Store. Last month I decided to finally change that. I got back into SwiftUI, and while my original app idea turned into a side quest (which itself became overly complicated), I realized the best approach was to just build something simple. Not wait until iOS 26 is out, just build something I wanted, and see what it takes to get it into the App Store.
It took me about 10 days, but here it is: PeekCard
PeekCard
The primary goal was to store loyalty card barcodes so I could show them on my home screen via a widget. I know plenty of apps already do this, but I didn’t want one that bombards me with ads or harvests my data.
While building PeekCard, it quickly became more than just scanning a simple 1D barcode. The app supports most 1D and 2D barcodes, lets you edit the data, and even convert between barcode types. For example, if you want to know what URL is hidden in a QR code, you can scan it, inspect it, change it, and generate a new QR code to share; even via a home screen widget. Or if you’ve ever wondered what’s inside that complex barcode on your parcel, now you can just scan and see.
You can find the app in the App Store or on its landing page.
Now I can finally go back to working on my original app idea 😎.
I just migrated this site from Tailwind 3 to 4, and because I ran into some breaking issues, I started with a freshly generated Astro project and copied in the content. This took surprisingly little effort, so I am happy with that.
When migrating, I ran into some old code that I used to render the markdown files to HTML as a string, to include in the RSS output. But for this task, I used a separate package and yet another package to sanitize the html.
But I noticed in the Astro docs that there is a new (and as of now still experimental) way to generate the html for the content in Astro: Astro Container API
To use this new API, you can do something like:
const container = await experimental_AstroContainer.create()
items.map(async (item) => {
const { Content } = await render(item)
const html = await container.renderToString(Content)
return { ...item, html }
}),
Or check out the code to generate the RSS feed for this website: feed.xml.ts
Wow, I never knew I could do this. I don’t know how often, if ever, I will use this. But it is really impressive that it works.
When I switched to Colemak, I also changed my backspace to be located on the caps lock position. When using hobbyist keyboards that I can program, it is simple to just program that key. But for my MacBook keyboard, I thought the only option was using Karabiner Elements. But running that with its virtual keyboard just to map one key feels like overkill.
Today I decided to switch from Colemak to Colemak-DH 🫣, but in order to do that, I could no longer use the built-in macOS Input Source to override my keys. It turns out you can create your own Input Source, so I thought maybe I could also override the caps lock there. To my disappointment, this seems to not be the case.
But my googling wasn’t for nothing; I came across this post which shows a simple one-line command to change caps lock into backspace 🤯
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000002A}]}'
There comes a moment in life, often in the quietest of hours, when one realizes that the world will continue on its wayward course, indifferent to our desires or frustrations. And it is then, perhaps, that a subtle truth begins to emerge: the only thing we truly possess, the only thing we might, with enough care, exert some mastery over, is our mind. It is not a realization of resignation, but rather of liberation. For if the mind can be ordered, if it can be made still in the midst of this restless life, then we have already discovered the key to a deeper kind of freedom.
This post got me thinking about the paradox of writing “good” code. If the code is truly well-written, it will likely be read very rarely. In contrast, poorly written code needs constant tweaking and, therefore, ends up being read a lot.
As developers, our best course of action is probably to strive for maximum readability in our code, with the hope that the code and the logic it embodies will seldom need to be read in the future.
There’s a certain comfort in the realm of infinite possibility. When a project is ongoing, it can be anything. It’s Schrödinger’s project — simultaneously perfect and flawed until you actually finish it and put it out into the world. The moment you declare a project “done,” you open it up to criticism, both external and internal. What if it’s not good enough? What if I missed something crucial?
My personal list of projects in progress is quite large, but I like that they allow me to daydream. Sometimes, starting something new means trying out a new tech stack or library. Other times, it’s about exploring an idea that sounds great until you actually start working on it and encounter all the odd quirks that seem impossible.
I don’t know if having many ongoing projects is a bad thing. The main risk I see is getting overwhelmed by the number of things you want to do and not finishing anything. For me, these projects feel like a hobby and don’t have to be taken very seriously. Whether you finish them or leave them open doesn’t really matter, as long as you can mentally let go of stale projects.
[…] understanding that all of our mantras need to be understood as proverbs and not laws.
This post aligns well with the way I think about programming mantras. I see a lot of developers applying a good idea to everything and thereby losing sight of its intent. Considering them as proverbs that can be applied to a specific situation, but should only be used as guidance seems like a healthier way of following their advice.
A great overview of new APIs and features becoming available on the web. This site deserves a visit every once in a while to discover what is new.
Appjeniksaan is my personal software development 🛠 shop, where I create sites and apps that I find delightful or simply fun 🤪 to build 🚀. On this site, I share interesting information I discover while exploring the web 🌍.