2025

Django Admin’s handling of dates and times is very confusing

When you have admin users in multiple time zones, the way Django handles the input and display of dates and times is causing confusion. Here’s how you can improve things.

uv just keeps on getting better

It’s been three months since I migrated all my Python projects over to uv. And it’s only gotten better! Let’s look at two recent major improvements.

DocC and SPM need some love and attention from Apple

Apple’s DocC project and the Swift Package Manager have been missing pretty crucial features for years now. It’s time that Apple gave them some love and attention.

Saga... but in Python? Or TypeScript?

What would Saga look like if it were written in Python or TypeScript, rather than in Swift? Is it worth the effort to port Saga to another language?

Looking back at four years of Saga

I started building Saga, my own static site generator written in Swift, four years ago. Let’s look at the state of the project.

Looking at Django task runners and queues

I use django-apscheduler to run a queue of scheduled tasks. Now I also need the ability to run one-off tasks and that turned out to not be so simple.

Refactoring Svelte stores to $state runes

One pattern that I love to use in my SvelteKit projects is returning writable stores from the layout’s load function. Can we migrate this to the new $state rune?

First thoughts on Svelte 5’s runes

I'm very busy migrating a big SvelteKit project to Svelte 5's new runes syntax and I have to be honest... not a big fan of the increased number of lines, especially when it comes to the props.

2024

2024 in review

It’s the last day of the year, just in time to write my now-customary year in review article. Does anyone actually read these, or am I just writing them for myself? It doesn’t really matter either way, as I mainly do write them for myself. I do enjoy looking back at previous years and see what has changed and what has stayed the same.

Why I still choose Django over Flask or FastAPI

I started using Django in 2009, and fifteen years later I am still a happy user. When I compare this to the number of JavaScript frameworks I’ve gone through during the same fifteen years, it’s clear that Django is rather special.

Svelte 5 sites don’t work as expected in Safari 12 and 13

Quite recently I upgraded a Svelte 4 project to Svelte 5, and soon afterwards I found some problems inside of Safari 12 and 13 that needed a tricky workaround.

How to migrate your Poetry project to uv

So, like me you’ve decided to switch from Poetry to uv, and now you’re wondering how to actually migrate your pyproject.toml file? You’ve come to the right place!

Putting Svelte stores inside context for fun and profit

Solving problems by putting writable reactive stores in Svelte’s context.

Revisiting uv

Almost two months ago I compared Poetry with uv, and for me uv had some pretty significant drawbacks that kept me from switching over. The situation has changed quite a bit since then!

How to change MEDIA_URL for one FileField

I wanted to use a different MEDIA_URL for one of our FileField instances. It was very easy to do!

Django REST Framework versus Django Ninja

Let’s compare Django REST Framework with new kid on the block, Ninja.

Automatically deploy your site when you push the main branch

The best feature of Heroku is the ability to just push a branch, and it gets deployed. How do we replicate a workflow like that on our own server?

Trying out PDM (and comparing it with Poetry and uv)

After comparing uv to Poetry, I am trying out PDM. On paper it combines all the best things of Poetry and uv, without their downsides. How does it hold up?

How I configure my Django projects

There are many ways to configure Django, like multiple settings files or .env files. Here’s how I do it.

Validate PayPal webhooks using Python

Paypal’s documentation only shows a JavaScript example. How do you validate the webhooks in Python though?

Articles now with comments

I’ve added a comment section to the articles, powered by GitHub Discussions.

Poetry versus uv

Comparing two Python package managers: Poetry and new kid on the block uv.

Changing the way Django 5.1 generates admin list labels

Django 5.1 adds related field lookup to the model admin’s list_display, but with an annoying quirk. Let’s fix that!

Extend Django’s autocomplete widget actions

Extending Django’s autocomplete widget with a new action which copies the linked user’s email address to the clipboard.

SvelteKit architecture tip: return a writable store from your load function

How do you update content in real time when that content was fetched from the layout’s load function?

Hardening a web server against script kiddies

Webservers get hit by hundreds of thousands of requests to random (non-existing) PHP files. What can we do about this?

Quick review: 12.9” iPad Pro (2018)

I bought the 12.9” iPad Pro with the Apple Pencil back in 2018 and spoiler alert: I still use the iPad almost every day.

My one week with a Tesla

In December of 2023 my girlfriend and I went on an eight day vacation to Iceland, where we wanted to rent a car and travel the south coast. This seemed like the perfect chance to try out living with an electric car, since the charging infrastructure in Iceland is very good, and their electricity very cheap. So we rented a Tesla model 3 and let’s just say I have some opinions.

2023

2022

2021

2021 in review

Welcome to the end of 2021, a.k.a. the second year of the pandemic. Another year of not going abroad, barely seeing friends, playing Dungeons & Dragons via Zoom instead of at the table. A year of mild depression and feelings of loneliness. But also a year of hope when we all got access to the vaccines and when we didn't hear about Trump every day in the news. And last but not least: it was also a very productive year!

Working around HttpOnly cookie problems in SvelteKit

When HttpOnly cookies didn't work as expected in my SvelteKit project I had to find a workaround.

Saga 1.0.0 has been released

About ten months ago I wrote that I was confident that the API of Saga wasn't going to change a lot anymore, and that I'd release 1.0.0. Well, it's taken a little bit longer than I expected back then, but 1.0.0 has finally been released!

Vapor 4 versus Django REST Framework

Over two years ago I wrote an article where I compared Vapor 3 to Django REST Framework. It's time for a rematch with Vapor 4.

Architecting a SvelteKit app - and failing

I was working to architect a SvelteKit app so that it does as few requests as possible, from a central place, so that all subpages have access to the content. Sadly dealing with SSR makes it very hard to achieve my goals.

My one big complaint working with Vapor 4

I'm trying out Vapor 4 for a side project, and one thing that I am constantly running into is the amount of boilerplate and copy-pasted code. Are there no better solutions for this?

Interview with proglib.io

Recently I was interviewed for the Russian IT website proglib.io. Since it might be interesting for non-Russian speakers, here it is in the original English version.

WWDC21 keynote review

A new year, a new WWDC with once again new iOS, iPadOS, macOS and watchOS releases. If you ask me, I think yearly releases are overkill and really not necessary; I’d rather have Apple split off features like Weather, Maps, Notes and more into...

Mentee Question 5: What's the deal with coordinators?

A few weeks while ago in my how to get started article I mentioned coordinators in the “What architecture should I use?” section, and how they allow you to decouple your view controllers from one another, and improve the way you can test your code....

Mentee Question 4: When to use PassthroughSubject and CurrentValueSubject?

That’s a great question! And actually one I asked myself too, when I just got started with Combine. Let’s first explain what PassthroughSubject and CurrentValueSubject are though. Subjects are a kind of publisher that you can subscribe to, but can...

Mentee Question 3: How to know when multiple publishers completed?

In JavaScript-world, it's really easy to know when multiple promises completed: just use Promise.all. How do you do the same thing in Combine?

Automating your changelog and GitHub releases

In a short time I’ve created 25 releases for my static site generator Saga. For each release I’ve manually updated the CHANGELOG.md file, which is a bit tedious and easy to forget. I really wanted to automate this using GitHub Actions, which I was...

A review of Markdown parsers for Swift

A hugely important part of any static site generator is of course the parsing of Markdown content. The default parser for Saga is Parsley, a custom wrapper around a cmark fork. While I am generally quite happy with it, there are some problems.

Building my own static site generator, part 7: updates & the road to 1.0.0

In the past few days I’ve made some pretty substantial improvements to Saga, to make it work for me and my website, which is now built using Saga.

Building my own static site generator, part 6: replacing SwiftMarkdown

I've already replaced my own SwiftMarkdown package...

Building my own static site generator, part 5: replacing Ink and Splash

I've replaced the Ink and Splash dependencies with my own SwiftMarkdown package.

Building my own static site generator, part 4: a complete redesign

An unexpectedly quick fourth article about Saga, after a complete redesign of the API.

Building my own static site generator, part 3: thoughts so far

In the third and final part of this series about Saga I'm looking at the pros and cons of the current system and what I might want to change.

Building my own static site generator, part 2: API design

Part 2, where I'm looking back at the current API of Saga.

Building my own static site generator, part 1: inspiration & goals

In part 1 of a series of articles I'm looking at the inspiration behind my static site generator Saga, now available on Github.

Swift generics and arrays

I’m in the very early stages of building my own static site generator in Swift. I want the library to provide a basic Page type, that the user can then extend with custom metadata, and I need to be able to put Pages with different kinds of metadata...

Looking at the static site generator Publish

I'm taking a look at the static site generator Publish, written in Swift.

Mentee Question 2: How to get started

Resources for learning Swift and UIKit, what to build first, opinions on Unit Testing, and more.

Mentee Question 1: UIKit or SwiftUI

My take on the very common question "What should I learn or focus on? UIKit or SwiftUI?"

2020

Book review: Thinking in SwiftUI

A while ago I asked on Twitter which Swift-related book I should review next, and overwhelmingly Thinking in SwiftUI by the objc.io guys was chosen. An excellent choice!

Exploring two-way databinding solutions in UIKit

With SwiftUI we have the @Binding property wrapper that makes it really easy to create a two-way databinding between a form field and a model, but in the UIKit world it's slightly less easy. Let's explore some solutions.

Book review: Practical Combine

It's almost exactly 10 years since I wrote my last book review. Time flies! Also, it makes me realize that the way I've been learning has changed dramatically. I am much more guided by autocomplete and documentation within Xcode, and in-depth articles and videos about one particular topic, instead of reading books.

Connecting Stripe to Firestore via Cloud Functions and webhooks

After adding subscriptions in iOS via Apple’s Storekit, I have now also added subscriptions to the web client of Critical Notes, using Stripe (even though they have some serious drawbacks at the moment). Since it was a bit of a puzzle to get it...

WWDC20 review

A quick review of the keynote and State of the Union talks. Let's see which of my wishes have been fulfilled, and which SwiftUI problems have been solved.

A review of SwiftUI problems

I've been working with SwiftUI for almost half a year now, and in that time I've learned a lot. I love a lot about it, but there are also so many bugs and issues that need workarounds that it's kind of maddening.

User subscriptions on the web

As I am reaching feature-completeness of my side project Critical Notes, I need to add paid subscriptions to it. Users can already subscribe in the iOS app, but of course not everyone uses iOS, so I need to build something for the web client too.

WWDC20 wishlist

WWDC is just around the corner, and we're all waiting like little kids at Christmas to see what Apple is going to announce. Most of us also are hoping for specific changes, here are my top wishes.

Connecting Storekit to Firestore via Cloud Functions and webhooks

I've recently added subscriptions to my Critical Notes iOS app, using Apple's StoreKit. Here is how I hooked it all up to Firestore including server-side receipt validation.

Clean up Firestore and Storage when deleting a document

When you delete a document in Firestore, its subcollections and their documents are not automatically recursively deleted. Here is a simple Cloud Function that takes care of it.

After Vapor and Django comes.. Firestore

Over a year ago I wrote that I started working on a brand new side project, and that I was building the backend for that project. I started with Vapor 3, then made the same backend in Django REST Framework, and couldn't really choose between the two...

2019

2016

2015

2013

Review roundup: email clients for OS X

Email is a huge part of my my life and I need a client that accommodates my ways and habits. It needs to be fast and user friendly. It needs to support multiple email accounts. And it needs to offer proper Google Mail support: archiving email by...

Searching for a solution to back up all my pictures to the cloud

I have well over 35 GB of pictures, and after almost losing my hard drive (it started to behave very strangely but I was able to salvage all the pictures) I realised that I need to back them up in the cloud. I do usually share my best ones on...

Review roundup: iOS debug tools and inspectors

All of a sudden it seems there’s a big effort to create debugging tools for iOS developers. Some are free, they all have different features… Time for a comparison. PonyDebugger “Remote network and data debugging for your native iOS app using Chrome...

Getting started with programming

At least twice per year someone will ask me how he or she can get started with programming. With the economy down jobs are hard to find, but there’s always a need for developers, at least here in Iceland - so it’s no wonder that more people are...

iOS development: three years later

In April 2010 I started to work on my very first iPhone app. A new language, a new IDE, a completely new way of thinking about development (threads! memory! crashes!), it was very exciting. In these three years quite a lot has happened to us iOS...

JobControl is six years old

I absolutely love open source software. I use all kinds of third party libraries for iOS for example (installed via the open source CocoaPods project of course), which makes my life as a developer a whole lot easier. And in return I open source some...

Apple's worst iOS framework: MediaPlayer

When I started to work on Last.fm’s Scrobbler for iOS, I though it would be quite an easy app to create. After all, it’s basically a couple of lists of artists, albums and tracks, and all actual music playback will be done using the MediaPlayer...

The software I used in 2012

As a software developer, I use a lot of software and tools to help me in my job. In this post I’d like to list some of my most used software of the last year. Hopefully there are some gems that can help you as well! Xcode As an iOS developer, this...

2012

2011

Why is there no perfect browser?

I’ve used Firefox for a long, long time, back when I still used Windows pc’s, until the summer 2007. Chrome didn’t exist yet, Internet Explorer sucked and Safari was still Mac-only. Since then, I’ve switched browsers many times: from Firefox to...

Playing around with static site generators

Even though I’m quite happy with this website and its code, I want to rebuild it using a static site generator: you write your posts and pages with Markdown, write a couple of page html templates, and simply by pushing a new file to Git, your new...

Review roundup: the search for the perfect Python IDE (for Django)

When I first started working with Python in September 2009, I needed a good IDE. I quickly settled for Netbeans and I’ve been using it ever since, even though there are some things that really irritate me. But at least it works, and fits well in my...

My wishes for iOS 5

In June 2010 Apple finally added multitasking to the iPhone (the iPad had to wait ’til November to get iOS version 4) and with this resolved one of my biggest complaints about the operating system. And while I really enjoy iOS on the iPhone and the...

Django-CMS backend usability

Yesterday I wrote an article comparing Django-CMS, FeinCMS and Mezzanine. One of the conclusions was that while Django-CMS is the best CMS on paper, I don’t like its backend interface that much. I thought it would be a good idea to properly explain...

Django-CMS vs. FeinCMS vs. Mezzanine

When you need a content management system for Django, there is enough choice. Maybe even too much: the very helpful site djangopackages.com lists 13. Some are mature and very feature-complete, while others are barely more than a basic model and a...

Looking for a Django CMS which suits my needs

I need to build a content-based website for a client, in Django. Well, that’s easy right? Pick one of the content management systems available, build some templates and css, and ta-da, done. Since I have used Django-CMS in previous projects, that...

2010

My thoughts after having completed my first Appcelerator project

A while ago I set out to build my third mobile application. Only this time the client wanted not only an iPhone app, but one for Android too. So that’s why I turned to Appcelerator once again, after my failed first attempt. In case you don’t know...

Serving 5000 pages per second with Django

Okay, this website wasn’t slow and will never need to serve 5000 pages per second, but hey, it’s possible now! Oh right, and it was fun to play around with a nice caching system. Almost everything on mixedCase.nl needs to come from the database: the...

Once again I turn to Appcelerator

After I decided to create iPhone apps using just the iPhone SDK and the Objective-C language, I’ve created two iPhone apps that are available in the Dutch App Store. Development for app number three has started today, but no longer will I be using...

Book review: Head First iPhone Development

In a previous blogentry I wrote about some great online resources I found to get started with iPhone development. I read the C and Objective-C introductions, watched the first 12 or so episodes of the Stanford courses and did the assignments that went along with it. Well, at least I tried to do all the assignments, but they were not easy with just the information from the taped lectures. There is a ton of information in them, but are kind of boring to watch, and you don't learn that well from slides.

Getting started with iPhone app development

For a pretty long time I wanted to make an iPhone app, ever since the App Store opened really. But, I’ve never programmed for Mac OS, never done any C or C++ (let alone Objective-C). In fact, I’ve never created a desktop application, only working on...

Django 1.2, a great release

I’ve been playing with the Beta release of Django 1.2 (get it here) and I love many of the new improvements. I’d like to list the best and biggest new features, and also some problems I encountered while using it. Smarter if tag I was already using...

My quest for a mockup tool

A while ago I wrote that Goldmund, Wyldebeast & Wunderliebe is going start a new usability department. At the moment I am busy writing marketing texts and thinking about a new website for ourself. Last week I also looked for a nice tool for...

2009

Using Jinja2 templates in Django

In my previous post Things I “hate” about Python and Django, I said that one of the things I “hate” about Django is its template language. While very easy to use and pretty extensible, it’s missing some important (and basic, to be honest) features...

Things I “hate” about Python and Django

I have been a PHP programmer for the last 9 years, and only in September of 2009 I switched to Python and the Django framework. While I really love the Python language and the Django framework (especially compared to something like the Zend PHP...

Using the Google Visualization API in Django

In a project I am working on, I need to show a lot of graphs and charts. Together with the client we chose to use the Visualization API by Google, which provides a Python library, offers many different kinds of charts and very important: the data is...

How to dynamically add fields to a Django model

For a project I needed to create a Django model from a list of fields that were defined somewhere else. It took me hours to get this to work, so to save you the time, here is the solution: fields = ['field_a', 'field_b', 'field_c'] # the base model...

Switching from MobileMe & my short adventure with Google App Engine

I can’t remember how long ago it’s been that I’ve used a free email address like hotmail, yahoo or gmail. For more than 8 years I’ve used my own domain names to host my email. In the very beginning on my own little server at home, later on a “real”...