Latest Posts (20 found)
Brain Baking Yesterday

My Workspaces

This post is inspired by Franck Sauer’s My Workspaces . I love Franck’s setup and background story behind each photo. I’ve been meaning to write this for months but postponed the search for old desktop setup photos because I wasn’t sure where to start. Back in the nineties, we didn’t brainlessly press that button: every shot was one less on the film roll and added to the cost. Hence my oldest setup—the 486 in my dad’s makeshift office that also served as the washing machine room—is lost forever. My parents got me a sturdy but boring looking IKEA desk I’ve been using extensively up until 2015. My room looked more or less the same once that piece of furniture got in up until I moved out. Here’s a picture of my then brand new flatron CRT that’s showcasing Smash Bros. Melee (I played on the GameCube through a PCI TV card): My 'workspace' in 2006. Note the white DS Lite in the background, putting this photo somewhere after June 2006. There are more photos of my gaming setup from 2002-2007 in case you’re interested. I once built a virtual tour of my room in the form of an HTML imagemap website but that too is lost in time meaning there’s nothing much to see on the photo now, except for a sliver of a blue DELL laptop I used for more serious university work. I wish I kept that keyboard around though, it was surprisingly comfortable. Not as cool as Microsoft’s Natural Keyboard Elite , but still! At some point in time, I was also dumb enough to sell the Wavebird and all GameCube games. What was I thinking… I moved out in 2008 and rented a cheap flat for three years to save up on money before my wife & I bought our first home. Again, my meticulous archival work proves to be not that meticulous after all: I can’t find a single photo of that apartment, except for the empty rooms just before I got in. The IKEA desk moved to the living room as I didn’t own a TV. On the other hand, it probably wasn’t worth saving, as workspace denotes some work had to be done there. I was a software development consultant back then and worked at the client’s offices. Those were long hours and long commutes meaning nothing much was done at home. Here’s an unremarkable at best picture of what that typical office space looked like in those years: My office workspace in 2008 with a corporate HP laptop plugged into a then already older CRT from a client. Yes, that on the lower right is my wallet. I believe it still is now. When we bought a house and started living together, we had a spare room to throw in everything we couldn’t find a good spot for. This included my cheap bookcase and the very same IKEA desk: My workspace in 2013. I can't recall any work has been done there at all. The Monkey Island poster I already had hanging on the wall a year before I left my parents’ place; it’s still with me now as you’ll see in the later pics. I can’t believe any work has been done at all in that “office”: I was still a consultant and working from home was a big no-no. That meant the space was largely unused, which is a shame, because now that I look back at it, it looks cosy, especially with that chicken hug stuffed in the lower left of the bookcase! I started to resent the commutes. I quit my job and we sold and bought another house where we still live in as I type this. One of the three bedrooms became my “office”—I’ll still use quotes here as again nothing much was done there. I didn’t like locking myself in that room upstairs as my wife was downstairs watching TV. The Nintendo Switch was my big savour 1 : a hybrid handheld system that I could play on the couch! My workspace in 2014. Left: that same IKEA desk survived yet another move. This photo was taken right after we moved in, hence the lack of decorations. Right: in the living room/kitchen, were most of my writing was done. Again, this post is far from impressive compared to Franck’s cool setups. Most of my writing and thinking happened on the kitchen table. In 2012-2013 I bought a MacBook Air and since then loved inventing a makeshift workspace wherever. Working from home still was the big exception. After four years I quit my job again to rejoin academia and pursue a PhD. That meant the way I worked radically shifted: more individually, and more from home. On top of that, in 2020, a thing called COVID happened, where we suddenly were forced to work from home. Just like many others, I finally started taking the home workspace environment seriously. I already published the result in the 2021 retro desktop setup post: My 2020 workspace featuring a 486 machine, a beige Win98 tower, a WinXP one, and on the far right, the 'work horse' MacBook and second screen. If you look closely enough, you’ll notice the same skylight as the leftmost photo in 2014. I jammed as much retro hardware as I could find in that tiny room, binning the IKEA desk (R.I.P.) and buying more IKEA stuff (Linnmon). In 2020, after eight years of faithful service, the old MacBook Air got replaced by the one I’m typing this on (on the far right). Thankfully, the Monkey Island posters survived. There are more photos of this setup in the linked post. For the first time in my life, I felt truly happy in my home workspace. It became my sanctuary: me, surrounded by old junk. And then our daughter started poisoning the place with baby toys: The other side of the retro room: Billy bookshelves and baby toys. At least I managed to fend off most of the toys and eventually, when she got older, we managed to contain her junk within her room or below stairs. Until the second kid came along and kicked me out. Our house looks big but really isn’t, so we renovated to create more space. Still, my workspace became his bedroom, so I had to move to the old living room : My workspace in 2025, with a bigger window overlooking the front garden and street. Later that year I properly fixed the cable work, relayed another Ethernet cable, and started thinking about how I could restore my retro hardware. Unfortunately, only the 486 is on display right now, and that one hasn’t been touched in almost a year due to busy parenthood. At least now there was room for another IKEA case that can hold more board games than the previous one could in the hallway (that of course got claimed by the kids). I prepare my lessons here and like the bigger window but do miss the previous workspace. Hardware-wise, nothing much changed, except for a mechanical keyboard . Perhaps I should throw in a retro TV to hook up the SNES. I don’t know. Since becoming a parent, this stuff matters less but I miss it more, it’s hard to explain. As for gaming, most of it is done on the couch with the Analogue Pocket, Switch, or just with the MacBook on my lap. So far for having a dedicated workspace… As a bonus photo, here’s the current state of the above workspace at the time of writing: The current state of the 2025 workspace. Whoops... Yeah, I know… That’s a mild exaggeration as I was already a big GB(A) and DS fanboy. It did rejuvenate my interest in handheld gaming.  ↩︎ Related topics: / setup / By Wouter Groeneveld on 14 April 2026.  Reply via email . That’s a mild exaggeration as I was already a big GB(A) and DS fanboy. It did rejuvenate my interest in handheld gaming.  ↩︎

0 views
Brain Baking 1 weeks ago

A Commentary On GenAI Inspected Through Different Lenses

The amount of concerning reports related to generative AI is rising at an alrming rate, yet all we do is make ourselves more dependent on the brand new technology. Why? It’s not just that we’re lazy—we are!—there are many more variables involved. As part of my quest to try and understand what the heck is going on and what is becoming of one of my prime professional fields: software engineering, I read and read and read. And then I read and read and read. And then I became disappointed and depressed. I see colleagues jumping the gun, others being more prudent. I see industry discovering there’s yet another buck to be made. I see students forgoing learning at all. I wanted to try to form my own judgement of genAI in its modern form by looking at it from four different viewpoints: that of the software engineer, that of the teacher, that of the creativity researcher, and that of the concerned civilian living in this capitalist world.. References can be found at the end of this article. Does anyone remember Dan North’s Programming is not a craft post from 2011? I do, and I often think about it. With the advent of genAI, North’s port might be even more polarising: Well, congrats to you, you’ve won the lottery: here’s a tool that immediately can add customer value. If you don’t care about the inner code quality, you can have genAI generate (slop) code faster than you can think. If you love the impact of software itself, you’ll love Claude Code et al. Are you perhaps an enterprise software engineer? In that case you’ll be able to scaffold and generate CRUD crap even faster, hooray! But wait a minute. You obviously won’t take true ownership of this code: you’ll want to impress your clients with the results, but keep the lid closed at all times. The less ownership and feeling of responsibility, the easier it comes to completely let go of all the breaks and just accept any future changes without code reviewing at all. People who are now claiming they will keep themselves in the loop as an architectural reviewer don’t need to lie to themselves. After the nth time pressing the green button, and as the technology further evolves, you’ll wind up eventually accepting the slop anyway. Verification burnout will pop up next: because it’s not your own code you’re attempting to so carefully review, it actually takes more instead of less effort, increasing your stress level instead of reducing it! Does the code quality really matter if all clients see is the end product? As a gamer, I just want the game to run smoothly, I don’t care about the spaghetti. Or do I? I do, implicitly—the more spaghetti, the less smoothly it’ll run. The more holes, the more soft locks and crashes. So programming might or might not be a craft, but as Cal Newport and Robert M. Pirsig say: the concept of Quality is important! Maybe it’s time to become a goose farmer instead. The only thing left for you to do is to move to a depressing quality control position instead of crafting something yourself. No more “I built this”, but “I managed its orchestration”. Depending on how you view this, It’s either a promotion or demotion. I tend to agree with the latter. Why? Because we humans are the Homo Faber , the ones who like to control their fate and environment with the use of tools. Yes, genAI certainly is a tool, but it’s a tool that takes away all other tools. Instead of kneading dough by hand, feeling it, knowing when to ferment and when to bake, we’re forced to oversee the industrial Wonder Bread production process. Instead of manipulating leather to create a pair of shoes, we’re being employed by Nike to watch shoes being made by machines. This somehow reminds me of David Graeber’s bullshit jobs where useless paper pushing is prevalent but also called a “revolution” when it comes to a professional purpose. I beg to differ. Humans want to make things. They want to be proud of the things they made. The fact that the open source community rejects this slop code is a telling sign: if you’re programming in the open, your peers who also think highly of software development will keep you in check. But when it’s “for (enterprise) work”, we don’t care, generate away, I’m not the true owner anyway. If programming is a craft, then the recently leaked Claude Code CLI source code will be a big joke to you, where constructs are endlessly repeated, and spaghetti is topped up with more spaghetti. Code that is being generated doesn’t even seem to be made to be (re)read: how then, are we expecting to maintain it, or guarantee its security? By letting the agent maintain it and guarantee its security, I can hear you say? What is there left to say? I’ve already asserted that genAI tools are worse than Stack Overflow . Sure, mindless copy-pasting has long existed before this AI storm, but not on this scale. GenAI is able to provide a working solution to an assignment faster than I can come op with the assignment itself. Suddenly, all our traditional evaluation systems and grading workflows became useless: scoring high on a checklist is just a matter of pasting the requirements into Claude. We try to adapt by requiring oral defences, having students explain what they did and why, and asking them to walk us through a small imaginative change. The result is a spectacular fall in grades from previous years: they are just not able (1) to explain the code they did not make but generated and (2) to make small adjustments as they skipped the hard part: the learning and understanding. Yet in the hallways, I hear lots of students bragging to each other about how they let ChatGPT do their homework. Congrats. We’ll see each other again in September for your second try. We often forget something else very important: peer pressure . About a year ago, on the train I overheard a few girls on their way to a university lecture chatting about their homework. One of them complained: “I put in all that hard work, but all the others are just using ChatGPT to do it. Next time, I’m not doing all that, I’m also just using AI, that’s not fair!”. I should have gotten up to congratulate her: the only one actively learning is the one putting in the hard work! There is no shortcut to becoming proficient. There is only hard work. Sure, the more you prompt your way through your curriculum, the more proficient you’ll become with the tool, but ask yourself: did you learn what you wanted to learn or did you learn to prompt? When I was an undergraduate, I used to fill A4 pages with summaries of courses to help me study. Just before the exams, I could quickly glance over these pages to remembers the core concepts. Some students sold their summaries to others. Now, genAI can generate summaries for you. But smart students will know this will only fool yourself: the purpose of the summaries is to make them : to study and gradually fill the pages. Not to acquire a summary. The journey is the destination. When my summaries were done, I could just as well throw them away: they were just a tool to help with the hard work. Yet it’s next to impossible to explain this to a student who only sees how easy it is to jump to an outcome by leveraging AI. Maybe legislation will help here? (Not really; see below) In case all this is not clear: students are becoming dumber yet the programming projects they hand in are becoming better than ever. As the inventor of the framework presented in The Creative Programmer , I thought it would be interesting to take a look at the seven domains and how genAI fits in these. In The Creative Programmer , I present seven distinct but heavily intertwined themes that define the way we are creative when we solve a programming problem: I might be overly focusing on the negative here and have to recognise the possible advantages of having genAI as a tool available in our creative toolbox—but only when we learn to yield it properly and with moderation, which is not exactly what we are doing lately, is it. In an interesting systematic literature review (2025) with lots of references to other academic material if that’s what you’re looking for, Holzner et al. conclude with: […] human-GenAI collaboration shows small but consistent gains in creative output across tasks and contexts. However, collaboration with GenAI reduces the diversity of ideas, indicating a risk of creative outputs that could become more homogeneous. More same-ness; exactly what we need when it comes to creativity, right? The more we use genAI, the more creatively we will be able to prompt, but the less creative we will be in actually applying a solution to the problem. We no longer create: we generate. We know that genAI will do everything in its power to keep you locked within that chat box. Its tendency to talk to your mouth, agree with your statements, and serve you whatever you want to hear creates biases and dependencies. It’s not unlike a drug that slowly but surely diminished your critical thinking, and thus, creativity. This is where the true nature of humans are unfolded: when it comes to earning something for themselves, ethics suddenly becomes a very malleable subject. On the morality, ethics, and privacy, everyone agrees that genAI is what Ron Gilbert calls a train wreck . This bears no further explanation from me: Microsoft slurped all GitHub repositories dry without taking any licenses into account, the book that I painstakingly produced in almost two years was ingested OpenAI’s systems in about two seconds, … Yet at the same time, everyone also consistently ignores all these topics in favour of their own self-interest. Why, I wonder? Everyone knows they should eat less meat. Yet almost nobody does. Everyone knows Microsoft (and probably other big tech companies) power genocide yet the adoption rate of Windows as an OS is still 95%. Why? Everyone knows the climate is going to shits yet we happily turn the other way and take the plane on a weekend trip to sip some wine and do some shopping in Italy. As Gretea Thunberg said: knowing is not enough . For GenAI, similar patterns emerge. We know it’s bad for us, yet we happily close our eyes and use it anyway. Why, I wonder? The power of a drug, the pull, the ease at which something can be done without breaking too much sweat? Here’s a possible answer I suggested before: because humans are inherently lazy. As long as Belgian supermarkets keep on stocking apples from New Zealand and Belgium, most people won’t care and just pick up whatever. As long as we keep handing out company cars and making infrastructure geared towards car drivers, most people will be driving to work instead of biking. A possible answer to the problem then might be governmental legislation to protect people living in a society from making the wrong choices. And I’m 100% sure that will work! Yet legislation is always (1) either happening way too late; or (2) minimised or manipulated by the people who wield the power because they have bought out key politicians to prevent laws like this from happening. Hence my depression. In the case of GenAI, a technology that evolves at lightning speed and is taking the world by storm, legislation will be way too late. To prove my point, in an attempt to modernise, many Belgian governmental instances already “embraced” the technology and made many blunders in doing so. The EU is currently evaluating the options. Meanwhile, the San Francisco bros are laughing. Prompt engineering is the most degenerative thing that ever happened to engineering . It’s a capitalist’s way to minimise the cost of the human. Yet I don’t see genAI disappearing any time soon. Companies and decision makers smelled the green and won’t let go. I don’t understand how capitalism works, but I know it’s been growing in power ever since we centralised cane sugar plantations with the help of slavery. GenAI is evidently yet another product of capitalism. The companies I’ve worked for wanted more and more profit each year: even though they were sometimes satisfied with last year’s profit, the target for the next year was always increased no matter what. GenAI is already responsible for thousands of layoffs in an attempt to even more aggressively push profit up. To what end, I wonder? Why? To our own detriment. It seems that our cognition is for sale, and the sale has already been made. You know what they say: no returns are accepted. Peer pressure to use genAI on the job is already prevalent as it “gets things done faster”, so quite logically also brings in money faster. Let’s worry about durability and maintenance later, shall we. Also, I’ve seen colleagues fall into the trap of obsessive agent babysitting. Whether at work, on the lunch break, or in the very late evenings: you’ve got to keep those agents spinning! Squeeze the maximum out of your tokens because they squeeze the maximum out of you. There goes our work-life balance, coming from the tools that are supposed to take over our work so we can focus more on the life part. So as long as I remain in a position to be able to choose whether I can put in the work myself for my (hobby) programming projects, I will. As long as I am in a position to bike instead of drive, to be a vegetarian instead of meat-eater, or in short, to be a concerned civilian, I will. And so should you. Even though that won’t stop this devolution from happening at all. Sure I will occasionally consult Gemini et al. to ask it a specific question regarding a broken config file that has me scratching my head. But I treat these queries as specialised internet searchers, not as a way to evade the hard work completely. I’ve become Albert Camus’s pessimist. I’m genuinely afraid of how our kids will turn out if we don’t act quickly to save our youth. Yet I won’t stop being an activist. Reading List I’d rather link to personal blog posts instead of academic publications here as we’re dealing with something that impacts us on a personal level and by the time the relevant 2026 studies are published, the landscape will have changed yet again. The following folks expressed their experience and opinion on genAI: Related topics: / genai / By Wouter Groeneveld on 8 April 2026.  Reply via email . Technical Knowledge—if we don’t have any knowledge, we won’t have the creative ability to combine them. Guess what; GenAI is actively deskilling us. The more you generate, the less you actively learn, harming your creative ability to solve problems. Creativity requires a rich mental toolbox to draw from. By prompting, you’re not exactly filling that toolbox. Communication–I see both a good and a bad thing here: if your colleagues aren’t immediately available, rubber ducking with an AI agent might help identifying that problem. On the other hand, it’s also awfully easy to stay locked inside that comfortable genAI chatbox. Why ask anyone when it talks to your mouth? Constraints—If you manage to constraint yourself (ha!) to only ask AI for 10 possible ways to approach a problem you don’t know how to approach without having it solve the problem for you , this might help you learn how to approach certain heavily constrained environments. Unfortunately, it’s very easy to just have it generate the solution as well, rendering a possible learning path useless. Critical Thinking—The more we use genAI, the less critical we are and the more likely we are accepting whatever comes out of it. Validating the the source material outside of that chatbox suddenly requires a lot of willpower. I’ve even heard people changing their entire preferred technology stack to something more popular because genAI is better at it. That’s very sad. Curiosity—Judge for yourself. What does reliance on genAI tell you about your curiosity to discover other things? Creative state of Mind—without Cal Newport’s “Deep Work”, there won’t be an “aha!” moment. The 90% transpiration, 10% inspiration is suddenly turned on its head: Claude is the one sweating for us, even at night, while all we do is press the green button and write “LGTM!”. Maybe we should take the time to read Newport’s new book Slow Productivity . Creative Techniques—GenAI itself as a technique might belong in this section; but the question is; are we the one yielding the tool or is the tool yielding us? Nolan Lawsom; How I use AI agents to write code . A clear conflicted state: it’s okay to generate away at work, but “I also don’t use AI for my open-source work, because it just feels… ick. The code is ‘mine’ in some sense, but ultimately, I don’t feel true ownership over it, because I didn’t write it”. John Allsopp: The Structure of Engineering Revolutions Dave Gauer; A programmer’s loss of social identity Cory Zue; Software got weird Doug Belshaw; Claude’s Constitution and the trap of corporate AI ethics Tom Hall; Towards a Slow Code Manifesto Rishi Baldawa; The Reviewer Isn’t the Bottleneck Information/superhighway.net; On The Need For Understanding Antoine Leblanc; Chatbot psychosis (Mastodon) “this is the main reason why i believe that chatbot addiction / chatbot psychosis is a LOT more widespread than we realise: people with a clear understanding of the ethical issues try claude once, it does a thing correctly enough, they get one-shot, and they start posting like if sephiroth was on linked-in, ethical concerns be damned. it keeps happening.” Exactly. Sean Boots; Generative AI vegetarianism Simon Willison; Perhaps not Boring Technology after all Sophie from Localghost; Stop Generating Start Thinking Micaheal Harley; AI Stance Lauren Woolsey; AI Sucks And You Shouldn’t Use It Ron Gilbert; My Dinner With AI Matthew Lamont; Generative AI is an Evil Technology Arne Brasseur; The AI Divide (Mastodon) Zach Manson; CoPilot Edited an Ad Into My PR Michael Taggart; I Used AI. It Worked. I Hated It. Bob Nystrom; The Value of Things . GenAI can have utility but not meaning. Jonny; Dismantling Claude Code source (Mastodon) . Another train wreck, as expected. Cal Newport; In Defense of Thining Hamilton Greene; Why I’m moving from F# to C# Senator Bernie Sanders vs. Claude (YouTube) Joel Chrono; Not having to work would be nice (but not like this)

0 views
Brain Baking 1 weeks ago

Remakes And Remasters Of Old DOS Games: A Small 2026 Update

It’s been two years since the Remakes And Remasters Of Old DOS Games article. Nostalgia still sells handsomely thus our favourite remaster studios (hello Night Dive) are cranking out hit after hit. It’s time for a small 2026 update. I’ve also updated the original article just in case you might find your way here through that one. Below is a list of remakes and remasters announced and/or released since April 2024: Guess what, Nightdive is still running the show here: At this point I don’t even know where to start! Monster Bash HD is still being worked on (I hope?). Did I miss something? Let me know! Related topics: / games / dos / engines / By Wouter Groeneveld on 5 April 2026.  Reply via email . Little Big Adventure : Twinsen’s Quest released in November 2024 is a complete graphical overhaul of the original. Not a remake but still noteworthy; Gobliins 6 is a sequel to a 34 year old DOS game ! Star Wars: Dark Forces got a remaster ; Although not a DOS game, Outlaws got the remaster treament as well Oh, and yes, DOOM I + II is another masterpiece ; As is the Heretic + Hexen package ; As did Blood as Refreshed Supply (again?). BioMenace : Remastered by the same devs that did the Duke Nukem 1 & 2 remasters on Evercade. I enjoyed it, it’s good! A Halloween Harry -inspired top-down 3D version is currently being made that only shares the name & style of the original—luckily, not the crappy level design. Ubisoft remastered the original Rayman ( 30th Anniversary Edition ) but it wasn’t met with much success. They changed the included GBA music—that’s what SEGA would have done, right? I found a Masters of Magic remake (2022) on Steam that’s been met with some positive reception. I didn’t play the original so can’t say how faithfully it’s related to the DOS version. Blizzard also decided to cash in with the Warcraft I+II remaster bundle . I was mostly a Wacraft III person so I can’t comment on this. Someone did a Wacky Wheels HD Remake on ? Wow! Best approach this carefully, it looks to have its own technical problems.

0 views
Brain Baking 2 weeks ago

Favourites of March 2026

Our daughter turned three. We’re beyond exhausted but a ripgrep search in this repository yields five more instances of the word exhausted in combination of parenting so I’ll shut up. I guess we also celebrate that after three years of pure chaos, we’re… still alive? Previous month: February 2026 . I am just two levels short of finishing Gobliins 6 before deciding to throw in the towel. Thanks to the increased amount of moon logic presence, the entire adventure was more frustrating than relaxing. As a big Gobliins fan, I have to admit: the game left me a bit disappointed. It’s all right; I’ll just replay Gob3 again. As it left me wanting more, I went back to the original Gobliiins game that I somehow missed as back in the day my dad bought Gobliins 2 and we just continued with 3 without looking back. It’s still worth exploring but very basic and the presence of the life bar is a very strange (and bad!) design choice that fortunately was abandoned in the sequels. I charged the Analogue Pocket and hope to get in some good ol’ Game Boy (Color) games in the coming month. I read a depressing amount of personal genAI tales; more than enough to fill another blog post. I’ll try to keep these out of here as much as possible. My wife bumped into an hacker called Un Kyu Lee crafting his own micro journal hardware. The result looks very cool, including hinge to hang on the door as a physical reminder: I’d rather keep on journaling with my fountain pens, but still, very cool! Related topics: / metapost / By Wouter Groeneveld on 1 April 2026.  Reply via email . Michael vibe-code-ported an X11 window manager into Wayland ; an interesting Claude experiment to see how agentic development works. Greg Newman hosted the Emacs Blog Post Carnival 2025-07 on writing experiences and summarised the participating links. Lots of little gems in there. Rijksmuseum writes about the discovery of the new Rembrandt painting . Well, “new”—it’s been in private collection for years and only recently resurfaced. Peter Bridger shares his experience in the retro happening SWAG February 2026 . I wish we had something similar nearby! Chuck Jordan shares SimCity vibes . As one of the original programmers involved in the projects, he would know. (Via The Virtual Moose ) The 1MB Club has an interesting (older) article I read last month: consider disabling HTTPS auto redirects . I can’t remember why I turned this back on: I want my old WinXP machine to be able to reach as well without the extra TLS overhead. Funny though: they mention “You can freely view this website on both HTTPS and HTTP.”. I remove the in the protocol, press , and get redirected. Whoops. PolyWolf has been thinking about blazing fast static site generators . This is a goldmine as I have a wild idea to write my own generator in Clojure. When the exhaustion and brain fog go away, that is. According to Rishi Baldawa the reviewer isn’t the bottleneck . This one’s a bit AI flavoured, so beware if you’re coming down with an AI cold. (I know I have. Handkerchiefs full.) Marcin Wichary’s keyboard grandmastery again shines through in his Apple Fn endgame article . I wish his keyboard book wasn’t sold out. Wordsmith writes about the underrated simplicity of the original Harvest Moon (1996) video game. Dale Mellor defends sing a dynamically-produced blog site which is a nice change given the static site generator craziness. I’m still on Hugo and have little need for the points he brings up, but still, some others might. Tazjin tries out Guix as a Nixer . I was eyeing on Guix as a budding Lisp fanboy, but both options still can’t seem to fit in my head. I’ll let it stew for a little while longer. Homo Ludditus announces distro hopping time . The conclusion? “The madhouse could be a valid destination. But I’m still looking for better alternatives.” So far for 2026 as the year of the Linux desktop huh. The Digital Antiquarian writes about the year of peak Might & Magic , when New World Computing still was on top of the world. Here’s an interesting thought experiment by Andrey Listopadov: What if structural editing was a mistake? In this 2020 post by Vincent Bernat, photos of a bunch of cool vintage PC expansion cards are shared in conjunction with timeperiod-correct software that made great use of them. Gabor Torok switched to KDE Plasma , an interesting read because we both switched to OSX because of resons and are trying to crawl out of the Apple hole. I don’t know if I’m quite ready yet. Did you know there’s a relation between knitting and programming ? Abbey Perini does. Mykal Machon shares some insightful guiding principles to lead a fuller life. Judging by the principles, I don’t think Mykal has any young kids. I’m using this as a checklist to find out if I missed essential albums: Hip Hop Golden Age’s Top 40 Hip Hop Albums of 1998 . Here’s another GitHub “awesome” list; this time public APIs . Could be useful. Already used for my courses. It doesn’t hurt to link to the 2007 Slow Code manifesto . FontCrafter is a cool way to generate a real font based on your handwriting. WireTap is an open source Ngrok alternative. The Stump Window Manager is the only WM (except the obvious EXWM) I could find that’s written in Common Lisp. I should look into Ulauncher if I ever want to make the switch to Linux to replace Alfred. Christoph Frick shares a cool GitHub Gist showcasing you can write your AwesomeWM config in Fennel instead of Lua. Yazi looks like an Emacs Dired inside a shell?

0 views
Brain Baking 2 weeks ago

App Defaults In March 2026

It’s been almost three years since sharing my toolkit defaults (2023) . High time to report an update. There’s a second reason to post this now: I’ve been trying to get back into the Linux groove (more on that later), so I’m hoping to either change the defaults below in the near future or streamline them across macOS & Linux. When the default changed I’ll provide more information; otherwise see the previous post as linked above. Some more tools that have been adapted that don’t belong in one of the above categories: A prediction for this post in 2027: all tools have been replaced with Emacs. All silliness aside; Emacs is the best thing that happened to me in the last couple of months. Related topics: / lists / app defaults / By Wouter Groeneveld on 29 March 2026.  Reply via email . Backup system : Still Restic, but I added Syncthing into the loop to get that 1-2-3 backup number higher. I still have to buy a fire-proof safe (or sync it off-site). Bookmarks and Read It Later systems : Still Alfred & Obsidian. Experimenting with Org-mode and org-capture; hoping to migrate this category to Emacs as well. Browser : Still Firefox. Calendar and contacts : Still Self-hosted Radicale. Chat : Mainly Signal now thanks to bullying friends into using it . Cloud File Storage : lol, good one. Coding environment : For light and quick scripting, Sublime Text Emacs! Otherwise, any of the dedicated tools from the JetBrains folks. and can only do so much; it’s dreadful in Java. Image editor : Still ImageMagick + GIMP. Mail : Apple Mail for macOS for brainbaking Mu4e in Emacs! and Microsoft Outlook for work Apple Mail for the work Exchange server. I didn’t want to mix but since Mu cleared up Mail, that’s much better than Outlook. Music : Still Navidrome. Notes : Still pen & paper but I need to remind myself to take up that pen more often. Password Management : Still KeePassXC. Photo Management : Still PhotoPrism. I considered replacing it but I barely use it; it’s just a photo dump place for now. Podcasts : I find myself using the Apple Podcast app more often than in 2023. I don’t know if that’s a bad thing—it will be if I want to migrate to Linux. Presentations : Haven’t found the need for one. RSS : Still NetNewsWire but since last year it’s backed by a FreshRSS server making cross-platform reading much better. Android client app used is Randrop now, so that’s new. Spreadsheets : For student grading, Google Sheets or Excel if I have to share it with colleagues . My new institution is pro Teams & Office 365. Yay. Text Editor : I’m typing this Markdown post in Sublime Text Emacs. Word Processing : Still Pandoc if needed. Terminal : emulator: iTerm2 Ghostty, but evaluating Kitty as well (I hated how the iTerm2 devs shoved AI shit in there); shell: Zsh migrated to Fish two days ago! The built-in command line option autocomplete capabilities are amazing. Guess what: more and more I’m using eshell and Emacs. Karabiner Elements to remap some keys (see the explanation ) I tried out Martha as a Finder alternative. It’s OK but I’d rather dig into Dired (Emacs)—especially if I see the popularity of tools like that just steal Dired features. I replaced quite a few coreutils CLI commands with their modern counterparts: now is , now is , now is , now is , and can be used to enhance shell search history but Fish eliminated that need. AltTab for macOS replaces the default window switcher. The default didn’t play nice with new Emacs frames and I like the mini screenshot.

1 views
Brain Baking 3 weeks ago

Please Compensate The Work You Appreciate

The other day, I had a casual conversation with colleagues about buying music. Nobody gave a rat’s ass; they all just either downloaded the files or used Spotify. Most conversations on this topic end like this so I expected the response from more than a few individuals, but not from everyone. I was deemed the silly fool who buys stuff and supports artists. Yet at the same time, we all bemoan the fact that creative individuals are losing their job due to the rise of generative AI. To that I say: maybe that’s our own fault for not properly compensating these people in the first place? Please compensate the work you appreciate. Showing appreciation is not enough to bring food to the table. If you get paid for the work you are doing each month, don’t you think it’s only logical that these people also get paid? Where do you think that money should be coming from? It’s weird to still encounter that much reluctance to support makers in 2026. Most Brain Baking readers will (hopefully) find this obvious, and this article won’t have a big impact on the reasoning of my colleagues, but it doesn’t hurt to re-iterate this, so I’ll mention it again: please compensate the work you appreciate. Below are a few remarks I heard every time I bring up this topic (related to music & software in general). I’m not buying music albums, I’m not as rich as you are. Even though the person meant this as a joke, the underlying message was: “I don’t want to spend that much money on music/a creative product”. I buy one to two albums each month and on Bandcamp artists can decide for themselves how much to charge. You don’t have to spare for this, but you are paying for three streaming services? Right. See also: You Shouldn’t Use Spotify . I can share the Spotify subscription with my sister to make it even cheaper. Did you know a thing called libraries exist where you can, you know, lend stuff, including CDs? Did you know that once you buy a digital album, you can do whatever the hell you want with it, including, you know, lending it to your sister? But those artists already have millions, no way I’m giving them more. This is a tougher nut to crack indeed. Michael Jackson is dead (remember, 2Pac isn’t), so where does that money end up? Even when he was still alive, supporting an artist who already has eight figure numbers on their account might be harder to justify. I’d say you should prioritise buying and supporting smaller (indie/local) groups. Maybe in this case you can also turn to the second hand market and at least support your local music shop that way. I only like popular pop music and they already earn more than enough. Consider the previous example; for instance Jackson’s album Bad . It wasn’t only Michael who was involved in the creation of that particular album you like. So all these people don’t deserve to have a meal. Consider this: if everybody thought like you, would that artist still be rich—or Dy Tryin (got it? 50 Cent? No?)? Micro$oft is bad. You’re right. Today, you should boycott Microsoft —but there used to be a time where they weren’t evil and helped propel software (and its development) into the modern age. If nobody bought MS-DOS, Windows 3.1, if no OEM deal was ever made to package Win95/98 with your new beige Compaq tower, maybe the contemporary software landscape looked a lot bleaker. What does this teach us? Compensate the work you appreciate only if it’s ethically sound 1 . You can’t find all these things on Bandcamp. Right again, but the remaining can be found on plenty of other platforms such as Apple Music. This is not an excuse to neglect compensating the artist. But thirty percent is pinched off by Apple! Yes. That means seventy percent remains for the artist. And if you don’t buy anything but stream or download music, a hundred percent of zero remains for the artist. I’ll leave that calculation up to you as an exercise in critical thinking. I used to buy CDs in stores but don’t anymore these stores are gone. Unfortunately, most brick and mortar stores are struggling, indeed. Perhaps also because most people sopped buying music and just download and/or stream stuff instead? The last thing I bought wasn’t good. I’m sorry to hear. Did you also consider that buying the bad thing might put the creator in a financial situation where they can produce something else that potentially might be better—with your help, that is? Bigger creative projects that take months or years require funding beforehand. I presume you are aware of the disadvantages of being funded by venture capital. I’m not paying anything for free software. Open source does not equal free in the sense that the people that created these packages don’t deserve to eat. Supporting a project sends an important signal to its maintainers: the thing you are doing is relevant, please continue doing so. Sending an appreciative letter also helps but doesn’t pay bills, and since we’re living in an increasingly bill-paying society, many expert developers simply quit working on free software. What do you think all those “donate” buttons are for? I only buy hardware, not software. I’ll be sure to tell my software engineering friends and colleagues to retrain into hardware engineers as soon as possible. I’m not using paid service x because free Google service y exists. You’re still paying, buddy. Just not with money, but perhaps with something that is worth even more than the green currently in your wallet. It’s called your personal data. Going to a music gig already costs an arm and a leg, no way I’m also buying the album. What kind of an argument is this? So you like the band enough to drop for a concert but you’re against paying for music just to make a statement? Next time simply stay home and instead buy the album, that’s 80% cheaper and you can listen to it again and again. I don’t have room to collect CDs. Who said anything about collecting? Then buy them digitally. At this point, we’re just arguing for the sake of arguing… I think it’s strange that many people still completely ignore all these arguments for compensating artists. These arguments alone are pretty useless: it’s not the awareness that’s the problem. Most illegal downloaders or lazy Spotify users are well-aware of the ethical concerns and financial consequences. Knowing is not enough to get people to act. Most people have heard of global warning and know we’re slowly but surely destroying the earth, yet we happily keep on driving cars, eating meat, flying planes. If you know what does move people, please let me know. Can you appreciate work that is not ethical? Sure you can; there are plenty of cool looking video games made by extreme right-thinking dickheads. Whether or not to support those dickheads is up to you.  ↩︎ By Wouter Groeneveld on 24 March 2026.  Reply via email . Can you appreciate work that is not ethical? Sure you can; there are plenty of cool looking video games made by extreme right-thinking dickheads. Whether or not to support those dickheads is up to you.  ↩︎

0 views
Brain Baking 3 weeks ago

A Satisfied Customer Review Of The Yogurtia

And now for something completely different. For years, we’ve been happy users of the Yogurtia , a Japanese “fermented food maker”. That alone should sound enticing enough to warrant this small review! What’s a fermented food maker? I’m glad you ask. It’s a maker for food to ferment. Next question. In case that wasn’t crystal clear, here’s a common way we employ our Yogurtia: to make yoghurt. Shocking, given the name, right? There are plenty of mundane looking kitchen appliances out there that can “make yoghurt” so why should you import a Japanese device instead? While researching yoghurt making machines, we often encounter contraptions you can put multiple small containers in that will be heated to 40 degrees Celcius for eight to twelve hours. Once it’s done, you pull out the containers and voilà: your very own yoghurt pots. The Yogurtia doesn’t do this. Instead, there’s one giant contiainer where you pour in milk and remnants of your previous yoghurt. That means you can make much more in one go—but that also means you can more easily put in other stuff. The biggest reason for buying the Yogurtia is the capability to precisely configure the temperature and time it needs to ferment. Most basic yoghurt makers just come with an on/off switch. We can set it to 60 degrees instead of the usual 40 if we want to more easily ferment other stuff. Preparing breakfast with a freshly made yoghurt container thanks to the Yogurtia maker. Perhaps I should elaborate on the “other stuff”. While the Yogurtia obviously markets itself in the west towards yoghurt lovers, the real purpose of this neat little contraption is to make amazake and nattō . I’ve had great success with the former. To make amazake, you’ll need to grow a specific mold on rice first called koji . Activating that koji is done at 60 degrees which is too hot for most small fermentation chambers/yoghurt makers. I produce koji-fied rice in my fridge-hacked inoculation room . A rice cooker that can be properly configured might be another option, but cheaper machines often have trouble maintaining the temperature, requiring you to add some cold water. If the temperature is too high, the koji will be killed off, resulting in a less sweet beverage as the mold is responsible for breaking down the carbs of the rice into simple sugars. In a previous employer’s cantine, I was known as the amazake guy. I brought the smelly stuff to work for interested colleages to try it out and enthuse them to get started on fermenting stuff themselves. The result was met with mixed success: most people said yuck! , I got the label “the amazake guy”, and one time I forgot to take the canister out of the fridge at work. Or maybe the order is reversed here, that would certainly make more sense. I tried once more with spamming everyone to go out and buy Sandor Katz’ The Art of Fermentation bible. Then I tried bringing pickled stuff to work. More yuck! and what strange colour does that radish have? The one thing I didn’t try, which I’m making up for by writing this satisfied customer review, is convincing them to buy a Yogurtia. Maybe I should have done that instead. In Belgium, yoghurt is one of the few “fresh” fermented products almost everyone eats regularly (we’ll ignore cheese; sausages; wine; olives; and yes, even chocolate ; …. for now). Did you know you can use a spoonful of sourdough starter to jump-start the yoghurt making process? Did you know you can jump-start the bread rising process by using a spoonful of yoghurt? Food for thoug—no, a new blog post. A+++. Would buy again. (And did buy again. Never connect a Japanese electronic device that assumes directly to the European power grid of . Ouch. That plastic did melt good.) Related topics: / fermentation / By Wouter Groeneveld on 20 March 2026.  Reply via email .

0 views
Brain Baking 1 months ago

The Best Indicator For Quality In a Video Game Is My Willingness To Replay It

Here’s a thought: the best indicator for quality in a video game is my willingness to first finish and then replay it. How many games have you replayed once? Or even twice? Or how about simply finishing it in the first place. I catch myself giving up on games that tend to drag on much faster than I used to for a few key reasons: (1) having less time and patience, and (2) my quality bar has been raised significantly compared to my youth when I had to make due with less. For me, that means the act of simply finishing a game is already a big step towards meeting that bar. Getting enthused by the thought of replaying it is an even bigger sign of quality. Do you replay a game as part of a yearly tradition? I know folks who do yearly runs of Jazz Jackrabbit: Holiday Hare to soak up the Christmas holiday atmosphere at the end of the year. I guess we can categorise games you play just to get in a holiday mood as an exception: these Jazz episodes can hardly be called qualitative. What does replaying a game actually mean in context of never-ending games such as roguelikes, city builders, and MMORPGs? I have played endless hours of Zeus: Master of Olympus and completed countless Mephisto Diablo II hell runs hoping to farm some good necromancer gear. I spent hours and hours shaking fruit trees and visiting other’s villages in Animal Crossing: Wild World to try and pay off my loan without properly “restarting” by creating a new savegame. As an interesting exercise, I analysed the top 25 games listed in my Top 100 (the A and S tier) and counted them by my replay rate. Replayed 5+ times : Commandos 2 , Castlevania: Aria of Sorrow , Super Mario World , Animal Crossing: Wild World , Sonic 3 , Rainbow Six 3: Raven Shield , Zeus: Master of Olympus , Wizardry 8 , Baldur’s Gate II . Replayed 3-5 times : Goblins Quest 3 , Age of Empires II , The Legend of Zelda: A Link to the Past , Wario Land 3 , Monkey Island 2 . Replayed 1-2 times : Tactics Ogre: Reborn , The Legend of Zelda: The Wind Waker , Super Metroid , Duke Nukem 3D , Paper Mario 2 , Deus Ex . Yet to replay : Hollow Knight , Mario & Luigi: Superstar Saga , Fire Emblem: The Sacred Stones , Pizza Tower . What are the games that have yet to be replayed doing in that tier list? Good question! A few reasons I can come up with: recency bias ( Hollow Knight , Pizza Tower ) & what I’d like to call “RPG fatigue” ( Superstar Saga ): replaying a (j)RPG is a massive undertaking that often requires too much commitment compared to playing something shiny and new. Superstar Saga is “only” 20 hours long which is 10 hours shorter than Hollow Knight so my reasoning doesn’t really stand here, but it surely is the reason why I wouldn’t attempt to do yet another run-through of Baldur’s Gate II any time soon. Or touch v3, for that matter. It might be interesting to calculate the correlation between the game length and my willingness to replay a game but we’d then have to take the “old playthroughs” out of the equation. Looking at Baldur’s Gate II again, these replays were done when I was young and didn’t have anything else to do. Shadows of Amn and the expansion Throne of Bhaal together require almost 90 hours to finish which would simply be impossible now. My bias towards shorter games now might affect how I evaluate the quality of a game. The longer it gets, the faster I’m fatigued by it, even though it can be very engaging. I don’t think my attention span shortened: it’s just that I can only dedicate a few hours a day for hobby projects, including gaming. There are reasons not to replay a game, even if you think it’s exceptional. For instance, you probably don’t want to immediately replay a story-driven narrative game you just finished since the story is still in your head. Another example I can think of is that you love the game’s atmosphere and general gameplay but hate the boss encounters. Hollow Knight fits that bill for me: while the bosses were amazing, I do not want to slog through that “git gud” fest again any time soon. There are reasons to replay a game over and over again, even if you think it’s crap. For instance, just to pass the time with nothing more but your phone, you might be seduced to play a Bejeweled -like that’s addictive and just gets you going, even though you hate it. Maybe the point I am trying to get across makes less sense than it did when I started writing this… What do others have to say about replayability? Dan Kline thinks that without replayability, your game is boring . Why would replayability be a core aspect of a game? I can think of 2 reasons off the top of my head. First, all the prominent games of history are replayable. Sports, chess, board games, children’s games, are all at their core replayable concepts. Second, rulesets that create interesting choices (another frequent game definition) seems to require replayability. This is an interesting point. Replayability is the fallout of interesting choices. If the choices aren’t replayable, then they, by definition, weren’t interesting enough to explore. If you can predict the outcome of all possible rule permutations, then you aren’t playing a game. The rules are trivial. I’m not sure if this is true for all possible cases. Replaying adventure games usually means retracing your exact steps, making the exact same choices the game expects you to make to progress. And yet I’ve replayed Monkey Island 2 more than three times because I love the atmosphere. I know most puzzles by heart but I don’t care. And contrary to a chess session, finishing Monkey Island 2 now is exactly like finishing it 20 years ago; there are no branching paths or other ways to finish it that theoretically increase its replayability factor. As discussed in this tilde.net thread on replayability , many folks consider games to be replayable if there are branching paths you can explore in another playthrough. And while that’s a very obvious approach, by that same approach Monkey Island 2 would not be replayable at all. Yet I replay it. Often. Also, simply the presence of branching paths does not automatically mean it’s a high quality game. Aki-Petteri Meskanen names the engaging and charming world as a reason to revisit a game . Besides that, co-op play is also a big reason to reinstall to a previously completed game. That’s the reason why Raven Shield and even Commandos 2 score so high on my list: my best memories of these games stem from local networked play sessions with a friend despite already having finished the single player campaign several times. My willingness to replay a game is an indicator for quality. That personal statement has less to do with the theoretical definition of replayability and more with my own recent experiences with video games. Also, as I mentioned, sometimes I’m simply not willing to (re)invest the time, even though the first playthrough was a superb experience. I don’t think I will ever replay Hollow Knight , but as James Bond says: never say never again! All that being said, I think this idea can be expanded to re-watching movies and re-listening to audio albums as well! Related topics: / games / By Wouter Groeneveld on 15 March 2026.  Reply via email .

0 views
Brain Baking 1 months ago

25 Years Of ADSL Speed

Twenty-five years ago, I captured a screenshot of my FTP client showcasing the download of a SuSE Linux gcc compilation package at the dazzling rate of : Downloading the gcc cross-compiler for s390x through the ftp.belnet.be mirror. Note the then very new Windows XP Olive theme. For some reason, that screenshot must have been relevant, as I found it uploaded as part of my UnionVault.NET museum from 2002. Nowadays, such a download speed can officially be scoffed at as being slower than a snarky snail. Yet in 2000-2002, that was lightning-fast. Perspectives change. In Belgium, telecom company Belgacom introduced ADSL in 1999, significantly boosting our digital lives. No longer did I have to hang up the ISDN line when chatting over ICQ when mom wanted to do a quick phone call to grandma to ask about next week’s party. No longer did we have to listen to squeaky sounds and wait and wait and wait… for an image or file to appear. The future was here! For our family, the future was here a smidge earlier than the average Flemish family as my dad worked very close to the source. He was one of the Belgacom employees responsible for testing out various early ADSL modems at home, so our dialup method changed frequently. I do remember that we too were blessed with “The Frog”: the Alcatel ‘Stingray’ ADSL SpeedTouch USB Modem that looked like a frog or ray, depending on who you’d ask: The first iteration of the Alcatel SpeedTouch modem. That lovely shape was capable of handling at most downstream but our cables/ISP was not ready to handle that just yet. In September 2002, Belgacom announced they would further increased the ADSL bandwidth : Snelheidsverhoging: alle Belgacom ADSL-abonnementen. De maximum downstreamsnelheid bedroeg sinds de lancering 750 Kbit/s (ADSL GO) en 1Mbit/s (ADSL Plus-Pro-Office-Premium). Door de bijkomende investeringen en netwerkaanpassingen van Belgacom zal de meerderheid van de klanten pieksnelheden kunnen halen tot . Deze werkzaamheden zullen vermoedelijk voltooid zijn in het eerste kwartaal van 2003. Three whoppin’ megabits (not bytes) per second! Can you imagine that? I guess you can given the current average download speeds of… Wait, let me check speedtest.net … or, in other words, 93 times faster than the bleeding-edge 2003 speeds 1 . Try streaming your favourite YouTube video with a few megabits per second. YouTube didn’t exist until two years later (2005). Perspectives change. In that statement they mention they have 400k customers. Given the widespread adoption of internet in Belgium, that number can be safely multiplied by ten nowadays. The Skynet ISP that was bought up by Belgacom and hosted our very first personal homes under provided a monthly limit of . According to Belgacom in that same announcement, only a tiny portion of their users effectively hit that limit. Nowadays, everyone is accustomed to “stream whatever, whenever! YOLO!”. Back then, speeds were “high”, but we still had to be mindful of the stuff we downloaded each month, especially when wading through newsgroups looking for shady new releases Perspectives change. I wonder if my dad kept a list of the routing hardware we burned through in those late nineties/early noughties. All I can recall is that it was a lot . Since he was employed by the national telecom company that only really was (and still is) rivalled by a single other company—Telenet—we never tried the alternative. Nowadays, multiple “shadow” ISPs exist like Orange, Mobile Vikings, and Scarlet that hire the Proximus cable network. Proximus is the rebranding and full privatisation of Belgacom that was the rebranding of the institute RTT ( Regie voor Telegraaf en Telefoon —or, as my dad would call it, Rap Terug Thuis ). Unfortunately, the Web Archive never crawled all homes and I neglected to backup whatever my dad uploaded on there so our stuff is forever gone. I regret taking only a single screenshot of my download speed, so I cannot repeat this enough: archive your stuff ! That’s also the oldest screenshot of my machine/OS I have; the other desktop screenshots are from 2004+. This blog post is just an excuse to get that image under the moniker. According to meter.net historical speed tests results , only five years ago, for Belgium, that average was . Does this mean that in five years it’ll be on average ? That’s more than a CD-ROM in less than a second. Perspectives change. In twenty more years, nobody will remember what a CD-ROM even is.  ↩︎ Related topics: / adsl / screenshots / By Wouter Groeneveld on 11 March 2026.  Reply via email . According to meter.net historical speed tests results , only five years ago, for Belgium, that average was . Does this mean that in five years it’ll be on average ? That’s more than a CD-ROM in less than a second. Perspectives change. In twenty more years, nobody will remember what a CD-ROM even is.  ↩︎

0 views
Brain Baking 1 months ago

A Note On Shelling In Emacs

As you no doubt know by now, we Emacs users have the Teenage Mutant Ninja Power . Expert usage of a Heroes in a Hard Shell is no exception. Pizza Time! All silliness aside, the plethora of options available to the Emacs user when it comes to executing shell commands in “terminals”—real or fake—can be overwhelming. There’s , , , , , and then third party packages further expand this with , , … The most interesting shell by far is the one that’s not a shell but a Lisp REPL that looks like a shell: Eshell . That’s the one I would like to focus one now. But first: why would you want to pull in your work inside Emacs? The more you get used to it, the easier it will be to answer this: because all your favourite text selection, manipulation, … shortcuts will be available to you. Remember how stupendously difficult it is to just shift-select and yank/copy/whatever you want to call it text in your average terminal emulator? That’s why. In Emacs, I can move around the point in that shell buffer however I want. I can search inside that buffer—since everything is just text—however I want. Even the easiest solution, just firing off your vanilla , that in my case runs Zsh, will net you most of these benefits. And then there’s Eshell: the Lisp-powered shell that’s not really a shell but does a really good job in pretending it is. With Eshell you can interact with everything else you’ve got up and running inside Emacs. Want to dump the output to a buffer at point? . Want to see what’s hooked into LSP mode? . Want to create your own commands? and then just . Eshell makes it possible to mix Elisp and your typical Bash-like syntax. The only problem is that Eshell isn’t a true terminal emulator and doesn’t support full-screen terminal programs and fancy TTY stuff. That’s where Eat: Emulate A Terminal comes in. The Eat minor mode is compatible with Eshell: as soon as you execute a command-line program, it takes over. There are four input modes available to you for sending text to the terminal in case your Emacs shortcuts clash with those of the program. It solves all my problems: long-running processes like work; interactive programs like gdu and work, … Yet the default Eshell mode is a bit bare-bones, so obviously I pimped the hell out of it. Here’s a short summary of what my Bakemacs shelling.el config alters: Here’s a short video demonstrating some of these features: The reason for ditching is simple: it’s extremely slow over Tramp. Just pressing TAB while working on a remote machine takes six seconds to load a simple directory structure of a few files, what’s up with that? I’ve been profiling my Tramp connections and connecting to the local NAS over SSH is very slow because apparently can’t do a single and process that info into an autocomplete pop-up. Yet I wanted to keep my Corfu/Cape behaviour that I’m used to working in other buffers so I created my own completion-at-point-function that dispatches smartly to other internals: I’m sure there are holes in this logic but so far it’s been working quite well for me. Cape is very fast as is my own shell command/variable cache. The added bonus is having access to nerd icons. I used to distinguish Elisp vars from external shell vars in case you’re completing as there are only a handful shell variables and a huge number of Elisp ones. I also learned the hard way that you should cache stuff listed in your modeline as this gets continuously redrawn when scrolling through your buffer: The details can be found in —just to be on the safe side, I disabled Git/project specific stuff in case is to avoid more Tramp snailness. The last cool addition: make use of Emacs’s new Completion Preview mode —but only for recent commands. That means I temporarily remap as soon as TAB is pressed. Otherwise, the preview might also show things that I don’t really want. The video showcases this as well. Happy (e)sheling! Related topics: / emacs / By Wouter Groeneveld on 8 March 2026.  Reply via email . Customize at startup Integrate : replaces the default “i-search backward”. This is a gigantic improvement as Consult lets me quickly and visually finetune my search through all previous commands. These are also saved on exit (increase while you’re at it). Improve to immediately kill a process or deactivate the mark. The big one: replace with a custom completion-at-point system (see below). When typing a path like , backspace kills the entire last directory instead of just a single character. This works just like now and speeds up my path commands by a lot. Bind a shortcut to a convenient function that sends input to Eshell & executes it. Change the prompt into a simple to more easily copy-paste things in and out of that buffer. This integrates with meaning I can very easily jump back to a previous command and its output! Move most of the prompt info to the modeline such as the working directory and optional Git information. Make sort by directories first to align it with my Dired change: doesn’t work as is an Elisp function. Bind a shortcut to a convenient pop-to-eshell buffer & new-eshell-tab function that takes the current perspective into account. Make font-lock so it outputs with syntax highlighting. Create a command: does a into the directory of that buffer’s contents. Create a command: stay on the current Tramp host but go to an absolute path. Using will always navigate to your local HDD root so is the same as if you’re used to instead of Emacs’s Tramp. Give Eshell dedicated space on the top as a side window to quickly call and dismiss with . Customise more shortcuts to help with navigation. UP and DOWN (or / ) just move the point, even at the last line, which never works in a conventional terminal. and cycle through command history. Customise more aliases of which the handy ones are: & If the point is at command and … it’s a path: direct to . it’s a local dir cmd: wrap to filter on dirs only. Cape is dumb and by default also returns files. it’s an elisp func starting with : complete that with . else it’s a shell command. These are now cached by expanding all folders from with a fast Perl command. If the point is at the argument and … it’s a variable starting with : create a super CAPF to lisp both Elisp and vars (also cached)! it’s a buffer or process starting with : fine, here , can you handle this? Are you sure? it’s a remote dir cmd (e.g. ): . it’s (still) a local dir cmd: see above. In all other cases, it’s probably a file argument: fall back to just .

0 views
Brain Baking 1 months ago

Favourites of February 2026

A sudden burst of Japanese cherry flowers sparkling in the sun brings much-needed lightheartedness into our late February lives. Before we know it, the garden will be littered with these little pink petals, and the very short blossom season will be behind us. Our cherry tree always had the tendency of being early, eager, and then running out of steam. It’s weird to have temperatures reach almost twenty degrees Celsius while a few weeks ago it was still freezing. No wonder the tree is confused. A deep blue sky overlooking the cherry blossom in our garden. In case you were wondering: no, this weather is not normal: it’s yet another noticeable temperature spike. Our local (retired) weatherman Frank explains the spikes and provides proof towards upwards instead of downwards temperature peaks (in Dutch). At this point, I’m just grateful for the much needed sunshine. Previous month: January 2026 . I’m giving up on Ruffy. It’s just unplayable on the Switch which is a damn shame as the N64 throwback collect-a-thon 3D platformer with rough edges looks like the perfect fit for the Switch—and it should be. It’s far from a demanding game so the only conclusion I can make is that it was poorly optimized for my platform of choice. And I bought the Limited Run Games physical version… Instead, I’ve turned to Gobliins 6 , a quirky French adventure game made by just one guy. It has equally frustrating moments and rough edges but I can more easily forgive it for its faults: it’s Gobliins! The fact that after 34 years (!!), there’s an official sequel to Gobliins 2: The Prince Buffoon is just crazy. I have fond memories of that game as I used to play it together with my dad on his brand new 486. I didn’t understand English nor was I able to solve most time-based puzzles but the Gobliins exposure got permanently burned into my brain—so much so that its pixel art became a basis for my retro blog . Even though it’s advertised to be a Windows-only game, ScummVM has got you covered: In the Fox Bar just after Fingus reunites with Winkle. If Gob6 sells well, Pierre might go ahead and make Gob7 a direct sequel to Goblins Quest 3 . Fingus—err, fingers crossed for Blount’s return! Related topics: / metapost / By Wouter Groeneveld on 4 March 2026.  Reply via email . Let’s start with more Gobliins stuff: Michael Klamerus summarized the history of the games to bring you up to speed. Mark self-hosted a book library tool called Booklore that links to your Kobo account. Michał Sapka nuances the “ I hate genAI ” screams of late. Elmine Wijnia writes in De Stadsbron (in Dutch) about OpenStreetMap and wonders whether we can finally get rid of Google Maps. Space Panda continues fighting against bots on their site . It’s fun to see the bot honey pots working but aren’t we now wasting even more resources doing nothing? Arjan van der Gaag shares how he uses snippets in Emacs with Yasnippet . I think I’m going to migrate to Tempel.el instead, but that’s for another story. There’s an interesting thread on ResetERA about old games that have yet to be replicated . Someone mentioned Magic the Gathering: Shandalar ! Jeff Kaufman shared a photo of two chairs placed on a snowy parking space . Apparently, that’s customary to “reserve” your spot. I’ve never seen such a ridiculous selfish act in a while. Is this a typical USA thing? Wolfgang Ziegler continues his Game Boy modding spree, this time with an IPS screen mod . The result looks stunning! Hamilton Greene shares his adventure with programming languages and talks about the “missing language”. I don’t agree with his stance but it’s interesting nonetheless. Scott Nesbitt writes on an old Singer desk ! Greg Newman organized the Emacs writing carnival challenge and shares links of others’ writing experiences with their favourite editor (25 entries). Greg also designed the Org-mode unicorn logo! Speaking of which; James Dyer shows his streamlined Eshell configuration that inspired me to hack together my own. To be continued in a future blog post, whether you’ll like it or not. Markus Dosch shares his journey from Bash to Zsh and now Fish . I’m slowly but surely getting fed up with Zsh and all those semi-required plugins so I might switch to Fish as well. But actually… I switched to Eshell. You didn’t see that coming, did you? Henrique Dias redesigned his website and the result looks very good, congrats! I especially like the fact that the new theme takes advantage of wide screens (note to self). Michael Stapelberg tried out Wayland and concludes that it’s still not ready yet. X11 is not dead yet. I found the Lockfile Explorer documentation on pnpm lockfiles to be very thorough and insightful. Feishin is a modern rewrite of Sonixd, a Subsonic-compatible music desktop client that looks promising. I’ve been a Navidrome user for five years now but am looking for a good client that supports offline playback. It doesn’t (yet) . Related: the Symfonium Android app that does do caching. I’m using Substreamer for that and that works well enough. scrcpy is a tiny Android-based screen sharing tool that I use in classes to project my Android screen. Handy! Another tool for presenting: keycastr helped me teach students how to use shortcuts. I might have already shared this, but you should replace pip with uv : it’s +10x faster and can also manage your project’s . Oh, and in case you haven’t already, replace npm with bun . Discord’s age verification facial recognition tool got bypassed pretty fast —rightfully so.

0 views
Brain Baking 1 months ago

An Album For Every Year Of My Life

Inspired by Tom’s One Album for Every Year of Life compilation, Robert created his own list. It’s been a while since I last published a list related to music so here’s my own that should contain 40 items. This was a much more challenging exercise than I initially thought. It took me almost an entire day to compile the list and it still contains holes. In any case, scrolling through the list is another way to reveal the evolution of my musical taste . Each row includes a sample track I picked out for your listening pleasure. Every link redirects to YouTube to keep things as simple as possible. The idea is that these samples make the list a bit more interesting for people who are looking into expanding their musical tastes. Album art: the eighties. Very easy to compile. Genres: metal, pop/rock, new wave/synth. I love eighties music as is apparent by having the GTA Vice City radio stations on repeat for years and years. I kind of cheated by including two compilation albums in this list of which Decade is the first: all the good stuff is from before 1985. There’s so much great new wave/synth pop music out there, but I have yet to discover the full length albums as I usually aim for the more popular individual tracks. When I’m in the mood, I appreciate the odd metal/hard rock track, but as will become clear in the next section, it’s not my main genre. Album art: the nineties. Very easy to compile. Genres: rap overload! My music nineties are heavily dictated by hip-hop super-groups of which Wu-Tang’s Enter The Wu-Tang is the most influential. Since then, I’ve been a devout Wu follower as is apparent from the spin-offs ( Gravediggaz ) and solo albums ( Liquid Swords ) on this list. Beyond a good doze of underground rap, there’s also the king of the G-Funk. I first had the new king listed on 1999 ( Dr Dre: Chronic 2001 ) but Dan The Automator’s weird stuff takes more priority. The few non-rap albums are either compilations ( Middle of the Road ) that my mother brainwashed me with or late pop rock goodies (I love Genesis but hate their slow songs). Album Art: the noughties. Moderately difficult to compile. Genres: alternative/underground rap, electronic. I faced difficulties filling the latter half of the noughties as my musical brain was stuck in either the golden age of rap (the nineties) or the golden age of synth music (the eighties). Still, this decade includes some of the best albums ever made ( Madvilliany ) and great super-group deliverables that I’ll listen to any day ( Jurassic 5 & Hieroglyphics ). Much later, I discovered I also love chiptune music and electronic (rock). The inclusions here are recent aquisitions: in the noughties, my mind was still very much set on rap. Album art: the 2010s. Difficult to compile. Genres: hip-hop, electronic, funk. Mega Ran is probably my biggest discovery from this time: an MC rapping about video games and remixing classic video game soundtracks? Here’s my wallet, where do I sign? More chiptune electronic starts finding its way into my playlist feed, with Cory Wong and his Vulfpeck as the latest funky additions. Album art: the 2020s. Impossible to compile. Genres: Hip-hop, funk, electronic. Most albums I buy nowadays are released in the previous decade(s); I’m a “slow discoverer” when it comes to contemporary music: hence the absence of entries in the years 2024, 2025, 2026. If you have any suggestion based on my taste laid out here please let me know. I’m happy to report that hardcore hip-hop is not dead yet. Czarface proves this—yet another Wu spin-off by original Wu member Inspectah Deck and the duo 7L & Esoteric . They consistently put out great comic book inspired stuff. I just learned about Stress Eater , a spin-off involving Kool Keith . Maybe that album should be on 2024 in a few months. Related topics: / music / By Wouter Groeneveld on 2 March 2026.  Reply via email .

0 views
Brain Baking 1 months ago

Managing Multiple Development Ecosystem Installs

In the past year, I occasionally required another Java Development Kit besides the usual one defined in to build certain modules against older versions and certain modules against bleeding edge versions. In the Java world, that’s rather trivial thanks to IntelliJ’s project settings: you can just interactively click through a few panels to install another JDK flavour and get on with your life. The problem starts once you close IntelliJ and want to do some command line work. Luckily, SDKMan , the “The Software Development Kit Manager”, has got you covered. Want to temporarily change the Java compiler for the current session? . Want to change the default? . Easy! will point to , a symlink that gets rewired by SDKMan. A Java project still needs a dependency management system such as Gradle, but you don’t need to install a global specific Gradle version. Instead, just points to the jar living at . Want another one? Change the version number in and it’ll be auto-downloaded. Using Maven instead? Tough luck! Just kidding: don’t use but , the Maven Wrapper that works exactly the same. .NET comes with built-in support to change the toolchain (and specify the runtime target), more or less equal to a typical Gradle project. Actually, the command can both build list its own installed toolchains: . Yet installing a new one is done by hand. You switch toolchains by specifying the SDK version in a global.json file and tell the compiler to target a runtime in the file. In Python , the concept of virtual environments should solve that problem: each project creates its own that points to a specific version of Python. Yet I never really enjoyed working with this system: you’ve got , , , , , … That confusing mess is solved with a relatively new kid in town: uv , “An extremely fast Python package and project manager, written in Rust.” It’s more than as it also manages your multiple development ecosystems. Want to install a new Python distribution? . Want to temporarily change the Python binary for the current session? . Creating a new project with will also create a virtual environment, meaning you don’t run your stuff with but with that auto-selects the correct version. Lovely! What about JS/TS and Node ? Of course there the options are many: there’s nvm —but that’s been semi-abandoned ?—and of course someone built a Rust-alternative called fnm , but you can also manage Node versions with . I personally don’t care and use instead, which is aimed at not managing but replacing the Node JS runtime. But who will manage the bun versions? PHP is more troublesome because it’s tied to a web server. Solutions such as Laravel Nerd combine both PHP and web server dependency management into a sleek looking tool that’s “free”. Of course you can let your OS-system package manager manage your SDK packages: and then . That definitely feels a bit more hacky. For PHP, I’d even consider Mise. Speaking of which… Why use a tool that limits the scope to one specific development environment? If you’re a full-stack developer you’ll still need to know how to manage both your backend and frontend dev environment. That’s not needed with Mise-en-place , a tool that manages all these things . Asdf is another popular one that manages any development environment that doesn’t have its own dedicated tool. I personally think that’s an extraction layer too far. You’ll still need to dissect these tools separately in case things go wrong. Some ecosystems come with built-in multi-toolkit support, such as Go : simply installs into your directory 1 . That means you’ve installed the compiler (!) in exactly the same way as any other (global) dependency, how cool is that? The downside of this is that you’ll have to remember to type instead of so there’s no symlink rewiring involved. or can do that—or the above Mise. But wait, I hear you think, why not just use containers to isolate everything? Spinning up containers to build in an isolated environment: sure, that’s standard practice in continuous integration servers, but locally? Really? Really. Since the inception of Dev Containers by Microsoft, specifically designed for VS Code, working “inside” a container is as easy as opening up the project and “jumping inside the container”. From that moment on, your terminal, IntelliSense, … runs inside that container. That means you won’t have to wrestle Node/PHP versions on your local machine, and you can even use the same container to build your stuff on the CI server. That also means your newly onboarded juniors don’t need to wrestle through a week of “installing stuff”. Microsoft open sourced the Dev Container specification and the JetBrains folks jumped the gun: it has support for but I have yet to try it out. Of course the purpose was to integrate this into GitHub: their cloud-based IDE Codespaces makes heavy use of the idea—and yes, there’s an open-source alternative . Is there Emacs support for Dev Containers? Well, Tramp allows you to remotely open and edit any file, also inside a container . So just install the Dev Container CLI, run it and point Emacs to a source file inside it. From then on, everything Emacs does—including the LSP server, compilation, …—happens inside that container. That means you’ll also have to install your LSP binaries in there. devcontainer.el just wraps complication commands to execute inside the container whilst still letting you edit everything locally in case you prefer a hybrid approach. And then there’s Nix and devenv . Whatever that does, it goes way over my head! You’ll still have to execute after that.  ↩︎ Related topics: / containers / By Wouter Groeneveld on 26 February 2026.  Reply via email . You’ll still have to execute after that.  ↩︎

0 views
Brain Baking 1 months ago

Never Blow Up Your Bridges

Ten years ago, I first met my now colleague who then acted as the internship guide for a couple of graduate students that had their first taste of the industry at my previous (previous) employer. We only had brief contact: I was supposed to guide the interns from the industry side, and he was supposed to guide them from the education side. We shook hands and never saw each other again. Until four years later, while I was doing my PhD and ended up in the jury for the Vlaamse Programmeerwedstrijd , a local programming contest organised by multiple higher education institutions to promote (applied) computer science. It turned out that he was also a jury member, still representing the same institution. We attended a few preparation meetings, executed our roles as jury members for a few years, shook hands and never saw each other again. Until a couple of months ago, when I was looking to get back into education and asked him if he didn’t happen to know of any open vacancy spots. He did. I jumped the gun. Now we’re direct colleagues: in fact, this semester, we’re teaching a course together. Isn’t life strange? The only job I landed using zero resources but myself was my first job. Seven years later, more than tired of consultancy, I left and joined a smaller product development company where an engineering manager started just before me. That was no coincidence: that same manager and I worked together on multiple projects and it was largely thanks to him that I got in. Fast forward four more years: I started teaching half-time. It was another colleague who knew I liked transferring knowledge and coaching that sent me the job ad: I wasn’t intentionally looking for something like that. A semester later, I quit my job and started combining 50% teaching with a PhD. Five years later, I started freelancing and found my first client through old contacts in the industry. The recruiter that interviewed me knew me well: she and I actually used to recruit together for another company. The CEO of that company knew me as she managed one of the projects I worked on. A couple of months later, my old research group contacted me, inquiring the development of a specific survey tool. Fast forward another year. I work for a startup because the owner and I worked together on a project we both have nostalgic feelings about. He called me to ask if I was available for another challenge. When I told my current client I accepted his invitation, they immediately responded with “if you’re ever done with that, give us a call”. You know the rest. I transitioned back into teaching . But you never know, it might start itching again… Never blow up your bridges. If you manage to build a couple, you can always cross them—and if needed, retrace your steps. (None of these bridges were built or crossed with the help of LinkedIn . I do not have an account there. Contrary to popular opinion, you don’t need a corporate social media account to connect with people.) Related topics: / work / By Wouter Groeneveld on 23 February 2026.  Reply via email .

0 views
Brain Baking 1 months ago

A Note On Presenting Code in Emacs

The other day, I decided it was finally time. It was finally time to open Emacs to demonstrate certain code functionalities in class. The result was predictable: it caused further confusion among already confused students. The root cause wasn’t switching out a familiar WebStorm-like environment for an esoteric IDE but rather the way the code was presented. Most classrooms come equipped with crappy projectors that are experts in washing out colours and blurring otherwise perfectly crisp text. My first instinct after opening up an editor in class is to zoom in. That always worked well enough—either by pinching on the trackpad ( oooh look at that smooth zooming animation in IntelliJ!) or by pressing . That zoom never worked that great in Sublime as the tree view didn’t budge, but it worked well enough for the few lines of code that needed selecting and highlighting. Naturally, in Emacs, I bound to and continued to press as I have been doing so for the past decade. The story wouldn’t end there otherwise there wasn’t enough for me to write here. Same problem existed: the tree view didn’t budge. But the worst problem was that the line numbers in the fringe didn’t zoom either resulting in a very jumpy point every time I navigated to another line. I felt embarrassed. Also naturally, that evening, more Elisp hacking took place. The result is , a switch to make ad-hoc theme and window configuration adjustments that turns the editor into something the projector no longer chokes on. Here’s a before and after screenshot: Left: the default light theme. Right: the same screen with presentation mode enabled. What exactly does this presentation switch do? I wanted to maintain the ability to switch between a light/dark mode on the fly even from within presentation mode, and to further zoom in locally with if needed without further blowing up the project tree and the modeline. As usual, you can find my “bakemacs” Emacs config in the Git repository . At this point, you might be slightly confused: what do you mean a presentation mode? you’re merely zooming in! You are correct. This is not a true presentation mode in the same vein as for instance Ankit Gadiya’s Emacs Presentation Stack . I don’t want to present text in Org mode that look like slides. Instead, I just want to demo some code. I want to be able to split a window, open an Eshell, run some tests, show where the files are relative to the others in a tree view, and highlight specific functions. My use case as a teacher is limited to showcasing how very simple projects should work, from the code to the tools around it. It’s often hard for students to follow what I’m doing if I alt-tab to a terminal, then switch back to an editor, then zoom in, then zoom back out, … So the plan is to try and come across as a little more consistent. I’m not very fluent in Emacs let alone in embedded shells—dummy or otherwise—so we’ll see how this pans out in the future. Since writing this last week and using my new presentation mode a bit more in class, a few more problems popped up. First, although is designed to “work buffer-local only”, it also scales the line numbers. We knew that, but I still want to zoom in further if needed (most of the time). I was showcasing a REPL in split screen and only zoomed in one of the two visible buffers… Ouch. Fix: But then if you open up a new buffer you’re screwed again, so you’ll need another hook into to set the scale there. I kind of hacked the buffer-local one to be global except for UI text. Next problem: zooming in on Markdown files didn’t scale code blocks. Huh? After scratching my head a bit, it turned out to be mixed-pitch ’s fault, or rather a config error on my part. Do not set to . This was in fact another bug as the modeline is very annoying to “flip”. isn’t enough if existing buffers are already initialized and I ended up looping through all open ones to reconfigure each one.  ↩︎ Related topics: / emacs / By Wouter Groeneveld on 17 February 2026.  Reply via email . The obvious text enlargement, but globally this time by styling the font directly. There’s nothing theme-specific in the presentation function. Instead, I set a flag and force a theme reload that triggers my usual theme customisation hooks. This also increases the font of the minibuffer which is handy for following what does. I also slightly increased line spacing. I took some inspiration from the presentation mode in IntelliJ to slightly enlarge and move the modeline to the top (replaced by the LSP breadcrumbs 1 if active as in the screenshot). For brevity, some info in there is removed, such as the perspective name. Increase the contrast. Since I use Doom themes, and are my friends. Based on the current active theme— can be deduced with built-in functionality: . Pay special attention to the face that highlights the current line. Speaking of contrast, move from a “selection mode” to a “highlight mode” by simply changing the background colour of the face. When I want to direct the students’ attention to specific lines or blocks of code, I can simply select it. Apparently, Emacs has support for blinking text but that was a bit too much. Make Treemacs play along. I have a custom treemacs theme customisation hook. Font locks and confusing face inheritance made it difficult to increase this as well. Hide the tabs by temporarily disabling that mode. This was in fact another bug as the modeline is very annoying to “flip”. isn’t enough if existing buffers are already initialized and I ended up looping through all open ones to reconfigure each one.  ↩︎

1 views
Brain Baking 2 months ago

Why Parenting Is Similar To JavaScript Development

Here’s a crazy thought: to me, parenting feels very similar to programming in JavaScript. The more I think about it, the more convinced I am. If you’re an old fart that’s been coding stuff in JavaScript since its inception, you’ll undoubtedly be familiar with Douglas Crockford’s bibles , or to be more precise, that one tiny booklet from 2008 JavaScript: The Good Parts . That book covered by a cute O’Reilly butterfly is only 172 pages long. Contrast that with any tome attempting to do a “definitive guide”, like David Flanagan’s, which is 1093 pages thick. Ergo, one starts thinking: only of Javascript is inherently good . And that was 18 years ago. Since then, the EcmaScript standard threw new stuff on top in a steady yearly fashion, giving us weird and wonderful things (Promise chaining! Constants that aren’t constants! Private members with that look weirder than ! Nullish coalescing?? Bigger integers!) that arguably can be called syntactic sugar to try and disguise the bitter taste that is released slowly but surely if you chew on JS code long enough. If that’s not confusing enough, the JS ecosystem has evolved enormously as well: we now have 20+ languages built on top of JS that compile/transpile to it. We have TypeScript that has its own keyword that has nothing to do with , go nuts! We have ClojureScript that lets you write your React Native components in Clojure that compiles to JS that compiles to Java with Expo that compiles your app! We have and and and god-knows-what-else that replaces and possibly also ? At this point, I’m starting to transpile JS into transpiration. Parenting often feels like Javascript: The Good Parts versus JavaScript: The Definitive Guide . With our two very young children, there are many, many (oh so many) moments where we feel like we’re stumbling around in the dark, getting lost in that thick tome that dictates the things that we should be doing. When the eldest has yet another I’ll-just-throw-myself-on-the-floor-here moment and the youngest keeps on puking and yelling because he just discovered rolling on his tummy, I forget The Good Parts . To be perfectly frank, in those moments, I often wonder if Crockford had been lying to us. Are there even any good parts at all? We all know JS was cobbled together overnight because Netscape needed “some” language to make static languages a bit more dynamic. A language for the masses! What a monster it has become—in both positive and negative sense. It often feels like Wouter doesn’t exist anymore. Instead, there’s only daddy. It has been months since I last touched a book, notebook, or fountain pen. It has been months since my wife & I did something together to strengthen our relationship which currently is being reduced to snapping at each other because we’re still not perfectly synced when it comes to educational rules. Perhaps just writing and publishing this is reassurance for myself: proof of existence. Hi! This is not a bot! JavaScript is a big mess. Parenting feels like that as well. The ecosystem around JS rapidly changes and only the keenest frontend developer is able to keep up. I have no idea how to keep up with parenting. During our day-to-day struggles, you barely notice that the kids are growing and changing, but when you look back, you’re suddenly surprised yet another milestone has passed. Is that part of the Good Parts or the Bad Parts ? Maybe Flanagan’s Definitive Guide should be used to smack people on the head that do not obey to the latest EcmaScript standard best practices. I often have the feeling of getting smacked on the head when trying to deal with yet another kid emergency situation. I’m exhausted. Last week I yelled so hard at our eldest that she and I both started crying—she on the outside, me on the inside. I have no idea who I am anymore. I’m not like that. But it seems that I am. Our children successfully managed to bring out the worst in ourselves, even parts that I didn’t even know where there. I’ll let you be the judge of whether that bit belongs in the Good Parts . Yet I love JS. I love its dynamic duck type system (fuck TypeScript), I love its functional , , roots, I love prototypal inheritance. But I often forget about it because it’s buried in all that contemporary mud. Of course I love my children, but right now, I can’t say that I love parenting, because it’s buried in all that attention demanding and shouting that reduces our energy meters to zero in just a few minutes. My wife made a thoughtful remark the other day: We’re no longer living. At this point, we’re merely surviving. Every single day. As I write this, it’s almost 17:30 PM. The kids spent the day at my parents so I don’t even have the right to complain. Every minute now, they can come back and the bomb will explode again. There’s a little voice in my head that says “just get to the cooking, get them to eat and shove them in bed. Only an hour and a half left.” I don’t know if that’s sad or not. I need to get cooking. Only an hour and a half left. Don’t blame me, I no longer live. We’re merely surviving. If someone manages to write Parenting: The Good Parts in only 172 pages, let me know. Related topics: / javascript / parenting / By Wouter Groeneveld on 13 February 2026.  Reply via email .

0 views
Brain Baking 2 months ago

A Note on File History in Emacs

Once you start digging beyond the surface, you discover that an ancient piece of text editing software called Emacs was light years ahead of its time. It already contained a clipboard history ( ) and automatic saves/backups decades before contemporary editors took a half-baked stab at mimicking these features. Granted, I don’t make use of the kill ring because Alfred manages that for me across different applications, but it’s still pretty damn impressive. If you manage to stumble past the initial setup, that is. Many default settings in Emacs are… weird? The first thing to configure to transition to a bit of a sane default system is moving all those and backup and auto-save files to a central location to stop the editor from littering all over the place. That’s pretty easy to do but begs the question why they don’t change these defaults? Nobody wants random backup files popping up in their Git change set! Do you even need those files? The system feels archaic at first, but the more you think about the possibilities, the more brilliant the idea becomes. Let’s ignore the auto-save system for now—that doesn’t auto-save but auto-saves an auto-save backup that’s not a backup. Got all that? On every manual , a backup file is created or replaced, depending on your configuration. These files can act as your local file history in case you’re not rocking a version control system. If you do, Emacs notices this and stops producing backups. I do recommend setting to as you might lose interesting historical data before doing a commit. That is one of the more useful features of IntelliJ-based IDEs: to go back in time a few minutes to half an hour. Why would you need that? Emacs has a built-in undo history system! Very true, and perhaps better, as that doesn’t require a save, but isn’t persistent. I can hear you say it. You’re right: there’s a package for that . It’s called undo-fu-session and it serialises the undo information without changing any inner logic. This is even more brilliant if coupled with that helps you step through this. If you increase the three related settings, you will have a powerful way to go back in time. Perhaps a bit too powerful? What is a good limit? Contrary to IntelliJ, Emacs does not persist timestamps: it only works with bytes and limits those, so you’ll have to write a function that periodically cleans up those persisted backups. But are you going to remove the entire tree or just prune a bit? Because if you don’t, this is how your session will look like: The vundo tree: a visualised undo tree with a lot of nodes to diff... And that’s just a clean tree with no branching reapplied undo paths. Good luck trying to hop between different nodes, selecting the right ones to diff and revert to. Without timestamp info, a big undo tree is useless. So I removed : too much power, too much responsibility. Let’s keep that history local and non-persistent (even with a daemon you’ll end up with more than enough). I started fine-tuning the built-in backup settings: Which translates to: There’s a bit of a catch here: Emacs only saves a backup once per editing session and then assumes you’re safe. To force it to create a backup every time you save you’ll have to add to the . Or, as I learned from Alex , save with . Ridiculous. GNU Emacs already featured this snapshot backup system in 1985, when I was born! Fine, we now have a bunch of backup files. Then what? This is where things can get interesting. Since they’re just files, you can obviously run a diff tool against them. But which backup file to choose, and how to easily select the right file from the UI and go from there? Consult to the rescue. Consult is a completing-read on steroids that plugs seamlessly into Vertico, my minibuffer completion framework. It’s basically a fuzzy search tool you can throw anything at—including a list of backup files to choose from. Which is exactly what I did. You can change the label (parse the timestamps), choose a lovely icon if you’re using nerd-icons et al., and tell Consult what to do when (1) you preview the candidate and (2) when you select it. So the plan is this: The result looks like this: Selecting different backups automatically changes the opened diff on the right. I have no idea if I butchered , I tried a few things until it sort-of worked and had some help with the rest. You can find the source somewhere in the Bakemacs config files , look for . It could very well be that something like that already exists, but I haven’t found it so far. does something else. sounds good but requires you to navigate to the backup file yourself. The added advantage of mode is that you can revert the diff and re-apply specific hunks. The idea that I’ll never lose anything stupid I wrote will make me sleep better later tonight. Sublime Text’s persistent but unsaved changed file system and IntelliJ’s local history saved my ass more than once. The fact that I cobbled together a working thing using Consult makes this even more satisfying. Isn’t fooling around in Emacs the best thing ever? I hope these nerdy posts are not alienating too many faithful Brain Baking readers… Because, you know, the Lisp Alien mascot? No? Took it too far? Related topics: / emacs / By Wouter Groeneveld on 10 February 2026.  Reply via email . Keep multiple backup files : , , … Also backup even if it’s under version control Clean up older files: keep the oldest 2 and the last 10. Copy the file, don’t turn the existing one into a backup and save the buffer as the new file. For the current buffer, find all backup files. Easy: , substitute a few weird chars into !, read them from , done. (This very file has a backup called ) Sort and properly format a timestamp to show in the Consult minibuffer using . When previewed, with the current buffer into a new window on the right. When selected, make that diff window permanent. When cancelled with , cleanup the mess.

0 views
Brain Baking 2 months ago

Creating Buttons To Remember Things

My wife recently bought a device to scratch her creative crafting itch: a button press . At first, I dismissed it as yet another thing requiring space in her increasingly messy atelier. I don’t know how we manage to do it but we seem to be experts in gathering things that gather things themselves: dust. But now that she finally started doing something with it, I was secretly becoming interested in what it could mean for our scrapbook making. The button press in question is a “We R Makers Button Press Bundle All-In-One Kit” that comes with press, a few add-on peripherals that allow you to modify how it cuts and presses, and of course the buttons themselves. The button press in action, about to create a 'little monster'. Since handling the lever requires a bit of pressure to correctly cut and a second time fit the cut circle inside the button, I yelled TSJAKKA every time she would press it, to great joy of our daughter. She now calls it the Tsjakka . “Daddy, can we make another little monster with Tjsakka?” Because my first instinct after thinking about what kind of buttons I wanted was to print a variant of the Alien Lisp Mascot —a green monster with five eyes. Fellow nerds reading this might have covered their entire laptop back with cool looking stickers: a Docker container sticker, an IDEA logo one, the GitHub Octocat, and god knows what else you managed to nab from a conference table. While I always found those laptops to be just cute, I never wanted to soil mine with a sticker of some technology stack that I would grow to hate a few years later. Thanks to a random takeover by Microsoft sharks, for instance. *cough* Give Up Github *cough*. So why not a programming language mascot? Java’s The Duke? No way, I’m not that big of a Java fan. The Gopher perhaps? Better, but no. If I was to wear a badge, smack on a sticker somewhere prominent, it would have to be of something that makes me happy. Go is cool but boring. Java brings in a lot of money but smells like enterprise mud. So far, I haven’t encountered a single programming language that truly makes me happy. But Lisp is coming very close. The Lisp Alien it is, then: The result: three buttons pinned to the inside of my bike bag. One of the other two buttons is self-explanatory: the Brain Baking logo. The first one on the upper left is a part of my late father-in-law’s master’s thesis; an electronic schematic with resistors. The embossed logo on the button press, below the We R name, reads: Memory Keepers. Which is exactly what that button is for. They market it as a way to permanently record precious memories—and wear them on your sleeve . I think it’s brilliant. We don’t have an endless supply of metal clips and plastic caps to press that memory in so we have to be mindful: which one’s do we really want to create? Sure you can buy more and it’s not expensive, but that’s not the point. The point is that there won’t be a Duke on my bag, but there will be a Brain Baking logo. And, apparently, a warning. Most folks pin these buttons onto the obvious visible part of their bag. But I don’t want to come across as a button lunatic (at least not at first sight). A more convincing argument then: the bag I pinned it on is a simple detachable laptop cycle bag . The exterior gets wet now and then. I highly doubt that the button is water resistant. The third but slightly less convincing argument is that the buttons rattle quite a bit as the needle on the back used to pin it onto something sits quite loose in its metal socket. Perhaps that depends from product type to type. As you might have guessed, our daughter now is dead set on pinning a little monster on her bag she uses carry her lunch go to school. We’ll first have to ask Tjsakka to get back to work. Related topics: / crafting / By Wouter Groeneveld on 7 February 2026.  Reply via email .

0 views
Brain Baking 2 months ago

Favourites of January 2026

The end of the start of another year has ended. So now all there is left to do is to look forward to the end of the next month, starting effective immediately, and of course ending after the end of the end we are going to look forward to. Quite the end-eavour. I guess I’ll end these ramblings by ending this paragraph. But not before this message of general interest: children can be very end-earing, but sometimes you also want to end their endless whining! Fin. Previous month: January 2026 . Is Emacs a game? I think it is. I spent every precious free minute of my time tinkering with my configuration, exploring and discovering all the weird and cool stuff the editor and the thousands of community-provided packages offer. You can tell when you’ve joined the cult when you’re exchanging emails with random internet strangers about obscure Elisp functions and even joining the sporadic “let’s share Emacs learnings!” video calls (thanks Seb ). Does receiving pre-ordered games count as played ? I removed the shrink wrap from Ruffy and my calendar tells me I should start ordering UFO 50 very very soon via . Now if only that stupid Emacs config would stabilise; perhaps then I could pick up the Switch again… The intention was to start learning Clojure but I somehow got distracted after learning the Emacs CIDER REPL is the one you want. A zoomed-out top-down view of the project, centered on Brain Baking (left) and Jefklak's Codex (right). Related topics: / metapost / By Wouter Groeneveld on 4 February 2026.  Reply via email . Nathan Rooy created a very cool One million (small web) screnshots project and explains the technicalities behind it. Browsing to find your blog (mine are in there!) is really cool. It’s also funny to discover the GenAI purple-slop-blob. Brain Baking is located just north of a small dark green lake of expired domain name screenshots. Jefklak’s Codex , being much more colourful, is located at the far edge, to the right of a small Spaceship-domain-shark lake: Shom Bandopadhaya helped me regain my sanity with the Emacs undo philosophy. Install vundo. Done. Related: Sacha Chua was writing and thinking about time travel with Emacs, Org mode, and backups . I promise there’ll be non-Emacs related links in here, somewhere! Keep on digging! Michael Klamerus reminded me the BioMenace remaster is already out there. I loved that game as a kid but couldn’t get past level 3 or 4. It’s known to be extremely difficult. Or I am known to be a noob. Lars Ingebrigtsen combats link rot with taking screenshots of external links . I wrote about link rot a while ago and I must say that’s a genius addition. On hover, a small screenshot appears to permanently frame the thing you’re pointing to. I need to think about implementing this myself. Seb pointed me towards Karthinks’ Emacs window management almanac , a wall of text I will have to re-read a couple of times. I did manage to write a few simple window management helper functions that primarily do stuff with only a 2-split, which is good enough. Mikko shared his Board Gaming Year recap of 2025 . Forest Shuffle reaching 500 plays is simply insane, even if you take out the BoardGameArena numbers. Alex Harri spent a lot of time building an image-to-ASCII renderer and explains how the project was approached. This Precondition Guide to Home Row Mods is really cool and with Karabiner Elements in MacOS totally possible. It will get messy once you start fiddling with the timing. Elsa Gonsiorowski wrote about Emacs Delete vs. Kill which again helped me build a proper mental state of what the hell is going on in this Alien editor. Matt Might shared shell scripts to improve your academic writing by simply scanning the text for so-called “weasel words”. Bad: We used various methods to isolate four samples Better: We isolated four samples . I must say, academic prose sure could use this script. Robert Lützner discovered and prefers it over Git . I’m interested in its interoperability with Git. Charles Choi tuned Emacs to write prose by modifying quite a few settings I have yet to dig into. A friend installed PiVPN recently. I hadn’t heard from that one just yet so perhaps it’s worth a mention here. KeepassXC is getting on my nerves. Perhaps I should simply use pass , the standard unix password manager. But it should also be usable by my wife so… Nah. Input is a cool flexible font system designed for code but also offers proportional fonts. I tried it for a while but now prefer… Iosevka for my variable pitch font. Here’s a random Orgdown cheat sheet that might be of use. With RepoSense it’s easy to visualise programmer activities across Git repositories. We’re using it to track student activities and make sure everyone participates. Tired of configuring tab vs space indent stuff for every programming language? Use EditorConfig , something that works across editors and IDEs.

0 views
Brain Baking 2 months ago

Banning Syntax Highlighting Steroids

I’ve always flip-flopped between so-called “light” and “dark” modes when it comes to code editors. A 2004 screenshot of a random C file opened in GVim proves I was an realy adopter of dark mode, although I never really liked the contemporary Dracula themes when they first appeared. Sure, it was cool and modern-looking, but it also felt like plugging in three pairs of Christmas lights for just one tree. At work, I was usually the weird guy who refused to flip IntelliJ to The Dark Side . And now I’m primarily running a dark theme in Emacs . Allow me to explain. After more than a decade of staring at the default dark theme of Sublime Text, I’m swithing over, but you probably already know that. I never did any serious code work in my beloved : that was mostly for Markdown files and the light edit here and there. For bigger projects, any JetBrains IDEA flavour would do it: I know the shortcuts by heart and “it just works”. So you’ll excuse me for never really paying attention to the syntax highlighting mess that comes with the default dark Sublime theme. And then I read Tonsky’s excellent I am sorry, but everyone is getting syntax highlighting wrong post. Being Tonsky, he was of course right—again. A lightbulb went on somewhere deep within the airy caverns of my brain: “Hey, perhaps I’m not the only one thinking of Christmas trees when I see a random dark theme”. There are exceptions to the rule. I love the Nord theme . I only found out now that of course there’s a JetBrains port. Nord is great because it’s very much muted, or as they like to call it, “An arctic, north-bluish clean and elegant theme”. Here’s in my current Emacs config: The Doom Nord theme: a muted palette of blues. Nord radiates calmness. I love it. But sometimes I feel that it’s a bit too calm and muted. Sometimes, I miss a dash of colour and frivolity in my coding life, without the exaggeration of many themes such as Dracula et al. In that case, there’s Palenight that throws in a cheerful dash of purple. The 2007 GVim on WinXP screenshot proves I was already a fan of purple back then! While that’s great for , general UI usage, and even the Markdown links, it’s a garish mess as soon as you open up a code file. Here’s the Palenight Doom Theme in all its Christmas-y glory whilst editing the exact same Go file from the Nord screenshot above: The Doom Palenight theme: syntax highlighting is all over the place. What’s all that about? Orange (WARNING!) for variable declarations, bright red (ERROR!) for constants, purple (YAY!) for types… Needless to say, my first urge was to rapidly switch back to Nord. But I didn’t. Instead, I applied Tonsky’s rules and modified Palenight into a semi-Alabaster-esque theme: The result is this, the same for the third time: A modified Doom Palenight theme taking the Alabaster philosophy into account. In case you’re interested which faces to alter in Emacs, here’s the snippet I use that is designed to work across themes by stealing foreground colours from general things like and : There’s only one slight problem. Sometimes, altering isn’t good enough. Because of , I also had to “erase” and . And then there’s still only one bigger problem and that’s imports—especially the statements in PHP. They’re horrible. I mean, even besides the stupid backslash. By default, Palenight chooses not one but three colours for a single statement like it’s not much better in Java. Luckily, thanks to modern syntax tree analysis of Tree-sitter, we can pretty easily define rules for specific nodes in the tree. Explore the tree with and you’ll find stuff like Tree-sitter even makes the distinction between and , but we’ll want to mute the entire line, not just a part of it. So we can say something along the lines of which means “apply the font to the .” Throw that in a and we’re all set: Editing a PHP file in Palenight. Left: unedited. Right: with muted imports and applied Alabaster logic. I haven’t yet finalised the changes to the syntax highlighting colour palette—it might be an even better idea to completely dim these imports. Flycheck will add squiggly lines to unused/wrong imports anyway, so do we really need that distinction between unused and used import? Anyway, perhaps it’s not worth fiddling with, as you’ll only see the statements for a second just after opening the file but before scrolling down. Two more minor but significant modifications were needed to make Palenight enjoyable: Picking a font for editing deserves its own blog post. Stay tuned! Addendum: I forgot to mention that by stripping pretty much all colours from syntax highlight font faces, your files will look really boring. By default, “constants” ( , )/numbers and punctuation aren’t treated with anything special, so if you want to highlight the former and dim the latter, you’ll need to rely on and throw in some regex: Related topics: / go / php / emacs / syntax / screenshot / By Wouter Groeneveld on 31 January 2026.  Reply via email . Mute (unset) keywords, everyone knows what and does and nobody cares Replace the error eyebrow-raising colours with a muted blue variant. Get rid of that weird italic when invoking methods. If it ends in , you’ll know you’re calling a method/func, right? Highlight comments in the warning colour instead, as per Tonsky’s advice. It’s a brilliant move and forces you to more carefully think about creating and reading comments. Mute (dim) punctuation. Structural editing and/or your editor should catch you if you fall. Darken the default white foreground with 15% to reduce the contrast. That’s another reason why I didn’t like dark themes. Experiment with specific fonts. I landed on Jetbrains Mono for my font, but the light version, not the normal one. The thicker, the more my eyes have to work, but too thin and I can’t make out the symbols either.

0 views