Reeder Classic is still my go-to RSS reader on iOS, and the first thing I open every day at breakfast. I now use it with a private FreshRSS backend that talks to my feed-summarizer, and that stack lets me extract, enrich, combine, and rank pretty much anything out there. I can’t abide the new Reeder and would use NetNewsWire if Classic ever died.
Ivory remains my primary social network app (as such things go). I’d love it if it also supported Bluesky and Threads, but I honestly don’t engage with either network enough to care.
DaVinci Resolve has taken up permanent residence on my iPad Pro, and after trying the dismal failure that is Final Cut Pro for the iPad, Apple should be ashamed that a free video editing application is this stupendously powerful.
There are four apps that I keep open all the time, and I really mean all the time:
Obsidian has turned into my primary note-taking and knowledge management app because editing Markdown in it is essentially frictionless (if you discount the stupid markup extensions). I use a very limited set of plugins and sync the vaults myself over SyncThing (including to iOS), and its true superpower is that I can run it on every platform. Pretty much everything I write, plan, or think about ends up in Obsidian first.
VS Code is another staple in my toolkit. This year I’ve relentlessly cut down on the number of extensions I use, even if the vast array of extensions and customization options make it ideal for coding, writing, and even managing tasks. But the key thing is that it has turned into my AI and agent shell since I now do pretty much everything with LLMs from inside it. And, of course, it’s where I finish and publish nearly all of my writing.
Ghostty has, rather unexpectedly, grown on me. I avoided committing to iTerm or any other classic Terminal.app alternatives for decades, but somehow it feels right, largely because it’s so seamless. Apple has “improved” the stock terminal at its usual glacial pace, but it just doesn’t feel like home anymore. Under Linux, I replace it with Ptyxis (which ships with Fedora).
Windows App is my portal to work. I live inside it at least eight hours a day (yes, video calls and all), and it’s probably the most rock-solid piece of software I run. Besides work, I use it to access nearly all my servers that run GUIs, and despite the weird name (and some cognitive dissonance) it works fine with Linux servers.
Then there are the background apps that are also open 100% of the time but that I seldom “use” in the usual sense: Tailscale, Moom, and a little menagerie of supporting characters ranging from full-blown apps to scripts (for instance, I’ve automated away most of my image editing for posts using Shortcuts and system services).
And then there are a few that aren’t open 100% of the time, but that I find indispensable:
Pixelmator still lives despite having been acquired and, besides being the basis of a lot of scripts, is still the first thing I reach for when I need to edit an image.
Shapr3D continues to be my favorite CAD and modeling tool. I’ve tried Fusion, OnShape, and the unbearable bundle of paper cuts that goes by the name of FreeCAD, and nothing comes close to it for ease of use. I especially like that I can also use the complete feature set on my iPad when inspiration strikes during the evening.
OrcaSlicer also spends a lot of time on my desktop, since it’s what I use to run all my 3D printers.
I have to give an honorable mention to Blender since it’s still the thing I reach for when I need to do any sort of mesh conversions (and has recently become quite a usable video editor).
Finally, a single honorable mention because I recently realized that I’d stopped typing out git commands by hand after decades of habit: lazygit has become amazingly useful.
I do a lot of quick edits to all sorts of things, and the speed with which I can go in, make changes, stage, commit, and push is incredible. It keeps me in the flow, and the fact that I can also do pulls and edits from inside it (since I can drop into vim by just typing e) is just icing on the cake.
Dec 13th 2025 · 9 min read
·
#display
#diy
#eink
#hardware
#python
#reviews
#seeedstudio
#trmnl
I’ve long had a fascination for digital picture frames, and that harks back to the Vodafone 520 Photo Frame, which was, at the time, a pretty wild concept–you could send pictures to it over GPRS and have them show up on a tiny LCD screen, way before social networks and ubiquitous connectivity made that a non-issue.
We’ve had a couple of those around since 2007, now relegated to drawers–they were dim and poky even at the time they were launched, and only grandparents loved them. I’ve been wondering if I can revive ours somehow, but LCD displays aren’t really the kind of thing I want in our living room.
TRMNL devices are a completely different thing and don’t really try to be photo frames. They’re e-ink based, and their upcoming hardware upgrade focuses on improving size, resolution and online integration rather than moving to (a still prohibitively expensive) color display like the current crop of digital picture frames (which are priced north of an eye-watering three hundred euros).
But they do get a lot of things right–the devices are extremely low-powered (they run on an ESP32-S3), nondescript (they fit in nicely everywhere), and, more to the point, e-ink is much nicer on the eyes than anything else:
Of course I had to start with a XKCD comic
Our brain’s vision center considers e-ink to be “static” and as much a part of the surface as if it were paper, so they’re naturally less eye-catching. Even if you do catch them refreshing, it feels a lot more natural than any backlit display.
Well, unless you’re talking about color e-ink–most current, quality color e-ink displays I’ve seen so far take so long to refresh and flash so often it looks like it might be somewhat distracting, even if infrequently.
So I’ve actually been keeping an eye on TRMNL for a while. I liked the approach, the design and the hardware, and they also make the entire firmware source available and allow you to use your own server, which is the kind of guarantee for long-term support that I love.
I went the cheapskate route: I bought a Seeed Studio DIY kit on sale, 3D printed this enclosure (which is nice but has a few structural design flaws I need to fix, since most of the internal fittings broke off already), and it all just worked out of the box.
Assembly and setup were a matter of minutes, not including the two or three hours my recently rebuilt KP3S took to print the parts, since I took it nice and slow.
However, one of the reasons I wanted a TRMNL was to display some data and info that simply does not live in the cloud. Stuff I should look at once a week (like CPU, RAM and disk usage in my homelab, power consumption, etc.) and that is kept in my Node-RED metrics/home automation server but that I seldom go in and check.
So I went off, looked at awesome-TRMNL’s Bring Your Own Server section and tried out a couple of the options there.
Functionally, the best one was this PHP implementation, which deployed just fine under Docker and had a pretty great feature set, but a) there is no way I am going to be coding PHP in this day and age and b) I wanted something much simpler that afforded me the kind of control I would be truly satisfied with.
Thus byos_fastapi was born–no forking of a browser engine to render pages (so no direct way to leverage TRMNL’s rather nice design system), no fancy integrations, just vanilla Python, rendering bitmaps and charts using Pillow, hammering things out bit by bit.
And yes, that project is under the @usetrmnl organization, because Ryan (the founder) saw my earlier draft repo and kindly invited me to move it there (one of the things that drew me to TRMNL is their openness, and it was just serendipitous to have that demonstrated even as I was compiling my notes into this post).
This is far from being my first rodeo managing displays (I started with the original Codebits signage server, then rebooted it and then modernized it somewhat, as well as a bunch of (mis-)matching clients), so it was quite fun to reason things out and build a playlist/device management mechanism all over again, even if I didn’t do any fancy artwork this time.
I very nearly used bun and TypeScript, but there are so many nice bitmap charting libraries for Python I’m familiar with and use in my machine learning notebooks that I decided to stick with those.
Since I actually started with the older black-and-white only firmware, I spent far too long fiddling with gradients and “color” curves, and once I upgraded to the latest firmware to render greyscale images (2-bit palettes, whoo!) I really went overboard:
Various dithering algorithms, compared
The reason I tried various dithering approaches was that the way the display renders things is actually quite interesting–the firmware only knows about 2-bit color and renders a set of greys that is far too dark, but when looking at the display up close I can see a grainy overlay of a much lighter grey that implies that the display itself could do better:
Contrast compensation on the camera really went overboard here
The specs for the kit say it can’t, but the grain makes sense given what I know of EPD waveforms–there’s always a bit of noise and ghosting involved.
And there’s always a trade-off in terms of RAM and power consumption while rendering. I suppose that the displays TRMNL themselves source have slightly different characteristics that tend to bias rendering toward black-on-white with some font and line smoothing, and that makes sense given it’s all usually line art rather than photographic images.
In the end, I realized that at the typical distance I have the device from my eyes (it’s now across the living room) black-and-white makes almost no difference for simple charts.
But photographs and some text displays were much improved in greyscale mode, so my server always renders both 1-bit and 2-bit images and you can choose which to use in the playlist editor:
The playlist editor, which I hacked in Preact
To do that and make my life simpler while creating plugins, I wrote a “color” pipeline that lets any of my plugins automatically render both 1-bit and 2-bit greyscale:
Can you even tell the difference if you squint?
And after playing around with a few visuals I landed on using a font that would be readable and punchy enough to survive dithering–Space Grotesk was a prime candidate, and it actually looks somewhat like some of TRMNL’s own bitmap fonts.
I had the thing on my desktop (right between my screen and keyboard) for a week as I hacked on the server, and the default 15-minute interval for rotation and discreet updates felt so natural that I tuned them out and actually had to actively look at the device (that was literally in front of my keyboard) to check if it was working–at which time I was often pleasantly brought up to date on news stories or the various statistics I displayed.
Which kind of proves the entire point about TRMNL’s product line–it’s great to have an unobtrusive, extremely readable display, and having the occasional nice artwork on it is just icing on the cake:
Samurai Jack has some of the greatest cartoon visuals of all time
Although using Python and Pillow is plenty for my current needs and I have zero interest in building this out to the point where it is a fully browser-based endeavor with all the bells and whistles that come with a consumer product, I am intrigued by the possibility of having more complex (and let’s face it, nicer) layouts in some form of HTML.
I’m quite happy with coding new plugins to do that, but I really don’t want to run a browser engine on a server (I have an entire draft ranting about how annoyingly hard and wasteful it is to get high-resolution bitmaps of very detailed charts because all the really nice libraries just use WebGL and SVG these days and assume you’re running Chromium, but that can wait).
So, naturally, I started hacking away at my own HTML renderer–I forked html2pic, removed the pictex rendering engine (mostly out of stubbornness, since I am actually using Skia with TypeScript) and thanks to GPT-5.2 (which I had early access to) I am already churning out automated layout tests that inspire some confidence:
I don't want to reinvent the entire wheel, just the fun bits
So I guess I have a holiday project. Well, more like a dozen of them now, but this one is really fun.
And I haven’t even started looking at hacking the firmware to see what I can do about the display driver, although I don’t think I will go that far.
But I will redesign the enclosure I used and put it up on Printables eventually (I started putting in proper screw holes, matching inserts and the like, but there’s only so much time).
And someday, when these things become cheaper, I’ll probably get another, bigger display. Who knows, maybe in a couple of years there will be a full color version I can hang on a wall without having to consider selling a kidney.
This is absolutely fracking insane, and one of the things that terrifies me the most about the way Apple (or Google) handle account blockages and support. The complete blanket blocking of all services, the lack of any meaningful support, and the complete absence of any recourse or appeal process (including the Kafkaesque “you can only contact us from a device signed in to your account” requirement) is a recipe for utter disaster.
The worst part is that it is completely impractical to have “backup” accounts for all the services you use–or even self-service ways to retrieve your data in alternate ways if this happens. And $DIVNITY help you if you’re the head of a family account, or a business account, or if you have any kind of shared services.
Apple can do much better than this. They must do much better than this. Because the current situation is untenable, and without human contact points or sane checkpoints it is only a matter of time before someone figures out how to do this at scale to purposefully lock other people out of their accounts. I bet that having a few Apple execs go through this process themselves would be a real eye-opener for them.
Dec 8th 2025 · 3 min read
·
#3dprinting
#ai
#keyboards
#notes
#video
Thanks to local bank holidays we had a couple of consecutive extended weekends, which I spent doing a bunch of long overdue chores, including replacing kitchen lights, organizing my office a bit better, and generally ticking off various small tasks that had been piling up for a while.
Much ado is being made about AI being the root cause of the current memory price surge, but the reality is a bit more complex than that. While AI workloads do demand significant memory resources, the underlying issues stem from a combination of factors affecting the entire semiconductor industry–the fact that Micron is shutting down Crucial shocked many PC builders, but if you look at all the charts and ponder the situation, you quickly realize that:
Older RAM started climbing in price earlier as fabs switched to DDR5 production, which is now the standard across just about any kind of hardware (consumer, mobile, server., etc.)
PC Part Picker’s charts don’t show that server RAM prices have actually been climbing slowly but steadily for over a year (just like flash storage, CPUs and other things that, guess what, are mostly fabbed in Taiwan and need to be shipped to the US).
A sizable chunk of this is a direct consequence of the uncertainty created by tariff policies and geopolitical tensions affecting supply chains. Everyone has been padding their margins, just in case.
And yes, it will always be more profitable to sell to data centers than to consumers. NVIDIA was the prime example of that, but of course cumulative pressure “spread out” that load to supporting components.
Plus there’s an inconvenient truth–most people do not build (or even upgrade) their own PCs anymore, so the market for custom builds is shrinking, which means less competition and higher prices for those who do.
I do find it highly amusing that people find that Apple’s M-series Macs are now in line with the market, especially since this dynamic doesn’t really apply to Apple–remember they fab the RAM directly into their CPUs, so they’re largely immune to discrete component pricing fluctuations.
Plus, of course, Apple can negotiate far better pricing even if they were to buy discrete RAM, given their scale and influence in the market. At best, they would be affected by IP licensing for specific RAM technologies, but that’s a different matter altogether.
What I don’t find amusing, though, was that I completely forgot to buy RAM for one of my machines over Black Friday. Good thing that borg was padded out with 128GB two years ago when it was cheaper…
Dec 4th 2025 · 4 min read
·
#gaming
#homekit
#homelab
#node-red
#steam
#wol
I started doing it because bun is the closest thing I’ve come across yet to a “batteries included” JavaScript runtime: it bundles SQLite support, HTML parsing and sane HTTP primitives, can generate standalone executables, and the fact that it installs packages with sub-second delays and bundles its own TypeScript implementation is just icing on the cake.
Do I like JavaScript any better because of bun? Heck, no. Do I think it’s especially useful for AI development? Not really, other than the fact that TypeScript removes some of the ambiguities of API calling and bun itself is well suited to ship flexible CLI tools (which is what Anthropic wants it for).
Does it mark a significant shift in the landscape of JavaScript tooling? Nah. The ecosystem has always been there–it is a great milestone for bun and Zig, and it’s a good sign for bun in terms of long term runway and support, but the only risk I see is that the hype overtakes reality and Anthropic starts shoving in AI-specific garbage into the bundled runtime.
Should Claude Code competitors heed this shift? Not really. Anything can be an AI tool helper these days, as long as it can do API calls, and bun is just more expedient in a JavaScript-infested industry.
Me, I’d probably have picked Go, but native code (or AOT builds like you’d get from C#, which is shunned by most but quite interesting for cross-platform compatibility) are not really needed for AI tooling now that we’ve come to accept the fact that models (nearly) always live on remote services.
Nov 26th 2025 · 1 min read
·
#arturia
#gas
#hardware
#music
#synths
#wishlist
I know I already own a three-year-old copy of V Collection and an Essential and that I can always use those, but the form factor (even if it has mini keys) and the sheer amount of shipping presets makes this an amazing little synth.
(And yes, before you ask, it would be amazing to have an iPad version of Arturia’s soft synths, even if simplified, but that is unlikely to ever happen under Apple’s App Store tax.)
Too bad it doesn’t have speakers and a battery like the Yamaha Reface series. And it’s on the pricey side, but I could always sell my OP-1…
Nov 24th 2025 · 6 min read
·
#alarm
#classic
#clock
#hardware
#mac
#retro
#reviews
If you’re anywhere near the intersection of Apple nostalgia, retro-computing and DIY electronics, This Does Not Compute’s latest video was probably on your radar. If not, the gist is simple: there is an 11 cm tall alarm clock shaped like a Classic Mac, and I grabbed one off AliExpress for roughly EUR 20.1
It’s now cold enough for me to enjoy being inside, but sometimes I would prefer to have a bit more variety and not be stuck in front of a screen all the time. Still, there’s been some progress on various fronts this week…
This is a pretty awesome hack. I already use my iPhone as a “desktop” sometimes when traveling (you can use the Windows app to have full-screen Remote Desktop sessions on an external display and a pocket Bluetooth keyboard) and have been looking at Android’s upcoming “desktop mode” with some interest, but being able to run native iOS apps in windowed mode on an external display would be icing on the cake.
Of course Apple will never support this and will hunt down and remove any way to change the class number to enable it on an iPhone, because we just can’t have nice things—we can’t even think about them.
Nov 16th 2025 · 1 min read
·
#3dprinting
#dev
#keyboards
#notes
As someone who’s been living quite happily for with a Ryzen machine running Bazzite streaming games to our Apple TV, iPads and a Logitech handheld for over a year now, I found this quite interesting.
It doesn’t seem like their custom APU is that much better than the Ryzen Stryx Halo series, though (the 8060S iGPU seems substantially beefier), so it will be interesting to compare pricing (and availability) with mainstream mini-PCs.
I do love that they seem to be devoting nearly three quarters of the volume to a heat sink, though–that means they’re focused on making it as quiet as possible, which has been the main challenge for us (that Steam PC lives in our closet, plugged into our 2.5GbE LAN, because fan noise was just too distracting).
P.S.: I am not that excited about their VR headset, though. Foveated rendering is par for the course these days, and yes, it is quite interesting that they’ve merged Intel emulation into the ARM version of Proton, but the hardware proposition seems a tad off given that VR gaming has not exactly taken off in the mainstream.
Nov 9th 2025 · 17 min read
·
#hardware
#intel
#lattepanda
#review
#sbc
A couple of months ago, DFRobot reached out to see if I wanted to take a look at the new LattePanda IOTA single-board computer–successor to the original LattePanda V1. I never owned a V1 myself, but I have found quite a few in the wild; they were popular with integrators for kiosk and digital signage applications. I was curious to see how the new model stacked up.
As someone who relies a lot on the Watch (especially now that WhatsApp works locally on it), I’d say we have officially reached the point where Apple is on the verge of actively harming their user experience for no good reason whatsoever. I honestly don’t know if this is bull-headedness or malicious compliance.
On the other hand, someone at the EU clearly prefers being in the limelight by regulating against evil US corporations in ways that affect very small parts of the general population rather than, say, go after Asian smart TV manufacturers that are present in millions of homes and resell data on Europeans’ TV viewing habits.
Like many people, I have a few older Mac laptops around, and with Apple discontinuing support for older versions of macOS (and, eventually, for Intel machines altogether), it’s long been in my backlog to re-purpose them.
During a few random lulls in work I finally went down the rabbit hole of building myself a custom keyboard. I had ordered most of the parts months ago, but only now got the time to clear out my electronics desk, dust off my hotplate, do a little soldering and begin 3D printing the case and keycaps.
Well, this was a “fun” two weeks. In short, I got blindsided by a large project and a bunch of other work things, including an unusual amount of office visits (almost one a week, which is certainly not the norm these days) and a lot of calls.
I have, again, spent far too much time wandering the chaotic wilds of Cloudflare’s web UI to set up a new tunnelled web application (a trivial proxy to be able to use my Supernote Nomad as a whiteboard from the Azure Virtual Desktop I live inside of), and to avoid having to go through the whole thing again, I decided to take some notes.