WebSockets for HTML over the wire? In this economy?
Welcome to your weekly curation of the essential news in the Open Media Network and Open Social development communities with a focus on devastating big tech via Techno Anarchism.
This article originally appeared on The Fulcrum. Revolutionary? and self-rewarding! K.I.S.S. and DIY WebDev strategy cripples tech bros, oligarchs, and autocrats In this article we will cover a simple, DIY strategy. In particular, it's about what I call the 4Rs of web development. They are empowering, reduce frustration, and help you feel good about your...
In this article we will cover a simple, DIY strategy. In particular, it's about what I call the 4Rs of web development. They are empowering, reduce frustration, and help you feel good about your work (and yourself).
Welcome to your weekly curation of the essential news in the Open Media Network and Open Social development communities with a focus on devastating big tech via Techno Anarchism.
Tightening up the ship After a year of publishing The Fulcrum, I (as publisher) now know the topics, tools, and techniques I want to focus The Programmer's Fulcrum coverage on. And maybe it will have the side benefit of shorter TPF posts. We'll see if I can tighten up my discipline as well. ;) That...
After a year of publishing The Fulcrum, I (as publisher) now know the topics, tools, and techniques I want to focus The Programmer's Fulcrum coverage on.
Welcome to your weekly curation of the essential news in the Open Media Network and Open Social development communities with a focus on devastating big tech via Techno Anarchism.
Due to my compulsive need to self-host whatever I possibly can, I decided to set up a self-hosted PDS. All that's on it so far is my Bluesky profile data, but it was a surprisingly painless process.
For a while now, my home page has shown whatever song I'm listening to (or, if idle, the last one I played). Initially, it was powered by last.fm. As I've built my own scrobbler, I populated the element from my own data. The static implementation is straightforward: I store each listen as a record. When a listen is inserted, the cache is cleared and warmed, and an update is displayed.
I've had this long, long running relationship with bookmarking and read it later services. I'll commit to one, excited about whatever feature set it offers and then, without fail, my list grows and grows and grows and grows. I archive things to reset, repeat and then move to a different service. The only thing that's ever worked has been listening to articles as audio when I have a spare moment. Sometimes it's background noise but, generally, I absorb things better as audio.
Now that this site is written in Go, I've turned to restoring and adding more features connecting it to the open web. While I maintain a healthy skepticism of Bluesky the company, I'm enamored with open protocols and ATProto falls under that umbrella.
OKHST is a tone-based color space for generating UI palettes that behave more predictably across states, dark mode, and high contrast.
There are people, groups, works and topics that are old just in terms of age, and everyone and their dog wants to replace them for good, often for their age alone. But that turns out to be a wild goose chase, since these are so good at what they do, and/or they command so much mindshare, that they keep going for decades. See Emacs, Vim, COBOL, paperbacks, notebooks, email.
Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.
Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.
Welcome to your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.
today iain learned: How to report a miscategorisation of a site/domain in the Cloudflare for Families DNS resolver service.
Welcome to your your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.
TPF is your weekly curation of the essential news in the Open Media Network and Fediverse development communities with a focus on devastating big tech via Techno Anarchism.
Why predictable CSS state resolution matters, and how Tasty approaches it with state maps and non-overlapping selectors.
today iain learned: How to add an animated card border glow with CSS
That I even need and have made a diagram of the infrastructure for this site speaks to how over-engineered it is. Yet, while it is ostensibly a personal site, it's a personal site that's replaced many services that I previously used.
I've already blocked entire countries to combat scrapers , I update my robots.txt for well-behaved bots (and 403 any included in the list that access anything other than my robots.txt ). In addition to these steps, I've started blocking traffic from IPs contained in Spamhaus ' DROP and DROPv6 lists.
today iain learned: How to build better and more accessible code blocks with the Astro Expressive Code integration
I've spent a while recently migrating my personal infrastructure off Coolify . Coolify 's an excellent tool and one that helped manage the initial learning curve of managing and deploying things when I started to self host things. As I got more comfortable with the process, issues and details I found myself wanting to remove it as an abstraction on top of what I had become comfortable managing.
Owning your own data is hard . I've been trying to own as much as I can, and my site has become a reflection of that process, both in what I display and discuss. As difficult as it is, there's a freedom in owning as much as you can.
today iain learned: How to use the Content-Security-Policy Reporting endpoint for automatically logging/receiving CSP violations
today iain learned: How to screenshot HTML DOM nodes and their CSS styles in the browser to create favicon and Open Graph images
You learn something new every day. I've been using Homebrew for over a decade and, up until a few weeks ago, hadn't hit a case where I would not want to update something.
I use Goatcounter for analytics primarily to see where things I post might get mentioned. I don't get a ton of traffic, nor should I expect to.
It's tradeoffs, all the way down.
Nadia Makarevich has some great numbers from a realistic benchmark. (h/t to Chris Coyier for putting it in my feed.) The whole writeup is worth reading, since it goes in-depth into several data-loading strategies. The summary is excellent:
How I built an interactive year-in-review page using Astro's content collections, pulling together blog posts, movies, books, music, and more into a single retrospective. Plus: polaroid selfies, goals for 2026, and lessons about actually tracking things throughout the year.
The US government is run by petty morons that are threatened by a font. But because the web is the web, you can at least force .gov sites to render all text using Calibri.
The last app I bought through Apple's app store was a client for my Audiobookshelf instance and this reminded me why I'd built a Navidrome client . I wanted to use the web application as a PWA, but Apple doesn't support continuous audio playback in PWAs or Safari on iOS. Audio plays, but it never advances to the next track.
linkding is one of my favorite applications that I self-host and the place where I save everything I want to read later. The catch being that what little time I can dedicate to actually reading is spent on books. What I do have is time where I can listen to things while doing chores around the house, out on walks or otherwise engaged in an activity that doesn't demand my full, undivided attention.
All of my projects are now stored on my Forgejo instance rather than GitHub as the latter continues to speed run the enshittification curve. I've implemented a manual deploy button in my site's admin but for other, lighter-weight projects, I prefer to deploy changes whenever I push them up.
I've tracked my reading progress on my site for a bit now. I'd originally done this by fetching my progress from external APIs and sources on platforms like Oku , fetching and parsing the DOM on the StoryGraph and eventually importing and managing my own data. For years I've been reading and listening to audiobooks in Apple's Books app. Much like Apple's other media apps (music and TV, namely), Books has slowly moved in a direction that makes impor
I've moved all of my personal, private projects over to my own forgejo instance . It's been reliable and an altogether simple transition — I even have it mirroring the ai.robots.txt repo.
One of my ongoing efforts in building this site has been to embrace progressive enhancement and make it every bit as functional without JavaScript as it is with JavaScript. This has become much easier now that I've rebuilt the site using Laravel .
If you've ever wondered what domains the US federal government has registered, there's a rather exhaustive list over in the dotgov-data repository on GitHub, which is maintained by CISA . You can see the raw CSV here . They don't include the registration date, but you can derive that from public WHOIS records or by examining the repository's git histor
I've made a ton of changes to this site that I haven't yet written about. I likely will write about at least some of the changes given enough time, but I wanted to spit out a rough changelog in the meantime.
Since adopting Navidrome to stream my own music I've been tracking my listening activity from my instance and have recently added pages for all of the albums in my collection, with a record for each track and the track list and track duration displayed on the album page.
GitHub's now former CEO went in for some bold absolutes on software development as a career last week: Either you have to embrace the Al, or you get out of your career. And, this week, resigned. : GitHub and its leadership team will continue its mission as part of Microsoft’s CoreAI organization, with more details shared soon. Terrifying stuff!
As I've continued to over-engineer this site, there's been a mounting tension between what is and isn't dynamic. What should be dynamic, what needs to be dynamic, how often a given page or element is updated.
the act of removing my self healing URLs