Is it really possible that half a decade just flew by? Apparently so, for on this day, 1826 days ago, I published the first entry to this site. Nothing of substance, but enough to once again actively take part in this wild and beautiful medium that is the web; enough to let 47 more blog posts (a blog post being anything I can be bothered to find a proper title for), 22 weeknotes (which taught me…
The devil is in the defaults...
Recently a bugfix at work reminded me of a story from ages ago, and a small, yet important lesson on the importance of defaults in API design, that I took away from it. So, back in the days, when commuting to work was some kind of bad default most of us were stuck to for no apparent reason, we merrily programmed forms, using a happy little in-house component library. And like any proper component…
CSS Naked Day
On the 9th of April, the CSS Naked Day takes place, its intention is to promote good web development standards, like proper use of HTML, semantic markup, a good hierarchy structure, and of course, a good old play on words . The participating sites will remove all styling for a whole international day (meaning: as long as somewhere on the world it is already or still the 9th of April). One of the…
Type-safe lookup tables
In some scenarios I prefer to use a lookup table instead of a dynamic dispatch (or a switch statement / if-else-cascade). In Typescript I usually denote it like this: type LookupKey = string | number | symbol; type LookupTable< LookupKey extends (string | number | symbol), ReturnType > = { [key in LookupKey]: ReturnType }; Let's suppose you need to handle commands that you receive via some message…
KWIC, quickly
I recently reread David Parnas classic paper On the Criteria To Be Used in Decomposing Systems into Modules . Parnas shows two different approaches to program decompostion illustrated on one example problem, the KWIC index . He writes: This is a small system. Except under extreme circumstances (huge data base, no supporting software), such a system could be produced by a good programmer within a…
Blog Questions
Since a few weeks the blog question challenge is making rounds, and some days ago Lars-Christians answers popped up in my feed reader and he tagged me to participate as well. So, without further ado, my answers: Why did you start blogging in the first place? The idea was brewing in the back of my mind for quite some time. What I had online before I wrote my first post here is best described as a…
Accidental complexities of the IndieWeb
V.H. Belvadi called the IndieWeb community to reflect on the importance of friction . As with all metaphors, there's a risk of talking past each other, so I first want to take a cursory look at af few examples of what friction looks like in the context of publishing on the web. Bill Beaty, in over 30 years of running Science Hobbyist , has created lot of content. Answering the question how could…
Receiving webmentions from (almost) nothing
The indieweb carnival for June 2024 is hosted by Andrei, who has dealt out the topic DIY — Something from (Almost) Nothing , which I think is a brilliant prompt. I'll use this as an opportunity (or excuse?) to create something that was on my to-make list for quite some time now: adding a webmention receiver endpoint to my site. I think as this also ticks a few boxes of list principles of building…
Exemplary software designs
The Pew research center recently published an estimation that 38% of webpages from 2013 are no longer accessible . And, as if to underline the point, a few days ago the Internet Archive was hit by a DDoS attack . Preserving the web continues to be an open problem , and this is a reminder to archive things you care about locally, where it is possible. Given that state of affairs, here's a few…
A few old ideas
As I reviewed my bookmarks from the weeks 20 and 21 of 2022, I noticed that a recurring motive were neat old ideas. First I found an article by Mark Nelson about Operator precedence by textual substitution , which describes a suprisingly simple method to handle the evaluation of arithmetic expressions, that stems from the early 1960s. I once had an job interview, where I was asked about this very…
A handful of links
So, half a year has past since I wrote the last weeknote . This is arguably an indicator that the a fixed schedule does not quite work out for me. On the other hand, the first reboot of week-noting was after stopping for a complete year. So, MTTR (mean time to recovery) is clearly improving. Some time ago I wrote about a little bookmarking app , that I made for myself. Well, I tweaked it a bit…
Ontology is overrated, revisited
In an age of silos and centralization, trying to curate the web may seem like a folly. Luckily, if you're looking, you'll still be able to find plenty of individual initiatives, that provide lenses into the worthwhile parts of the web. If you have a few hours to spare to go down rabbit holes, I'd heartily recommend Toms bukmark.club , a little directory of little directories. Such directories make…
Configure basic auth in nginx only for specific HTTP methods
I am using nginx as reverse proxy for a handful of small applications. I recently added one where for convenience I only wanted to require basic authentication for the endpoints that write data. The nginx configuration files are not exactly my daily concern, so to save future me (or maybe future you) some headaches with trial and error, here is what worked (and what didn't). As I wanted to only…
Websites as a catalyst for personal relationships
Manuel host this months indieweb carnival on the topic of Digital Relationships . He also, nearly one year ago, happens to have started an initiative in which among several others I have followed suit in: an offer to become regular reader of your personal website . I'll take this as an opportunity to reflect on relationships that were initiated through this and the potential of the digital medium…
A short bleep...
As my family and I are looking forward to move into a new home in January, the next weeks will be filled by throwing out junk that accumulated over the years, packing up our belongings into boxes, looking for new furniture etc.pp. and I'll likely be hard-pressed for time to write — therefore, as a short bleep before I go radio silent, I want to cluster some ideas that I'd like to pick up, once I…
October retro: Accessibility, Dev Events, Sustainability
I've recently made a few accessibility improvements for the site. For one, I finally got around to add a skip-to-content link to the navigation, mostly following along an article from CSS Tricks , with very few tweaks. And I replaced the sorttable script for the tables of content with a custom-element I wrote, in order to make the table columns also sortable via keyboard navigation. On the same…
GDPR, gamified & a serious DX issue
Since this week my parental part-time is over, I'm back to working my standard 40 hours. With so much of my time to available to the company again, sure enough somebody deemed it a good idea to assign a training course on GDPR to me. Ok, in all fairness, that course was probably assigned to just about everybody in the department, in order to tick a box on some spreadsheet, for you know, a bit of…
First you shape your tools...
...and then your tools start to shape you. So, after I've managed last week to switch over to my custom SSG for building the website, this week I spent time to play around and explore a few things, that I would not have done, if I needed to maintain them manually. The first addition, inspired by Daniel Fedorin , is a content graph , which visualizes how connected my posts actually are. As it…
Everything is intertwingled
I've wanted to replace the scripts with which I create this website for quite some time now. My most important goal was to be able to build the site with a single command. Generating the RSS feed turned out to be a bit of a tyranical edge case. Within the last week I got to the point where I am satisfied enough with the result to finally ditch the two old scripts start using it for this website.…
Digital clean-up
In Gregor Hohpe's book The Software Architect Elevator there is a chapter with the beautiful headline: If you never kill anything, you will live among zombies - And they will eat your brain. As I hinted last week , dead and undead code isn't very satisfying to work with, so in the spirit of Ken Thompsons bonmot One of my most productive days was throwing away 1000 lines of code , my efforts…
On cognitive taxes
I spent a good deal of the work week convincing myself that multiple layers of data mapping from one anemic domain model to another were indeed soundly and safely removeable. I generally try to apply Chesterton's fence when dealing with inherited code. Each layer between system boundary and internal domain model had a legitimate function, which I indeed could push down into the internal model,…
Other people's code
Hillel Wayne wrote about educational codebases . I find the idea quite interesting, and have been trying to gather some further thoughts into an article, but while writing it, my doubts grew on how feasible the idea beyond a certain threshold of complexity really is. While Hillel demos the idea with small, but extensively commented scripts, I was looking for programs, that are still comprehensible…
A bit of progress
There is this saying, that when you aren't embarrased by the first version of a software, you have shipped too late. I am not entirely convinced of its merit, but anyway, I put the repo of the static site generator I talked about before on github. Does the world really need another static site generator? Well, maybe the world doesn't, but I like to have a tool that is built around my workflows .…
Technical problems with non-technical solutions
Sometimes engineers have a tendency to solve problems with people by solely technical measures. Everything to avoid an unpleasant conversation. Somebody directly pushed to trunk instead of going through a code process: let's revoke right to push for all devs (instead of talking about processes with a single person). Test coverage could be better? The cop-out solution is to make the build fail…
To-do or to-don't?
Weeks pass frighteningly fast. All the worse, when you don't feel that there's much to show for it. I had a bit time to hack on my static site generator, still I don't have reached feature parity with my messy scripts. Some time ago I wrote something about keeping a prioritized list of ideas you want to work on. This week I stumbled over Greg Wilsons "To-Don't" list of ideas he found generally…
Rebooting
A little bit over a year ago, I published the last weeknote . It was after a very rough week, which included a bursted pipe in the appartment and a biliary colic. After that week I had lost my momentum an published neither weeknotes, nor regular articles for the following six month. So this is the reboot of the weeknotes. Maybe this time the streak will last more than six weeks. Chances aren't…
Gauging code complexity by visualizing SLOC metrics
I recently experimented a bit with lunr.js , because I wanted to learn a bit about information retrieval techniques, by trying to read the codebase in depth. The library itself is comparatively small, since it doesn't aim to be everything to everyone, but still it delivers a complete feature set, which is more than a mere toy program, which makes it a great study object in my books. What I like to…
A Great Books curriculum for Software Engineering?
Something that I regularly think about, almost everytime I select something to read through for furthering my knowledge in my field, is if there is something like a canonical set of reading material. On the other side of the Atlantic ocean there is a concept of a liberal arts education that is called Great books program , a four year college degree that solely consists of studying a canon of…
Preserving the web is an unsolved problem
No website is guaranteed to exist for ever, not even for a timespan that significantly outlives its original author. Keeping one up and running is, although very cheap, not entirely free. But even loss-leader offerings like github pages or the aws free tier are payed for by somebody. And that somebody might stop doing so for many reasons. The web is a young medium, yet in the three decades an…
Writing frequency and publishing cadence
Since I started my website, I published 38 posts (this one not included), which means on average a little more than once a month, but my publishing cadence is far from being that regular. In some months I managed to put out something on a weekly basis , but I've also had dry spells that lasted for several months. All the while I wrote notes privately on a more or less daily basis. This makes me…
Some lessons from a side project
Last year one evening my whole family was asleep unusually early. On contrast, I was not particularly tired, which is equally unusual. I used the time that I unexpectedly had at my disposal to write a tiny web app for managing my bookmarks. Initially my goal for this article was to describe the app and its making on both a technical and non-technical level, but I got a bit lost in discussing and…
How to calculate the contrast ratio of two colors
Picking colors for elements on a website is not merely an aesthetic detail, it also matters for accessibility. After I introduced a dark mode for the website, Tosh kindly provided feedback with regard to the color choices I made, or as in this case more importantly did not make. In light mode, I go with the user-agent styles for the links, and there the contrast ratio is fine, but the same choice…
Adding dark mode
At the risk of losing a lot of nerd cred: I, by and large, prefer light mode. But I'm not dogmatic about it. Media queries make it very easy to detect the readers preference and CSS custom properties help keeping the rest of the styling clean and non-repetitive. So I thought it would be a right neighbourly thing to add the following: It looks plausible to me, but visual design isn't my strongest…
An easteregg - literate programming style
As often, I am somewhat late to the party, but on the other hand, maybe you are one of today's lucky ten-thousand ... So, did you know, that when you type the words do a barrel roll (without quotation marks) into Google's search field, the page with the results does as you bid, and turns over 360 degrees. The implementation of this behavior can be achieved by adding a little style to the body, for…
In defense of internal links
Manuel has expressed some strong objections against internal links . While I indeed think, that Manuel is right with his call to link to other websites as much as you can because that's the best way to help other people discover great content. and can relate to the the overall sentiment of the post, I think condemning internal linking is a bit throwing out the baby with the bathwater. Update after…
Hal Abelson on Big Design Up Front
In one lecture of Structure and Interpretation of Computer Programs course, a student asked Hal Abelson how the technique of deferred decision making through abstraction he taught relates to the axiom of 'do all your design before any of your code' . Given that Big Design Up Front and the Waterfall process were prevalent notions in introductory courses on software development for a long time - to…
Introducing a blogroll
I've just added a blogroll to my website. I've postponed this task for so long, because - as often - of my time budget didn't fit my ambition. I wanted to comment every entry, pick out my favorite article(s) for each site, find proper categories, and offer it alternatively as OPML file to be imported into a feedreader. I did nothing like that (yet), just another site with a little over a dozend…
An old book and today's web
In a recent email conversation with Manuel , I mentioned this artifact from my youth: This book was was edited, printed and marketed by a reputable German publishing house and bought by my mother in 2000. Neither production, nor purchase involved any kind of irony or hipster humor. And more than that tells something about some generational viewpoints and tendencies, it tells a story about a web…
I will read it
I recently wrote about the technological barriers against writing on the web . But an even bigger hurdle than technology for many potential bloggers are their own doubts. If you ask yourself, why you should write online, for you fear you won't be read, Manuel Monreale has an answer. He offers to be your first reader . Chris Hannah also decided that he'd like to read your blog . I share Chris'…
Thoughts on the barriers against writing on the web
So, even though I'm using the web for more than a quarter of a century, I only recently tumbled over Bill Beaty's website Science Hobbyist . It exists since 1994 and spreads an absolutely delightful old web vibe. Consider yourself warned: you can spend quite some time in going down the rabbit holes there. Indeed, Bill has written a lot in nearly three decades. In the answer to the question how he…
Is blogging back?
At the end of last year I came across the Bring Back Blogging initiative of Ash Huang and Ryan Putnam. I think it was a terrific idea to commit to some activity on my personal website in the month of January, and apparently more than 500 other people thought so as well. The web, with its not quite 2 5 years of existence, is still a young medium. Blogging as one of its archetypical forms hasn't…
Making feeds automatically discoverable
I am a big fan of reading websites via a feed reader. Not all websites offer one, and not all that do link it prominently. A good thing therefore is, that a standardized way to make feeds discoverable for feed readers exists. So, when I find a website that I'd like to subscribe to, I can simply try to copy the url into the reader of my choice and chances are the reader is able to automatically dig…
API design rule-of-thumb: Wrap all arrays into objects
Many REST-APIs deal with collections of domain-specific objects. In development, it can be a tempting shortcut to create responses which directly return collections as JSON arrays. It is initially often the path of least resistance for both the creator and the consumer of the API. The approach has one problem: it is difficult to extend the API without introducing a breaking change. Two common…
Happy new year - Let's bring back blogging in 2023
New year's resolutions tend to not really work out for me, so I consider the following to be a resolution I only incidentally take on the first day of this new year. I love personal websites (as opposed to the corporate web) and the idea of Bring Back Blogging resonated strongly with me. I just signed up to it. The project: publishing three articles in January (+an announcement at the beginning…
Using ChatGPT to implement tic-tac-toe in bash
I have to admit that I'm a bit late to the party. OpenAI's ChatGPT is currently freely accessibly in a public beta, so I wanted to use the opportunity to evaluate whether I need to start looking for a new job anytime soon. After some more prosaic prompts to the system, I decided to try having it implement a little program. I thought that tic-tac-toe would be a nice experiment. So I prompted it to…
Long week - short note
Sometimes a single week has more things packed into it than a whole regular month. This week was one of them. Folks, take very good care of yourself. Boomtime, the 36th day of Confusion in the YOLD 3188
Leisure time, Curiosity, Book club
Leisure time is a luxury. For me it certainly was in the last days. That's why these notes come three days late. And I don't really see it getting very much better. But at least, recognising that I have a small chunk of it, is a first step to use it well. Lately I was thinking about the relationship between learning, teaching, schooling and curiosity, especially with regard to teaching computing.…
Dependecies, Writing process, Time budgets
One of the things that courses and books on software development generally do not teach is how to pick and vet dependecies. So often, before even one line of actual programming is done, tons of code from packages of varying proveninence and quality are pulled in, and it usually doesn't stop there. Any of those packages could turn out to be the next left-pad happens to be that package that some…
On the state of software development in general & coming to terms with having a lot of loose ends
This week I was pondering the question why the trade of software development seems to be ever more digressing to be a Red Queen's race . Maybe my perception, that it wasn't always like this, is just plain wrong. One example: I find the state of rapid application development tools to be quite lacking and I certainly hope that Visual Basic 6 will not remain pinnacle of RAD, but I see no single…
On unintended consequences
Consider the following scenario: an engineer demonstrates a problem and sketches a simplifying solution. The problem as such is accepted, but the proposed solution is rejected. The result is new work in the backlog that overhauls the existing functionality with something more complex. The new solution is slightly (but not essentially) more powerful. It maybe be better from a business/product…