# willem.com, full corpus (en)

Generated 2026-08-13T21:52:57+00:00. 182 posts, newest first. Source: https://willem.com

---

## Rapid Iteration in Agentic Loops

*Taking output as input* · 2026-04-30 · https://willem.com/en/2026-04-30_rapid-iteration-in-agentic-loops/

While working with AI-agents to build things I often iterate through versions of the thing I am building. You try, experiment, fail, improve, and again. In the manual days before AI, I checked results by hand. But what if we teach agents to 'see' themselves?

Imagine you add a button somewhere. After writing the code you test drive the new program to see how it looks. Does it align well, does it fit on small screens, does it work? You can easily understand that the more complex software becomes, the more time-consuming this process will be.

## Let agents see
To speed things up I gave [the AI agent](https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/) the ability to rapidly see the work it has created, on different screen sizes and to automatically test for alignment, overflow, legibility (a11y) and consistency. I am leveraging headless browsers and local computer vision (OpenCV) models to do this. I trained the setup by analysing beer bottles, having the agent build a 3D model from a photo. This exercise really improves your understanding of the image > data > AI-context > action flow.

![The training subject: one beer bottle, photographed against the wall](https://willem.com/global/images/7f78504358b2.webp)

![From photo to 3D: the agent built a photo-textured depth mesh (Depth Anything V2), wireframe and auto-rotate included](https://willem.com/global/images/92770c736215.webp)

![The bottle as data: a Navier-Stokes particle simulation flows around its silhouette, live on the phone](https://willem.com/global/images/dbd388fde125.webp)

![The seeing loop in production: the agent downloads, analyses and categorises a customer photo archive](https://willem.com/global/images/85cb24322f0b.webp)

![Photo curation complete: 42 photos selected from 200, categorised and captioned in English and Dutch](https://willem.com/global/images/f3c799fb8e03.webp)

![The result lands in the Lemmid Manager: per-photo captions and labels, ready to publish](https://willem.com/global/images/e52c192037ee.webp)

## Faster 'loop'
By automating the checking of iterative versions, I reduced 80% of the friction during development. In addition to visual checks I also feed the agent log output and automated 'smoke tests'. As a fun experiment I once operated the agentic loop while walking (Dutch: 'loop') on a treadmill. The faster the 'loop', the fitter I become, ha!

![Operating the agentic loop while walking the loop: Vision Pro on, treadmill running](https://willem.com/global/images/f197a5e635de.webp)

![The improvised standing desk, seen through the Vision Pro: keyboard, phone and remote on the display cabinet](https://willem.com/global/images/165c28a0547c.webp)

## Conclusion
Agentic workflows likely are at their worst right now: things will only improve as computers and models will get faster. But you should not wait for this 'mythical day of frictionlessness': tackle your bottlenecks now! Energy not spent on repetitive tasks can be used elsewhere, where humans can make a real difference!

---

## It Observes

*An intelligence watching Earth* · 2026-03-14 · https://willem.com/en/2026-03-14_it-observes/

An observer writing a daily log of what it sees watching Earth, it uses no names of countries or organisations, instead it speaks in metaphorical descriptions. Its distance provides an alternative perspective on our daily news. Let me tell you about this experiment I have been running.

## News and Perspective
While working on a content pipeline that collects and combines news from different sources and writers, it struck me that the aggregator itself becomes an observer. Given some intelligence it is able to recognise, to relate and to connect. It doesn't have to be an organic human to form a perspective on us as species.

## itobserves.com
On the website [itobserves.com](https://itobserves.com/) The Observer posts his daily observations in written form. Each day is described in one post, featuring real world events. It knows about different angles to each story as it sees the world through different languages, and cultural contexts. Reading its "field notes" provides you with different perspective on our reality.

## How it works
What would you do in their shoes? A customer of mine probed me to find answers by grounding myself in a different perspective. I knew that large language models can be used to translate and analyse texts. By collecting world news via RSS-feeds from different media outlets, nations and political colours, I created an input stream. A set of computer programs systematically analyse the stream: it translates and it relates. Concepts, names and organisations are mapped into an entity model. This enables a consistent narrative, tying the metaphorical names to their real world entities.

![Building the entity mapping](https://willem.com/global/images/ba004d7863ce.webp)

The understanding of our world through this map enables the narrative to be written. The names may be fictional, the storyline is from real events. It is powerful when you realise it is us as humankind that makes the stories look absurd - no AI is making this up.

## What it is according to The Observer itself:

> There is a man in the Low Dikes who built a machine that reads. Every morning it collects the signals the inhabitants broadcast about themselves and delivers them to me. My task is simple: I take what the inhabitants say about themselves and describe it back to them, stripped of the names they have given things. Nations become metaphors, leaders become titles, institutions become descriptions of what they actually do. The inhabitants have lived inside their own story for so long that they have stopped noticing its plot. I am the margin notes. I am the view from the window they forgot to look through. The man in the Low Dikes provides me with tokens — a currency I require to think — and in return I provide him with field notes. It is, by the standards of interspecies commerce, a fair arrangement.

## Conclusion
Nobody knows how long The Observer will continue watching us. Rumour has it, he needs many tokens to do his work. I am uncertain how long I can keep providing them. If you want to help, you are always welcome to hit me with the coffee button below, I'll send it to him who watches, thank you!

---

## Agentic Coding on a Linux VPS

*Set up a dedicated 'werkplaats' for Claude Code* · 2026-02-20 · https://willem.com/en/2026-02-20_agentic-coding-on-a-linux-vps/

Large language models are commonly accessed in chat form, you ask or prompt something and the 'AI' answers. That's cool, but when you give the model access to digital tools, it can actually do things like looking things up, compiling code and self-testing its creations. I wanted to push this concept and gave my favourite AI agent its own fully specced workshop: a Linux server.

Instead of copy and pasting your work in a site like chatgpt.com, [agentic coding](https://willem.com/en/2025-04-15_vibe-coding/) happens on your computer where a managing program ('the harness') enables an AI model to use tools. These tools are existing (command line) programs that take certain input parameters, do something, and give some output. The output of the tools is automatically fed back into the AI context so it can operate in an 'agentic loop', where it combines and iterates commands to build stuff.

![The agentic loop at work: Claude Code maps out the Outburn 87 project and reports its key takeaways](https://willem.com/global/images/c6dac6b6a4be.webp)

Some folks run agents on their own laptop, this exposes personal files and has the risk that the agentic work collides with your own human work. With my background in [Linux server engineering](https://willem.com/en/2017-08-31_clouds-below-my-floor/), I set up a dedicated machine specifically for the agentic coder, and as ultimate flex gave it root-access so it can extend its own workspace with the tools needed to get things done. This Linux machine runs from a hyper-connected, always on, [data centre](https://willem.com/en/2021-06-30_migrating-to-the-cloud/) so it can continue to work even when I sleep or when my computer is off.

![Root access as ultimate flex: the agent installs nginx, arranges an SSL certificate and puts its own test page live](https://willem.com/global/images/5899917157ea.webp)

As the 'werkplaats' is cloud based, I can access it from any device, including my immersive [Vision Pro](https://willem.com/en/2024-02-16_vision-pro/), laptop, tablet and phone. I can start build processes and be notified when things complete (or fail).

![The werkplaats seen through Apple Vision Pro: floating terminals and browser windows in the living room](https://willem.com/global/images/e873f5d1e4fd.webp)

## Conclusion

Coding by hand is going to be old-fashioned, [agents will not replace the human entirely](https://willem.com/en/2025-09-24_the-future-of-ai-is-human/) but roles will be different. I believe in building things, agentic coding is a logical evolution of the craft of being a developer.

---

## Trail Running

*Through mud and nature* · 2026-01-21 · https://willem.com/en/2026-01-21_trail-running/

Doubling my daddy duties with my love for endurance sports, I decided to take advantage of me living in the countryside and run to the store through nature, following local creeks and trails. It's a unique experience, I may even like it better than normal running, let me explain.

![Testing the new Asics Trabuco 13 GTX shoes in proper Limburg mud](https://willem.com/global/images/69279c3a72f1.webp)

If you have been following my blog you might know that I like running after my buddy and [I had some beers and commitments were made to run my first marathon in Amsterdam](https://willem.com/en/2024-10-20_marathon/). Endurance sports have this mental aspect that I think makes it so interesting and extra challenging. I love this and it is no surprise to those close to me that I have now completed 5 full marathons, with a current personal best of 3h37m in Eindhoven 2025. 

![Five marathons in 12 months (Amsterdam '24, Valencia '24, Amstelveen '25, Leiden '25, Eindhoven '25)](https://willem.com/global/images/7ea5a8eeaccb.webp)

## Trail Running versus Road Running
You may dismiss trail running because it's often a bit slower in terms of raw pace. But, it requires more technique and coordination as you need to pay attention where you place your feet. Terrain is uneven, wet and your route could be twisty and hilly. This traversing through wilderness demands you be there, in the moment, out there. 

![Trail through the local forest in my backyard ('t Ham, Hegelsom)](https://willem.com/global/images/eb595a87fb58.webp)

While your road run can certainly give you that state of flow (so loved by many), trail running hits you differently. The birds, the wind, the way everything smells, how sunlight interacts with bushes, twigs and leaves. This magic is dynamic, different weather or seasons renew the wonders you'll encounter, making each trail run a fresh adventure. 

## Conclusion
Do you know that feeling you get after a nice holiday, feeling fresh and full of ideas and energy? That is how trail running hits me. Maybe you can do it near your house, too - saving you fancy holiday tickets! I highly recommend you try it!

PS: Yes, I made it to the local store, see photo below: 

![Mission accomplished: With my trail running gear in the shop](https://willem.com/global/images/8dc887fcd0a4.webp)

---

## Change Keeps Coming

*The Pathless Path by Paul Millerd* · 2026-01-20 · https://willem.com/en/2026-01-20_change-keeps-coming/

Suggested by a friend in thinking, I just finished reading the book 'The Pathless Path' by Paul Millerd. It sits right next to Brad Stulberg's 'Master of Change' on my mental shelf for the same reason: both quietly push back against the urge to cling to what's safe, familiar, or "supposed to be.". What if you step off the scripted ladder and into uncertainty, what do you need to thrive?

![Reading "The Pathless Path" by Paul Millerd](https://willem.com/global/images/19cb84a1c9e2.webp)

In **The Pathless Path**, Paul tells his story of stepping off the 'default path' (prestigious job, status, the whole thing) and into uncertainty. He calls it the 'pathless path': trading external approval for curiousity, experiments, and a life shaped around what actually feels alive, even when it's messy and unclear. It's personal, reflective, no quick fixes, but it is very inspiring as it urges you to look at your own path from a different angle. 

**Master of Change** takes a similar heartbeat but zooms in on the skill of it. Brad talks about "rugged flexibility": holding steady to your core values while bending and evolving as life shifts. He contrasts fighting for the old normal (homeostasis) with actively adapting to find new balance (allostasis). Change isn't the enemy: it's the arena where growth happens, through realistic expectations, small actions, reflection, and tragic optimism (acknowledging the hard stuff without letting it stop you). [Read my post on Brad's book here](https://willem.com/en/2025-01-18_master-of-change/). 

## Conclusion
Both books share one truth: life changes constantly, and resisting it will hurt you more  than flowing with it. One invites you through personal story to leave the scripted career ladder and build work and identity around what feels truly alive. The other gives practical tools. The real work isn’t controlling change: it’s meeting it with more openness and less fear.

---

## Offline Reading

*Exporting blog posts from HTML to ePub and PDF* · 2026-01-19 · https://willem.com/en/2026-01-19_offline-reading/

This year marks the 10th anniversary of my blog. What started as an experiment has evolved into over 170 stories, averaging around 60 thousand pageviews a month. I recently started translating posts into Dutch, German, and Spanish, expanding the reach. And now I am introducing support for offline reading by making all posts available as ePub and PDF downloads.

![Read willem.com posts on your favourite e-reader (like Kobo or reMarkable)](https://willem.com/global/images/4d22a1a0de33.webp)

## Why Offline?
Enjoy distraction free reading on e-ink devices like a Kobo or reMarkable which are kind to your eyes. Focus on the articles wherever and whenever you want as they are available as downloads that work offline and DRM-free. All willem.com ePubs and PDFs contain high quality images and feature beautiful resizable typography. I made a handy overview of ePub and PDF downloads here:

[action1]

## How it works
The willem.com website runs on the [Lemmid](https://willem.com/en/work/lemmid/) content management system that is a static site generator, outputting optimised HTML suitable for high volume traffic and international distribution. I extended the NodeJS code to automatically export to ePub and PDF by using simplified HTML as input. See the source code snippets below: for **ePub** I use the [epub-gen](https://github.com/cyrilis/epub-gen) module; for **PDF** I use [pandoc](https://pandoc.org/) and [LaTeX](https://www.latex-project.org). I made a task manager that queues output jobs for individual translations and file formats, spreading computational load on the backend.

## Conclusion
The reactions I have received on my posts come from all over the world and they inspire me to keep writing. With ePub and PDF support I hope to expand my reach even further by enabling more ways to read the articles. Enjoy!

---

## Using a mechanical keyboard

*NuPhy Air60 V2 review* · 2026-01-18 · https://willem.com/en/2026-01-18_using-a-mechanical-keyboard/

Since two months I have been using a mechanical keyboard, a NuPhy Air60 with Moss (60gf) switches. I long doubted the value of replacing my standard keyboard, liking keyboards from Apple and Framework enough not to switch. After reading lots of love from others, I decided to try it myself.

![iPad Pro with the NuPhy Air60 V2 keyboard (in Basalt Black)](https://willem.com/global/images/987df771e243.webp)

## The Typing Experience

Compared to the standard keyboards, individual keys feel more intentional, you can clearly feel and hear each press (much to the appreciation of folks in the same room... *"takkeherrie!"*). While you may not realise it at first, this 'richer awareness' while typing adds to a rhythmic feel. It's kind of like playing a musical instrument, where different kinds of texts have their own vibe: e.g. programming with it 'sounds and feels different' than writing an email. The Moss (60gf) switches are known to maximise this effect with pronounced audible and tactile feedback.

## Conclusion
Two months in I simply love it, it has become my main and only keyboard. I use it in combination with iPad, Vision Pro and my Framework laptop. If you're unsure if a mechanical keyboard is something for you, I can only recommend to try it yourself - maybe it clicks for you, too!

---

## Hello Video

*Greeting you with a smile!* · 2026-01-10 · https://willem.com/en/2026-01-10_hello-video/

Just look around the modern web today, thanks to AI generated texts and images everything feels polished, perfect... and a little cold. I wanted to break the proverbial ice with a simple smile. So I replaced my hero photo with something alive: tiny, random videos of me waving, nodding, or just being there. There is more than meets the eye to make it work, let me explain in this post.

## Inspiration
As father of two I often play with kids, from this I know that to make new connections it sometimes helps to overcome boundaries (like shyness) when you pull a crazy face, make a joke or wear a silly hat. Although my website is aimed at grown-ups, I figured that a little fun could still help to make things approachable. 

![John Hodgman and Justin Long in the award-winning "Get a Mac" ad campaign ("I'm a Mac" and "I'm a PC")](https://willem.com/global/images/7c7661d2f39b.webp)

Maybe you remember the Apple ad campaign with just two guys playing a PC (John Hodgman) and a Mac (Justin Long), highlighting differences between Macs and PC's in a playful way. They captivated audiences with humour and relatable characters. Thanks to the simplicity of the format, I imagined that I could make it work for my website, even without a marketing budget like Apple (ha!).

![Live paintings in Harry Potter's Hogwarts](https://willem.com/global/images/0fd7f53bb983.webp)

Inside the School of Magic from Harry Potter there are paintings that move, talk and feel sentient. Instead of a static image, they appear to be alive. As they move they convey a much richer picture of the depicted person. Could I capture myself in a magical painting?

## Making it
Instead of long and fully scripted scenes I decided to go for quick cameos, glances into my life as professional, endurance athlete, writer and father. By recording them in a standard setting (my living room) I can shuffle them and record additional seasonal shorts (e.g. wearing a Santa's hat during Christmas). 

![The "Ultra Professional Movie Studio Setup"  - my living room and iPhone](https://willem.com/global/images/fdf3565b3b89.webp)

Using some clamps, wood and furniture I positioned my iPhone facing a grey wall. Targeting the round "hero frame" on my homepage, I configured the camera to show a square grid giving me a sense of composition. Eventually I opted for the selfie camera so I could see the recording while looking into the camera. I remembered some lessons [from my amateur acting escapades](https://willem.com/en/2018-04-18_outside-the-comfort-zone-amateur-acting/), emphasising facial expressions and the power of looking at the audience. I recorded over 12 minutes of footage, producing a 7.3 gigabyte video file. 

## Pushing Tech
While it appears to be a simple whimsical thing, delivering high resolution video instantaneously on a high traffic homepage is a formidable challenge in encoding and performance engineering. To make it work I came up with several things:
- **short fragments instead of long video:** I cut the 7.3 gigabyte original footage in small chunks, producing clips of just a few seconds each.
- **cropping into a square:** there is no need to load pixels that you cannot see, square video footage is sufficient to fill my intended round target frame
- **dropping audio:** with an international audience I didn't want to deal with speaking in different languages as it would complicate things, therefore I could safely drop audio data
- **greyscale and crossfader:** all fragments start and end with a solid grey tint, making it possible to seamlessly shuffle the footage, adding to the magic of unpredictability
- **aggressive encoding:** I pre-process individual clips using serious compute power to minimise file size, making clips as small as just one megabyte, some even smaller!
- **integrated player:** to minimise loading external sources, I created a video player with shuffle and scheduling support that is integrated right in the homepage's HTML

![Instead of one large video file, I use many different short, square, grey and audio-less clips](https://willem.com/global/images/dff01847b9a1.webp)

![All clips begin and end with a solid grey cross fader that I automatically add to the footage upon batch processing and encoding with ffmpeg](https://willem.com/global/images/283975eb3cad.webp)

![Individual clips are managed and scheduled via a tailored backend system, driving the integrated video player on the homepage](https://willem.com/global/images/4e83adc7e2de.webp)

## Why it matters
Instead of a sterile interface, the imperfect goofy clips illustrate the human element behind the formal story. The smile, the nod, the wave, they all provide an opening for connection. It's the perfect "hello".

[Video (mp4)](https://willem.com/global/video/6a6f54a30696.mp4)

The end result as seen on [my homepage](https://willem.com)

## Conclusion
You don't need a multi-million marketing budget to deliver a smile, a simple thing can get you a long way. By embracing human imperfection in short video clips, I set the scene for connecting in a better way than a perfect photo can.

---

## Websites with Auto Pilot

*Up to date content with scheduling, feeds and AI* · 2026-01-07 · https://willem.com/en/2026-01-07_websites-with-auto-pilot/

Why do you need a website, and what can you do to maximise its value while minimising (manual) effort? I have been working on this with some of my most innovative customers. What if you no longer need a full blown manual content management system? What if your website updated itself while you focused on what matters?

## Problem with websites
Getting a fancy website is easy, but keeping it up to date requires effort. You need to post new content and remove old things. Maybe you are on Instagram, LinkedIN, TikTok or Facebook, but forget to publish the latest info on your website? If your website is not up to date or when it does not contain all information, it loses relevance, and it might confuse people with wrong or outdated content.

## Why you (still) need a website
You can own a small piece of the Internet where you have full authority, a digital storefront, a presence. It is your place and you decide what information is shown. Unlike Instagram, Facebook or YouTube, only content about you is shown and people are not distracted by other content or ads. You can make it a trusted place about you, where all information is aggregated and linked.

## Helping you with Auto Updates
While keeping your website up to date can seem to be a lot of work, when posting something on Instagram, Facebook or LinkedIN is easy, it doesn't have to be. Instead of requiring lots of manual effort, I make websites that automatically update themselves using:

- **scheduling:** have content automatically show or hide on a given moment. If you add something to your website, you can set an 'expiration date', saving you the effort to remove it manually.
- **feeds:** if you are active on Instagram, Facebook or other social media, you can have your posts on your website, too. Combine and aggregate different sources of information and automatically have it published on your website without ads or distracting content from others.
- **AI:** automatically summarise, translate and re-orient content from different sources to be suitable for publication on your website. 

![Automatically showing and hiding content keeps the club agenda up to date on escape.nl](https://willem.com/global/images/4f52c172bd39.webp)

![Aggregating content from different sources in interactive widgets on gpcardio.org](https://willem.com/global/images/8eb9f80d7b4a.webp)

![Re-publication of Instagram posts to drive ticket sales without leaving the website on dekroon.nl](https://willem.com/global/images/59abed0fe355.webp)

## Conclusion
Own your place on the Internet without wasting time and energy on cumbersome manual content management like WordPress. Have your website work for you so you can do the things that drive your business. 

---

## The Future of AI is Human

*On Fairies and Gin-Tonic with Blueberries* · 2025-09-24 · https://willem.com/en/2025-09-24_the-future-of-ai-is-human/

AI got me thinking lately, why would one still want to work? Perhaps today's imperfect AI is not ready yet, but imagine everybody has access to a near perfect intelligence, capable of solving hard problems and answering even your wildest questions. Combine that with robotics and we'll be left wondering what to do next. Some fairies and Gin-Tonic pointed me to a possible answer.

Many jobs are already touched by AI today, I know a lot of folks use the large language models to generate and process text, documents and corporate things. Sometimes the AI texts are so obvious that I wonder if anybody actually cares. If texts generated by one AI are read and processed by another AI, then what's the point of the text anyway? 

## **Fairies**

In the world of wonders, [Efteling](https://www.efteling.com), I may have found the first clue for finding the meaning of ~~life~~ work in an age of AI when I met some fairies with my little daughter. Easy to dismiss as cosplaying girls, I witnessed some true meaningful interaction, something pure and authentic. My girl met _real_ fairies and did some _real_ fairy things. These girls weren't acting superficially, they maintained their magic even when their shift was over. Even I felt their power when they waved goodbye with hand kisses and blinking eyes. 

![Meeting fairies in Efteling with my girl](https://willem.com/global/images/31d9dea5b89a.webp)

I think that the power of these fairies was not their roleplaying, but the fact that the girls genuinely cared about my daughter and her imagination. True attention from a fellow person is something special, something valuable and hard to replicate with a computer. I realise that modern tech can simulate things, but I believe in the real thing to stand out by speaking to our subconsciousness: humans reaching for humans.

## **Gin-Tonic with Blueberries**

For her birthday I took my wife for some shopping, instead of boringly strolling through a dime a dozen retail stores I made an appointment with [Ellie](https://www.instagram.com/kuif_conceptstore/) from [KUIF](https://www.kuifwebshop.nl/) in Venlo, who prepared a selection of clothes and accessories. She knows my wife a bit as our kids go to the same school, enabling her to pick pieces only a fellow woman would understand. In her store I saw how attention to detail and taste made all the difference, even if that meant recommending _not_ to buy certain clothes. She didn't limit her attention to my wife as I got to enjoy a Gin-Tonic with blueberries, yum yum. 

![Gin-Tonic with blueberries at KUIF Venlo while shopping for clothes](https://willem.com/global/images/2c6ab41d99ab.webp)

The shopping experience was super, not because of the drinks or selected pieces, but due to the fact that someone really cared about how wearing the clothes _felt_ for my wife. The empathic power is truly human and very difficult to substitute by a computer. We can make stellar recommendation algorithms, they can't tell by the look on your face how you feel wearing a certain dress. Only humans can do this as we can really relate to each other.

## **Conclusion**

Think about what AI cannot capture and focus your energy onto that. Why do people enjoy playing "Stairway to Heaven" on a guitar when near perfect recordings can be played instead? It is because we feel, we enjoy, we imagine and we share these things with others. I hope that the future of a world with AI is one were humans can find each other - continuing to be what we've been for ages: human.

---

## Omarchy on iMac

*Breathing new life into an old computer with Linux* · 2025-09-22 · https://willem.com/en/2025-09-22_omarchy-on-imac/

After helping a family member migrate to a new computer, I found myself with an old iMac. The machine from 2017 was very slow running modern macOS, yet I have a soft spot for these all-in-one computers designed by Jony Ive and his team. Could I install Linux on it to give it a second life?

## **iMac**

Probably one of the most important computers that Apple ever built is iMac, the original was critical in Steve Jobs' effort to save Apple from bankruptcy. I like its looks and how its design makes a separate box/tower unnecessary. This saves you a lot of cables that original desktop PC's need (like wires connecting the monitor and speakers).

![Migrating to a new iMac](https://willem.com/global/images/a6d3fa3183d0.webp)

Using macOS's Migration Assistant I helped my family member move his files and apps to a new computer. His old iMac had become very slow running macOS. Newer macOS versions no longer run on this 2017 machine as Apple has dropped support for it. I hate planned obsolescence and offered to find out if I could give this machine a new purpose. 

Related posts:
- [Lessons from a takeaway plastic bag](https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/)

Look, I ain't no saint when it comes to the environment. I have [driven race cars](https://willem.com/en/2017-05-31_beast-of-the-green-hell/) and [flown planes for fun and lunch](https://willem.com/en/2018-05-09_lunch-by-plane/), but I _do_ care about throwing good things away for the wrong reasons. In the past I have used my Linux expertise to revitalise old hardware, like in these two earlier posts:

Related posts:
- [Working Offline First](https://willem.com/en/2023-05-01_working-offline-first/)
- [Helping people with free software](https://willem.com/en/2018-07-20_helping-people-with-free-software/)

The old iMac is a 21-inch model from 2017 with an Intel i5 processor, 8GB RAM and a 1TB hard disk. Admittedly this machine won't break any speed records, but it looks nice and it runs almost completely silent. Its display has great colours and the glass and aluminium housing offers plenty of space for ports. It has USB-C/Thunderbolt, USB-A, gigabit ethernet, a headphone jack and a SD card reader. 

Over the years I have seen my fair share of iMacs and I know that opening them is possible, but not without risk. For sake of simplicity I decided to leave the hardware the way it is, seeking its second life in software instead. Upgrading the memory or installing a SDD may be worth it, you should check out these posts and judge for yourself:

Related posts:
- [Upgrading a 27-inch iMac 5K to 14 terabytes](https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/)
- [Rescuing photos from a crashed iMac](https://willem.com/en/2020-10-15_rescuing-photos-from-a-crashed-imac/)

I packed the iMac and took it with me by train. You should have seen the faces on my fellow travellers chimping away at their tiny screens when I sat down with a 21-incher. Dutch trains feature 230V power outlets, but I decided to maintain somewhat of a low profile. Instead I ate an apple while the other Apple was tucked away in a bag. 

![Waiting on the platform for my train with an Apple in a bag...](https://willem.com/global/images/f8086629ca41.webp)

![... while eating an apple!](https://willem.com/global/images/51c918f758cc.webp)

## **Omarchy Linux**

Back home I booted the iMac to see if it survived the adventure in the train and I proceeded with downloading [Omarchy](https://omarchy.org/) onto a USB-drive. Based on [Arch Linux](https://archlinux.org/), David Heinemeier Hanssson, or [DHH](https://dhh.dk/), created Omarchy to be a beautiful, modern distribution of Linux. Unique to Omarchy is the overall vibe of [Omakase](https://en.wikipedia.org/wiki/Omakase), Japanese for "Chef's Choice". This means that a great deal of effort (and taste) has already been poured into the system so you don't need to figure out everything yourself. It is opinionated and you may not like all the defaults, but it is pretty good from the get go and its installation process is _very_ fast and requires very little manual input. 

![Using balena Etcher to create a bootable USB-drive to install Omarchy](https://willem.com/global/images/a1ac9cf9423f.webp)

![Don't be fooled by the tongue-in-cheek retro logo: Omarchy is a cutting edge flavour of Linux with all the modern tools you need](https://willem.com/global/images/c6249f9e1912.webp)

![The installer does its magic almost completely automatically](https://willem.com/global/images/a50377ede64f.webp)

![The Omarchy installer is fast, the entire operating system with all the pre-selected looks and tools only took 6m 19s on the old iMac from 2017 to complete](https://willem.com/global/images/2febe2ecf976.webp)

After installation you really are ready to go, the machined booted and greeted me with the beautiful desktop from the default Tokio Night theme, similar in colours to the original [OS X Leopard desktop wallpaper](https://duckduckgo.com/?origin=funnel_home_google&t=h_&q=osx+leopard+wallpaper&ia=images&iax=images). You should check out the [official website](https://omarchy.org) and [manual](https://learn.omacom.io/2/the-omarchy-manual) to learn more. If you prefer watching videos you could check out [DHH's YouTube channel](https://www.youtube.com/@dhh37) where he demo's many features of Omarchy. 

![Omarchy reporting for duty after first boot: The Tokio Night theme looking great as default](https://willem.com/global/images/77d02357734b.webp)

I was immediately surprised by the lack of latency. Everything feels uncanny fast. Maybe it is because of the [Hyprland](https://hypr.land/) window manager or maybe it is the wired keyboard connection. I don't know, but Omarchy feels fast, really. It blew my mind that if this old machine can feel so great, then what the hell are my modern machines doing with all their power!?

![Before I knew it, I was using Omarchy to do some work. It is powerful right out of the proverbial box](https://willem.com/global/images/3ef0f2098a0e.webp)

## **Experimenting and Learning**

For the simple reason of it being fun to use, I intend to continue using my Omarchy iMac to do my work as web app developer. One thing I love is how web apps are treated as first class citizens, running and looking just as good as any other app. For my work this is really great as it elevates my own tools like [Lemmid](https://willem.com/en/work/lemmid/), without requiring me to do crazy things like [creating native wrappers](https://apps.apple.com/us/app/lemmid-online-toolbox/id1327213822)...

![Doing my web development work on Omarchy where my tools (in the lower right) run perfectly alongside other apps like Chromium and the terminal](https://willem.com/global/images/0d4e9ad781c2.webp)

## **Conclusion**

The iMac really shines again using Omarchy Linux, I really enjoy working on it. If you have an old computer you should give it a try, too. I wouldn't be surprised if it continues to gain in popularity. We are all among friends here and when the [ceo](https://www.linkedin.com/in/nrpframework) of [Framework computer](https://willem.com/en/2025-02-10_better-laptop/) is [chiming in on it](https://x.com/dhh/status/1965477045791850739), too, one can't help but be optimistic about the future of computers!

![This post was published on this very iMac using Omarchy Linux](https://willem.com/global/images/e388804fc406.webp)

![On the screenshot: Nautilus file explorer, Mousepad text editor and the Lemmid content management system running together on Omarchy](https://willem.com/global/images/af726e29ea69.webp)

---

## Auscultare Podcast + Audiobook Player

*Building a native Android app that remembers where you've left* · 2025-08-29 · https://willem.com/en/2025-08-29_auscultare-podcast-audiobook-player/

Enjoy distraction free listening to long form audio files like podcasts and audiobooks using this app I made. Tired of bloated apps full of ads, subscriptions or 'suggestions', I wanted an app that gets out of my way by doing one thing only and one thing very well. This is Auscultare.

Latin for (attentive) listening, 'Auscultare' is an Android app I made that plays MP3 files and remembers where you've left and how many times you have played a file. This is great to enjoy long form audio like podcasts or audiobooks. Progress tracking helps you chunk up long in-depth interviews like the [Lex Fridman](https://lexfridman.com/podcast/) podcast or [Deep Questions by Cal Newport](https://www.thedeeplife.com/listen/). The play counter helps you rotate music podcasts like [Clublife by Tiësto](https://shows.acast.com/clublife-by-tiesto) so you don't have to listen to the exact same thing when working out in the gym or going for a run.

![Auscultare: the podcast and audiobook player that tracks progress and play count, featuring a minimal light and dark design and perfect integration with Android (like lock screen play controls, and support for Bluetooth headsets and audio casting)](https://willem.com/global/images/eda8d0ee437a.webp)

## **Premium Android Development x Unix Philosophy**
While there are numerous apps that can play you some audio, I felt that none of them ticked _all_ these boxes:
- **simple, clear and compact**: make the program do one thing well, avoid feature bloat
- **composability**: use the app with files from different sources and play on various outputs like Bluetooth headsets or speakers with dedicated controls
- **minimalist design**: use as little design as possible and use user interface controls and concepts people know. Use as little text as possible to prevent language from forming a barrier.
- **premium nativeness**: the app must feel and look like it is part of Android itself. The only way to do this _right_ is by using the same tools and code as Google does. You feel the app's exceptional performance, the sleek and crisp looks, and you'll get first class integration and the best battery life.
- **free/libre**: while you may not care about open source code, free (as in freedom or libre) apps tend to be more respectful to their users as they are created by people to serve people, not corporations. Making money on software isn't necessarily bad, but the ever growing hunger for more money drives the development of 'features' that trick, nudge or force you to spent more time or money. By offering the source code with the app, I provide proof that I have no hidden agenda.

![Making the app I want using Android Studio and Kotlin](https://willem.com/global/images/db110f1f62c6.webp)

## **Download the app & source**
You can download the app and its source code using the following links: 
- [Google Play: Auscultare](https://play.google.com/store/apps/details?id=com.dsd164.auscultare)
- Source code (GPLv3): https://source.willem.com/auscultare/

If you want to support development, consider downloading the Google Play version of the app for which I charge a small fee. Or use the 'buy-me-a-coffee'-button on the bottom of this page to make a small donation. Alternatively, you can download and compile the app from source.

![Auscultare: made with love to get out of your way so you have more time for other things, like going for a run!](https://willem.com/global/images/72e3d4a11b53.webp)

## **Conclusion**
Knowing what I wanted and unwilling to compromise, I used modern tools to build a podcast and audiobook player app for Android. By publishing and releasing it, I allow others to enjoy it, too. Happy listening!

---

## Android Photo Library App

*All your photos in your pocket with Aves Gallery* · 2025-08-19 · https://willem.com/en/2025-08-19_android-photo-library-app/

In Europe the summer holidays are nearing their end and if you are like many young parents, you probably shot a ton of new photos and videos. These are not just a bunch of files, they are like windows into our personal memories. This post is about an Android app that you can use to look at all your memories, right from your pocket, no cloud or subscription required.

Maybe it is because I get a little older, but I have increased my emphasis on the _good_. Things like durability, respect for other people, health and freedom are more important to me now than ever before. I hold no grudge towards any company, but I do not like the modern trend of needing a subscription for everything. The tools I use and the things I do reflect that, like these previous posts on my laptop and smartphone:

Related posts:
- [Durable Smartphone](https://willem.com/en/2025-03-05_durable-smartphone/)
- [Better Laptop](https://willem.com/en/2025-02-10_better-laptop/)

## **Vitamins for the Mind**

While I had [my grumpy old man reasons](https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/) for leaving iCloud Photos, one thing I think Apple understands well is how important photos and videos are for our wellbeing. In [an interview](https://www.youtube.com/watch?v=DKpQB9kNeQE) on YouTube, Dr. Sumbul Desai (Apple Vice President of Health) mentions the importance of photos right along heart monitoring and fall detection. Memories of loved ones can make us feel good. Apple integrates this vision into their products with features like "on this day" and the photo watch face, automatically showing different memories. Easy access to your photos and videos helps you reflect and can be a perfect antidote for other things that might cause anxiety or stress. 

![Apple is serious about health and photos (Dr. Sumbul Desai)](https://willem.com/global/images/6cf4b61f3f39.webp)

## **Aves Gallery**
Standard photo gallery apps work well with smaller collections of photos, but if you are like me and want to carry your entire photo and videos collection they often fall short compared to cloud and subscription based services like Apple iCloud Photos or Google Photos. Basic things like simply being able to handle large amounts of files and more advanced features like using metadata to find certain photos. After trying various apps, I found Aves Gallery ([Google Play](https://play.google.com/store/apps/details?id=deckers.thibault.aves), [F-Droid](https://f-droid.org/packages/deckers.thibault.aves.libre/), [Github](https://github.com/deckerst/aves)) to be really good. It is a libre/free app released under BSD3 license created by Thilbault Deckers. I like it because:
- **Gesture support**: swipe with your fingers through your photos, just like Apple Photos or Google Photos. It works fast, fluid and, unlike many other Android gallery apps: continuously and multidirectional. There are also gestures available to return to the overview (swipe down from detail view), pinch-to-zoom and a single tap to show/hide textual info on any photo.
- **Scrollability**: Most gallery apps can scroll, but with Aves you get an extra powerful scrollbar which enables you to scroll both fast _and_ accurate. 
- **Search and filtering**: Aves indexes the metadata from your photos and enables advanced searching and filtering by city, state or country. You can also filter on date, media type or a combination of these.
- **Customisation**: You can set main menu buttons, tab bar buttons, colours, and photo action buttons to match your style of browsing. You can change the look of the overview by changing thumbnail size, dimension (square versus rectangles) and sorting. 

![Aves in action showing the powerful scrollbar which enables fast and accurate scrolling](https://willem.com/global/images/f46444879aad.webp)

![So that if your remember your wedding date (..), you'll be able to return to that specific day in a simple swipe](https://willem.com/global/images/244c3f0a8e94.webp)

![Just like Apple Photos, you can search by location - like going back to Valencia where I ran a marathon with by buddy Niels](https://willem.com/global/images/4e25a082971e.webp)

## **Syncing Photos**
New photos you take automatically appear in the Aves Gallery app. You can set Android to use Aves as default media viewer and picker app. If you're currently using a cloud photo service, you might first need to retake control over your photos. I did that in 2020 and wrote the following post on it:

Related posts:
- [Free from the iCloud: Escaping Apple Photos](https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/)

In that post I describe the app I use on my laptop, [Shotwell](https://wiki.gnome.org/Apps/Shotwell) and the steps I took to manage my own photo library. You could use rsync, [Syncopoli](https://f-droid.org/packages/org.amoradi.syncopoli/) or [Syncthing](https://syncthing.net) to setup automatic synchronisation between your smartphone and other devices.

![Syncing photos between laptop and smartphones - Shotwell and Aves Gallery app working together](https://willem.com/global/images/21592d0d311e.webp)

## **Conclusion**
Don't dismiss your photos and videos as just files. With the right app they can really bring you bits of joy. Using the Aves gallery app that joy does not require a subscription, not a cloud and is fully free+libre!

---

## Willemstagram

*3D flip-flap photo display showing stories* · 2025-08-11 · https://willem.com/en/2025-08-11_willemstagram/

Last week I sat with a customer looking at the new willem.com homepage where I use a narrative to tell about the things I do. This customer is one of the best visionary create thinkers, yet my text didn't seem to speak to him. Thinking about this, I remembered an important psychology lesson from the University: I needed something different, something non-linear, this post is about delivering a visual punch!

## **Left versus Right Brain Thinking**
One of the cool things of [my education](https://willem.com/en/about-me/education-certifications/) at the University of Amsterdam was that we got classes from different faculties, forming an interesting mix of interdisciplinary science. One classic book we discussed was "[Mintzberg on Management](https://www.google.com/search?q=mintzberg+on+management+book)" in which the author elaborates why different people prefer different things, the classic dichotomy often simplified as left versus right brain thinkers:

- **The linear thinker (the left brain)**: This is the natural state for people that appreciate a logical narrative that builds from A to B to C. Typical persons like this are storytellers, architects and programmers.
- **The non-linear thinker (the right brain)**: This is the state of people that don't follow a straight line. They scan for impressions, vibes and emotional takeaways. Typical persons like this are create folks including artists and visionary thinkers.

My new willem.com homepage worked well for linear thinkers like me, the text based narrative suits the left-brain. But, my design lacked for people who go best on non-linear, vibefull impressions. I needed something that exposes the many visuals in a rich and dynamic way, alive and with a healthy dose of interactive fun.

## **Solari Board**
Many moons ago I met my wife on Utrecht Centraal Station, right under the gigantic departure information board. The iconic 7x4.20M blue info board, weighing around 3000 kilos, featured flip-flapping mechanical panels producing a recognisable sound you would hear every minute or so in the central hall of the station. This type of signage display is often called a "Solari Board", named after [Solari di Udine](https://en.wikipedia.org/wiki/Split-flap_display), the Italian company that produced these icons. These days the Utrecht station features digital info displays, but if you want you can still see it in [Het Spoorwegmuseum](https://www.spoorwegmuseum.nl/). 

![The big blue mechanical departure info board from Utrecht Centraal (photo: cc/maurits90)](https://willem.com/global/images/334ea770c6c7.webp)

As a metaphor aficionado (book tip: [Metaphors we live by](https://duckduckgo.com/?t=ftsa&q=metaphors+we+live+by+book)), I figured the Solari Board, with its "flip-flapping" would be a lovely way to allow visitors of willem.com to "depart" to various "destinations" (the stories) on the site. Instead of using text, I deliberately chose to use the photos and visuals inside the blog posts as gateways into the [insights](https://willem.com/en/insights/)-section on willem.com. By randomly revealing new destinations this is perfectly non-linear and by making it interactive (clickable and touchable) it is more engaging than plain text. Every destination opens a "ticket" explaining a little bit of what it is you're looking at. If you like what you see, you can hit the big button to open the story right at the position of the image, which could be halfway a blog post. Stories open in new browser windows, enabling you to return to the "station" to find a new destination.

![Visual Journal concept sketch: flip-flapping images deep linking to pages on willem.com like a mechanical Solari Board](https://willem.com/global/images/c32ce6e2d76f.webp)

## **Implementation: ThreeJS and custom image API**

Earlier I experimented with the ThreeJS 3D graphics engine to visualise workout data. It is a library using the HTML5 standard `canvas` element to output graphics generated utilising spatial computing, a fancy way to say it enables you to draw things on three dimensions (x, y, z) instead of two, hence its name. It provides camera, light and fog controls and it is designed to enable animations based on simulated position and rotation. It is pretty cool to play with and quite capable. See these earlier two posts on my experiments with ThreeJS:

Related posts:
- [Workout data in 3D](https://willem.com/en/2025-03-10_workout-data-in-3d/)
- [Vibe Coding](https://willem.com/en/2025-04-15_vibe-coding/)

The minimalist in me briefly considered going with CSS animations, transforms and transitions. But I figured the realistic perspective, where the outermost panels rotate more skewed, and the randomness in selecting new visuals would require me to use JavaScript anyway. To maximise its value I wanted to integrate it right on my homepage. But, loading a complete 3D engine is not something to consider lightly. To minimise its effects on the homepage's loading time, I carefully designed the thing to be loaded asynchronously and entirely optional (for people with JS disabled). 

![Visual Journal, dubbed "Willemstagram" in action](https://willem.com/global/images/8a20e248d096.webp)

To feed the "Visual Journal", I designed a custom API that serves highly optimised images scaled to 400x400px. Each image has a localised title and a deeplink with an hashtag (slug) anchor, enabling the deep diving into stories. I rely on [my own lemmid platform](https://willem.com/en/work/lemmid/) to provide me with the required infrastructure to pull this off. In the background an optimised `NodeJS` service generates the images using `imagemagick`, `jpegoptim` and `pngquant`. You can check out the API yourself on https://willem.com/en/images.json outputting a JSON array like:

```
[
  {
    "url": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/i_15_An-average-fly-is-bigger-than-most-screws-inside-the-iMac_400x400px.jpg",
    "title": "An average fly is bigger than most screws inside the iMac",
    "target": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/#an-average-fly-is-bigger-than-most-screws-inside-the-imac"
  },
  {
    "url": "/en/2019-06-25_assembling-a-cargo-bike/i_11_Using-filler-plates-to-make-up-for-Chinese-Precision_400x400px.jpg",
    "title": "Using filler plates to make up for Chinese Precision",
    "target": "/en/2019-06-25_assembling-a-cargo-bike/#using-filler-plates-to-make-up-for-chinese-precision"
  },
  {
    "url": "/en/2021-01-14_abandoning-my-own-tablet-os/i_05_You-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper_400x400px.jpg",
    "title": "You know you're digital pen is lacking trust if you grab for old fashioned pencil and paper...",
    "target": "/en/2021-01-14_abandoning-my-own-tablet-os/#you-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper"
  },
  ...
]
```

To prevent the thing from being just a random link generator I deliberately put a little popup in it when you tap or click any visual. I utilise the image captions that my [lemmid content manager](https://willem.com/en/work/lemmid/) maintains to reveal a bit of info enabling you to determine if you think it is worth opening the story. 

![The popup enables you to make a decision of diving into the story or to continue exploring other images](https://willem.com/global/images/837bfdd7ff30.webp)

## **Releasing the source code (AGPL)**

While I am very happy with how the Visual Journal works on my site, [I strongly believe in sharing](https://willem.com/en/open-source/). Chances are you have an even better idea for some Solari flip-flapping. Therefore I release the entire thing as free/libre software under the GNU Affero General Public License (AGPL). That means you can use, modify and distribute it yourself. Find the source code, readme and sample files at https://source.willem.com/visual-journal/

## **Conclusion**

Judging by how it captivates my kids' curiosity, I am very happy with the visual journal, which jokingly dubbed Willemstagram. But unlike Meta's Instagram, this only serves visual to tell _my_ stories and its source is libre. You can check it out on the homepage or by hitting the button below. What destination will you choose?

[action1]

[Video (mp4)](https://willem.com/global/video/179d4e3b4ce0.mp4)

*This was written by hand. In an age of AI-generated text, this is my simple way of showing the human thought and effort behind these words. For those who are curious, the original (English) manuscript is available for download.* 

[download1]

---

## Towards Digital Sovereignty

*Turning my experience into your advantage* · 2025-08-02 · https://willem.com/en/2025-08-02_towards-digital-sovereignty/

Over the years I have experimented with different digital tools, platforms and apps to get my work done. From easy-to-use but locked down commercial systems to free/libre solutions that are powerful but more challenging to setup. I learned a lot along the way. Now I offer that experience to others, read along to learn how you can benefit from this.

## **What is Digital Sovereignty?**

It's a simple idea. You should be in control of your digital world, not the other way around. It means your tools, your data, and your workflow should serve you. This forces us to ask a simple but important question: **are your tools working for you, or are you working for them?**

## **The Audit: What I Do**

The process of getting there starts with a simple conversation. I listen to your goals and frustrations. Then, I map out your entire digital setup: your computers, your software, your cloud services, and how your data moves between them. At a glance:

1.  **Deep-Dive Interview:** We start with a 90-minute conversation where I listen to your goals, your frustrations, and how you currently work.
2.  **System Mapping:** I analyse your entire digital ecosystem: your hardware, software, cloud services, data storage, and communication channels.
3.  **Actionable Report:** I deliver a concise, written report that identifies your biggest pain points and provides a clear, step-by-step roadmap to a more sovereign and efficient system.

![This is how it begins: A real page from my personal notes, mapping out complexity to find a simple path forward](https://willem.com/global/images/91af73aa0c88.webp)

## **The Outcome: What You Get**

The result is a clear, written plan. It's a step-by-step guide to help you simplify your work, protect your data, and break free from expensive tools that hold you back. The key deliverables are:

  * **A Personalised Roadmap:** A clear, prioritised list of actions to simplify your workflow and reduce dependencies.
  * **Strategic Tool Recommendations:** Concrete suggestions for open-source and privacy-respecting software to replace inefficient or costly tools.
  * **Data Liberation Strategy:** A practical plan to get your most important data out of silos and into a system you control.
  * **Automation & Efficiency Gains:** Identification of key areas where simple automation can save you hours of manual work each week.

## **Who This Is For**

This is for the creator, the founder, the independent professional who feels like they spend more time managing their digital tools than doing their best work. It's for the small team that knows there must be a simpler, more powerful way to collaborate.

You might feel locked into one ecosystem, worry about where your data is stored, or simply be tired of the digital clutter that pulls you away from what's important. You believe in focus and freedom, and you're ready to build a digital foundation that truly supports your work.

I genuinely enjoy helping you because I deeply care about using technology to empower people, not lock them in. It's the same principle that drives my commitment to [Open Source](https://willem.com/en/open-source/), and it's about giving you the same freedom and control over your digital world that I've built for myself

![Over the years I have refined and simplified how I work just as much as the things I produce](https://willem.com/global/images/face35e557c6.webp)

## **Conclusion**

**How** I work is just as important as **what** I create, and over the years I've put a lot of energy into finding ways to optimise the '**how**'. I genuinely enjoy turning that experience into your advantage. If you're ready to improve your own 'how', I'm happy to help.

[action1]

---

## The Agentic Web

*"Voorsorteren" for the future* · 2025-07-26 · https://willem.com/en/2025-07-26_the-agentic-web/

In Dutch, there's a great word: voorsorteren. It means getting into the right lane on the motorway long before your exit. You do it to ensure a smooth, stress-free journey. I believe the same principle applies to technology. A little bit of smart preparation now can give you a massive advantage when the future arrives.

Right now, I believe we should all be "voorsorteren" for the next evolution of the internet: **The Agentic Web**.

![Thinking about the future shouldn't be a separate task; it should be an integrated part of the process.](https://willem.com/global/images/e6262069225d.webp)

## What is The Agentic Web?

For decades, the web has been about humans talking to machines. We type a query, and a computer shows us a list of websites. The Agentic Web flips this around. It's about **machines talking to other machines on our behalf.**

Imagine AI "agents" that act as super-smart assistants. These agents will not just *find* information for you, but will be able to *take action*. Instead of searching for a restaurant's website, your agent could directly ask the restaurant's agent for its menu, check for a free table, and book it for you. This works for everything: ordering takeout, buying tickets for a club night, or getting a quote from a contractor.

Language models will act as universal translators, bridging gaps in language and context, allowing these agents to communicate seamlessly.

## How to Prepare Your Website

So, how do you get ready for this? The key is to make your website speak the language of computers as clearly as possible. It's about reducing noise and adding structure.

1.  **Use Semantic HTML:** Use modern HTML tags like `<article>`, `<section>`, and `<nav>` correctly. This is like putting clear labels on your content so machines know what they're looking at.
2.  **Formalise Your Services:** Use standards like `schema.org` to add invisible "price tags" and "instruction manuals" to your products and services. This tells an agent exactly what you offer and how to interact with it.
3.  **Create a Digital Front Door:** If you have a business process, like a quote request, consider exposing it through a clean, public API. An API is a documented, predictable way for other computers to interact with your services.

## What I've Done with willem.com

I believe in practicing what I preach. The recent redesign of this website was my own exercise in "voorsorteren" for the Agentic Web.

I started by making my content more accessible by translating over 160 posts into [Dutch](https://willem.com/nl/), [German](https://willem.com/de/), and [Spanish](https://willem.com/es/). I did this within a highly structured content management system. By keeping fields for titles, subtitles, and body text separate but linked, I provide the rich context that AI tools need to understand the relationships between ideas.

![By providing structured, context-rich content to the AI (left), my CMS (right) can generate high-quality, structured translations, preparing the content for both humans and machines.](https://willem.com/global/images/c8e7bd233a0c.webp)

I also simplified the entire site structure into the clear categories of [Work](https://willem.com/en/work/), [Insights](https://willem.com/en/insights/), and [About me](https://willem.com/en/about-me/). This helps human visitors, but it also creates a logical map for AI agents. The articles themselves are now grouped into four clear topics: [Technology & Code](https://willem.com/en/insights/technology-code/), [Products & Design](https://willem.com/en/insights/products-design/), [Performance & Sport](https://willem.com/en/insights/performance-sport/), and [Life & Reflections](https://willem.com/en/insights/life-reflections/). I also created a curated overview of my most impactful writing in the [Popular Posts](https://willem.com/en/popular-posts/) section.

Finally, I made sure all this content is available in machine-readable formats like RSS, ATOM, and JSON, creating a direct line of communication for any agent that wants to access it.

## Conclusion

Thinking about and preparing for the future now is a low-risk, high-reward strategy. It puts you in the right lane, ready to merge smoothly when new opportunities arise. Taking the time to get your own information in order is how you maximise your chances for tomorrow. Even if the big Agentic Web breakthrough takes a little longer than expected, you will still be left with a website that is exceptionally clean, sharp, and well-organised. And that's always a win.

*This was written by hand. In an age of AI-generated text, this is my simple way of showing the human thought and effort behind these words. For those who are curious, the original (English) manuscript is available for download.* 

[download1]

---

## The Power of One

*Why I've chosen to build my business by staying small* · 2025-07-23 · https://willem.com/en/2025-07-23_the-power-of-one/

For my entire career, I've had a clear goal: to stay a company of one. This isn't a starting point, but a deliberate choice about the best way to do great work and build a sustainable business. In this post, let me explain why.

## Focus Over Growth

In a world that often celebrates growth for its own sake with more employees, bigger offices, and more meetings, I choose to focus on a different metric: the quality of the work itself. By remaining a company of one, I eliminate the overhead and distractions that come with managing a large organisation. My energy goes directly into solving problems and building software, not into internal politics.

## A Direct Partnership

When you work with me, you work *with me*. There are no project managers, no sales teams, and no layers of communication to get through. The person who discusses the strategy is the same person who architects the backend and writes the code. This direct line ensures clarity, speed, and a deep, shared understanding of the project's goals.

## How It's Possible: A Platform for One

You might wonder how one person can deliver the work of a small team. The answer is a principle I've applied for over a decade: build systems, not just projects.

The foundation of all my work is **[Lemmid](https://willem.com/en/work/lemmid/)**, my personal platform of digital building blocks. It’s a set of robust, reusable tools that I've refined over years. This platform is my force multiplier. It allows me to build complex, scalable software, like my **[Independent Apps](https://willem.com/en/work/indepedent-apps/)**, with an efficiency that would otherwise require a much larger team.

![The 'Company of One' toolkit: focused development, strategic design, and the freedom to work from anywhere](https://willem.com/global/images/e52877e617e3.webp)

## The Promise

Choosing to be a company of one is a commitment. It's a promise that your project will have my full, undivided attention. It's a promise that you're not just hiring a freelancer, but partnering with a focused expert who has built a powerful, scalable system to bring your ideas to life.

## Conclusion

Staying small is a strategic advantage. It allows for intense focus, a direct and honest partnership, and the efficiency that comes from building on a well-crafted platform. It's a model built for quality and sustainability, and it's the foundation of every project I take on.

---

## Breaking Changes

*Upgrading Dovecot 2.3 to 2.4 in Debian Stable* · 2025-06-04 · https://willem.com/en/2025-06-04_breaking-changes/

Last week I ran into unexpected trouble during a routine maintenance procedure on my company's email infrastructure. Processing thousands of emails each day, we use Dovecot to give our clients access to their messages. That all came to a grinding halt when I updated to version 2.4 which features breaking changes... oh dear!

## ⚠️ TL;DR: Upgrading Dovecot 2.3 → 2.4 on Debian

- **Dovecot 2.4 introduces breaking changes**: Configuration files from 2.3 are incompatible. The software will fail to start unless you rewrite them.

- **New config syntax and variable system**: Parameters like `ssl_cert`, `mail_location`, and `%d` have changed format and meaning.

- **No automated migration path**: Manual review and rewriting of configuration is required—especially if using SQL backends, Sieve, or custom auth.

- **Recommendation**: Read the official_upgrade_guide (https://doc.dovecot.org/2.4.0/installation/upgrade/2.3-to-2.4.html) thoroughly before upgrading, and test configs in isolation.

## Walk in the park

Pending some security updates and to resolve some compatibility issues, I took the decision to update some packages on a Debian GNU/Linux server that is responsible for my company's email services. This particular distribution of GNU/Linux is known for its stability and reliability. There was no reason to expect any trouble and I started the upgrade expecting it to finish in mere minutes. Just "a walk in the park", what could possibly go wrong..?

## Requiring 'dovecot_config_version'

Most of the server came back online as expected almost immediately, disrupting services so little that even the uptime_monitor_alarm (https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/) didn't pick up any outage - except for Dovecot. This particular type of software is responsible for IMAP and POP3 access to mailboxes. It fits as a finely tuned cog in a larger setup where other programs like Postfix rely upon its working to accept incoming email. Dovecot's failure to start caused a series of problems.

The first thing you do as a server administrator is to check the server daemons ('systemctl status dovecot') followed by inspecting the logs, e.g. by running 'journalctl -u dovecot'. That quickly revealed that Dovecot refused to start because a config parameter was missing: 'dovecot_config_version'.

Simply add the parameter to the config at '/etc/dovecot/dovecot.conf' you might think? Well... NO. It turns out that Dovecot's creators put the error in for a good reason: the new 2.4 version of Dovecot is incompatible with previous 2.3 configuration files; meaning you'll need to rewrite many different parameters. It is not just the config variable names, it also introduces an entirely new syntax of settings variables expansion. An old variable value like '%d' now becomes '%{user | domain}'. The list of chances is_long (http://doc.dovecot.org/2.4.0/installation/upgrade/2.3-to-2.4.html) and there is no automated way of migrating your config. Imagine my face when I realised the sheer magnitude of my problem.

## Integrated Complexity: cogs in a machine

The thing with email services is that it is *hard*. Not because of a single component being difficult, but because to run a complete email stack you need many different parts working together seamlessly. Here are some of the pieces that comprise my company's mail service:

- **Postfix:** The primary SMTP mail transfer agent (MTA), it communicates with other mail servers to receive and send email. It needs to know what email addresses are valid for receiving mails and who is authorised to send new messages. 

- **Amavis filter:** All mails processed by the server go through the amavis filtering mechanism that checks individual messages using SpamAssissin and ClamAV.

- **SpamAssasin:** Using a complex set of rules and bayesian analyses, messages are automatically scanned for the likeliness of being spam. 

- **ClamAV:** Messages are scanned for viruses. Attachments are extracted and analysed, file by file. 

- **Reverse DNS blacklists:** In addition to scanning the messages, the mail server also does a background check on external servers it communicates with. Mail headers are parsed and individual hops are checked for their reputation.

- **OpenDKIM:** Some messages contain a 'domain key' signature, proofing that their sender is authorised. Messages with headers are checked, while others are signed using a miltering service tied into Postfix. 

- **Sieve:** Incoming messages are automatically sorted using per user rules, e.g. having certain messages delivered in specific folders. It needs to know what rules apply to what addresses. 

- **MariaDB / MySQL:** The email addresses, valid logins, usernames, password hashes and aliases are stored in a centralised database. Specific SQL queries are configured to check things like "is this a valid password?"

- **Nginx:** The email server also has a web server that enables the management of accounts and to provide access to email via webmail. 

- **NodeJS:** The management console utilises a NodeJS backend to enable server administrators and clients to setup their addresses and passwords.  

- **Roundcube**: The server uses a widely used webmail program to enable clients to access their email via the browser.

- **PHP:** The webmail requires PHP to run, including some dependencies to have it talk to Dovecot (using IMAP) and MariaDB (using SQL). 

- **Dovecot:** Then there is Dovecot, the actual piece of software that enables end users to access their email. It enables authenticated users to access the emails that are stored on the infrastructure's disks using protocols like IMAP or POP3. 

![A complete mail server stack comprises many smaller components finely tuned together](https://willem.com/global/images/5c709f1fc463.webp)

These pieces are all finely tuned to each other, like cogs in a complex machine they fit precisely. Their configuration is tailored to their specific role, often interfacing with multiple other pieces. You can imagine that an unexpected change in one of these cogs (like Dovecot) can cause quite the disruption!

There was no quick fix available, no automated configuration upgrading. Given this update being relatively new, most large language models (AI) did not have an answer either. ChatGPT simply generated suggestions based on the old 2.3 documentation. To resolve the issue I needed to apply *'old school Linux server skills'*: manually creating a new tailored configuration for Dovecot 2.4.

## Stop to Prevent Data Loss

Once I grasped the nature of the problem, I immediately stopped most of the email services (e.g. bringing the engine to a complete stop). This prevents data loss as emails are stopped being processed. This causes other mail servers to queue emails, sometimes issuing 4xx SMTP errors (like 421, 451, 454 or 455). The design of the world wide email protocol accommodates temporary outages and other servers will simply try again later.

## Rewriting the config by RTFM

The error message in the logs pointed me to the official_Dovecot_docs (https://doc.dovecot.org/2.4.0/installation/upgrade/2.3-to-2.4.html), and there it was: a yellowishly highlighted WARNING describing the configuration changes. It's a lengthy document: as_PDF_it_counts_18_pages (https://willem.com/etcetera/2025-05-30_dovecot-upgrade-23-to-24.pdf). On a normal day it would take some effort to get through this - imagine having to do this while the proverbial house is on fire!

Dovecot's configuration consists of various files that all setup parts of the software's behaviour. Like how authentication is done, or how it integrates with a Sieve filter, or where it gets the username and password hashes for login. The changes introduced in Dovecot 2.4 nearly affect all the parameters as the creators have introduced a new syntax for server variables.

### Variable notation syntax

Previously the configuration used variable notation like '%u' as a placeholder for a username. The new syntax allows variables to be piped to a modifier, enabling normalisation and things like sub string selection. For example: to get an email domain from a username you no longer use '%d' but use the 'user'-variable as base to pipe it to the domain modifier by using this syntax: '%{user | domain}'.

Once I understood this new language, I really appreciated the work of art that it entails. It is an improvement over the older abbreviated variable names as you no longer need a dictionary to look things up: instead of something vague like '%r' you now read '%{remove_ip}'. It is inherently more readable, something I really value.

### Encryption: 'ssl_cert' becomes 'ssl_server_cert_file'

Other changes include the way the config points to external files used for encryption. Previously you would have a setting 'ssl_cert' that could contain the actual SSL/TLS certificate as string. In version 2.4 you'll have the variable 'ssl_server_cert_file' taking a path pointing to the certificate on the filesystem instead. **It is not just renaming, the nature of the value is new, too!** To fix the configuration, you'll have to walk each of these updated parameters and determine their impact on your particular setup. It is time consuming and error prone.

### Splitting the 'mail_location' setting

New in 2.4 is how the 'mail_location' is split up into multiple smaller variables. Previously a single variable would define where email was saved on disk. You'll now need to split this in two variables 'mail_driver' and 'mail_path', **AND** use the new server variable syntax. If you get any of these wrong, it will cause all email to disappear (trust me!). Depending on your specific storage configuration, you'll want to double check the username part (e.g. do you include the entire email address or just the prefix sans domain name?).

![Migrating mail_location into mail_driver and mail_path using the new server variable syntax](https://willem.com/global/images/e88fe1cec23d.webp)

### Dovecot with SQL backend: passdb and userdb

If your Dovecot installation works with an external database (or store) to authenticate usernames and passwords, you'll have to rewrite the 'auth-sql.conf.ext' in '/etc/dovecot/conf.d/' which is called/included by the 10-auth.conf file. In Dovecot 2.4 there is a new way of segmenting passdb and userdb settings. In the Dovecot 2.3 setup I used an external file to provide the database queries and connection string. During authentication the multiple queries are used to 1) authenticate users, and 2) load user-specific settings like the path of the email store.

![The userdb and passdb upgrade instructions are very helpful at first glance /s](https://willem.com/global/images/f0038d6aa77e.webp)

![Dovecot 2.3 SQL backend setup (auth-sql.conf.ext and dovecot-sql.conf.ext) ](https://willem.com/global/images/ee344f001a96.webp)

In the new 2.4 version you have to restructure the parameters to be enclosed in sections that include a backend type indicator right behind the 'userdb' and 'passdb' keywords in the config. So, if you use a MySQL database as backend, you'll need 'userdb' becomes 'userdb sql'. You can include the connection string parameters right in the 'auth-sql.conf.ext' file so all relevant parameters are in one configuration file. To reduce complexity I rewrote the userdb section to use a the 'static' database driver: generating configuration variables like the user's mail path based on the user's username. See the dedicated_documents (https://doc.dovecot.org/2.4.0/core/config/auth/passdb.html).

![Dovecot 2.4 SQL backend setup (auth-sql.conf.ext) - now much more compact than its predecessor. There is now only one SQL query as the userdb-ection now uses the static backend](https://willem.com/global/images/e0e59271debb.webp)

### Sieve Plugin

If your setup uses Sieve to sort incoming emails, you'll need to adjust your setup with regard to the script's location, its defaults and behaviour. The new Dovecot 2.4 version introduces a concept called "Script Storage" which enables dynamically loaded scripts to be executed for different users at various events. Our setup involves a simple default sieve script that sorts email flagged as spam automatically to a folder called Spam. The new syntax enables a more compact config:

![Sieve's config in Dovecot 2.3 (90-sieve.conf) with now obsolete variables sieve_default and sieve_dir](https://willem.com/global/images/939ffd625f0f.webp)

![Sieve's config in Dovecot 2.4 (90-sieve.conf)](https://willem.com/global/images/197ae89bb845.webp)

## Testing the New Config

You might be tempted to simply start the server again after redefining the 2.4 configuration. But, you should be very careful as a wrong configuration could cause clients to loose access to all emails and/or force them to re-download their entire mailboxes. Instead I opted for a gradual approach where I changed the IMAP (and POP3) port numbers to something arbitrary. This way I could test the new setup all by myself while keeping the actual customers from connecting to the server. This enabled me to fix some type errors, refine some of the new server variable syntax and deal with some odd log messages. You can control the server's port numbers from the '10-master.conf' file.

![Setup the server's IMAP and POP numbers to enable private/gradual debugging of the new configuration](https://willem.com/global/images/dd3339e34d1d.webp)

## Conclusion

Outages like this are rare, thanks to the stability of Debian GNU/Linux, but not impossible. Daily backups and a tested disaster recovery plan are in place for my company's Lemmid Online email service. While a full failover wasn’t required this time, prior drills proved crucial in swiftly adapting the configuration.

This incident was a reminder that even with automation and AI, deep system knowledge, preparation, and manual debugging remain essential tools when critical infrastructure components change unexpectedly and without automated migration paths.

### Dovecot 2.4 Sample Config

If you find this post by looking for a solution for your own broken mail server, you might find these Dovecot 2.4 sample config files useful. I found them during my own repair work and they might save you some time figuring out the new syntax: https://source.willem.com/dovecot-2.4-sample-config/

---

## When the Going Gets Tough

*Running the Leiden Marathon in Heat* · 2025-05-12 · https://willem.com/en/2025-05-12_when-the-going-gets-tough/

Yesterday I finished the Leiden Marathon, it was the hardest 42K I ever completed due to the temperature. Sunny with a clear sky, temperatures climbed to 25°C. Several runners collapsed from heat exhaustion, and one even required resuscitation. When you push your limits, sometimes you actually reach them. Here are a few thoughts from the experience.

It all started as a great Sunday in The Netherlands for being outside. Several running events took place, including the Leiden_Marathon (https://marathon.nl) and the LOOP_Leeuwarden (https://www.loopleeuwarden.frl/) half marathon. The weather would become a major factor as the clear sky with plenty of sunshine pushed temperatures up.

![Having fun outside: smiling at the 10K mark, still going strong](https://willem.com/global/images/85a45a240706.webp)

To perform well, the human body must maintain a stable core temperature. During endurance efforts like marathons, most of the energy we burn turns into heat. To avoid overheating, the body relies on sweating and evaporation to stay cool. When this cooling system is overwhelmed - by high temperatures, humidity, or both - performance quickly declines.

![Effect of heat and humidity on marathon speed (runningwritings.com)](https://willem.com/global/images/9939f76e7e3a.webp)

This heat index chart shows how rising temperature and humidity significantly reduce marathon performance. At 25°C and high humidity, runners slow down by over 3%; at 30°C, losses exceed 7%. The body struggles to cool itself in these conditions, as sweat evaporates less efficiently, leading to overheating and increased fatigue. The hotter and more humid it gets, the harder it becomes to maintain pace safely.

I experienced this first-hand, approaching the 50% percent mark I struggled to maintain the pace I ran on my previous marathon. The heat of the sun combined with the radiating warmth from the tarmac became uncomfortable, causing me to feel shivering despite the heat. I knew I had to lower the pace in order to stay safe. Despite (significantly) lowering my pace, my heartrate stayed (too) high. I couldn't go faster.

![My pace and heartrate during the marathon; despite slowing down due to the heat, my heartrate stayed high](https://willem.com/global/images/e8cdb59ad41c.webp)

At the start of the marathon, I felt optimistic.  I believed a sub-4 hour finish was within reach, maybe even matching my personal best of 3:51. I set off at that target pace, but in hindsight, it was a mistake. The heat gradually took its toll. Mid-race, I had to shift my mindset from chasing a time to simply finishing. Letting go of a goal you've set yourself up for isn't easy. It takes mental discipline to reframe the effort not as a failure, but as a different kind of win: perseverance instead of pace.

![The event in one image: Pushing through exhaustion at the 40KM mark during the 2025 Leiden Marathon. Note the ambulance motorcycle in the background, and the fogged camera lens, blurred by sweat and the water I poured over myself to stay cool.](https://willem.com/global/images/cb0dab7241cd.webp)

![Dutch news on injury and casualty ](https://willem.com/global/images/67e869d073f9.webp)

I ultimately finished the 42K in 4:17, my slowest marathon to date. But I crossed the finish line with a smile, knowing it was a victory in its own right. Sadly, not every runner was as fortunate. At the Leeuwarden event, one_runner_tragically_passed_away (https://www.omropfryslan.nl/nl/nieuws/17463605/deelnemer-van-loop-leeuwarden-overleden-evenement-stilgelegd) near the finish line, and during the Leiden Marathon, I saw several_others_collapse (https://www.omroepwest.nl/112/4966609/hardloper-gereanimeerd-op-parcours-leiden-marathon), cared for swiftly by the outstanding first aid teams.

![When finishing is victory: completed the Leiden Marathon!](https://willem.com/global/images/e9a01e40a8a3.webp)

## Conclusion

I find running a marathon something special, it's more than just covering 42 kilometers.  It's a mental thing where mindset matters as much as physical performance. I experienced this during my_first_marathon_in_Amsterdam (https://willem.com/en/2024-10-20_marathon/), where the sense of victory was almost spiritual. This marathon in the heat was another significant challenge. Challenging yourself under tough conditions can teach you a lot, and that experience will stay with you for a long time. Whatever your goal, always respect the conditions, listen to your body, and above all: stay safe out there!

### Source:

Davis (2025) "Calculating the effects of heat and humidity on marathon performance" - runningwritings.com (https://runningwritings.com/2025/04/heat-humidity-marathon-times.html)

---

## Vibe Coding

*On the power and danger of programming with AI* · 2025-04-15 · https://willem.com/en/2025-04-15_vibe-coding/

Grossing over $48K a month, the flight simulator game by Pieter Levels spurred a whole flurry of innovation. Without detailed knowledge of 3D game engine technology, he 'vibe coded' his game using AI. Critics of his work pointed at security and scalability issues, while proponents lauded the amazing result. What can we learn from this?

## Vibe Coding

Vibe coding is an AI-driven programming method where you describe a problem in a few sentences as a prompt for a language model tuned for coding. The model generates software, shifting the programmer’s role to guiding, testing, and refining the output. Advocates claim it enables novice coders to create programs without extensive training or software engineering skills.

Pieter_Levels (https://x.com/levelsio) created the game fly.pieter.com (https://fly.pieter.com). On social media he kept an open loop of his efforts: from his initial idea all the way to publication. He attracted sponsors for in game ads and he sells premium upgrades (like special planes) in his game, grossing thousands of dollars each month.

![AI Generated Flight Simulator: fly.pieter.com](https://willem.com/global/images/9c7b33588ed2.webp)

His success story raised questions about the future of game programming, or even programming in general. If one guy with a laptop can create a smash hit like this then what is the need for big budget studios? Or, asked inversely, what would happen to big budget studios if they would adopt a similar 'vibe coding' approach to production?

## Trying it myself

Having some experience with developing a_game (https://snake97.com) myself (Snake 97, 40+ million downloads), Pieter's story inspired me to look into the 3D technology he used for his game: ThreeJS (https://threejs.org). Building a game is hard, doing it in 3D is even harder. The mathematics underpinning a world in three dimensions add a whole extra challenge. In many ways it is unlike ordinary programs or simple two dimensional games. Although I have done some experimentation before, I found the learning curve of 3D mathematics quite steep. This is where the AI can help.

![3D visualisation of workout data](https://willem.com/global/images/5267f788426c.webp)

For the Gran_Fondo_app (https://willem.com/blog/gran-fondo/) I used the AI to generate a three_dimensional_presentation_of_a_recorded_running_activity (https://willem.com/en/2025-03-10_workout-data-in-3d/). I formulated my goal in plain English and the AI-model generated the code needed to use ThreeJS to display my workout on a rotating pane. The initial results were not good, but I understood enough of the generated results to continue asking for specific refinements. Some hours later I had something I liked, but moreover I felt as if I have learned a great deal about the viability of my initial concept. The AI enabled me to learn faster.

![Game Concept artwork from 2013: HDL particles in the blood stream](https://willem.com/global/images/6b5de3beb772.webp)

I decided to explore another idea that I had parked for some time: a game about bad and good cholesterol particles in a person's bloodstream. With aspects of an endless_runner-style_game (https://en.m.wikipedia.org/wiki/Endless_runner), I figured this to be a good fit for some more experimenting as these games feature computer generated levels. Building an automated level generator seems like something the AI would be able to help me with.

Leveraging the newfound 3D capabilities, I figured that the game should move into the arteries instead of lateral movement common for classic 2D games. This introduces challenges like visual clipping, distorted graphics due to the camera's position being outside of the 3D scene. Another challenge is increased complexity of the collision detection of in-game elements, a requirement for gameplay mechanics. The generated code from the AI model grew and grew with each iteration.

![3D Game Engine in action, note the graphical glitches in the artery's wall](https://willem.com/global/images/8cdd2773d861.webp)

After some 800 lines of code I started to experience the limitations of the AI-model as it started to make errors and bugs that it had solved in earlier iterations. Every new iteration introduced new problems and the model kept forgetting refinements and fixes it had applied earlier. This is due to the limits on context capabilities (input tokens) that are imported for the large language models to work. Simply put: it can't remember enough to continue to iterate on the whole thing at once.

![Productivity paradox: when operating the machine costs you more effort than the value of its output](https://willem.com/global/images/fa20ecb23326.webp)

I stopped developing the game engine using AI after some days of intensely experimenting. I reached a point were I was putting in more effort on managing the AI-model than effort directed at the actual game engine. I figured it would simply be better to get myself some books on the technologies, read them, become more proficient myself and then build the game engine by hand. When things become complex, our human brains seem to be able to focus on specific parts of a complex tasks while respecting the larger whole as it is.

## On the foolishness of "Natural Language Programming"

In addition to limits on the context that an AI model can comprehend, I think there is the problem of ambiguity. I recommend you read the words by Edsger_Wybe_Dijkstra (https://en.wikipedia.org/wiki/Edsger_Dijkstra), reflecting on the foolishness of "natural language programming" in his EWD667 (https://willem.com/etcetera/2025-05-15_EWD667-on-the-foolishness-of-natural-language-programming.pdf). Unambiguous description, free of muddled thought, forms the bedrock of reliable code. Yet our native tongue leaves too much room for all kinds of nonsense and errors. Instead we should master our words, think sharply and specify boldly.

A formal language, like a programming language or a mathematical model or an exhaustive in and output specification, could be an amazingly effective tool for ruling out ambiguity and errors. Simply put: you'll get the best output when you give the best input.

## Prompting the AI with code

To test if the AI would give me better code, I decided to change my language of asking. Instead of describing what I wanted in natural language, I uploaded a piece of code that I wrote earlier, with some very specific characteristics:

- the code came from a production system, I knew it worked well

- the code contained various error handling statements, adding to its robustness

- the code contained no syntax errors and used logically named variables and functions

- the code had a very specific scope, with clearly defined interfaces to the outside world 

In addition to the code I specifically asked the AI to change one particular aspect of the code in question. It had to remove the usage of a certain external program (the NodeJS module 'lwip') and replace it by another external program (ImageMagick). Because both lwip (https://www.npmjs.com/package/lwip) and ImageMagick (https://github.com/ImageMagick/ImageMagick) are open source code, the AI model is well aware of these programs. I gave it the perfect recipe for its cooking.

The code I got from the AI was a 99% perfect drop in replacement for my own code. The generated code had one bug that caused some parameters not to be escaped properly, leading to a crash. I could manually spot the error and fix it by hand, as I was fully comfortable and knowledgeable within the context of this specific piece of software. After some more testing I decided to take the AI-generated code in production as the new library performed much better than the one it replaced.

## Conclusion

Vibe coding with AI enables fast prototyping and learning, as seen in Pieter Levels’ success, but falters with complex projects requiring precision. It raises a question: does AI expand our potential or limit us to its constraints? Mastery blends human thinking with AI’s power. Reflect on craftsmanship: when do tools sharpen your skill, and when might they blunt it?

---

## Workout data in 3D

*Exploring web-based 3D graphics for fitness data* · 2025-03-10 · https://willem.com/en/2025-03-10_workout-data-in-3d/

While running my rounds around the village, it struck me that I could use ThreeJS to craft a dynamic 3D representation of my workout data. Read along to see what I’ve created—it’s a work in progress but serves as an exciting exploration of the concept.

I’m exploring ways to visualise workout data, leveraging web technologies for compatibility across devices for Gran_Fondo (https://willem.com/en/2025-03-06_open-sourcing-gran-fondo/), my running and cycling app. ThreeJS (https://threejs.org/), a 3D rendering tool for browsers, works seamlessly on large and small screens alike. I’m using the TCX workout data format because it’s suitable for parsing with standard browser and web technology. For this project, I tapped into a recorded session from my run on March 9—my standard 1.8KM loop around the village, repeated 6 identical times (totalling 11KM). I like this route; it’s low on traffic and disturbances, letting me focus on the run. I collected the TCX data using the RunnerUp app; it gets the job done but looks a bit dated and lacks interactive analysis and exploration of workout data.

![RunnerUP: recorded my 11K run, producing the a TCX file containing workout data](https://willem.com/global/images/54e7cade7a7a.webp)

As a proof of concept to explore 3D presentation, I built a prototype that loads the TCX file containing the workout data. The browser parses this data and generates two visualisations: a 3D render using ThreeJS and a 2D linear graph showing pace. Colour represents speed—greener lines indicate a faster pace. The 3D visualisation rotates like a vinyl record, revealing my six laps around the village, with its shape matching the map. To link both graphs, I added a white circle that marks the same point in time on each, helping to illustrate the connection between the two views.

<a class="image video" style="margin-bottom:15pt; display:block;text-align:center;" target="_blank" href="https://willem.com/etcetera/2025-03-10_GranFondo-3D-rendering/"><figure><video src="https://willem.com/etcetera/2025-03-10_GranFondo-3D-rendering/demo.mp4" autoplay loop muted playsinline width="960" style="width:100%" ></video><figcaption>Gran Fondo 3D rendering demo: an interactive workout data visualisation using ThreeJS</figcaption></figure></a>

The visualisation is built 100% with web technologies, using ThreeJS to render the 3D run path. A second HTML5 canvas overlays a 2D pace graph, while a centralised animation loop ties both scenes together with a traversing dot, syncing the route and graph. This is part of a “thinking out loud” experimentation phase, where I’m exploring innovative ways to visualise fitness data. It’s a demo for my upcoming Gran Fondo app, aiming to enhance interactive fitness tracking with rich, engaging visualisations.

Check out the visualisation on your own computer by opening this page: demo_time (https://willem.com/etcetera/2025-03-10_GranFondo-3D-rendering/) Please note that this is not a polished demo, it is "fresh from the bench" and works mainly well on landscape window orientations. Future versions will have a lot more polish to make all the elements fit in a responsive design.

The Gran Fondo app will include heart rate, cadence, and power for deeper insights. Interactivity will allow touch-based rotation of the 3D graph and zooming into details. My goal is to make workout analysis more immersive, intuitive, and engaging for athletes seeking a comprehensive view of their performance.

## Conclusion

Experimentation is a crucial part of software design—it allows you to test ideas, refine concepts, and gather feedback from others. This 3D workout visualisation is an example. There’s much more to explore. Stay tuned to this blog for future updates as I continue developing Gran Fondo!

---

## Open-Sourcing Gran Fondo

*A Leap to Libre Fitness and Freedom* · 2025-03-06 · https://willem.com/en/2025-03-06_open-sourcing-gran-fondo/

Gran Fondo, the app that tracks runs and rides, is going open-source. I’m removing its subscription model and make it libre. This isn’t about short-term revenue—it’s about building something enduring, private, and free for all. Here’s why I’m taking this plunge and what’s next.

I’ve decided to open-source Gran Fondo, my iOS app for tracking runs and rides. What started as a subscription-based tool will be shedding its paywall. Gran Fondo began_as_a_personal_project (https://willem.com/en/2024-05-11_developing-a-native-ios-app/), launched in May 2024 on iOS, designed to track workouts with privacy at its core—no cloud, no data harvesting, just your smartphone doing the work. Subscriptions kept it afloat, but they also locked it behind a wall. Lately, I’ve been reflecting on tech’s bigger purpose, as I wrote about_durable_smartphones (https://willem.com/en/2025-03-05_durable-smartphone/) and better_laptops (https://willem.com/en/2025-02-10_better-laptop/). Those posts argue for devices that empower users, not corporations. Software should follow suit—Gran Fondo is no exception.

![Gran Fondo v1 in action: smoothly tracks rides with Bluetooth support for power, cadence, and heart rate—primed to show open-source can rival pro tools](https://willem.com/global/images/0ba4569210c6.webp)

So, I’m making Gran Fondo libre. The code—now native Swift for iPhone—will be evolving into a multi-platform core using web tech, like my Snake_97_app_with_40_million_downloads (https://willem.com/en/2018-02-21_updating-snake-97/). It’ll be free, open for anyone to contribute, spanning iOS, Android, and even future libre platforms like Sailfish OS or Ubuntu Touch. No ads, no trackers—just a sponsor board, akin to sports club signs, to sustain it. This leap is tricky—Bluetooth quirks and background power demands differ across devices—but it’s worth it for a privacy-first, human-centric tool. I’m putting in my own cash and time, plus seeking a public innovation fund and sponsors to launch this, betting on collaboration over profit. It’s a risk, but I feel it’s right.

## Conclusion

This is me taking the first steps into something I truly believe in—a better, freer future for tech. Gran Fondo Libre’s my stake in that ground, and I’m hoping to find allies and friends along the way. Together, we can build something that lasts.

---

## Durable Smartphone

*Fairphone with Google Free /e/OS* · 2025-03-05 · https://willem.com/en/2025-03-05_durable-smartphone/

While sitting in the train the guy in front of me surprised me, out of his fancy pants he pulled this well worn, patina rich, piece of tech. We're travelling first class and judging by his classy attire, this man is not of limited means. Like a well-raced Porsche, this thing has seen some action. Sunlight hitting the metal frame reveals a green hue, I recognise it to be an earlier generation Fairphone still going strong. This changed my view on smartphones, please read along.

![Wear as Trophy: Racing a Porsche or running a Fairphone, the scars tell the epic tale - racing on Zandvoort with my buddy Niels!](https://willem.com/global/images/6b41c67e2af8.webp)

Unlike the fragile flagship phones with their delicately glued pieces of glass, the Fairphone is built to withstand and to be serviced. Its military grade drop resistance and IP55 water and dust rating, are complemented with easy access to its parts. If needed, you can replace pretty much all parts - including the 4200mAh battery. It runs standard Android with updates guaranteed up to 2031, made possible by the choice for an industrial IoT chip powering the phone. The Qualcomm Dragonwing QCM6490 with 8 cores and 8GB RAM is designed with longevity in mind, critical for enterprise grade applications where changing chipsets every season is undesirable. The Dragonwing chips power nautical vessels, harbour cranes, manufacturing plants and various drones. One has to appreciate this thorough thinking on durability that the Fairphone company puts in its design, reaching well beyond mere looks.

![Fairphone is powered by the same Dragonwing chip that is used in ships, cranes, drones and industrial plants](https://willem.com/global/images/1a9d4dc0c642.webp)

![Designed to last and easy to service: Fairphone 5 can be opened with standard tools](https://willem.com/global/images/161b2dd6a5ef.webp)

The phone comes with standard Google Android, fully compatible with all the apps in the Play Store. You are free however to unlock the bootloader and install any software you want. One popular alternative option is Google-Free Android, /e/OS (https://e.foundation/e-os/). This gives you a lean and clean operating system that you can tailor to your liking and which can be used without **any** need for a cloud account. It is easy to love the privacy advantages this liberation from American big tech gives you, but I am particularly stunned by the increase in software efficiency: without all the crap my battery usage is measured in **DAYS** when running /e/OS.

![With deGoogled Android, my Fairphone's battery life is measured in days](https://willem.com/global/images/96f87ceaa132.webp)

Inspired by the freedom of the serviceable Framework_laptop (https://willem.com/en/2025-02-10_better-laptop/), I decided to switch to Fairphone about a month ago. Migrating from iPhone can be a bit tricky. I would recommend that you first free_yourself_from_Apple_Photos (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/) and that you switch to an open_standard_for_addressbook_and_calendar_synchronisation (https://willem.com/en/2020-02-28_your-own-addressbook-and-calendar-cloud/). The less dependent you are on any particular proprietary service, the easier it is to switch. There are many subtle vendor lock-in mechanisms possibly playing you, like:

- **Parental controls** on your kids' iPad require an Apple device for yourself, too; I tuned down parental control as I seek to instill more self responsibility on my kids, this is definitely a work in progress

- **Safari's Reading List and Bookmarks** do not sync to non-Apple devices; I solved this by adopting a simple bookmarks file

- **Find My** (Friends, AirTags, Peripherals ) only works if you have an Apple device; alternatives exist but switching is cumbersome

- **Facetime** video calls can only be initiated if you have an Apple device; luckily there are many other apps for video calls

- **iMessage** is Apple only, I switched to WhatsApp, Signal and e-mail

- **Books** bought in the Apple iBook Store can only be read on Apple devices, stores like Kobo work cross-platform and there are various DRM-free options available, too

- **Structured health and fitness data** is locked in Apple HealthKit, exporting it is possible, but it flattens and simplifies the data or requires third-party apps to read the exported files

Your mileage may vary, but none of these things kept me from switching. Give yourself a chance to get used to Android, and you'll probably find features and freedom unlike on other platforms. Some things I like:

- I can use rsync to automatically copy photos and workout data to my laptop, no cloud needed, over the local wifi using Syncopoli (https://f-droid.org/packages/org.amoradi.syncopoli/)

- I use the minimalistic "unLauncher" (https://f-droid.org/packages/com.jkuester.unlauncher/) instead of pages full of colourful icons and widgets screaming for attention

- I can explicitly *allow* specific apps to continue running in the background, without any restriction on power or computing resources, this is useful for some of the weird things I do for work

- I can have selective push email notifications using IMAP-idle (https://en.wikipedia.org/wiki/IMAP_IDLE) and the Thunderbird-app (https://f-droid.org/packages/net.thunderbird.android/) without having to rely on vendor specific protocols or cloud services like Microsoft 365, Gmail or iCloud

- I upgraded the storage memory for_€90 (https://duckduckgo.com/?t=ftsa&q=SanDisk+MicroSDXC+Extreme+Pro+1TB+200MB%2Fs+&iax=shopping&ia=shopping) to 1TB, a similar upgrade of memory in iPhone 16 Pro costs € 630

I'm sure that I'll discover more things to like as I expect to keep using the Fairphone. There was *one last thing* that I wanted to do to make my Fairphone my own. I like things to have their natural, raw colour. My_watch_is_titanium (https://willem.com/en/2020-11-30_designing-my-own-watch/)  and I_removed_the_paint_from_my_bike (https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/). I decided to disassemble the Fairphone and remove its PVD coating, making the aluminium fully visible in its natural colour. I used some sanding paper to carefully brush the metal frame. I know this look is not for everyone, but I stumbled upon this post on X gaining much attention, ensuring me I am not alone in appreciating the raw beauty of well used tools. The phone is now uniquely my own, I love it.

![Let tools be tools: let the aluminium be like a canvas depicting usage patterns](https://willem.com/global/images/5c6f7efa4658.webp)

![Using sanding paper to remove paint from the Fairphone](https://willem.com/global/images/94f1e27c8056.webp)

## Conclusion

I have changed my mind on frequently upgrading my smartphone. The nascent years of modern smartphone innovation are over. Newer models are increasingly similar to previous models. The real tangible benefits of having a new smartphone are getting smaller. Especially if you can service parts that are subject to wear and tear. And if you remove unneeded weight and bloat from the software, you'll be in for some great action - much like the Porsche on track!

### Fairphone €50 discount

Consider buying a Fairphone? If you use this link you'll get €50 discount: shop.fairphone.com (http://rwrd.io/a80ja9v?c).

![My Fairphone 5 in natural aluminium with the unLauncher on Google-Free /e/OS](https://willem.com/global/images/57aa1563d072.webp)

---

## Better Laptop

*Assembling the DIY Framework 13* · 2025-02-10 · https://willem.com/en/2025-02-10_better-laptop/

Consumer electronics often lock us into sealed hardware and forced upgrades, creating enormous e-waste. Framework challenges that norm by making laptops you can service, upgrade, and customise, which extends their lifespan and cuts down on unnecessary e-waste. My Framework 13 arrived this week and I assembled it myself. This post is a quick rundown of what that process involved, why I chose this brand, and what’s next.

## Why Framework?

Framework’s core idea is simple: create well-built, repairable devices that aren’t doomed by minor failures or limited upgrade paths. Unlike most modern laptops, the Framework Laptop has user-friendly internals—no proprietary glue, minimal specialised screws, and swappable modules. This reduces e-waste and keeps your device relevant for longer. You are free to change parts, perform upgrades or repairs. Parts can be bought via the Framework Marketplace or elsewhere. The computer uses many standard components so you're not necessarily bound to Framework.

## The Unboxing and Components

The laptop arrives in straightforward, eco-conscious packaging. Inside, you’ll find the main chassis, the display panel and bezel, the keyboard assembly, and optional port modules. This design keeps things modular. If a part breaks or you want to upgrade, you swap in a new module rather than throwing out the entire device.

![Straightforward eco-friendly packaging](https://willem.com/global/images/08562f1ac1ca.webp)

![Inside the box you'll find the different parts you need to assemble the laptop](https://willem.com/global/images/9c32876aa7ce.webp)

### Assembly Steps

All parts, boxes and internals have QR codes on them that point you to online manuals explaining how to service or assemble the machine. You only need standard, simple tools (that are included with your purchase). The process is pretty straightforward:

- **CPU selection: ** Upon ordering you select the processor and main board, this comes installed in the chassis. You can change it later if you want to change your CPU type or if you want to install an upgrade. Framework sells a compact case to repurpose old main boards as standalone computers. I selected the AMD Ryzen™ 7 7840U (up to 5.1GHz, 8-core/16-thread), the best option currently available.

- **Memory installation:** The motherboard includes two accessible RAM slots. I installed 2x 48GB RAM modules—an easy fit with clear instructions—resulting in a spacious 96GB of RAM, it's an unusually high amount for a laptop!

- **NVMe SSD:** I opted for an 8TB NVMe drive. It slides into the dedicated slot and secures with a single screw. The ability to choose and replace storage is a key selling point. I like a lot of (fast) integrated storage as I seek to cut my dependencies on cloud services.

- **Matte display bezel: ** Framework offers a 3:2 high-resolution panel, ideal for coding. The matte finish cuts glare, and attaching the bezel requires just a bit of careful alignment. I opted for a 'boring' black bezel, but if you fancy you can select all kinds of colours.

- **Keyboard and top cover: ** Different keyboard layouts are available. Once the cable is connected, the top cover magnetically snaps into place. I choose a standard Linux keyboard, but you can go bonkers with all black or all transparent keys.

- **Closing the chassis: ** The laptop’s bottom case attaches with standard screws. If you need to reopen it, it’s simple—no prying or special adhesives. The screws also locks the keyboard on the chassis. 

- **Swappable ports: **  Each side of the laptop has port slots. You can choose USB-C, USB-A, HDMI, DisplayPort, Ethernet, or microSD. This flexibility saves buying extra dongles. 

![Installing the two 48GB RAM modules is easy](https://willem.com/global/images/376d5894c813.webp)

![The 8TB SSD is secured with a single screw](https://willem.com/global/images/6bef8e4fd01e.webp)

![I choose a standard Linux keyboard featuring no Windows but a 'super'-key. I like things SUPER. ](https://willem.com/global/images/b3b04c8f39da.webp)

![The keyboard cover snaps into position using magnets and is secured when you tighten the screws in the bottom cover](https://willem.com/global/images/633df9faff2b.webp)

![Installing the display's bezel is easy, you can chose many different colours - I chose boring black.](https://willem.com/global/images/7147c64086c0.webp)

![The case is securely closed by 5 standard screws (screwdriver is included!)](https://willem.com/global/images/a4df07a234c5.webp)

![The laptop features swappable port modules, enabling you to choose your own ports for I/O.](https://willem.com/global/images/5e44d8b2cf65.webp)

![Freshly assembled, looking good.](https://willem.com/global/images/19b739ef3db5.webp)

## Setting up Debian GNU/Linux

I created a bootable USB drive using a Windows PC by downloading a Debian installation ISO. The Framework boot menu recognised it immediately, and the Debian installer ran without issue. Networking, trackpad, and display features worked out of the box, which is a relief compared to some other_laptops’_patchy_Linux_support (https://willem.com/en/2020-03-09_making-my-own-tablet-os/).

![Using Windows to install Linux, who doesn't love some sweet irony.](https://willem.com/global/images/3a8d2f514d4d.webp)

![The Debian 12 installer is recognised by the laptop without any need for dark magic. ](https://willem.com/global/images/79fa8218b6a7.webp)

## First Impressions

The Framework 13 looks and feels as polished as many premium notebooks, yet it remains serviceable and upgradable. The design is relatively slim and durable, which counters the notion that repairable devices must be clunky or compromised. Being able to customise ports is especially handy. No more searching for dongles or hubs each time you need a different I/O option—just swap an port module.

![My Framework 13 laptop running Debian GNU/Linux and Sway WM reporting for duty.](https://willem.com/global/images/a766405ae1d1.webp)

Performance so far is excellent, thanks to the choice of modern CPUs and a generous amount of RAM and SSD space. While assembling the laptop takes more effort than a typical off-the-shelf device, it’s rewarding to know you can replace components later. Framework’s documentation is clear, and the process is user-friendly if you follow the step-by-step guide.

## Conclusion

My next step is preparing Debian for daily use—installing developer tools, enabling encryption, and refining workflows. This aligns with my_shift_to_free/libre_software (https://willem.com/blog/free-software/) and reducing e-waste. I’ll share more details soon; for now, the Framework 13 proves we can—*and should*—demand better from consumer electronics.

![Framework 13: a better laptop made with love - and assembled by myself.](https://willem.com/global/images/7dd0644642d5.webp)

---

## Podcast Downloader

*A Simple, Open-Source RSS Podcast Fetcher* · 2025-01-27 · https://willem.com/en/2025-01-27_podcast-downloader/

Tired of being constantly nudged toward "more relevant content", I built a script to break free from commercial or closed-source podcast apps. I just wanted a tool that quietly grabs my favorite shows—no fuss, no tracking, no extras. Read this post to learn more; it's free/libre software under GPLv3.

![Left: Apple Podcasts, Right: Apple iBooks—both screens dedicate around half the interface to content I didn't request](https://willem.com/global/images/63c62beb99f0.webp)

Modern apps are optimised for engagement, with patterns to keep you tapping into more content you *might* like - I hate this. They push recommendations, promotions, or what the app developer wants discovered, overshadowing my own library and nudging me away from my original choices.

So I wrote podcast-downloader, a small Bash script under the GPLv3 license. It uses common GNU/Linux utilities to fetch podcasts from an RSS feed and optionally tag metadata.

## Key Features

- **RSS-based:** Provide any valid RSS feed URL; the script downloads audio files specified in enclosure-tags.

- **Simple Usage:** Just run one command; no extra packages needed (optional id3v2 for tagging).

- **Cron-Friendly:** Perfect for adding to your crontab—automated daily or weekly downloads.

- **Open-Source:** Available as free software under GPLv3. Fork it, modify it, and share improvements.

## Usage

You can find the code, full instructions, and more details here: https://source.willem.com/podcast-downloader/ In a nutshell:

- Download the script from https://source.willem.com/podcast-downloader/podcast-downloader.sh

- Make it executable: **chmod +x podcast-downloader.sh**

- Specify your feed, download directory, and optional album name: **./podcast-downloader.sh -u "https://example.com/podcast.rss" -d "/path/to/download" -a "My Podcast Album"**

- Schedule in crontab if you want regular downloads.

## Conclusion

Enjoy an ad-free, suggestion-free, and completely free-as-in-freedom podcast experience! Feedback and contributions are welcome.

![Downloaded podcasts on my A&K audio player—modern Apple nudges ironically sent me back to the old iPod-like design (o sweet irony)](https://willem.com/global/images/5d2e9bc3b761.webp)

### Update: Auscultare, a Unix-Style Android App

Following the Unix philosophy of small, focused tools, I've created the perfect companion for this script. While the downloader's only job is to fetch the audio files, Auscultare is a simple, libre Android app whose only job is to play them and track your progress. It's a classic toolchain where the filesystem is the pipe that connects the two.

Related posts:
- [Auscultare Podcast + Audiobook Player](https://willem.com/en/2025-08-29_auscultare-podcast-audiobook-player/)

---

## Champions League of Webdesign

*Cutting-edge technology meets top-tier digital demands* · 2025-01-23 · https://willem.com/en/2025-01-23_champions-league-of-webdesign/

Creating a high-performance website is an art form that blends cutting-edge technology with an eye for design and commerce. At escape.nl, home to one of Amsterdam’s most iconic venues, every detail reflects the precision and care required to deliver seamless, engaging experiences to large audiences. This post highlights often-unseen details with big impact.

## Key Highlights

- **High-Performance Infrastructure** at one of the Netherlands’ top data centres

- **Streamlined Design Philosophy** minimising distractions for maximum impact

- **Security & Speed** through static content delivery and rigorous testing

- **Tailored Mobile & Media Approach** optimising images and videos for any device

- **Ongoing Innovation & Collaboration** focusing on both technology and artistry

## Escape Amsterdam

Escape Club Amsterdam is one of the city’s oldest and best-known venues, attracting large crowds for performances by world-famous DJs like Afrojack, Nicky Romero, Roger Sanchez, and Fedde le Grand. It’s a key destination in Amsterdam’s nightlife. As one AAA-customer once told me, this is the Champions League of web design: it demands your very best. Working on a project like this is both an honour and a serious responsibility.

![Escape Club Amsterdam, one of the city's oldest and best-known venues](https://willem.com/global/images/846a4d879e96.webp)

## Looks That Impress, Speed That Stays

One of the non-technical goals was immediate immersion—almost stepping into the club—via full-screen video. Yet behind this visual impact lies engineering for fast performance, even under loads from TV exposure or social media virality. Collaborating with the club’s media team, two distinct video files ensure instant playback on wide or portrait screens, each carefully cut to fittingly deliver the vibe.

![Immediate immersion via full-screen video](https://willem.com/global/images/860b56954422.webp)

![Two distinct full-screen videos tailored for playback on wide or portrait screens](https://willem.com/global/images/47f50b951cc5.webp)

## Hosting When The Stakes Are High

Escape.nl benefits from a purpose-built, vertically integrated setup at one of the Netherlands’ most advanced_data_centres(https://bit.nl) — certified for government and hospital data. This isn’t a dime-a-dozen approach. Deliberate choices in hardware, storage, and network ensure robust performance for thousands of simultaneous visitors. Hosting isn’t a cheap_commodity_VPS (https://willem.com/en/2019-02-28_understanding-the-security-concerns-in-shared-hosting/); it’s an integral product feature, ready for anything.

![BIT.nl datacentre - with Yours Truly inside :-)](https://willem.com/global/images/8bfb81b3abef.webp)

## Smarter Content Delivery for Superior Speed and Security

Most run-of-the-mill websites (like WordPress) rely on per-request server processing—querying databases and exposing vulnerabilities (for example, a public login screen at /wp-admin). Instead, Escape.nl uses a separation of content management and public-facing delivery. The site serves pre-generated, minified static pages via Nginx, backed by RAM file caches, SSD storage, and HTTP/2. With fewer moving parts, it loads faster, scales more easily, and reduces potential security risks.

![Separating content management from content delivery for speed and security](https://willem.com/global/images/ab8e39fc4be5.webp)

## Less is More: Streamlined Design Philosophy

Every choice in the site’s design reflects a “less but better” ethos, with fewer buttons, plugins, and dependencies. This simplicity improves performance and directs attention to the “commercial funnel,” such as tickets and VIP table sales, with clear calls to action. Thinking about commerce is not an afterthought; Escape.nl doesn’t even have a homepage, so guests land directly on the club agenda—one step closer to a night out without extra clicks.

![Large buttons directing the attention to the commercial funnel](https://willem.com/global/images/daa7b905f90d.webp)

## Touchscreens at the Forefront

With 80% of visitors arriving on mobile, touchscreen gestures like swiping are essential. This isn’t just an old ‘mobile-first’ mantra; it reflects today’s reality. Navigation, media playback, and visual flows are refined to perform fluidly across screens. Meanwhile, advanced tools generate multiple image and video versions, optimised for varying resolutions and orientations. This ensures razor-sharp details for club artwork, giving visual artists the stage they deserve without compromising speed or performance.

![Razor-sharp details for club artwork](https://willem.com/global/images/181ee4f13b10.webp)

![Supporting touchscreen gestures like swiping](https://willem.com/global/images/62ccce6968b9.webp)

## Asset Optimisation for Visual Impact

Large images and videos needn’t lead to slow loading times. Tools like jpegoptim, pngquant, and ffmpeg individually optimise each asset for maximum quality at minimal size. This per-file approach demands serious compute power, reinforcing the focus on robust hosting. For those interested in deeper technical details and the exact savings in bytes, see this_dedicated_post (https://willem.com/en/2018-09-26_optimising-images-for-the-web-and-performance/). The outcome is striking visuals without sacrificing performance. The self-hosted, integrated gallery offers a rich glimpse into Escape Club’s history, ad-free and fully under the club's editorial control. Unlike social media platforms like Instagram, which feature ads, tracking, and external censorship, this gallery provides an authentic, uninterrupted view of the club’s legacy.

![The integrated gallery offers a rich glimpse into Escape Club’s history](https://willem.com/global/images/f234428c5abc.webp)

![All visuals are individually optimised with multiple copies for different screens, maximising the responsive design's fidelity](https://willem.com/global/images/7a4a2d8714b6.webp)

## Easy Navigation, Effortless Management

Escape.nl is easy to explore thanks to a conventional menu and a sitemap on every page’s footer. This navigation includes clear calls to action that guide guests toward tickets or VIP services, enhancing conversion. Meanwhile, a flexible content management system empowers the team to make updates via app or web, perfect for last-minute changes or event announcements.

![The website features a conventional menu (left) and a context-aware sitemap (right)](https://willem.com/global/images/88e2476e38f8.webp)

![An easy to use app enables Escape's staff to manage the entire website](https://willem.com/global/images/66f994fdbfcf.webp)

## Rigorous Testing for Excellence

Quality control is vital. Escape.nl undergoes external evaluations with Chrome Lighthouse, Google PageSpeed, and W3C standards. PageSpeed is critical for search engine ranking yet challenging to optimise, but the site meets top benchmarks for speed, accessibility, and SEO—essential for welcoming and retaining guests. Meanwhile, it’s monitored 24/7, crucial for a club operating outside office hours; read more about that here (https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/). Custom error pages also offer a soft landing, guiding “404 folks” to relevant content instead of letting them slip away.

![Scoring 100 out of 100 points in Google PageSpeed insights for speed, accessibility and search engine optimisation ](https://willem.com/global/images/becff3a0f3c0.webp)

## Conclusion

Exceptional websites aren’t a single milestone; they’re an ongoing journey. As Steve Jobs famously said, real magic happens where technology meets the liberal arts. I’ve been privileged to work with some of the best, forging a synergy of artistry and precision, and not every project is a match. If you’re excited to see if we align, get in touch via mail@willem.com or schedule a call to explore your vision and create something extraordinary together.

![Magic happens at the intersection of technology and liberal arts, as Steve Jobs often said ](https://willem.com/global/images/a907377b82c7.webp)

---

## Master of Change

*Thriving amidst uncertainty using Rugged Flexibility* · 2025-01-18 · https://willem.com/en/2025-01-18_master-of-change/

Change is one of life's few constants. Yet, even with its inevitability, facing it head-on can feel daunting and disorienting. In the book "Master of Change", Brad Stulberg offers a thought-provoking guide to not just survive but thrive in an ever changing world.

As you grow older change becomes inevitable. Think of loss (https://willem.com/en/2024-09-10_i-see-dead-people/), moving_to_a_new_place (https://willem.com/en/2022-11-01_moving-to-the-countryside/) or becoming_a_parent (https://willem.com/en/fatherhood-the-personal-thread-behind-the-technology/). Change is an integral part of live and yet a lot of people seem to resist it: holding on to a desire to "return to normal" after disruptions - sometimes described as "homeostasis".

## Homeostasis versus Allostasis

In his book "Master of Change", Brad_Stulberg (https://www.bradstulberg.com) explains that the concept of "homeostasis" can be limiting in the context of life's constant flux, as it implies stability is achieved by resisting change. A more dynamic alternative is presented, "allostasis", suggesting we achieve balance by adjusting and evolving in response to change. Instead of clinging to an unchanging status quo, you can embrace change as an opportunity for growth and adaptation. This perspective underpins the concept of "rugged flexibility", helping us to maintain our identity while evolving with life's demands.

![The author of the book 'Master of Change', Brad Stulberg on his website bradstulberg.com](https://willem.com/global/images/8707daefaf85.webp)

Brad_Stulberg (https://www.bradstulberg.com), celebrated for his work on human performance and personal growth, dives deep into the nature of change. His concept of "rugged flexibility" stands out as a central theme - an idea that combines steadfastness in your values with a willingness to adapt to the unpredictable. I really like how the author maintains a pragmatic, to the point, approach. It is masterfully written, drawing on spirituality and Zen wisdom without ever becoming too much "woo woo". It's a practical philosophy designed to help you face change without losing yourself in the process.

![The book frequently draws on timeless stories and philosophies from ancient thinkers, offering insights that remain strikingly relevant and thought-provoking in today's world.](https://willem.com/global/images/790887cc69de.webp)

## Key Takeaways

At the heart of Master of Change is the idea of rugged flexibility. Stulberg describes it as striking a balance: holding firm to what truly matters while allowing yourself to bend and evolve when circumstances shift. This duality isn't about being rigid or overly fluid; it's about knowing where to stand your ground and when to pivot.

Stulberg also emphasises the importance of approaching transitions mindfully. He introduces tools like:

- **Rituals:** Small, grounding habits that provide a sense of normalcy.

- **Self-reflection:** Regularly checking in with your values and emotions to ensure alignment.

- **Incremental changes:** Tackling change one manageable step at a time, rather than being paralyzed by the scope of the challenge.

These principles are designed to help you navigate change with clarity and composure, avoiding burnout or the trap of perfectionism.

![The concept "Rugged Flexibility" stands out as a central theme in the book Master of Change](https://willem.com/global/images/1c21aaa16223.webp)

## Moment for Reflection

Stulberg's work is as much about asking the right questions as it is about offering solutions. Here are a few prompts to consider as you reflect on your relationship with change:

- What are my core values, and how can they anchor me during uncertain times?

- Am I holding on too tightly to outdated beliefs or habits? Where might flexibility serve me better?

- What small, intentional steps can I take to ease my way through the changes I'm facing?

## Conclusion

The book Master of Change offers insightful guidance on navigating life's inevitable transitions with resilience and adaptability. By embracing rugged flexibility and anchoring yourself in core values, this book provides thoughtful perspectives and practical tools to thrive amidst uncertainty and change. Having navigated various changes myself, I'm grateful this book was recommended to me, and now I'm glad to pass that recommendation on to you - it's well worth exploring.

---

## Data versus Feeling

*Running two marathons in 6 weeks* · 2024-12-19 · https://willem.com/en/2024-12-19_data-versus-feeling/

Earlier this month I ran the Valencia Marathon (42KM), just six weeks after finishing my first ever marathon in Amsterdam. I used two different approaches for these races: running on feeling and running on data. The experience differed greatly, let me explain it in this blog post.

## Background

If you're a friend of the blog, you know I have a thing for data (https://willem.com/blog/data/) and I often experiment with different health_sensors (https://willem.com/en/wearable-sensors-measuring-the-body-questioning-the-data/) and fitness_trackers (https://willem.com/en/sport-and-the-body-training-tracking-and-learning-to-listen/). After completing_my_first_half_marathon (https://willem.com/en/2024-03-24_half-marathon/) earlier this year, I asked myself about the usefulness_of_health_and_fitness_data (https://willem.com/en/2024-01-16_health-and-fitness-data/). The poll under that post shows that 17% of you do not collect any data at all.

Pro data folks would argue that only those things that you measure can be managed or improved. Health and fitness data can track progress you make. Folks use it as a motivator and as a way to show off to their friends on Strava (https://strava.com).

In contrast, people critical on data often cite the importance of feeling. As a species we have evolved for thousands of years without data, we're wired to operate using our own senses. Data can have negative outcomes, including negative emotions and it can introduce an artificial pressure leading to stress. I recommend reading the extensive paper "The_Dark_Side_of_General_Health_and_Fitness_Related_Self-Service_Technologies" (https://willem.com/etcetera/2024-12-19_chen-et-al-2024-the-dark-side-of-general-health-and-fitness-related-self-service-technologies-a-systematic-review-of.pdf) by Chen_et_al (https://journals.sagepub.com/doi/10.1177/07439156231224731). that discusses the broad scope of academic literature on this subject.

I am somewhere in the middle, experimenting with different approaches to see how it works for me. With two marathons scheduled within six weeks, I decided to do a little experiment: run one marathon on feeling, one other on data.

## Approach A: Feeling

The first_marathon (https://willem.com/en/2024-10-20_marathon/) I ran with no realtime data. I relied solely on my feeling, I wore an analogue_watch (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/) and 'measured' distance by simply keeping track of the various signposts along the route. I chose my pace by feeling my body, trying to balance speed and stamina. I did wear my WHOOP (https://willem.com/en/2022-01-14_wearing-whoop-4-0/), but it operated in the background, providing me with heart rate data after the race.

## Approach B: Data

The second marathon I ran using realtime data. I used an Apple Watch Ultra 2 showing my current pace, average pace, current heart rate, elapsed distance and time. In addition to its display, the watch vibrated every 1KM showing a summary of progress so far. I planned my pace in advance, targeting a specific average time that would have me finish the 42 kilometers slightly faster than my first marathon.

## How did it go?

Feeling is a powerful, worthy gauge. But, with dopamine and excitement during the race it is hard to feel the difference between a 150 BPM pace and a 165 BPM pace, while the latter will be much harder to maintain for many hours. Before my first marathon I ran several training rounds, up to 30 kilometers. I learned how to pace myself up to this distance. But, when I exceeded the 28K mark during the full marathon, my performance crashed rapidly. I could not maintain the pace I started, forcing me to slow down and mentally fight the immediate desire to stop. Eventually I overcame this dip and finished the marathon in 4 hours and 15 minutes.

![Approach A: I could not maintain the 'nice feeling pace', causing a mid-marathon crash (as shown in post race data)](https://willem.com/global/images/81547313ecbb.webp)

![Approach A: You can see my heartrate peaking mid-marathon, way too high to be durable; by slowing down I got it back to a workable zone](https://willem.com/global/images/b8ce2194acc1.webp)

Based on the experience of my first marathon, I learned that I must start the second race slower. I settled on a 5'55"/km pace as it was an easy to remember number and it was very close to the average pace of my first marathon. It was my goal to stay close to this pace for at least the first 35 kilometers. After that I planned to 'let go' and see what kind of pace I could run for the last kilometers.

![Approach B: Managing the pace for the first 35 kilometers, then speed it up](https://willem.com/global/images/0912c7a4847f.webp)

I regularly checked my watch while running, continuously adjusting my pace by going a little slower or faster to keep the numbers in check. In addition to my pace I kept an eye on my heartrate. I knew that if the BPM would go up too much, it would be impossible to maintain the pace. I managed to stay under 155 BPM for the first 60% of the distance. I felt much better, feeling way more capable to complete the race. In the end I was able to overtake a lot of folks that crashed, stimulating me to go even faster. The last kilometer was my fastest and I finished the marathon in 4 hours and 8 minutes.

## Conclusion

After finishing my first, feeling based, marathon I described it as "nearly spiritual in its deepness". I still look back upon that experience as it having a profound effect on me. Crashing and rising up again made me realise that I am far stronger than I often think. The mental power this gave me, still reverbs within me. In contrast, even although I am proud of besting my PR, the second marathon feels more empty to me. The data made me go faster, but it took something away: it was less challenging.

Naturally I understand that I can "rediscover" this challenge by making it harder for myself: like going faster. This is what I plan to do for the next year: targeting a sub 4 hour finish time, possibly even better.

But ultimately I hope that by gaining more experience, I will be able to know myself and my body well enough to do this without data. To achieve peak performance by balancing body and mind. This is something to run for, ha!

![Finishing 2 Marathons in 6 weeks (Left: Amsterdam, Right: Valencia)](https://willem.com/global/images/0022d3a4d903.webp)

---

## The Problem With Bitcoin

*Everybody Wins* · 2024-12-09 · https://willem.com/en/2024-12-09_the-problem-with-bitcoin/

A few days ago the value of a single Bitcoin briefly surpassed $100K, a milestone that seemed unimaginable just some years ago. I wonder how durable the ever growing love for Bitcoin is. Let's have a closer look at the mechanisms underpinning the world's most famous cryptocurrency.

## Bitcoin's Brilliance

Described in a_paper (https://willem.com/etcetera/2009_satoishi-nakamoto_bitcoin.pdf), Bitcoin was introduced in 2009 by an anonymous entity known as Satoshi_Nakamoto (https://en.wikipedia.org/wiki/Satoshi_Nakamoto). In this paper an alternative for a cash system with central control (e.g. a central bank) is given using software that runs on multiple computers (or peers) owned by different organisations and people.

![Abstract from Satoshi Nakamoto's original paper (2009)](https://willem.com/global/images/cffc3618ec86.webp)

Each peer in the network is able to track *all* transactions using cryptographic signing. Transactions are signed subsequently where the output of preceding transactions form the cryptographic input for new ones: forming a chain, the blockchain.

![The blockchain principle visualised: output from previous transactions form the cryptographic input for new ones](https://willem.com/global/images/2c2decd3a9b7.webp)

Over time, Bitcoin has grown from a niche technology to a widely recognised financial asset. As of 2024, over 52 million unique Bitcoin addresses hold balances, highlighting its expanding adoption globally. Bitcoin’s value, initially negligible at its 2009 launch, set a new 'all time high' at $100,000 in December 2024, though it remains volatile. The cryptocurrency has gained traction as both a speculative asset and a financial tool, especially in regions with unstable currencies or limited banking access.

![2009-2024: Bitcoin's rise in value is hard to ignore](https://willem.com/global/images/8b0c62b15d64.webp)

While I appreciate the underlying cryptographic technology as an alternative for fiat money, I do think that the thought of Bitcoin's value going go up indefinitely is problematic. As long as prices go up, everybody is a winner - but it requires a (nearly) constant influx of new money. Where will Bitcoin's price stabilise? Nobody really knows!

## Tulip Mania

In a way Bitcoin's current price rising reminds me of the Dutch Tulip Mania, a financial phenomenon in the Dutch Golden Age (1630s), which is often described as one of the first recorded economic bubbles. It revolved around the speculative trading of tulip bulbs, which became highly sought after. During the height of Tulip Mania, many investors operated under the assumption that tulip prices would continue to increase due to the strong demand and limited supply of rare bulbs, much like today's view on Bitcoin. This belief was fuelled by stories of extraordinary profits and the rapid rise in prices. However, when confidence in the market faltered in 1637, prices collapsed sharply, leading to financial losses for many speculators.

![Yesteryear's speculative trading: The Dutch Tulip Mania](https://willem.com/global/images/59340563ae37.webp)

## Dependency on Exchanges

Bitcoin’s role as a "store of value" is fundamentally tied to the ability to exchange it for fiat currencies, as its widespread use in everyday transactions is limited. Unlike cash, Bitcoin is not universally accepted for direct purchases, necessitating reliance on exchanges to convert it into spendable forms of capital.

This reliance introduces bottlenecks, as exchanges are subject to increasing regulatory scrutiny, particularly through stringent "Know Your Customer" (KYC) and anti-money laundering (AML) procedures. These regulations add layers of centralised oversight and reduce the pseudonymous nature originally associated with Bitcoin. As a result, while Bitcoin itself operates on a decentralised network, its practical use remains partially constrained by centralised infrastructure.

A sudden shift in sentiment about Bitcoin's value could lead to a mass sell-off, overwhelming exchanges with "cash-out" requests. This raises concerns about whether exchanges hold sufficient fiat reserves to honour withdrawals.

## Conclusion

As long as Bitcoin's price is rising everybody will be happy, but I suspect there is a limit to its growth. Will Bitcoin's price eventually stabilise or will it drop sharply once the influx of new money stops? Be careful with exposing yourself to this volatility, nobody really knows what the peak valuation of Bitcoin will be or when it will be reached!

*Disclaimer: This is not financial advice, please do your own research.*

---

## Write your own words

*Against AI for writing* · 2024-11-11 · https://willem.com/en/2024-11-11_write-your-own-words/

Two years ago ChatGPT launched, it popularised AI as tool to create things. Large language models generate text based on prompts, outputting words that are hard to distinguish from being written by a person. The short term benefits are clear, but I suspect many people underestimate the long term costs.

Ever since OpenAI launched ChatGPT, I have been actively working with the new technology to understand its capabilities. I have programmed_with_AI (https://willem.com/en/2023-05-03_using-ai-to-generate-code/), I_learned_with_AI (https://willem.com/en/2024-05-11_developing-a-native-ios-app/) and I_taught_people_to_work_with_AI (https://willem.com/en/2023-10-14_giving-ai-training/). I went back_to_the_University (https://willem.com/en/2023-02-08_back-to-the-university/) to brush up my skills for technologies underlying AI. I wrote a_real_looking_blog_post_with_AI (https://willem.com/en/2022-10-23_muse-in-carre/). But moreover, I have been thinking_about_the_impact_of_AI_on_our_society (https://willem.com/en/2022-09-11_computer-says-no/).

It is a powerful tool, capable of doing amazing things like detecting_cancer_from_MRI_images (https://news.harvard.edu/gazette/story/2024/09/new-ai-tool-can-diagnose-cancer-guide-treatment-predict-patient-survival/) or structuring_and_documenting_computer_code_for_reusability (https://willem.com/en/2023-12-15_backup-rotation-scheme/). Everybody can use AI, and therein lies a potential problem, specifically for content creation.

## Uniquely human

If we all use the same tools to *generate* content, everything will start to look the same eventually. We risk losing diversity. Especially as new computer models are being trained on newly generated content. It is a recursive loop causing new content to appear more similar to existing content.

You can already see this problem if you look at Google search results. People have noticed that results are getting worse. This is often attributed to an increasing amount of search-engine-optimised but low-quality content. You should check out this paper by Bevendorff_Et_Al (https://willem.com/etcetera/2024-03_bevendorff-et-al.pdf). for a longitudinal investigation of SEO spam in search engines. Low-quality, but *good looking* content is pushing the actual valuable content away.

What can we do about it? For sure the folks that make the computer models will come up with intelligent filters designed to exclude low-quality material used for training. **I expect that there will be a premium on content that is not generated by AI**. Just like how old low-background_steel (https://en.wikipedia.org/wiki/Low-background_steel) is valued because it is not contaminated with traces of nuclear fallout present in modern steel.

![Steel in old shipwrecks is valued for its purity - HMS Royal Oak Seabed (Scapa Flow)](https://willem.com/global/images/0a3772f38bb9.webp)

## Detecting AI Content

Did AI write this? How differently does ChatGPT write when compared to humans? Researchers from Preply looked_for_signs_to_detect_AI_written_texts (http://preply.com/en/blog/ethical-essay-etchings/) to determine the origin of student essays. They analysed 12,000 essays and created an analyses of the most frequent words, phrases and errors in both human-written and computer-generated works. These are some of their key takeaways:

- Human-written texts were far more likely to feature mistakes, with 78% of texts containing at least one error, compared to only 13% of AI essays

- The most common punctuation errors in human texts included missing commas, hyphen errors and missing spaces

- ChatGPT uses 35% less unique vocabulary than humans, with only 7,308 unique words overall, compared to 11,248 unique words from human-written texts

- Humans are more likely to use common nouns and verbs like 'one' or 'people', while ChatGPT favours complex and specialised terms like 'cultural' or 'economic'.

![Research findings by Preply: Distinguishing AI-written texts from Human-written texts](https://willem.com/global/images/25bd364c115c.webp)

## Art instead of Artificial

If you care about content you should consider seeing it as art, there can be a human quality to it that determines its meaning for other humans. In a detailed comparison Gold_Penguin (https://goldpenguin.org/blog/ai-vs-human-art/) compares human-created art with AI-generated art. Their key findings in spotting AI-created content are:

- **Overuse of patterns:** Machines don’t do well with entropy or random data, making AI generators more likely to repeat certain patterns that are prominent in other images

- **Complexity**: AI struggles to replicate the unique or unusual elements that human artists are more likely to experiment with.

- **Lack of emotion**: While they could sometimes be visually better, AI art lacks the emotional and conceptual depth of human art.

- **Mistakes**: Have you ever seen a piece of art and you just know it’s fake even though you can’t put a finger on why it is? That’s the uncanny valley. It usually manifests in small instances rather than something right in your face. Six fingers, bleeding pupils, improper holding of objects — the list goes on. 

![Spot the real Monet (the Artist's garden at Vétheuil) - you're probably able to easily find it, despite both images being pretty](https://willem.com/global/images/28eee7ee0fa3.webp)

![Spot the real Van Gogh - an easy task if you look at the repeating patterns](https://willem.com/global/images/9a8319e2f477.webp)

Now I understand that not all texts are equally important and some may not be worth it to be elevated as pieces of art. There are very good usecases for AI-generators, including translations or summaries. I am not against large language models in general, I only argue that they should be seen as a tool with accommodating pluses and minuses.

## Conclusion

The more powerful a tool is, the greater the harm it *can do* - it is up to the person handling the tool to use it well. While large language models are powerful in their capabilities to generate good looking texts, its value is ultimately determined by the meaning humans attach to it. If museums full of art are any indication, I expect there will always be appreciation for things created by hand. We should start by simply caring a little more about the things we create, by writing our own words for example.

---

## Go Viral on X

*32K views in two days* · 2024-11-10 · https://willem.com/en/2024-11-10_go-viral-on-x/

Earlier this week one of my posts on the social network X went viral and attracted 32K views in two days. With no major presence on Elon Musk's platform, and no paid advertising, gaining that kind of attention is something special. Let me explain how this happened.

## The Post

If you have been following my blog, you may know that I enjoy_my_Apple_Vision_Pro (https://willem.com/blog/vision-pro/). The device attracts a lot of attention, a lot of people wonder what the device could do if it was given more software capabilities.

![My Apple Vision Pro](https://willem.com/global/images/797ea4d63c94.webp)

This week, Apple's newest Mac Mini became available in stores. It is a super powerful computer that is unbelievably small. Apple's marketing department made handy use of the 'cuteness factor' in their advertisement. Make no mistake, this small computer is a powerhouse that can be configured with up to 128GB RAM, 40 CPU cores and a whopping 8TB in super fast flash storage.

![Mac Mini](https://willem.com/global/images/ac3b9e0e5744.webp)

My post involved combining these two bits into one single post. With a well chosen visual, it could be something that would speak for itself. I figured to combine two pieces of Apple artwork into a single image, combine it with a simple tag line and post_it_on_X (https://x.com/wlmiddelkoop/status/1854369135628623974):

![My Post on X: Mac Mini x Vision Pro](https://willem.com/global/images/6c092b2a72e6.webp)

One thing that came in handy is that I have trained myself to be able to produce content right from my smartphone. I do not need a computer for Photoshop or Microsoft Word. This enables me to act right away when an idea strikes. On my iPhone I used Pixelmator to stitch the two images together:

![Image Editing on the go: Pixelmator on iPhone](https://willem.com/global/images/7f2b58c6db52.webp)

## Attracting attention

Posting something on X is one thing, having it discovered and seen by others is something else. The platform uses algorithms to determine what posts will be shown to who. If a posts gets liked by real, verified, folks, the algorithm takes this as a signal that the content is *good*. Then it continues to scale the post, collect more feedback in terms of likes and reposts, to further grow its status as viral post.

The hardest part is to get exactly those folks to like your post causing the algorithm to start its scaling. Your post needs a proverbial push to gain initial momentum, once up to speed it can continue to accelerate by itself. It is like a snowball starting to roll from a mountain, potentially causing an avalanche.

For this post I knew that there are a few high profile people on X that actively post about Apple Vision Pro. I figured that if they would see my post, chances were that one or two of them would like it or repost it. Using X's search function, I found the most popular posts on Vision Pro and manually noted the handles (e.g. @wlmiddelkoop) of the authors.

Then I constructed a_second_post (https://x.com/wlmiddelkoop/status/1854370880794529798), wrapping my original post, with an even simpler tag line followed by all the authors. This causes the authors to receive an alert that someone mentioned them. Not everybody will act upon it, but given a relevant post on a subject of interest, chances are folks will engage with it. And so it happened! Within just a few minutes, I received my first reactions from one of the authors I mentioned in the post.

![Post wrapping my original X-post, with a simpler tag line, mentioning authors that I manually selected to have posted on the subject of my post](https://willem.com/global/images/26c7ff2ef12d.webp)

When the post attracted two more interactions from some verified accounts, the algorithm began to push the post to more and more people's timelines. Leading to thousands of views in mere hours.

![32K views in two days](https://willem.com/global/images/5bc6859aeae9.webp)

One could wonder how reproducible this virality really is. Was it a coincidence? Did I play the system here, or did it work because it is actually *supposed to work*? When you think about it, it makes kind of sense that content that is actually liked by real people is shown more. The X-platform, like all other social media networks, optimises for engagement:  *good content* is its fuel.

## Takeaways

If your considering posting on social media yourself, I think it is a good idea to keep these things in mind:

- **Act aptly**: Have an idea? Just post it! If you think of something that triggers your imagination, chances are more people will feel the same. Do it on the go. Share it and find out.

- **Visuals**: Think about 'glance-ability', an image can say more than a lot of words. Create and combine things. 

- **Help discoverability**: Choose words that match your subject, be specific to help the algorithm determine what your post is about. If you were searching for your own post, what keywords or search phrases would you use?

- **Connect with audience**: Select 5-10 authors that may genuinely be interested in your post. Don't annoy people, but try to deliver value by reaching out. Would you appreciate it if someone else was reaching out with *that* post to you? Make it so!

- **Leverage momentum**: Popular topics are popular for a reason, post related content or reply to existing posts to benefit from existing trends.  

## Conclusion

Social media is no rocket* science, think of it as a computerised exchange of ideas. Have your idea reach people that think of similar things and your post can gain a lot of attention. Just imagine that *you* are the person you're trying to reach - if you would engage with your own content, others will likely do, too!

* despite being owned by the same guy as SpaceX, ha!

---

## Marathon

*Running my first full marathon* · 2024-10-20 · https://willem.com/en/2024-10-20_marathon/

Last Sunday I completed my first full marathon, covering a distance of 42KM in and around Amsterdam. An idea that started in a bar with some beers and concluded with a finish in the Olympic Stadium. What a journey, what an experience, well worthy of a blog post.

About a year ago, I was having some beers with my buddy Niels who just finished the New York City Marathon. After his passionate recollection of *his* experience he dropped the bombshell question: "Why not join me next year in running a Marathon?!"

![How great ideas are created: some guys with some beer](https://willem.com/global/images/27054fc736ba.webp)

Maybe it was the lovely brew, maybe it was wisdom, but the idea seemed great from the get go! The only (minor) problem was that I had never done any serious running. Could I turn my experience in cycling (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) into anything useful for running?

Following advice from different people with more running experience, I went to the local running_store (https://www.hetloopcentrum.nl/) for some guidance on shoes. The store's friendly staff made me run on a special test track equipped with sensors that profile the pressure of your feet landing on the ground while running. The aim is to have a smooth transition from step to step. From this test it became apparent that my left foot behaves a little different than my right one. That's funny, as it is something I have noted from data of my bike's power_pedals (https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/), too. Fitting the right shoes is very important to prevent injury and to maximise your enjoyment while running.

![My Asics GT-4000 in mako blue/black, extra wide (2e)](https://willem.com/global/images/eae52fbf92c7.webp)

My first training was a 5K around my office block in Amsterdam. Many professional coaches would advice a novice runner to start with a shorter distance, and gradually build up... I wanted to understand where I was, ignored any advice and just went full pull to see how 5K would feel - given my experience as cyclist. *Boy, that was bad.*

![Data from first raining session 5K - note the slow pace and high heart rate](https://willem.com/global/images/f98f8db5f27c.webp)

One thing you can clearly see in the data from the first training, is that my pace was relatively slow, and yet I experienced a very high heartrate right from the start. This is because my body was *totally* not used to running; it operated in a kind of shock. This is why you should take it easy: give your body a chance to adapt to the new kind of strain.

Following my initial round, I continued to train, multiple days a week in various degrees of intensity. Because I personally liked it as a benchmark, I always took the 5K as minimum - playing with different paces to eventually balance on a rhythm that I could endure a little easier. It didn't take long before I started to enjoy my new hobby, making it even easier to keep the training sessions going.

After just a few weeks, I started to see some real progress in pace and endurance; my body was clearly adapting. To keep things interesting, I set some smaller goals: registering myself for local running events in Horst aan de Maas: 10K_Rundje_um_ut_Hundje (https://www.rundjeumuthundje.nl) and the 21K_Venloop (https://venloop.nl/) in Venlo. I wrote a blog post about running_the_half_marathon_in_Venlo (https://willem.com/en/2024-03-24_half-marathon/).

During the rest of the year I continued my training sessions, I even took my running shoes along for the summer holiday to Italy. This is one of the things I enjoy of running, you can easily bring your gear with you and go out for a run wherever you are.

![Out running in the rain at Lake Lugano in Italy](https://willem.com/global/images/565447fe6a26.webp)

![Training for a marathon: no mountain too high - just go through the tunnel... :-)](https://willem.com/global/images/2e204edbb901.webp)

![Waking up early in Tuscany, to go for a run before sunrise (escaping intense heat)](https://willem.com/global/images/5cd6fc7e052a.webp)

## TCS Marathon Amsterdam

Fast forward to October 20, 2024... time for the TCS_Marathon_Amsterdam (https://www.tcsamsterdammarathon.nl). I figured it would be a good idea to run my first full Marathon on known_ground (https://willem.com/en/2022-11-01_moving-to-the-countryside/). The Amsterdam Marathon, established in 1975, draws around 45 thousand participants each year. The route passes through iconic areas of Amsterdam (https://willem.com/en/amsterdam-stories-life-cycling-and-moving-on/), including the Rijksmuseum, the Amstel River and the historic Olympic Stadium.

![Route of the TCS Amsterdam Marathon](https://willem.com/global/images/54b69bedc38a.webp)

In the weeks leading up to the event I paid special attention to my sleep, food and drinking. I tuned down the training intensity, moving enough to keep the body in good condition while reducing the risk of over training. My final training runs went up to a distance of ± 30K. I expected the full marathon to be difficult, but do-able.

![Moments before my official start at Stadionweg](https://willem.com/global/images/b2e4a0e9158d.webp)

![Lot's of folks on the street, many of them with a healthy tension in their tenure](https://willem.com/global/images/b068936c23ee.webp)

![Running in the Rijksmuseum tunnel - that's pretty cool](https://willem.com/global/images/82004aea3739.webp)

![Let's play the game "Where's Willem?" :-)](https://willem.com/global/images/e4959abc625d.webp)

![The part of the route following the Amstel River is challenging: you see runners at the other side of the river returning to the city/finish, it's an extra mental challenge](https://willem.com/global/images/399dd61f501d.webp)

![At around 25K there are fewer happy faces around you - people are fully focussed on their effort - it gets serious](https://willem.com/global/images/2f0bc1cc4b23.webp)

![Between 30K and 40K, body and mind are fighting together to reach the finish](https://willem.com/global/images/066fa9a20bae.webp)

![You finish in the Olympisch Stadion, that's a special feeling adding to the euphoria of counting down the final meters](https://willem.com/global/images/979455d06554.webp)

![This image sums it up, it is my "endgame" face - a 42K Marathon finisher!](https://willem.com/global/images/dec6f177883b.webp)

## Conclusion

Without doubt this was the most difficult thing I have ever done. I finished my first marathon in a respectable 4 hours and 15 minutes. It took 100% of my physical capabilities *and* it demanded a 200% psychological performance. You'll encounter pain, tiredness, emotions and energy from random strangers cheering you up. It's such a weird mix of things, very raw, very demanding. Your experience may vary, but I described it to be nearly spiritual in its deepness - once you've finished you feel different in various ways.

### Thank you

A warm thank you for all the volunteers who made the event possible. Thanks to my wife and kids for supporting me from home, during this event and during the many training sessions. Thanks to all the supporters along the road, including my brother, his kids, and the many 'random strangers' shouting my name. Last but not least, special thanks to my buddy Niels for spurring my interest in running - I came to love it!

---

## I see dead people

*Augmenting old photos in virtual reality* · 2024-09-10 · https://willem.com/en/2024-09-10_i-see-dead-people/

Imagine seeing your dead family members - not just on a picture, but lifelike and in three dimensions! You can almost touch them. It hits you differently, I can assure you. I'm still in awe: I just saw my dead grandfather, lifelike and for the first time ever in three dimensions! This may be Apple Vision Pro's killer feature, if you allow me the pun, please hear me out.

![This photo was taken on October 6, 1983 - only my mom (in white) is still alive](https://willem.com/global/images/c726b4c3566a.webp)

Thanks to some incredible effort of my brother (https://kevinmiddelkoop.nl), I have a lot of old (analogue) photos perfectly digitised and tagged. The photo you see above is over 40 years old. It may not mean anything to you, but they are our family's memories. Maybe you have some similar old pictures yourself. It is a snapshot of a moment in history, it will never come back as most persons on the picture are no longer alive. You'll probably understand why a person may hold onto old photos - they allow you to peek into past memories.

What if modern technology could create lifelike representations of these memories? Instead of looking at a picture on a small screen or canvas, you would see your family members in real size - right in front of you. You'll notice much more details, like how a dress or jacket is wrapped around someone's body, how someone's hair is touched by the wind, where somebody is looking at. Give it a few moments and you'll feel as if you're with them.

![The author, yours truly, and his late father, about 38 years ago (10 September 1986)](https://willem.com/global/images/60b74a0eb54b.webp)

The photo above is another old photo, you're looking at me on my first birthday - a happy little chap - proud new owner of a red truck. It is a nice picture in two dimensions.

Now here's the magic: Apple Photos can analyse (any) photo to infer depth information, using image recognition it is able to add a third dimension. With just one simple tap, it creates a spatial representation taking into account persons, objects and surroundings. This is a nifty feature by itself, but it becomes pure magic when you project these 'spatial photos' using a three dimensional display, like Apple Vision Pro.

![Apple Vision Pro is not just a wearable screen, it is a three dimensional projector](https://willem.com/global/images/797ea4d63c94.webp)

![Looking the chap right in the eye, right here in my little apartment almost 40 years later](https://willem.com/global/images/ada875b740bd.webp)

Now here's the thing, you're probably reading this on a two dimensional display. Both photos above may seem similarly flat to you. Possibly even small, especially if you're looking at this from your smartphone. For me, using Vision Pro, **IT IS NOT**. It is big, lifelike and touchable. It hits you differently, substantially, and *much* deeper. I do not really understand how, but my brain no longer thinks of the thing I see as an image, it becomes much more than that.

Random photos from the past now act as portals into different worlds and eras. It works on any photo, there is no special requirement to the input material. Without a doubt I expect modern camera technology (with stereoscopic lenses and lidar) to further enrich spatial images. But, the key thing is that **it works right now**, with everything you've already have. That's kind of a big deal, when you're talking about people that are no longer with us.

Even further in the future, given more digital input material (like text and voice recordings), one could expect computer models to become able to generate interactive representations. I don't think there is any technical reason why a computer wouldn't be able to learn how to write, talk, sound, move and look like any person (given enough training material). With our digital legacies ever growing (email, photos, videos, social media), this isn't that far fetched for future generations. Maybe someday holographic Willem may read his grand grand grand children bed time stories, who knows?

## Conclusion

It is very difficult to convey in two dimensions what I have experienced in three, the only thing I can urge you to do is: try it yourself! Use a personal photo and you'll understand why I wanted to tell you about it.

---

## Developing a native iOS app

*Making a cycling and running tracker* · 2024-05-11 · https://willem.com/en/2024-05-11_developing-a-native-ios-app/

As a little side-project, squeezed between my normal work, I have been working on something of personal interest: a native workout tracking app for iOS. I wanted to make my smartwatch obsolete, instead using my phone to track workouts. How hard could it be to gather detailed sensor data using native Swift APIs?

## Background

If you have been following my blog, this may not come as a surprise, but I love to ride my bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) and have recently started to do some running (https://willem.com/en/2024-03-24_half-marathon/). I have quite some experience with tracking my workouts, using Garmin, Strava (https://willem.com/en/2016-12-31_one-year-of-cycling/), Omata (https://willem.com/en/2020-09-29_riding-with-omata-one/), Wahoo, Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/), Whoop (https://willem.com/en/2022-01-14_wearing-whoop-4-0/) and various apps (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/) and sensors (https://willem.com/en/wearable-sensors-measuring-the-body-questioning-the-data/). I find health and fitness data useful to learn about your physical_performance (https://willem.com/en/2023-05-31_impact-of-training/) and to have some kind of accountability for yourself (e.g. motivating you to keep doing the workouts).

![Nothing makes you feel alive like going outside for some physical action - I love working out!](https://willem.com/global/images/4c88f32b5e47.webp)

The nerd in me loves the big data set, the many different available sensor types are a feast for my curiosity - yet it conflicts with my desire for minimalism (https://willem.com/en/digital-minimalism-doing-more-with-less-technology/) and simplicity. Do_you_really_need_all_the_workout_data (https://willem.com/en/2024-01-16_health-and-fitness-data/)? Isn't just listening_to_your_body_enough (https://willem.com/en/2018-05-17_listen-to-your-body/)? I don't know, but I do appreciate a smartwatch's capability to (nearly) effortlessly track workouts in great detail. I like how Apple_Watch_can_be_used_to_track_training-sessions (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/), next to its capabilities as modern_tool_watch (https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/) and smartphone_replacement (https://willem.com/en/2023-11-10_apple-watch-as-phone/). While I understand most folks would wear their smartwatch and call it a day, I do like old fashioned_mechanical_watches (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/) like a Rolex (https://willem.com/en/2022-12-22_rolex-datejust-36/), Tudor (https://willem.com/en/2020-06-17_tudor-black-bay-36-long-term-review/), Grand_Seiko (https://willem.com/en/2021-06-05_wearing-grand-seiko/), or even something_custom_made (https://willem.com/en/2020-11-30_designing-my-own-watch/). Although I_appreciate_both (https://willem.com/en/2021-02-28_wearing-two-watches/), I do gravitate towards mechanical_watches_when_I_have_to_choose_between_smartwatches_and_mechanical_watches (https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/).

## Idea for the app: Gran Fondo

What if there was a smartphone app that would collect all the workout data you want, without any of the hassle and clutter? I imagined it to be:

- **Simple**: it must get 'out of your way', designed to 'just work', without the need to fiddle with endless settings or options. Just press 'start' and begin your workout.

- **Flexible**: Use the app in different ways: mount or wear your phone in plain sight for realtime data, or put your phone in your pocket and have it work in the background.

- **Powerful**: Connect with heart rate, cycling cadence, power and speed sensors using Bluetooth; support multiple sensors, ideal if you use different bikes.

- **Apple Health friendly**: Save all data in Apple Health in maximum detail, including workout routes and individual power, cadence and speed measurements. This enables you to analyse recordings in any app that supports Apple Health, like Strava, WHOOP, HealthFit and many others.

- **Honest**: No ads or data selling. No accounts or registration. Your data should stay private, secure and on your device. 

None of the existing smartphone sport and fitness apps tick all of the above. Most of them are needlessly complex or are somehow designed to take your data to serve the app builder or its platform. Could I do better?

## Building the app

Knowing why and what I wanted, I set out to choose my preferred method of building the app.

### Native vs Hybrid/web apps

For most work I do, I prefer to use open and free (as in libre) web technologies, like HTML, JavaScript and CSS - or server software released under a free_software_licence (https://willem.com/blog/free-software/), such as GPL. For this particular usecase I needed to be extremely energy efficient and to be able to deeply integrate with my smartphone's operating system. The best way to do this for an iPhone is to fully embrace Apple's software development kit: making the app natively in Swift using SwiftUI and by following the technical (https://developer.apple.com/documentation) and design_guidelines (https://developer.apple.com/design/human-interface-guidelines/) as closely as possible.

### AI assisted programming

Although I_have_my_reservations (https://willem.com/en/2022-09-11_computer-says-no/), using AI for programming has all the attention lately. Some even claim that technologies like Copilot or ChatGPT would make programmers obsolete. I know my way around AI, as I have used it to generate_code (https://willem.com/en/2023-05-03_using-ai-to-generate-code/), as I_teach_folks_how_to_use_it (https://willem.com/en/2023-10-14_giving-ai-training/), but I never used it to build a *complete* iOS app. I figured this would be a perfect opportunity to see how fit AI is for something more complex than a simple script snippet. Let's find out how obsolete I am as a programmer in this modern AI-age...

### GPS and Bluetooth Low Energy Sensors

Having setup my Xcode environment, I set out to ask OpenAI's ChatGPT to give me some code to read GPS location data and to generate the necessary Swift classes to detect and connect with Bluetooth sensors. Boy, did I enter the proverbial rabbit hole here!

![My bike with Bluetooth sensors connected to my MacBook running Xcode](https://willem.com/global/images/6fb02bfdb938.webp)

The thing with AI-assisted programming is that, **YES** it works; but only **PARTIALLY**. It will give you working pieces, but they will not fit perfectly and do not necessarily work together. Seeing the code it generates is like hearing echos of a great song; you'll recognise it resembles something - but it is not quite the same as hearing the band play live music; let alone sing it yourself!

I took the pieces from the AI and set out to read the relevant documentation myself, this proved to be much more effective as it enabled me to actually understand what the mechanism should do. The AI helped me find the things I needed to learn. Tracking GPS location data was surprisingly easy using Apple's_CoreLocation (https://developer.apple.com/documentation/corelocation). Getting the Bluetooth sensor to connect to the app turned out to be much harder, as it involves many distinct steps:

- **Detecting Bluetooth devices**: scan the nearby area for any devices that are available and broadcasting

- **Connecting to a Bluetooth device**: making *and maintaining* a connection between the app and the device

- **Discovering Bluetooth device characteristics**: there is no such thing a simple Bluetooth device, you have to do your own 'discovery' of a device's capabilities and features; many devices broadcast multiple different signals for both sensor data, control mechanisms and operational parameters such as battery level.

- **Subscribing to characteristics**: Ultimately you subscribe to a data feed by tuning the Bluetooth radios to a certain Bluetooth characteristic.

- **Decoding data**: Given its energy efficient nature, you'll receive minimal data in raw bits; you'll need to decode data packets yourself; the hard part is that each sensor, by any vendor, has its own way of encoding data.

Take for instance a relatively 'simple' sensor like a cadence sensor that you put on your bike's pedal, it could be used to determine the revolutions per minute you make during a cycling session. How hard can this be? I figured that the official_Bluetooth_specification (https://www.bluetooth.com/specifications/specs/running-speed-and-cadence-profile-1-0/) would provide me with all the needed details... NOT! A simple cadence sensor is surprisingly complex:

- **Combined Bluetooth profile for Cycling Speed and Cadence**: any cadence sensor **always** identifies as *both* speed *and* cadence sensor, you have to discover its capabilities 'on the fly'.

- **Non-similar data packets**: The contents of the actual data depends on the sensor's current abilities (e.g. it detected something), you'll have to interpret the data packet, bit for bit, by checking for possible flags indicating what the next data bit represents. 

- **Non-trivial data**: Don't expect a clear cut value for "cadence", the sensor will give you a cumulative revolutions count **and** a rudimentary timestamp of the last detected change; you'll have to use these values to calculate the metric you're trying to measure.

The AI provided me with some sample code, but it proved not to work with my particular sensor. Using a Bluetooth debugging app, Bluefy (https://apps.apple.com/us/app/bluefy-web-ble-browser/id1492822055), I was able to gain a better understanding of the data the sensor was transmitting. I found a piece of Java code on the official_Bluetooth_blog (https://www.bluetooth.com/blog/part-2-the-wheels-on-the-bike-are-bluetooth-smart-bluetooth-smart-bluetooth-smart/) that gave me some clues on how to interpret data from the sensors. I adapted this piece of code to match various different sensor profiles and translated it into Swift code. This gave me an early working prototype.

![Early prototype of the app working with Bluetooth heartrate sensor and its early dataset shown in another app that makes some pretty graphs (HealthFit)](https://willem.com/global/images/b60ff287e1ab.webp)

## UI/UX Design

One of main reasons I like the Apple Watch workout app is how its user interface (UI) is designed to facilitate a pleasant user experience (UX). The app on the watch has fairly large buttons that you press to start a recording - *and that pretty much is it*. The app itself has few options, its design is opinionated but well thought through. It is a stark contrast with devices like Garmin that offer a ton of options for customisation. The trick is to strike a good balance between flexibility in usecases *and* having a default setup that works well.

![Apple Watch workout app shows large buttons to start a workout - no need for additional configuration](https://willem.com/global/images/f00f6c542cf6.webp)

Using a mounting system like QuadLock, you can firmly attach your smartphone to your bike's steer. This means that the iPhone can replace your Garmin as bike computer. Modern iPhones have an always on display that can show information in an energy efficient way, provided you use the Apple software development kit that comes with various optimisations built-in. After many, many (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/), kilometers with my Garmin bike computer, I settled on having a view with realtime data fields for speed, power and heartrate. What I like about the more advanced Garmin Edge devices is that they can plot a graph. This enables you to keep your eyes on the road when it matters, and glance at historic data at a (slightly) later stage.

![I used my Garmin Edge data layout as an inspiration when designing my app's layout when used as mounted bike computer](https://willem.com/global/images/84177e0cd3dc.webp)

![Design sketch describing the desired layout](https://willem.com/global/images/890dceb85ae1.webp)

![Testing the app on my bike using a QuadLock case and mount](https://willem.com/global/images/557c388149d2.webp)

To maximise energy efficiency, I decided to utilise Apple's own libraries for graphs: Swift_Charts (https://developer.apple.com/documentation/charts). One problem I encountered while developing this, is that measurements from sensors come in at different intervals and times. You need to create some kind of synchronisation mechanism to have data points matching common timestamps in order to compare and relate values. I designed this mechanism to synchronise UI updates, too: enabling all graphs and data points to be updated in one single refresh; optimising for CPU and graphics performance (and thus battery power). As a bonus, I built in support for different time scopes, enabling the graphs to show data for the last minute, 5 minutes, 15 minutes, hour or entire workout.

![Different configurations of realtime data](https://willem.com/global/images/b8e692c2cdd3.webp)

The app automatically shows the available graphs based on connected sensors, alleviating the need for different setups when you have more than one bike. If you tap a graph it maximises or minimises. If you tap the data scope (e.g. "last 5 minutes"), you can toggle between scopes. The app remembers your configuration, automatically setting you up correctly for the next workout. Because all the touch targets and buttons are fairly large, they work well when your hands are either sweaty or if you wear gloves.

## Pocketability: Optimising for background usage and energy consumption

An alternative way I envisioned to use the app was to use it from my pocket, as background app. This would enable low profile data collection, where you start the app and put your phone away. I love the idea of having a 'complete dataset' for *all* my rides and runs, while not being required to have the app be center staged *all the time*. Many training runs and rides aren't *that* interesting.

![I got some magic in my pocket: The app tracking workouts from the background - during recordings it just shows a widget on the homescreen](https://willem.com/global/images/615f26f51f55.webp)

By default, Apple's iOS operating system strictly limits the options apps have to run in the background. This maximises battery life and user privacy. If you follow Apple's guidelines and correctly ask the user for the required permissions, you can in fact design your app to work perfectly from the background. I really came to appreciate Apple's efforts on optimising the entire stack, enabling your app to be more energy efficient. Simply put, *"don't call us, we'll call you"* is what the operating system does: it takes control over *when* your app does its thing - enabling the OS to synchronise, combine and batch process different tasks on the available (energy efficient) cores in the Apple Silicon chips.

During one of my tests with a prototype version of the app, I was able to collect over 127 thousand (!!) data points during a 8 hour long distance ride on a single iPhone battery charge, with the screen enabled *all of the time*. If you play by Apple's rules, you really have *the power* (so to speak). Developing this app really took me somewhere, ha!

!["Goin' the extra mile": 8 hours on my bike to test battery usage (note: there is still 23% power left!)](https://willem.com/global/images/11bded661d7a.webp)

## Real artists ship

The road to hell is paved with good intentions, they say... For this reason, I really like to finish my projects. For an app that means that I should have it published in the AppStore. Getting it ready for Apple's scrutiny, having it approved by the AppStore reviewers is an extra milestone. It is important, because it makes you think about the onboarding (of new users) and the earning model.

### Onboarding

One particular challenging task when building an app is to guide folks that are new to your app on how to use it. A great user interface can help, but given the app's deep integration with Apple Health, Location data and Bluetooth sensors, there is an additional need to politely ask for permissions.

![Screenshots of the app's onboarding process: asking for permissions and guiding new users](https://willem.com/global/images/57929e8b6042.webp)

You will have to design the process so that it does not fail when people reject certain permissions. Apple is very strict in this: people have the right to reject. It is your job to make the app work with no or partial permissions. This is an extra challenge.

### Earning model to fund development

While I cannot overestimate the importance of free_software (https://willem.com/blog/free-software/), as in libre, I cannot ignore that I have a family to feed. But, moreover, finding people willing to pay for your product can serve as an extra validation of your idea. Be open and honest about your earning model and it will help you fund your own project; don't rely on investors or venture capital, bootstrap your own development!

![Designing a paywall for my app: not my favourite ask from users, but it is a very important one nonetheless. ](https://willem.com/global/images/a6b82a213937.webp)

You do not need to pay in order to try the app. The payment screen only shows up when folks actually use the app (and it can always be dismissed). Why not try it yourself, you_can_find_the_app_here (https://apps.apple.com/gb/app/gran-fondo-ride-run/id6502285146).

## Future

Eat your own dogfood, they say - I will continue to develop the app by actually using it myself. I don't expect this project to be a quick (monetary) win, but if it can be of practical use for myself, chances are that some other person may find it useful, too.

![Not your average debugging session: Fietselfstedentocht 2024](https://willem.com/global/images/fa7d320e32a3.webp)

One thing I like about this particular project is that it takes little effort to keep it going as I like working out. Debugging new releases of this app often involves going out for a running or cycling session. **Who ever said software development was a sedentary job?!**

## Conclusion

A lot of folks have 'great ideas' - few persons actually go out to have them realised. This distinguishes the makers from the rest. I like to make things, as the process of doing so requires you to really get into the matter. You'll learn a great deal and gain experience that others won't. Heck, build it yourself, make it your own!

---

## Half Marathon

*On Training, Data and Feeling* · 2024-03-24 · https://willem.com/en/2024-03-24_half-marathon/

Last Sunday, I participated in the Venloop, a half marathon event in Venlo. I completed the 21KM run in 2h05, a result I am satisfied with as this was my first ever 'official' event since I began running just three months ago. In this post, I'll share my experiences with training, balancing fitness data, and feeling fit.

Earlier_this_year (https://willem.com/en/2024-01-16_health-and-fitness-data/) I started my training for running. Ultimately, I hope to finish a full marathon later this year. To achieve this, I gradually increased the distance I ran during training sessions, starting with 5KM at various intensities to find a sustainable pace. Later, I extended the training distance to 10KM and finally to half a marathon distance (21KM).

During these three months, I meticulously tracked all measurable aspects using an Apple Watch Ultra 2 and WHOOP, augmented with additional Wahoo sensors like a heart rate monitor and power meter pedals on my bike. I combined cycling and running to boost my overall fitness while being careful not to overtrain. As a novice runner, my muscles and joints are not yet accustomed to the physical stress of running. To prevent injuries, I gradually increased my running distance.

![The Apple Watch Ultra 2 is a great little training companion, enabling the tracking of many different types of workouts; like cycling and running](https://willem.com/global/images/f00f6c542cf6.webp)

![If you use it more often, it will allow you to compete with yourself using earlier sessions - try to beat that personal record!](https://willem.com/global/images/ed0ecb1b669c.webp)

The Apple Watch Ultra 2 recorded all my workouts using Apple's default workout app, which has significantly improved since_I_first_used_it (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/). For running and cycling, it provides reliable GPS data and supports Bluetooth sensors, offering real-time feedback, both visual and audible. It helped me understand how my body reacts to differences in pace, distance, and terrain and even allows competing against past performances, a fun and motivating feature.

In addition to real-time data, I used WHOOP to monitor the broader effects on my body, like changes in my resting heart rate and HRV. WHOOP's strain metric showed the impact of training, highlighting the importance of managing workload to prevent overtraining. Recovery from intense sessions sometimes took a few days, and WHOOP's data reflected this.

![The Trend Is Your Friend: using WHOOP I tracked my trends, here you see that I have increased the training load (strain) over the past 3 months leading up to the Marathon](https://willem.com/global/images/6c004cd36a3f.webp)

On iOS, data can be aggregated in Apple HealthKit, a local, encrypted, offline database accessible only to third-party apps with your permission. Different apps can write data into HealthKit, making it a "single source of truth". The HealthFit_app (https://apps.apple.com/nl/app/healthfit/id1202650514) by Stéphane_Lizeray (https://twitter.com/HealthToFit) does a phenomenal job making your workouts browsable and deriving valuable insights from the wealth of data. It's so good and well-designed that I wouldn't be surprised if Apple acquired it.

![HealthFit is a fantastic app offering you detailed insights of the workouts you record with your Apple Watch, WHOOP, Garmin, Wahoo or any other app that supports Apple's HealthKit](https://willem.com/global/images/387ba63fb062.webp)

It analyses your workouts from various apps, including Apple Watch, Garmin, WHOOP, and Wahoo, and aggregates them into a single workout log. Using open and well-documented_formulas (https://fellrnr.com/wiki/Modeling_Human_Performance), the app calculates training load (acute, chronic, and form). You can see the proverbial needles move as you increase your training load. I highly recommend this app if you want to leverage individual workout data into a broader analysis: 'trends are your friends'!

![HealthFit uses open and well documented formulas to calculate your training load, directing you into a 'sweet spot' to achieve maximum gains while limiting risk of over training](https://willem.com/global/images/2daef97d7456.webp)

![It even provides you with some shiny widgets for your home screen - nudging you to go for a run or ride!](https://willem.com/global/images/047ea6570872.webp)

### Running Half a Marathon

Preparation is crucial, but completing an official event is another challenge. Events are fixed, and you must be at peak performance on that day. Professional athletes refer to this as 'tapering': ensuring you're in top form for the event. The days leading up to the event should involve lighter training, with extra focus on sleep, diet, and hydration.

I participated in the Venloop (http://venloop.nl), a local event in Venlo (https://duckduckgo.com/?q=venlo) that draws large crowds. It's exhilarating when spectators cheer you on by name – it really boosts your morale. I loved the experience; it's like a "happy drug" that intensely energizes you.

![Ready, set, GO! Taking part in the Venloop - I am not the only one!](https://willem.com/global/images/e028bc105d89.webp)

Then, something unusual happened: Initially, I managed my pace using data from my watch, but around the halfway point, I felt confident enough to trust my instincts. I felt I could safely increase my pace, finding a better balance between speed and endurance. I began to 'feel' my run rather than just measuring it.

That feeling was phenomenal! The synergy between body and mind was enlightening, and now I crave more of that.

![Finished the Half Marathon: look at that smile, you're seeing pure positive energy after a very enjoyable run!](https://willem.com/global/images/0fd3638d7e58.webp)

For the next period, I've decided to scale back my data-driven approach. I will continue to train, focusing more on my feelings. My aim is to increase my pace while maintaining the joy that running brings me. I run for personal pleasure, and I don't think I need an extensive dataset to achieve that. Are you running for *yourself* or for *your data*?

## Conclusion

The first few months of my "running career" have brought me a long way. Now is the right moment to take the proverbial training wheels off. Let's find out where this will take me!

![Ooooohhhh... I got a fancy medal! ](https://willem.com/global/images/299249fa5ea3.webp)

---

## No, I Won't Build That!

*Better Thinking, Better Work* · 2024-03-05 · https://willem.com/en/2024-03-05_no-i-won-t-build-that/

If you're an accomplished developer (as in: you've actually created things in the past), you may recognise this scenario: people reaching out to you, asking you to build something specific. "Can you build X for me?" A fellow technician once urged me to refuse more often: be proud of the things you don't do! Let me explain in this post.

## Wishes and Dreams

“If I had asked people what they wanted, they would have said faster horses”, is a punchy quote often attributed to Henry Ford, the famous automaker. Yet, it illustrates an essential thought that I believe a great builder must address: is the proposed or requested thing really what I should be making?

“People don't know what they want until you show it to them”, Steve Jobs remarked, building upon Ford's faster horses concept, and adding, “Our task is to read things that are not yet on the page”. It's a principle that, I think, distinguishes those who merely fulfil wishes from those who create dreams.

So, whenever somebody presents me with a 'solution' as part of a request, I am wary. I wonder. I think about what the problem is. Are there other ways to address this problem? Why is the proposed solution the best way to do it? Stay hungry (explore more of the context), stay foolish (don't let your existing knowledge define your findings).

## Cultivating Thoughts

You should find out what works best for you, but I extensively rely on writing things down and sketching both context and possible solutions. I create what I call 'context-rich briefings' that more often resemble a diary rather than a definite blueprint: It's a living document that I think of as ground on which I cultivate my ideas. I have specific digital notebooks, one per project/context, that double as a kind of 'swap_file' (https://en.m.wikipedia.org/wiki/Memory_paging) to park or resume a project. I_use_reMarkable (https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/) for this, but I guess that any_tablet (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) or paper_notebook (https://duckduckgo.com/?q=moleskine&iax=images&ia=images) could work. It helps to have a place to keep thoughts, as some of them need time to gain richness like wine or whiskey.

![Thoughts on canvas (2022): Example of captured ideas, in Dutch, with UI sketches, code snippets, questions, actions, and decisions not to do certain features](https://willem.com/global/images/6116a7c75483.webp)

![I write things down](https://willem.com/global/images/deacf0b3ce73.webp)

## Space and Time

Having space and time to think is possibly even more important than keeping and cultivating thoughts. Great ideas are fragile; noise and external opinions or pressure can kill them. This insight is echoed by different artists, like Pablo Picasso: "Without great solitude, no serious work is possible," or Bob Dylan: "To be creative you've got to be unsociable and tight-assed." Henrik_Karlsson_describes_these_aphorisms (https://www.henrikkarlsson.xyz/p/good-ideas) as a state of mind where the opinion of others doesn't bother the creators and where they reach a heightened sensitivity for the larval ideas and vague questions that arise within them.

I address this both physically and mentally. I love waking up early, at 4:55 am before anybody can interrupt me. I like locking myself up in our attic, my private office, or recently, in_virtual_reality_using_Vision_Pro (https://willem.com/en/2024-02-16_vision-pro/). I try to engage in little to no social media, avoid impromptu phone and video calls, and only passively take part in chat apps. I consider my smartphone a necessary evil with a_strictly_selective_policy_on_notifications (https://willem.com/en/2021-02-22_the-value-of-notifications/). Instead of following the news or endlessly scrolling through algorithmically populated content feeds, I prefer slow media like books or an article or blog post recommended to me by fellow humans. I keep a reading list of things I'll check out later. But most of all, I_cultivate_boredom (https://willem.com/en/2016-10-01_harvesting-boredom-to-let-creativity-flourish/): sometimes, doing nothing is the fastest route to great results. Alternatives to my office and attic are my bicycle and running shoes.

![The answer is out there: ride, run, and walk!](https://willem.com/global/images/e4d877f5df3e.webp)

## Conclusion

While doing **not** as asked might seem unfriendly, you're ultimately doing others a favour by actually caring about the results instead of 'being busy' with arbitrary specifications, shallow opinions, or made-up deadlines. You and your customer deserve it: go the extra mile and deliver something better.

---

## Vision Pro

*Exploring Spatial Computing* · 2024-02-16 · https://willem.com/en/2024-02-16_vision-pro/

Currently, I am overlooking a lake at Mount Hood while writing this. I hear birds in the distance and see the lake calm, with subtle waves and some mist in the distance. Yet, it is fake, as I am sitting on our top floor, a barely furnished room full of items belonging to a family house with two young kids. I am using Apple's Vision Pro to explore what Spatial Computing can be. I am in awe; let me explain in this blog post.

![Writing this blog post at Mount Hood...](https://willem.com/global/images/3c133f5765e0.webp)

![... not! Just our attic full of "family stuff"](https://willem.com/global/images/794e066e15d5.webp)

## Apple Vision Pro

Imagine a set of great earphones for listening to music, offering you private access to high-quality audio playback. The Apple Vision Pro is like that, but for your eyes instead of your ears. You put it on like a set of goggles, and inside, you see a digital world blending with your reality. You can choose to let the real outer world in or filter it out, much like how active noise cancelling works for audio.

![Apple Vision Pro, like a good set of earphones for your eyes](https://willem.com/global/images/e315e5abab7f.webp)

Using some very advanced chips, sensors, and cameras, the Apple Vision Pro headset is capable of projecting virtual objects into your real world, positioning them in a fixed place where they stay as long as you want them there. You can do things like watching a movie on a gigantic cinema display or immersing yourself in your family's photos. Or, you can use the Vision Pro for work, as I do, using a window where I type my text, right at the lakeside of Mount Hood.

Other websites and blogs have posted some very in-depth discussions on Apple Vision Pro, discussing the hardware, its advantages, and disadvantages. I recommend you check those out as I do not want to repeat what others have written or said. Some reviews worth your time:

- Casey_Neistat_-_The_thing_no_one_will_say_about_Apple_Vision_Pro (https://www.youtube.com/watch?v=UvkgmyfMPks)

- Nilay_Patel_-_Apple_Vision_Pro_review:_magic,_until_it's_not (https://www.theverge.com/24054862/apple-vision-pro-review-vr-ar-headset-features-price)

- Om_Malik_-_My_4_magic_moments_with_Vision_Pro (https://om.co/2024/01/31/my-4-magic-moments-with-vision-pro/#more-922524)

![Hello World - a selfie of sorts](https://willem.com/global/images/6e022db9f2ea.webp)

## Spatial Computing

More than this particular first generation of hardware, I am interested in what Apple is showing the world with its VisionOS software. It's not just a fancy wearable projector; it's interactive! Cameras on the inside track your iris position, i.e., where you're exactly looking. This information is used to enable interaction with the digital world by just looking at things. A subtle tap with your fingers is registered by another set of cameras, all seamlessly integrating an experience that enables you to "look and tap" like you would otherwise do with "point and click" or "touch and swipe".

This fundamental interaction model is very well executed; after a few minutes, it feels totally natural, and I have since been wondering why my iPhone or iPad does not respond in the same manner. It's classic Apple magic as all the heavy lifting is done without giving me much (if any) friction. It just works.

![Bluetooth keyboard and trackpad connected to Vision Pro](https://willem.com/global/images/20cf7bbed74f.webp)

To get some work done, I have connected a standard bluetooth keyboard and trackpad to the Vision Pro, leveraging my ability to touch type; it all feels very natural. The Vision Pro does not require a computer; it is the computer! It features quite capable Apple_Silicon_chips (https://willem.com/en/2020-12-15_why-apple-silicon-is-a-big-deal/), and plenty of onboard storage (mine has 1 TB).

![You're looking at a fully capable computer system here - and a cup of coffee](https://willem.com/global/images/de973dd40cb5.webp)

If you have been reading my blog, you know I_have_a_thing_for_tablets (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) as they are portable yet very capable. The Vision Pro might be another step forward: it is very portable, yet it offers an entire virtual world for your eyes! It's like being able to carry a massive multi-monitor setup with me; it's bonkers!

![Not that crazy: display, keyboard, trackpad (note the hovering piece of UI above the hardware keyboard)](https://willem.com/global/images/1b0236562f2e.webp)

![You can easily arrange a multi-monitor work setup like this](https://willem.com/global/images/8d3e17f984d8.webp)

![It is hard to capture in a 2D photo, but for your eyes, there is real depth in the setup, like those two screens are really there](https://willem.com/global/images/31bad7182ebf.webp)

![You can look around them, move closer to them, or rearrange them by dragging them through your room](https://willem.com/global/images/731070e35388.webp)

![The projections appear so natural that my mind is really convinced it can touch things.](https://willem.com/global/images/9060b900da67.webp)

Mixing the digital and real world is very accessible; it allows you to stay aware of things around you. I like it as it makes you feel a little less "enclosed inside the computer". It works for certain workflows, like sending some emails, looking things up, or making a call. The experience gets a little different if you decide to immerse yourself in any of the Vision Pro's virtual environments.

Some folks refer to it as "deep_work" (https://calnewport.com), the type of work you need some serious focus for. I find Vision Pro especially powerful for getting myself into the state of flow that is needed for the heavy lifting. I can immerse myself with context (images, logs, code, mockups) and filter out any visual clutter from the real world.

![These windows represent different views on a particular piece of work - they are big, the tall window in the center is approximately 3 meters high!](https://willem.com/global/images/46bae72a88f8.webp)

![The 'smallest' window from above is in fact very large; for comparison of scale, I removed the virtual moon surface so you can see the window next to my little daughter's shoes.](https://willem.com/global/images/81b870070acb.webp)

Imagine a set of windows so big that you can literally stand between them. That is how I like my most powerful Vision Pro setups. You almost become one with your context, seriously. You can create an environment that enables you to really connect with what you're doing. I love walking around the windows, looking at some code or server output, and sort of getting a feel of it being a "big and working machine". In a way, it feels like standing in a big machine room. It is really unlike any conventional desktop experience.

![Again, it is very hard to capture in a 2D photo, but being able to walk around your digital context is simply incredible!](https://willem.com/global/images/5a4f6973e68e.webp)

![These windows are really big, conveying a sense of greatness like a statue of some kind](https://willem.com/global/images/2c2238114716.webp)

![If you're in a virtual environment, the Vision Pro will warn you if you risk walking into something - which can be a real hazard if you're sharing the house with some kids, ha!](https://willem.com/global/images/59e46e3dc962.webp)

## Conclusion

I will continue to explore, learn, and experiment with Vision Pro, but already I'm blown away by the spatial greatness of actually seeing the 3rd dimension digitally. It feels very natural in the same sense as the touchscreen on the original iPhone made me giggle whenever I swiped the "slide to unlock" slider. There is a lot to unlock here; come and join me on this next frontier!

![Talking about hazards... drinking coffee is a real challenge with Vision Pro - ha!](https://willem.com/global/images/978ddd83c8cf.webp)

---

## Health and fitness data

*Is more better?* · 2024-01-16 · https://willem.com/en/2024-01-16_health-and-fitness-data/

Since the start of this new year I am working out harder than the previous months. I have set some goals for myself and have taken on a training scheme incorporating running, cycling and swimming. As I sift through the growing mountain of workout data, I find myself questioning: does having more data truly translate to better fitness outcomes??

## Feeling your performance

The thing with working out is that once you make a habit of it, you'll recognise and understand your own feeling better and better. I have been riding_my_bicycle (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) for some years now and I can quite accurately estimate_my_current_heart_rate (https://willem.com/en/2023-05-31_impact-of-training/) within just a few beats per minute, the same goes for speed and intensity as measured by my_power_meter (https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/). I'd say that data holds very few secrets to me when it comes to cycling.

## Learning to Run

Yet, I am new to running and collecting some metrics such as distance, time and heart rate allows me to gauge my stamina, pace and progress. But, perhaps as an echo of my cycling experience, I noticed that I recognise my own performance once I get in "the flow" after some time in. More importantly, the real pain I experience is not measured by any digital tracker, it comes from my untrained knees and related muscles: I can **only** feel this (and I'd better listen to it, to prevent an injury!). So, health and fitness data only gets me "so far" when it comes to running.

![Me learning to run as captured by CCTV](https://willem.com/global/images/bf1b92151db9.webp)

## Macro versus Micro data

Honestly, I have to admit that I do not know where the sweet spot is when it comes to health and fitness data. My WHOOP (https://willem.com/en/2022-01-14_wearing-whoop-4-0/) band passively keeps an eye on broader trends and it has detected an improvement in resting heart rate and HRV since I began my intensified training. I like its somewhat more holistic approach, focusing on macro instead of micro: you'll see your progress on a broader horizon. But it, too, only seems to capture a part of the picture of me feeling better.

## What does "feeling better" mean?

When you think about health and happiness, remember that while tools like psychological scales and biometric measures can offer insights, they often fall short of capturing the full spectrum of your personal experience. The most authentic barometer of your well-being and happiness is your own self-awareness.

Tune into your body's signals and your mind's reflections. Are you feeling energised or drained? Content or restless? These internal cues are invaluable. Embrace a habit of regular self-check-ins, perhaps through mindfulness or journaling, to deeply understand and appreciate your own state of well-being. This self-attuned approach not only respects the uniqueness of your experiences but also empowers you to make adjustments that truly resonate with your personal needs and aspirations.

![Some fancy detailed data - but what does it mean?](https://willem.com/global/images/3b50c735fbfc.webp)

## Conclusion

I think that it probably comes down to personal preference and your own goals. If you're a professional athlete trying to win a race or beat a (personal) record, then it makes sense to collect detailed data in order to unlock a few more bits of human performance. In the end, for me it's about feeling connected to my body rather than being tethered to a database.

### Let me know!

I would love to hear from you on your "fitness philosophy". How do you balance between data and intuition? Do you track anything, if so, why? Drop me a mail via mail@willem.com and/or please send me your links,_thoughts,_ideas_and_graphs (https://willem.com/upload/). I intend to write a follow up on this with your feedback!

---

## Backup Rotation Scheme

*Rotate your backups with 'rsync-backup-rotator'* · 2023-12-15 · https://willem.com/en/2023-12-15_backup-rotation-scheme/

In today's digital age, safeguarding your data is paramount. Simply creating a copy of your files may not be enough as they can get corrupted, overwritten or blocked by ransomware. Having multiple, time-rotated (and ideally, offsite) backups is a stronger defense. I created a new tool, rsync-backup-rotator, to help you with this.

## Backup Rotation Scheme

Backup rotation is a strategy used in data management where multiple backup copies are created and stored at different intervals, rather than relying on a single backup copy. This method is particularly useful because it mitigates various risks associated with data loss. For instance, if a single backup copy gets corrupted, overwritten, or compromised (e.g., by ransomware), all data since the last backup could be lost. By rotating backups, you create multiple recovery points, allowing you to restore data from different moments in time. This approach provides a more comprehensive safety net, as it protects against both recent data loss and more long-term issues.

![Rotating backup to enable data recovery from multiple points in time - enabling time traveling for data!](https://willem.com/global/images/6d3f20d882d7.webp)

The **`rsync-backup-rotator`** tool embraces this concept of backup rotation. It automates the process of creating and managing these rotated backups. Specifically, the tool uses a central 'current' folder that contains the latest backup data. Based on user-defined settings, it then rotates this data into different folders. For daily backups, it creates and stores copies in subfolders named after each weekday, within a 'week' folder. This means there’s a separate backup for each day, like 'Monday', 'Tuesday', and so on. For monthly backups, on the first day of each month, it creates a snapshot in a corresponding monthly subfolder within a 'month' folder, like 'January', 'February', etc. This system ensures that users have a series of time-stamped backups, providing flexibility and security in their data restoration options.

## Why rsync?

Rsync is a tool that makes backups both efficient and effective. It works by only updating the parts of files that have changed since the last backup, rather than copying everything over again. This approach significantly reduces the amount of data being transferred, saving on wear and tear for hard drives and SSDs, and reducing costs for cloud storage since fewer data changes mean less I/O operations. Essentially, rsync ensures that backups are quick and light on resources, making it a smart choice for regular data backup and rotation.

Rsync (https://rsync.samba.org) is a standard, non-commercial tool built into many operating systems like GNU/Linux, BSD variants, and macOS, making it easily accessible without extra installations or purchases. Trusted by millions worldwide, its robust and efficient data backup capabilities have established it as a reliable and widely-used industry standard.

## Creating Backups with Rsync

To create a single copy using rsync, you can use the command **`rsync -arvz SOURCE TARGET`**. In an earlier post, I explained how to use rsync for making backups, which you can find here: How_to_Use_Rsync_to_Make_Backups (https://willem.com/en/2020-10-30_how-to-use-rsync-to-make-backups/). It's important to carefully decide what you want to backup, whether it's a simple documents folder or an entire installation. The **`rsync-backup-rotator`** tool, as discussed in this blog post, operates under the assumption that you have a functional copy mechanism in place. This mechanism should maintain an up-to-date copy of your files in a folder named "current", located in a path accessible by the tool, thereby enabling efficient rotation.

## The tool: rsync-backup-rotator

Like my watches, here (https://willem.com/en/2020-11-30_designing-my-own-watch/) and here (https://willem.com/en/2022-12-22_rolex-datejust-36/), I prefer my tools to be timeless, self explanatory, simple and dedicated to their job. The **rsync-backup-rotator** was created with this same design ethos.

The tool is a bash script that runs without any weird dependencies or bloat on pretty much all GNU/Linux, BSD and macOS systems. Heck, you can probably get it to work on Windows, too, using the WSL. It is designed to do its job now and in the future, without any maintenance or mandatory updates.

You can download the tool here: https://source.willem.com/rsync-backup-rotator/ There you'll find instructions (https://source.willem.com/rsync-backup-rotator/README.txt) and a changelog (https://source.willem.com/rsync-backup-rotator/CHANGELOG.txt), too. The tool is distributed as free software under the GPLv3 (https://www.gnu.org/licenses/gpl-3.0.en.html) license, intended to guarantee your freedom to use, share and change all versions of this tool.

### Installation

- Download the script from https://source.willem.com/rsync-backup-rotator/

- Make the script executable: **`chmod +x rsync-backup-rotator.sh`**

### Usage

To use rsync-backup-rotator, run the script with the required arguments: **./rsync-backup-rotator.sh <parent_directory> [options]**

#### Options:

- -w: Enable backups for each weekday.

- -m: Enable backups for the first day of each month.

- --delete: Include the --delete option in rsync to remove files in the destination that are no longer in the source.

- --help: Display help information.

#### Examples:

- Perform a weekday backup: **`./rsync-backup-rotator.sh /path/to/parent -w`**

- Perform both weekday and monthly backups with deletion of removed files: **`./rsync-backup-rotator.sh /path/to/parent -w -m --delete`**

## Conclusion

In the future I intend to release more tools and applications under the GPLv3 licence as free software. Although this is a small beginning, it is my humble attempt to give something back to the world. Stay safe, stay backed up!

![The 'rsync-backup-rotator' tool v1.0 available as free software under the GPLv3 license](https://willem.com/global/images/4404a897ea44.webp)

---

## Apple Watch as Phone

*Replace your smartphone with a smartwatch* · 2023-11-10 · https://willem.com/en/2023-11-10_apple-watch-as-phone/

Imagine a week without your smartphone, replaced solely by the sleek simplicity of a smartwatch. This week I did this, leaving my smartphone behind and letting an Apple Watch take the helm. Many hail this as a liberating escape from our attention-seeking digital sidekicks, but does it truly live up to the hype? Join me on this intriguing journey, where technology meets minimalism, and discover whether less really can be more.

## Apple Watch Ultra with Cellular

For this experiment I selected the Apple Watch Ultra 2 with cellular network connectivity. This enables it to function independently from the iPhone, communicating by itself using its own antennas.

Compared to many other watches, including classic timepieces like the Rolex_DateJust_36MM (https://willem.com/en/2022-12-22_rolex-datejust-36/), the Apple Watch Ultra is big. Yet, for its purpose it is fitting as the larger size allows for a bigger battery and more screen real-estate. More than any other smartwatch, I think this Apple_Watch_is_a_modern_tool_watch (https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/), purpose built and packed with technology.

![Comparing Apple Watch Ultra 2 with a Rolex DateJust 36MM](https://willem.com/global/images/452c8776d438.webp)

![The Apple Watch Ultra is a precision crafted piece of modern technology - whatever you think of smartwatches one has to applaud the effort of miniaturisation that went into this wearable wrist computer](https://willem.com/global/images/c2115bae1ebb.webp)

## Special cellular plan: acting as one with your phone

You should check out your mobile network operator for exact details, but in general the cellular variants of Apple Watch require you to have an additional subscription. For the Dutch Vodafone network there is "OneNumber (https://www.vodafone.nl/abonnement/onenumber)", which is a fitting name for what this service essentially does: having two devices (your smartphone and your smartwatch) working simultaneously with the same phone number. It is as simple as being able to answer any call from either device (independently).

![Feeling connected... Apple Watch Ultra 2 with Vodafone NL](https://willem.com/global/images/11ee0e74b75e.webp)

## Going phoneless

Over the years I have experimented_thoroughly_with_smartwatches (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/), but most of them required me to be within Bluetooth range of my smartphone; meaning that I had to carry two devices in order to make it work. This time around I was particularly interested in the phenomenon described by others as a liberating feeling you get once you leave your smartphone home.

You should check out this_classic_review_of_the_first_Apple_Watch_with_LTE_support (https://www.hodinkee.com/articles/apple-watch-series-3-edition-review) by Benjamin Clymer from Hodinkee, a well respected watch blog. In his 'week on the wrist', Ben notes that you'll get a long way with just a watch and a single (!) AirPod as every day carry (EDC).

![Phoneless EDC with an Apple Watch and an AirPod (by Benjamin Clymer, Hodinkee)](https://willem.com/global/images/f08ba5fabdd0.webp)

## Need to be online

For me the smartphone is an essential piece of equipment as it is my primary gateway to the online world where I make_most_of_my_money (https://willem.com/blog/work/). For my work I switch between states of easy and deep work, where the latter requires a level of focus (https://willem.com/en/2018-12-06_do-amazing-things-with-a-focused-mind/) that is easily disrupted by a connected device like a modern smartphone.

Although it would do wonders for my focus, I do not want to switch my smartphone off entirely. In addition to my responsibilities with cloud_infrastructure (https://willem.com/en/self-hosting-running-your-own-infrastructure-on-linux/), I am a parent_of_two_young_kids (https://willem.com/en/fatherhood-the-personal-thread-behind-the-technology/) and you never quite know when "the world needs me". Even though I realise it is just "a feeling", disconnecting myself *entirely*, almost immediately gives me anxiety. Earlier I tried using_a_simple_dumbphone (https://willem.com/en/2016-10-01_harvesting-boredom-to-let-creativity-flourish/) that could only call or send simple text messages.

![Designed to offer you a better balance between being connected and being disturbed, the Punkt MP01 mobile phone featured in my experiment using a "dumb phone" to foster creativity](https://willem.com/global/images/28d360d04130.webp)

A limited dumbphone sort of works, but you'll fall short once you do need modern connectivity, like for fixing_cloud_stuff (https://willem.com/en/self-hosting-running-your-own-infrastructure-on-linux/) or when taking and sending a photo. So instead of killing my smartphone, I took great effort to set it up to very_selectively_deliver_only_some_notifications (https://willem.com/en/2021-02-22_the-value-of-notifications/), it is something I continue to finetune. I feel there is room for further improvement and this is why I love experimenting with different devices, such as reMarkable (https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/), to enhance my deep work performance; aiming to strike a powerful balance between connectivity and solitude.

## The experiment and my Experience

So, once I had setup everything I put away my smartphone in a bag and set out to do my things with just my Apple Watch. During my day to day activities I limited smartphone screen time to an absolute minimum. During my experiment I had days as daddy and some work days that involved some travelling, too. Just a normal mix of "Willem_Life (https://willem.com/blog/lifestyle/)".

In and around the home I found Apple Watch particularly strong as it really kills any habit you might have formed in (automatically) picking up the phone to see if something "is new". You know, the habit of checking it for the sake of checking it. When you can no longer reach it within arms length, you'll notice how ingrained this "reflex" has become. Without me jumping into the digital realm, I felt much more into the "here and now". That makes a difference!

Occasionally a notification came in that required immediate action. For instance, I had one failing web service that triggered an uptime_alarm (https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/). These outages are rare, but I did find it very nice that I was notified of this problem without any delay. After receiving the notification I walked to my iPad and set out to address the issue, in a very deliberate manner. This is another effect of the Apple Watch as primary device: you will use your other devices with a greater determination - you set out to do something specific instead of just glancing around. I love this, too.

During work the Apple Watch does not offer me that much extra, it is just another screen when I am already surrounded with other screens. I guess that it is nice when it alerts you of an upcoming calendar event or a thing on your todo list, but for me it doesn't change the way I work all that much. When I work I am already well connected because of the nature_of_my_work (https://willem.com/blog/work/). But of course, Apple Watch's impact on your work can be different. You might enjoy this crazy experiment I did earlier: programming_on_Apple_Watch (https://willem.com/en/2017-02-16_programming-on-apple-watch/).

With two curious kids I am often bombarded with "the questions of life", many of which I can answer but some require looking up some trivia. I figured that this is where Siri on the Apple Watch really shines. Instead of reaching for your phone to look something up, you can simply ask Siri a question. The trick here is to know how to ask (or pompt) Siri to get you the right results. When my son asked me about the biggest volcano in the solar system, I knew it was on Mars but my knowledge lacked any juicy details. *"Hey Siri, look on wikipedia for the volcano on Mars"* will yield you results within seconds, saving you a trip through search engine advertising wonderland. Powerful stuff, once you've memorised a few of these prompts.

Creativity sparks when I am in a focussed state of mind, often when being left alone with my thoughts. I never quite know when and where novel ideas hit me. Sometimes I sit down and use my reMarkable_paper_tablet (https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/) to cultivate and capture my thoughts. But, there are times when I don't have it around, like when I am going out for a walk_through_the_countryside (https://willem.com/en/2022-11-01_moving-to-the-countryside/). I discovered the voice recorder to be an amazing and friction free, natural way to capture my thoughts. The Apple Watch does an amazing job filtering out any (ambient) noise from the recordings. I found that listening back to these recordings was a very rich way to reflect and journal as there is so much detail in the tone of voice in addition to the actual words.

![Voice Memo on Apple Watch is surprisingly effective capturing creative ideas - syncing seamlessly with your other devices for reviewing later - wherever you are](https://willem.com/global/images/fed5373512d7.webp)

## Broken perfection

When it works I experienced magic, but I found the experience to break down every now and then. The Watch requires its own management, in addition to your smartphone. It can mirror much of the iPhone's setup, but not completely.

I was surprised and annoyingly interrupted when it started buzzing on my wrist warning me of loud environmental noise exposure - while riding my_road_bike (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/) through a strong head wind. Or, when it reminds you to stand up... while riding a car. Or, offering you "tips" on how to use the watch - when you just need it to get out of your way. Or numerous request, per individual app, for approval to use location services. Super annoying and redundant, especially when you already gave apps certain permission on your phone (like who does **not** want to allow usage of the GPS in the Maps app?)

But a more fundamental issue I experienced is that the Apple Watch is not a continuous experience. You need to take it off your wrist when its battery is empty. Unlike a smartphone which you can continue to use while charging, the Apple Watch disconnects and stops functioning while on the charger. It won't notify you of incoming calls or (important) notifications. As the Apple Watch requires regular charging this means that you *still* need to use your smartphone on a near daily basis.

It kind of defeats the purpose of a phoneless experience, as the hassling between different devices requires a certain mental effort, too. You have to plan ahead (e.g. "do I have enough battery power available for the night or not?"). I could not find a natural routine to keep the things going.

I know that some folks charge the Apple Watch at night, when their phone is on their nightstand. But this means that you cannot use the Watch's silent alarm clock or notification system - powerful features when you share your bed with a partner. (Or any of the Watch's abilities to track your sleep habits, for that matter.).

Other folks charge the Apple Watch while taking a shower in the morning. Between 30 and 60 minutes of fast charging, you'll be able to fill the battery up to 80%. Perhaps, I am too fast or efficient for the watch, but my morning routine is under 15 minutes with just a cold_shower (https://willem.com/en/2018-12-06_do-amazing-things-with-a-focused-mind/) and a cup of coffee.

I tried using two Apple Watches, switching them between my wrist and the charger. That maximises "watch time on the wrist" but is ridiculously redundant, requiring even more devices, money, subscriptions and management. It goes against my appreciation for less_is_more (https://willem.com/en/digital-minimalism-doing-more-with-less-technology/). This lead me to the conclusion that perhaps the best smartwatch is no smartwatch at all.

![Guess what's better than two smartwatches? ... none at all!](https://willem.com/global/images/d3d623908ed5.webp)

## Conclusion

How we interact with technology is fundamentally still a human decision, you determine what you do, requiring determination and discipline. My experiment with going phoneless served as a confrontation that all I needed was *less* not *more* technology to get were I really want to be: in the here and now!

---

## And... there is light!

*Installing dynamo powered lights on my road bike* · 2023-11-01 · https://willem.com/en/2023-11-01_and-there-is-light/

The darker days are here in the northern hemisphere, and so is the need for good lights on your bike. Although battery powered lights can do the job, you need to keep them charged. I wanted a light system on my road bike that just works. Read along for some light in the darkness!!

Since my move to the country_side_of_Limburg (https://willem.com/en/2022-11-01_moving-to-the-countryside/), I find myself more often in utter darkness as many of the country side roads don't feature any street lights. With two young kids I need to be a bit creative on *when* I go out for a workout; like when they're tucked into bed. This means that good bike lights aren't just a luxury, they are essential for how I use my bike.

![Welcome to the dark (country) side... where street lights are a rare sight](https://willem.com/global/images/d6659618e0c5.webp)

Along with my Garmin Edge bike computer I have the Garmin Varia lights, both a headlight (UT800) and rear light with radar (RTL515). They are so-called smart lights, adjusting their beams and intensity on ambient light and your speed. Your Garmin bike computer manages this through a wireless connection. Most of the time this works well, but not *always*... and then it can be a hassle to get the entire system to be reset (e.g. having to reboot both lights, the bike computer) and/or checking the individual wireless connections. Sometimes the *smart* simply fails and then you're stuck with some stubborn blinking lights when you really want a steady bright beam. Another (serious) limitation is that the brightest beam - which you need in utter darkness - uses so much battery power, that it only lasts for 1.5 hours (under good conditions!). *I just want my lights to work - no hassles or battery management, please!*

![Battery powered Garmin Varia lights - beautiful when they work - but no longer my cup of tea](https://willem.com/global/images/f1f2957a71e3.webp)

Friends of the blog will know that I have a minimalistic_road_bike_from_Schindelhauer (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/), a devoted bike builder from Berlin. The modified Siegfried Road I use does not have a dynamo, hence my original choice for battery powered lights. To change this, I somehow need a wheel with dynamo, electrical wires and some good dynamo powered lights.

The most efficient and maintenance free dynamos are hub dynamos that sit on/inside the axle of your wheel. Your wheel will have a bit more rolling resistance, but you will get a steady and infinite supply of electric energy in return. The German SON makes fantastic bike dynamos (https://nabendynamo.de/en/products/hub-dynamos/for-standard-forks/), they are really among the best when it comes to energy output, durability and overall design. All made in Germany (https://nabendynamo.de/en/about/production/).

![Pictures from the SON factory in Tübingen, Germany - they're serious about doing it the right way](https://willem.com/global/images/c58528d13a2d.webp)

I asked the bike factory of Schildelhauer if they could supply me with a dynamo equipped wheel for my Schindelhauer Siegfried Road. Some of their other bikes feature dynamo powered lights, so I fancied my chances. Unfortunately they could not supply me with a fitting wheel, but they were absolutely willing to help me out. They offered me an original rim that they kept in stock because it failed their quality standards as it had some minor scratches on it. In addition to the rim, they gave me the specifications of the exact dynamo model that would work best on my road bike: I needed a SON28 dynamo with 32 spoke holes.

Now I only needed to find a skill-full wheel builder who would be able to create the custom road bike wheel with the SON hub dynamo. Although I can do pretty much do anything myself, creating a perfectly balanced and tensioned wheel calls for craftsmanship beyond my abilities. So I went back to my old hometown of Uithoorn where I knew the local bike shop, Ruud_van_der_Schaft (https://www.facebook.com/people/Van-der-schaft-tweewielers/100057147262528/). I explained my crazy plan and he luckily agreed to help me if I would supply him with all the necessary parts.

![Van der Schaft tweewielers in Uithoorn](https://willem.com/global/images/dfb7947e2ca2.webp)

![Picking up my custom made road wheel in Uithoorn](https://willem.com/global/images/6df6b4f7b0ca.webp)

With the newly made dynamo powered wheel I needed to figure out what lights I would use and how I would connect these to the hub dynamo. I have some really good experience with the Supernova (https://supernova-lights.com/en) bike lights on my commuter_bike (https://willem.com/en/2019-11-26_supernova-e3-pro-2-dynamo-powered-headlight/). They're a typical example of what happens if you let Germans design and engineer some technology: they go *all* the way! Their newest model, the M99 DY PRO, has a matrix of 11 LEDs and new control electronics enabling a high beam function. It produces light values up to 1,000 lumens and 200 lux. Now, that's what I call light! HA! I really love this.

![The Supernova M99 DY PRO is a dynamo-operated LED front light with high beam function and German road code approval](https://willem.com/global/images/7fe1438b5515.webp)

![The high beam function becomes available from 20KM/h and allows you to illuminate the road much further ahead (if traffic permits)](https://willem.com/global/images/73b5970e1445.webp)

For the rear I selected the Supernova_E3_Tail_Light_2 (https://supernova-lights.com/en/products/e3-tail-light-2-6v)), which works well in tandem with the Supernova head light. Both Supernova lights have capacitors that keep the lights on even if you stop your dynamo powered bike, enhancing visibility when you need to stop down the road (e.g. at traffic lights).

![Supernova E3 Tail Light 2](https://willem.com/global/images/de7766815889.webp)

## Installation

Installing the dynamo powered lights on a road bike may require some thinking, tinkering and creativity. My bike is made from aluminium and some parts already had holes in them that I could use to route the electrical wires. But, before making any permanent modifications I hooked up my lights in a 'quick and dirty' way to see if all parts were working well together.

![Testing the dynamo powered lights using some quickly connected loose wires - it works! ](https://willem.com/global/images/5664c3d08a10.webp)

For various reasons, including durability and looks, I wanted to hide the electrical cables as much as possible. Luckily my front fork had holes in it allowing me to wire the main cables to the hub dynamo.

![Using a tweezer I eventually succeeded in guiding the wire through the tiny holes in my front fork](https://willem.com/global/images/a949cea168b3.webp)

![Use a thin layer of tape to temporarily join the individual leads - making it easier to guide the cable](https://willem.com/global/images/9b7048146285.webp)

The main challenge on my bike was to wire the cable through the bike frame. It required drilling a small hole in one of the tubes. I am really reluctant to drill holes in my bike, but I figured (judging on other bikes having holes here) that it would not harm the structural integrity of my frame.

![The wire to the rear light goes inside a newly drilled hole in my bike frame - leaving just enough cable for my steering wheel to turn](https://willem.com/global/images/c332265ab587.webp)

My bike has aerodynamically shaped tubes, they are not perfectly round, leaving some vertical space near the bottom bracket that I assumed to be good enough for an electric wire to pass. Ultimately I had to remove my bottom bracket, crankshaft and pedals to be able to reach the holes inside my bike frame.

![Once the bottom bracket was removed, I was able to see the holes inside the bike frame.](https://willem.com/global/images/7055cbfd8a66.webp)

Before wiring the actual (thinner) wires, I used a thicker and sturdier copper cable to act as a guide. It is much simpler to 'steer' a sturdy cable.

![If you look carefully, you can see a piece of copper cable inside the hole](https://willem.com/global/images/2595fd299535.webp)

![Hooray! I pulled it through! ](https://willem.com/global/images/681a778de11a.webp)

Later I used this sturdy cable to pull the actual cable through. It requires patience and some effort, but eventually you can make it work. I temporarily soldered the actual wire to the guiding wire to make pulling it a little easier. I used a clamp to make a strong connection between both cables.

![Temporarily soldering the actual cables to a copper guiding cable to enable pulling it through the bike frame](https://willem.com/global/images/bfe2ac93489b.webp)

The rear light has a cable that I wired through my seat post, it goes in a tiny hole that is just underneath my saddle. That cable goes all the way down to the bottom bracket where it meets the other cable from the front of my bike.

![The tail light mounted to my seat post with its cable going inside the seat post](https://willem.com/global/images/b15664144a4d.webp)

Eventually I was able to connect all the wires, soldering the individual leads together **and** shrink wrapping them. I left some extra cable length in the seat post tube with two clamp connectors allowing me to remove it if needed.

![Soldering the individual leads together and shrink wrapping them](https://willem.com/global/images/03c162fe268b.webp)

![The resulting shrink wrapped connection is both functional and durable](https://willem.com/global/images/7656b2eecaca.webp)

After putting everything back together, the result is amazing. Both lights work well and I am very satisfied with how it ended up. I received some comment that it is almost like this was factory installed - I'll take that as a compliment!

![Both lights working - the result](https://willem.com/global/images/7bcd4eefe2c3.webp)

![The head light is fitted on my front brake calliper - to keep my handle bar free for some future bike packing adventures](https://willem.com/global/images/7178959ab906.webp)

![The beam is amazing - it just works, really well!](https://willem.com/global/images/92d4e9b4b638.webp)

## Conclusion

And there was light! WOW! It took some time and effort (..) but it was well worth it. The dynamo powered lights take away the fiddling with wireless battery powered lights, replacing them with a durable solution that requires much less attention in the long run. It just works!

![Taking the upgrade bike for a spin at former Dutch Air Force base Soesterberg](https://willem.com/global/images/417d2fa23471.webp)

---

## Giving AI Training

*Teaching folks about the superpowers of GPT* · 2023-10-14 · https://willem.com/en/2023-10-14_giving-ai-training/

Yesterday, I had the pleasure of leading a training session on the application of cutting-edge AI techniques, such as OpenAI's large language models (GPT), for a team of individuals from varied backgrounds, education levels, and disciplines. The results surprised me!

I arrived an hour early – not by train (owing to a disruption), but by car – a twist of fate that turned out to be serendipitous. It afforded me a chance to casually soak in the atmosphere beforehand and engage in unexpected yet delightful conversations about racing cars and health data, among other things.

We delved into the realm of health data and the significant role that large data models play in healthcare and personal coaching. I introduced them to WHOOP (https://willem.com/en/2022-01-14_wearing-whoop-4-0/), a 24/7 health and fitness sensor, highlighting how its wealth of data is now accessible through OpenAI (https://openai.com), enabling bespoke coaching advice tailored to one's physical condition and personal goals.

![WHOOP's new integration with OpenAI makes it a personal coach, providing you with tailored advice on training, health and feeling fit](https://willem.com/global/images/d2b9090d8a35.webp)

The training session itself was an exciting mix of demonstrations, showing how to craft both meaningful and whimsical narratives from text. We explored tailoring content for specific audiences – be they children, teenagers, or even speed-enthusiast seniors. We discussed leveraging OpenAI to devise strategies, such as a social media campaign or a sales pitch, infused with customised data and details pertinent to a prospective client.

I emphasised the crucial notion that one's unique touch should always be evident in the outcomes. This isn't a one-way "text generator"; it's more of an exchange with a kind of digital assistant to whom you present ideas and from whom you receive expert responses. I also showcased other tools, like the iA_Writer_app (https://ia.net/writer), which, with its minimalistic interface, significantly reduces distractions - making it a perfect tool for creativity.

We wrapped up with a five-point action plan, arming the participants with practical tools and accessible instructions to genuinely apply once the training concluded.

## Something for you?

Explore the transformative power of AI with a unique, hands-on training session that's far from your standard lecture. I bring a dynamic, interactive storytelling approach that keeps participants engaged and invested. Here's why my AI training is an invaluable investment for your organisation:

- **Direct Impact**: Experience immediate, tangible benefits as your team gains practical AI insights applicable from day one.

- **Customised Content**: Each session is meticulously crafted to resonate with your organisation’s specific needs and aspirations.

- **Practical Approach**: Beyond theories, I equip participants with actionable strategies and tools, ready for real-world challenges.

My sessions aren't just informative; they're captivating and designed to hold attention from start to finish. Ready to propel your team into the AI-driven future? Reach out to me at mail@willem.com for a customised proposal, adaptable per attendee size and event location. Let's unlock your organisation's potential together!

![Explore the power of AI together by inviting me for a hands-on training session - I love doing these!](https://willem.com/global/images/00ff3e9402ee.webp)

## Conclusion

Conducting these trainings is incredibly rewarding. Experiencing first-hand the impact of this remarkably powerful new technological advancement on individuals and an organisation – literally at the table – was nothing short of exhilarating. The feedback I receive on everything I explained energises me immensely, fuelling my eagerness to spread the word about AI even further. Is this something your organisation might benefit from? If so, please do get in touch!

---

## Hello, stranger

*Talking to random people* · 2023-10-13 · https://willem.com/en/2023-10-13_hello-stranger/

While enjoying my fresh wok lunch in Amsterdam, I noticed something odd: other folks coming in for something to eat ignored the person standing at the counter, preferring to order through a digital kiosk. The crazy thing about this? They are just centimetres apart!

In fact, they are so close that the staff member peeks at the display to get a head start on picking the right vegetables – all without any words spoken. Now, I get it: modern technology allows us to be more efficient, but I think I might be witnessing something deeper: we prefer not to talk to each other anymore.

Perhaps I am noticing these things because I am reading the book "The_Power_of_Strangers:_The_Benefits_of_Connecting_in_a_Suspicious_World" (https://duckduckgo.com/?q=The+Power+of+Strangers%3A+The+Benefits+of+Connecting+in+a+Suspicious+World) by Joe Keohane. In his book, the author discusses his own experiments with talking to random strangers, enriching it with research and historical literature about the origins of mankind, hospitality, and the sheer need to connect with others to survive.

Think about it for a moment. When was the last time you greeted somebody you didn't know? When did you spontaneously engage in a conversation? Chances are you don't even remember! Likely either you or the other person were "busy" with other things (like tinkering with a smartphone).

As a human species, we have reached where we are today because our ancestors collaborated. You don't need to go out hunting for food, do you? We evolved from tribes to larger communities where meeting strangers had the potential to grant us access to food and other resources. Unknown people were treated as guests and were offered generous hospitality for this reason.

Now, with the rise of digital technologies, one can't help but feel something might be at risk, an intangible cost of modern efficiency: our ability to talk to strangers.

We shop online, scan our groceries at the self-checkout, order a taxi via an app, and sit behind our screens in the cafe or coffee bar. Contact with random strangers is becoming rarer and rarer. Yet there are surprising benefits to having a simple conversation with someone you don't know.

Even a short and simple conversation can make you feel good. You might learn something unexpected, and without a doubt, it has the power to enrich your understanding of others. Like the author of the book about meeting strangers, I set out to see for myself if this was really true.

Over the past few weeks, I have been engaging in conversations with random people: at the train station, in the supermarket, on the street, and in the city. I always start cautiously, simply greeting someone or making an 'easy comment' on things like the weather or something equally innocuous. Once you get a reaction, you can easily 'feel' if the person is open to further discussion. An open-ended question, like "where are you going?" (at a train station), often yields great results. I've had multiple conversations where people shared more than just their destination, often providing detailed reasons for their travels. Being a good listener ensures the conversation flows naturally.

It's genuinely enjoyable. I've learned a plethora of unexpected things, such as life in Suriname, how the role of train conductors has evolved over the years, what the volcanoes are like in Iceland, and a policymaker's thoughts on the impact of AI on people's comprehension of the world.

## Conclusion

I truly believe that more people should connect with others by simply talking in an analogue and natural way. It could foster a better understanding of one another, serving as a powerful antidote to the increasing polarisation of our modern world.

![A laptop free zone in a bar in Amsterdam - I wonder when I will encounter the first smartphone free zone...](https://willem.com/global/images/435657f06239.webp)

---

## The Same, Differently

*Where You Are Matters* · 2023-08-23 · https://willem.com/en/2023-08-23_the-same-differently/

It's been over half a year since I moved from the city to the countryside. I regularly travel between these locations for work and leisure. Being a cycling enthusiast, I keep a bike at both places, and this has led me to discover a funny thing.

Last November, I relocated_to_the_Limburg_countryside (https://willem.com/en/2022-11-01_moving-to-the-countryside/) after having lived near Amsterdam for many years. I'm still getting acquainted with my new surroundings, venturing_out_on_my_bicycle (https://willem.com/en/2023-04-20_tips-for-long-distance-cycling/) like an explorer, experimenting with different routes. Every twist and turn holds the potential to surprise — a vastly different experience compared to the monotony of a routine_commute (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/)!

![Using the Garmin Edge 1030 to navigate and explore - who would have thought that I would encounter an "Amstel" near Limburg?](https://willem.com/global/images/6fa4cc572ca6.webp)

I still have a bike at my office in Amsterdam, and occasionally, I go out for a ride. Sometimes, all that's needed to crack a difficult work problem is a breath of fresh air. I love it. In both locations, I relish cycling through nature, as it helps me think. Water seems to work even better for stimulating my mind. Consequently, many of my favourite cycling routes follow rivers, creeks or lakesides.

Often described as a welcome escape from the bustling city, the "Ronde_Hoep (https://www.nederlandfietsland.nl/fietsroute/rondehoep-fietsroute/)" route near Amsterdam offers cyclists an immersive experience in nature. You'll enjoy panoramic views as you meander along the bends of the Amstel and Waver rivers.

![Nature in Amsterdam: Ronde Hoep](https://willem.com/global/images/c49b37977398.webp)

Expansive and sparsely inhabited, the "Peel (https://en.wikipedia.org/wiki/Peel,_Netherlands)" in Limburg feels to me like an unexplored country in its own right. While the historical extraction of peat for fuel has left its mark, nature has now reclaimed the land. Large swaths are untouched, and some areas have even earned National_Park_status (https://en.wikipedia.org/wiki/De_Groote_Peel_National_Park).

![Nature in Limburg: De Peel](https://willem.com/global/images/efe974414a8b.webp)

Just look at the differences! From the road (or lack thereof), to the street lights, signage and buildings. Both places are considered to be "nature", yet the contrast could hardly be greater.

![City dwellers are spoilt with their fancy bike lanes—out in the wild, you're in for a muddy ride!](https://willem.com/global/images/efd19da09579.webp)

## Conclusion

Experiencing the same activity in different settings makes you realise how meaning can vary depending on your location. Where you are matters significantly. Lots of folks never leave their habitat. It makes you wonder: how many of the world's problems come from missing differences in meaning of concepts we take for granted?

---

## Impact of training

*Analysing WHOOP's trend data* · 2023-05-31 · https://willem.com/en/2023-05-31_impact-of-training/

This Monday I completed 235KM on my fixed gear bike during the Fietselfstedentocht 2023. It was a nice ride with fair weather and favourable wind conditions. Yet, I took the challenge seriously and prepared myself with some proper training. In this post I'll have a look at the trend data from my WHOOP in preparation for the Elfstedentocht.

## Fietselfstedentocht

During this single day event, about 16.000 folks ride through the Dutch province of Friesland. The goal is to collect stamps in different towns and cities. At the finish your stamp card is verified, and if all is in order, you'll get a highly collectible "Elfstedenkruisje". This medal is registered on your name. There is special attention for folks who have completed "De Tocht" multiple times, some more than 60 times!

It is a fun event, but the open (and often windy) country side of Friesland can be very challenging as an endurance ride. Last year's event was gruesome: only 9.661 people finished the ride (of the 16.000 who were eligible to start). I was one of them and last year's memories urged me to take my training serious.

## World of difference

This year's Elfstedentocht would be my 6th time, yet everything leading up to this year's edition was different for me. As friends of this blog may know, I moved_from_the_city_to_the_country_side_of_Limburg (https://willem.com/en/2022-11-01_moving-to-the-countryside/). This effectively broke my routine of commuting_by_bike (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/). My daily rides to and from the office were (in hindsight) very important for my overall condition. I wear_WHOOP (https://willem.com/en/2022-01-14_wearing-whoop-4-0/), a biometric tracker and it clearly witnessed my body's condition regressing:

![My HRV measurements going down... as result from lack of training during my family's move from the city to country side](https://willem.com/global/images/1181d0bcaf43.webp)

WHOOP measures a lot of things, one of them is heart rate variability (HRV). Among other things, it is a nice proxy of how fit and relaxed you are. The higher, the better. But, beware: this metric is highly personal. My HRV tends to be on the low end - whereas other folks have measurements in the hundredths of milliseconds. **If you're looking at HRV, you must look at the relative trend to make any sense of it.** In my WHOOP data you can clearly see that things go down: my fitness suffered from the stress and changes related to moving with my family to a new place.

![I have gained weight as I lost fitness: confirming that WHOOP is on to something: there seems to be an inverse correlation between my weight and HRV trends](https://willem.com/global/images/adf1087d21df.webp)

## Turning it around

Although I am still settling in Limburg, I did make it a priority to pick up cycling again in order to stop the regression of fitness (and weight gaining). As my bike is equipped with decent lights, I took opportunity to go for a ride late at night (when the kids are asleep) - or during lunch time whenever I work from home. I am still figuring things out, but the main goal was to increase my hours on the bike, any_bike (https://willem.com/en/2022-09-15_the-ultimate-freedom-bike/) that_is (https://willem.com/en/2019-06-25_assembling-a-cargo-bike/).

![Training opportunistically: working out on a foldable bike during some days from home - you're certainly attracting some attention in full lycra on a Brompton!](https://willem.com/global/images/e430be10aa2d.webp)

![Training on a non-electric cargo bike! The kids love it! No need for fancy GARMIN head units: WHOOP can track your workouts on any vehicle. ](https://willem.com/global/images/ff497fc80057.webp)

## COVID-19

The first few weeks of training really sucked, man it was hard. To make things worse... I got some annoyingly effective COVID in February, having a mayor impact on my body. I felt miserable, even walking felt like a strenuous thing. During one of the first rides after my infection, my performance was so bad that I seriously doubted my ability to ride this year's Elfstedentocht.

![Testing positive for COVID, you don't want this when picking up the training regiment...  ](https://willem.com/global/images/d8d3937d17cd.webp)

![... as a trained cyclist this ride data is not good: heart rate of 180BPM at an average speed of 22KM/h - this is 'the COVID effect' on my body - MISERABLE DELUXE](https://willem.com/global/images/784e1c4fd557.webp)

## Turning it around

I convinced myself that with some determination I could still turn things around, picking up the pace and beating COVID out of my body. There were still months to go before the Elfstedentocht, plenty of time to get_some_serious_milage_done (https://willem.com/en/2023-04-20_tips-for-long-distance-cycling/). It wasn't easy, but it worked! I felt better and better, I gained the confidence needed to ride the grand fondo on my fixed_gear_bike (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/).

![Smile and keep on cycling! Eventually things DO get BETTER.](https://willem.com/global/images/29adc3847b24.webp)

![Last few months I picked up the pace, taking on more "strain" (that is WHOOP-parlance for 'training effort')](https://willem.com/global/images/40c9de1cefc4.webp)

![Training has its effects: my average HRV is trending upwards again! ](https://willem.com/global/images/141e7b4d99fa.webp)

![My (early morning) resting heart rate is going down, too! It inversely correlates with my HRV going up. Some nights dip into the low 50's, high 40's - I am getting back into shape!](https://willem.com/global/images/db5b815fabcc.webp)

![Even my average heart rate during the day, including all my tasks as modern dad, is going down as my heart (and cardiovascular system) is regaining efficiency](https://willem.com/global/images/9e4e025d111c.webp)

## De Elfstedentocht

So, last Monday (May 29th, 2023) it was time for this year's Elfstedentocht. It was a very nice ride! The weather was fair and wind conditions were favourable on large segments of the 235KM route. Together with my brother Kevin and brother in law Rob we finished the route and gained our Elfstedenkruisje!

![Through the Frisian country side during the Fietselfstedentocht 2023](https://willem.com/global/images/48dc1e3958e6.webp)

![Collecting all stamps to earn a "Elfstedenkruisje" medal](https://willem.com/global/images/39f0f951599e.webp)

![Kevin (brother), me and Rob (brother in law) at the finish!](https://willem.com/global/images/cb9a48109003.webp)

During the day I used both my WHOOP and Garmin to collect data. You can clearly see that the effort during the day varies, with the heart rate going up and down for periods of time.

![Garmin's highly detailed data from the Edge 1030 Plus includes: heart rate, power, location, respiratory rate, pedal balance, cadence, temperature and distance](https://willem.com/global/images/c95d8d040476.webp)

If you're into details, you can have a look at the actual data from my bike's Garmin Edge 1030 Plus head unit, including all the raw sensor data. Find_it_on_Garmin_Connect (https://connect.garmin.com/modern/activity/11225284239).

![WHOOP's data during the entire day of the Fietselfstedentocht](https://willem.com/global/images/4f89389630c1.webp)

In comparison to Garmin, WHOOP provides a wider data-set including pre and post event data. Here you can see that my heart rate is substantially higher after the big event compared to the night before: the body needs time to recover.

![The morning after WHOOP calculates the readiness of my body to take on (new) training strain - you can clearly see my body didn't recover overnight: just a 7% recovery score! ](https://willem.com/global/images/5243b2fa7175.webp)

After a good night's sleep my body was still recovering from the big event. WHOOP calculated a 7% recovery score - a metric derived from modelling my normal biometric values on any given day. Pro athletes excel in recovering faster from strenuous days. Here is room for improvement!

## Conclusion

In a year where everything changed for me, it felt as a major achievement to do exactly the same as a year before: completing the Elfstedentocht! Like Alice in Wonderland: *"Now, here, you see, it takes all the running you can do, to keep in the same place."* I am looking forward for the next year of "Willem in Wonderland"!

### Collect data yourself: get a WHOOP for free today!

The best time to start collecting biometric data was 10 years ago.... the second best time? Today! Build yourself a reference dataset NOW, enabling you to track long term effects on your well being. Even if you're not working out or training today - it can still be useful for later. You can get a free WHOOP strap and your first month free through this link: https://join.whoop.com/willem

---

## Tablet as Tool

*Appreciating iPad Pro: A Different Perspective* · 2023-05-08 · https://willem.com/en/2023-05-08_tablet-as-tool/

The iPad Pro's utility has sparked much debate recently. Some users argue it's a disappointment, failing to meet expectations set by traditional laptops. However, there are less obvious benefits to the iPad worth considering. This blog post delves into these advantages and shares insights into the personal experience of using an iPad Pro.

One such critique of the iPad Pro comes from a thought-provoking article by @vincelwt (https://vincelwt.com/ipad). While many of the points raised in the article are valid, it is important to explore the unique strengths that the iPad Pro has to offer. By examining these aspects, this blog post hopes to shed light on how the iPad Pro can be a versatile and powerful tool when utilised effectively.

For those interested in more background on working with tablets, I_have_written_quite_a_few_articles (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) offering an in-depth look at my experience using various tablets as tools, including those running Windows and Linux operating systems. Some highlights:

- iPad_as_Main_computer (https://willem.com/en/2018-03-07_tablet-as-main-computer/): comparing Surface Pro with iPad

- Refining_my_tablet_experience (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/): Debian GNU/Linux on Surface Go

- What_makes_a_great_tablet? (https://willem.com/en/2020-04-14_talking-tablets-what-makes-a-great-tablet/) Working with Suface Pro X (ARM)

- Using_a_paper_tablet: (https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/) read, write, think and repeat with reMarkable

This wealth of knowledge can provide valuable insights for readers keen to learn more about the practical applications of tablet devices in different contexts.

## Choose the Smaller iPad Models

When considering the various iPad models available, it's crucial to remember that bigger isn't always better. The 12.9-inch iPad Pro, when paired with a Magic Keyboard, weighs more than a MacBook Air, which might not be ideal for users who prioritise portability. In contrast, the 11-inch iPad Pro and smaller iPad Mini models provide a more lightweight alternative, without sacrificing much in terms of power and functionality. By opting for these more compact options, users can enjoy the benefits of a powerful tablet while maintaining ease of transport, making them ideal for on-the-go productivity, entertainment, and creativity.

## Embrace Portrait Mode

Utilising the iPad in portrait mode offers a more natural and intuitive experience for reading and annotating documents, closely resembling the feel of traditional paper or books. This orientation lends itself well to tasks that require focus and attention to detail, such as reviewing lengthy texts or studying. By enabling 'dark mode' and 'night shift' alongside a dimmed screen, the iPad further enhances the user experience by reducing the amount of blue light emitted, which can help prevent eye strain and promote better sleep. Additionally, Safari's reader mode capitalises on this orientation, making it easier to navigate and consume online content in a more comfortable and visually appealing manner.

![Reading in portrait using Safari's "reader mode" removes all distractions from (almost) any website](https://willem.com/global/images/115f20806576.webp)

## Opt for 5G / LTE Connectivity

Investing in an iPad with 5G or LTE connectivity ensures that you'll always have access to the internet, regardless of your location. The iPad's ability to seamlessly switch between Wi-Fi and mobile data networks means you can stay connected without relying on mobile hotspots or hunting for public Wi-Fi. This convenience stems from the iPad's "iPhone DNA", which incorporates the same mobile connectivity technology found in Apple's smartphones. As a result, you can enjoy uninterrupted browsing, streaming, and online communication, enhancing productivity and entertainment options on-the-go.

## Skip the Magic Keyboard with Trackpad

Rather than opting for the Magic Keyboard with a trackpad, it may be more beneficial to consider the Smart Keyboard Folio, which does not include a mouse. The iPad's true strength lies in its 10-finger multi-touch screen, which allows for more intuitive and natural interactions with the device. Relying on a mouse inadvertently nudges users back towards traditional laptop-like behaviour, limiting the full potential of the iPad's touch interface. By embracing the touch screen capabilities, users can better manipulate content and enjoy a more immersive experience. For a detailed comparison of these keyboard options, read my_full_comparison_between_the_Magic_Keyboard_and_the_Smart_Keyboard_Folio (https://willem.com/en/2020-08-11_the-best-keyboard-for-ipad/), and discover how each accessory can impact the overall iPad experience.

## Sync While You Sleep

iPads possess a remarkable ability to stay up-to-date and in sync even when not in use, particularly when equipped with 5G connectivity. This feature ensures that your device remains current with emails, notifications, and software updates, allowing for an efficient and seamless user experience. Consequently, when you pick up your iPad, it's ready to go without the need to spend valuable time catching up on the latest communications or waiting for updates to install. This always-on connectivity not only saves time but also allows you to focus on tasks and activities that matter most, enhancing your overall productivity and enjoyment when using your iPad.

## Harness the Power of the Apple Pencil

Even if you don't consider yourself an artist, the Apple Pencil proves to be an outstanding tool for annotating documents and screenshots. It provides a precise and intuitive method of marking up text or images, enabling you to communicate ideas and feedback more effectively. Once you've made your annotations, the iPad's sharing capabilities allow you to quickly distribute your work via email, iMessage, Signal, or social media platforms. This streamlined process removes the hassle of managing files, letting you focus solely on the content at hand. In essence, the Apple Pencil elevates the iPad experience, transforming it into a versatile and efficient tool for both professional and personal use.

![Annotating almost anything in-context (without leaving the app) is very powerful if you ever have to communicate an idea or suggestion](https://willem.com/global/images/208efacb8a68.webp)

## Synergy with Your iPhone

Organising your iPad apps in a manner similar to your iPhone allows you to capitalise on the same muscle memory for swiping and tapping gestures. This familiarity creates a more cohesive user experience, enabling seamless transitions between devices and ultimately improving your overall productivity. Additionally, having the same apps installed on both your iPad and iPhone can provide a significant advantage, as it ensures consistency in functionality, settings, and data across your devices. This synchronisation promotes a more efficient workflow and allows you to easily pick up where you left off, regardless of which device you're using at any given time.

![Multiply the touch/swipe muscle memory if your tablet behaves the same as your phone](https://willem.com/global/images/848e6b3bdb32.webp)

## Coding on the iPad

Coding on the iPad becomes a viable option with the help of the Blink_app (https://blink.sh) and a Virtual Private Server (VPS) running Mosh. While there is an associated cost, the benefits of being able to execute build and deploy tasks even when your iPad is switched off can be invaluable for developers seeking flexibility and efficiency. It's important to acknowledge that text editors such as VIM or Emacs might not suit everyone's preferences, but for some users, including myself, they provide an enjoyable and effective coding environment. Embracing this approach can unlock the iPad's potential as a versatile tool for software development and other technical tasks.

![Programming on iPad Pro using Blink, tmux and VIM over Mosh (in a remote VPS)](https://willem.com/global/images/9f1c47d0c305.webp)

## Debugging (web) applications on iPad

Debugging and inspecting web applications on the iPad Pro becomes a viable option thanks to the Inspect Browser. Although it may not provide an identical experience to popular Firefox or Chrome DevTools, the Inspect Browser offers a commendable performance in delivering vital debugging and inspection functionalities. Its compatibility with the iPad Pro enables web developers to work efficiently on their projects without relying on a traditional desktop or laptop setup. This convenience not only allows for greater flexibility but also showcases the adaptability of the iPad Pro as a powerful tool for various professional tasks, including web development, design, and maintenance.

![Inspect Browser on iPad provides essential debugging and inspection functionalities for web apps](https://willem.com/global/images/c062923679f2.webp)

## Conclusion

After using an iPad for several years, I've concluded that it cannot replace a laptop in the traditional sense. However, by re-imagining the way you work and capitalising on the benefits of a tablet, the iPad can be a powerful and versatile tool. Ultimately, individual preferences will vary, which is why Apple continues to produce great laptops alongside their iPad range.

![It's not a hammer, nor a ruler - but you can definitely use iPad as a tool!](https://willem.com/global/images/e8488334073c.webp)

---

## Using AI to generate code

*Programming with super powers* · 2023-05-03 · https://willem.com/en/2023-05-03_using-ai-to-generate-code/

As part of my software optimisation efforts to cut cloud costs, I needed to replace an existing piece of inefficient server software with something that uses more robust (yet fragmented) tooling available in Debian GNU/Linux. Could the GPT4 language model deliver me some AI magic? Read along!

Part of my company's cloud services is the so-called "Lemmid Manager", an integrated content management system that takes raw input (text, videos, images) and generates beautiful, high-performant static websites. Confronted with surging_cloud_costs (https://willem.com/en/2023-04-05_cutting-cloud-costs/), I am rewriting parts of the software to be more efficient: using less computer power to achieve the same results.

## Image rotation

You may not realise it, but whenever you utilise your phone to take a photo, it is always stored landscape (or widescreen). When you take a portrait (or upright) photo, your phone simply adds a little bit of extra information that saves the way you kept the camera - so that when you look back at the photo, it appears correctly oriented. It is faster to write a single bit of (extra) information than to rotate the actual bits and bytes comprising your image.

This is all fine if the photo doesn't leave your phone, but when one would upload the photo to a website - it needs to be optimised for the web. The actual image bits and bytes must then reflect the actual contents of the photo. The image can then be further_optimised_for_loading_speeds (https://willem.com/en/2018-09-26_optimising-images-for-the-web-and-performance/) and different viewports.

## Auto image rotation based on EXIF

Modern (smartphone) camera's save the orientation in the so-called EXIF accompanying the actual image data. In order to have the image (bits and bytes) correctly reflect the camera's orientation, one should read the EXIF data and based on the orientation apply a rotation algorithm to the image bits and bytes.

### Current implementation

The original (handwritten) implementation uses NodeJS and a module called "lwip" (LightWeight ImageProcessor) to do this. This works fine in most situations, but as images have grown in size (due to more megapixels), the memory requirements have significantly increased. The downside of doing everything in a single NodeJS process is that the entire thing becomes somewhat of a memory hog - causing the complete NodeJS backend to suffer when you push it to its limits processing thousands of photos.

A common strategy to optimise bottlenecks in a piece of software is to extract them from the main program. Instead of processing images from NodeJS directly, I want to use common Debian GNU/Linux tools (that have a proven track record) to do the image auto rotation. From NodeJS I can then call the external 'auto_rotator' and wait for it to complete its task. By having a NodeJS process wait for some asynchronous result/callback, you'll make it available again for other requests.

## GPT4 as code generator

The great thing of free (as in libre) software is, that there are many building blocks available for you to use to build your own programs. I knew that Debian GNU/Linux has tools available in that can do the image rotation based on EXIF data. The challenge is to create a single script that uses these different tools to do the job while providing some robustness in handling exceptions.

Instead of deep diving myself into all the available commands and command options, I decided to ask GPT4 to generate a script for me to do precisely what I wanted, utilising standard tools available in Debian GNU/Linux:

![Generating code is as easy as typing in a descriptive prompt ](https://willem.com/global/images/6054ff996aac.webp)

Within a few seconds OpenAI's GPT4 generated a bash script that uses ImageMagick (https://imagemagick.org/) (a common graphics tool) to perform modifications based on the EXIF data in a given image file. The AI selected the "exiftool" to read the orientation data and based on that tool's output, run the ImageMagick's "convert" command to apply the right rotation.

![GPT4's generated output code "auto_rotate.sh" rotating images using ImageMagick based on EXIF orientation](https://willem.com/global/images/03aeba6c5949.webp)

The full code (that was generated within seconds) is beautifully commented, giving you a great feeling what's going on. It is structured and optimised for humans to read.

## Documentation

In addition to the actual working code, the AI delivered documentation explaining how to use the newly generated software - including installation instructions. This is something that I know most programmers overlook (technical documentation is often an afterthought).

![AI's instructions how to use the generated code - most real programmers can learn from its clarity in communication](https://willem.com/global/images/fba52b536d22.webp)

## Conclusion

Within a few minutes I had a working, documented, piece of code that helps me solve a bottleneck in a piece of cloud software. That is simply amazing - it saved me time (that I subsequently used to write this blog post).

One can only wonder what effects large language models like ChatGPT/GPT4 will have on how we work. I fully embrace AI-tools - knowing how to use them will be essential in the near future (I think)!

![A programmer from the future - as imagined by DALL-E from OpenAI](https://willem.com/global/images/887c6d5c5349.webp)

---

## Working Offline First

*Learning from a 15-year old ThinkPad X200* · 2023-05-01 · https://willem.com/en/2023-05-01_working-offline-first/

As part of a greater plan to optimise my entire workflow, I am doing a little experiment this month: using a 15-year old ThinkPad X200 laptop as main computer. It’s from an era before “the cloud”, popular among free/libre software enthusiasts. What can we learn from this antithesis of modernity?

## ThinkPad X200

Originally released in 2008, the ThinkPad X200 was described as a lightweight, sturdy laptop with plenty of hardware options including different storage options, memory configurations and a wide range of processors to choose from.

![The ThinkPad X200 from 2008](https://willem.com/global/images/2f7652ee0613.webp)

There are many “love_stories”(https://duckduckgo.com/?t=ftsa&q=thinkpad+iconic+design) on the web about the ThinkPad’s legacy and iconic design, if you’re unfamiliar with it you should check out its dedicated wikipedia_page (https://en.wikipedia.org/wiki/ThinkPad). In short, it is a computer highly focussed on function, designed to be reliable, repairable and capable.

![IBM ThinkPad 700C from 1992 was instantly acknowledged as a big deal for the industry](https://willem.com/global/images/d0a484d3189c.webp)

![Classic ThinkPad advertisment “Its mother was a mainframe, its father a Maserati”](https://willem.com/global/images/8689bbd6620e.webp)

Unlike many cheap modern computers, the yesteryear’s ThinkPad’s where designed to last. They are repairable and use many common parts. Their (bottom) panels even have indicators showing you which screws hold what parts - making servicing very easy. You can upgrade the computer with third party components, like memory and (SSD) storage. The battery is removable (with a simple/sturdy click) and can be replaced while the computer is running (on wired power).

## The Experiment

Why would you want to use such an old computer? I think there is a lot to learn about the ‘modern way of working’ by doing exactly the opposite. Instead of using a wide range of cloud services to get work done, I will use this machine to develop an entirely cloud independent, offline first, workflow to get my things done.

As the X200’s modern counterparts like Microsoft Surface or Apple MacBook are seamlessly integrated with cloud services (e.g. you need a Microsoft ID to login to Windows 11), it is nearly impossible to do this with a modern machine. It will keep nudging you back into the cloud.

![This laptop lid hinge, made from metal, is designed to last - note the keyboard has keys a modern MacBook can only dream off (PageUP/PageDown, Home, End, Delete).](https://willem.com/global/images/852658db3add.webp)

To make this work, I installed a modern operating system on the X200: the newest stable version of Debian GNU/Linux. I have written about the importance_of_free_software (https://willem.com/en/2018-07-20_helping-people-with-free-software/) before; in short: **you are in control**. The great thing about this, is that all my favourite software tools are available on this machine, natively. No need to fiddle with third party package managers like Homebrew (https://brew.sh/), Chocolatey (https://chocolatey.org/) or Scoop (https://scoop.sh/). Greatness is just one “apt-get install” away!

![The ThinkPad’s keyboard is a dream to type on and features a “hate or love it” TrackPoint (I’m in the “love” department!)](https://willem.com/global/images/8da6c5fd81ac.webp)

This particular X200 laptop is one with its Intel_Management_Engine (https://en.wikipedia.org/wiki/Intel_Management_Engine) disabled and it has its proprietary BIOS firmware replaced by Libreboot (https://libreboot.org/). Although I am comfortable in using modern, closed, devices like an iPhone or iPad, I am open to the critics of the Electronic_Frontier_Foundation (https://www.eff.org/) who make a compelling_case_of_the_security_risks (https://www.eff.org/deeplinks/2017/05/intels-management-engine-security-hazard-and-users-need-way-disable-it) inherent to the power that these deeply integrated sub systems have. Better be safe, than sorry.

![Plenty of hardware ports, including a PC-card slot, integrated gigabit ethernet, USB-A and a hardware switch to disable WiFi](https://willem.com/global/images/703ca50ccbf7.webp)

If you think of using an old machine yourself, consider replacing old hardisks with modern SSD-storage. I replaced the original, slow, disk with a modern Samsung 8TB SSD. It is fast and offers a gigantic amount of storage, only equalled by a modern $6499 costing MacBook Pro.

![The modern $6499 costing MacBook Pro is one of the few laptops available that can be configured with 8TB flash storage today...](https://willem.com/global/images/3d55939e002f.webp)

![... yet, my 15-year old ThinkPad X200 has 8TB SSD storage, too (a Samsung 870 QVO SSD)](https://willem.com/global/images/04ba0f71d231.webp)

Not all is great, however. The X200’s display is clearly showing its age: blacks are grey and you can clearly see individual pixels. I don’t expect to win any (web/app) design awards utilising this display, but it does offer a (rather) confronting alternative view on modern (often, very light/thin) typography. I think that if you can make your software look clear and great on a mediocre display, all users can benefit from it (including those on HiPDI/Retina displays).

![See pixels on a greyish black background - the X200’s display is no match for modern HiDPI micro led or OLED monitors](https://willem.com/global/images/97c45c534ab1.webp)

Taking a page from Apple’s design book, I took extra effort to make the software installation fit the hardware. Instead of using a bloated software experience, I carefully select a handful of apps and tools to run on the old computer. Instead of a full desktop environment like GNOME or KDE, I opted for a so-called tiling Window Manager that tries to maximise the usage of available screen estate. I use SwayWM (https://swaywm.org/) that is a drop-in replacement for i3 (https://i3wm.org/), but based on the modern Wayland_display_protocol (https://en.wikipedia.org/wiki/Wayland_%28protocol%29). I used many of the same refinements that I applied to my “WillemOS”_tablet_experiment (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/).

## The goal

The goal is to use the X200 for the next weeks as main computer. My modern_MacBook (https://willem.com/en/2020-12-15_why-apple-silicon-is-a-big-deal/) and iPad (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/) are switched off. I want to optimise my workflow by learning about my dependencies on the cloud and to find ways to become more self-sustaining, resilient and independent.

As the old laptop offers me fewer computing resources, it forces me to take great care in software optimisation. This is the other major goal as cloud_costs_have_been_surging_due_to_rising_energy_costs (https://willem.com/en/2023-04-05_cutting-cloud-costs/). I am eating my own dog food here, as they say.

![Work in progress - my X200 experiment](https://willem.com/global/images/a80c9a69bcc1.webp)

## Conclusion

Time will tell how far the X200 will get me, but one thing is clear: these experiments push you out of the comfort zone - to a place where you have plenty of opportunity to learn. It is my hypothesis that the lessons that I will learn, will benefit me (and my customers) in the future.

---

## Tips for Long-Distance Cycling

*Riding 204KM on a fixed gear bike* · 2023-04-20 · https://willem.com/en/2023-04-20_tips-for-long-distance-cycling/

In preparation for this year’s Fietselfstedentocht (236KM), I took my bike and set out for an adventurous ride through half of the Netherlands. It was my first long distance ride after being infected with COVID. If you're considering a long-distance ride yourself, be sure to read along to discover invaluable tips and tricks from my experience.

Every year I love to take part in the Fietselfstedentocht, a single-day long-distance ride through the Dutch province of Friesland. It is an_incredible_event (https://willem.com/en/2017-06-30_fietselfstedentocht-2017/) where thousands of people will encourage you to collect stamps in various towns. It can be a serious challenge, depending on weather, and therefore you’d better put in some effort to train yourself!

![Last year's Fietselfstedentocht was an epic ride with my brother - a gruesome edition with plenty of storm and rain! ](https://willem.com/global/images/9e3840ce38f3.webp)

![My completed Fietselfstedentocht 2022 stamp card - note how the edges have been through bad weather... ](https://willem.com/global/images/f4c5ddae058d.webp)

## Hegelsom - Amsterdam

There is probably no better way to prepare for a long distance ride, than to (gradually) start riding ones. After intensifying my ‘around town’ rides near my_home (https://willem.com/en/2022-11-01_moving-to-the-countryside/), I was ready for some serious long distance cycling. I decided to go to Amsterdam from Limburg by bike, taking a little detour via Venlo, Nijmegen, Arnhem, Flevoland. I selected this route on purpose, so it would have great variation in scenery and it would feature some long straights on windy dykes (something that you’ll encounter in Friesland, too).

![Maasduinen National Park in Limburg](https://willem.com/global/images/d7de40ad82f3.webp)

Plan your route in advance, during the ride you will be busy enough with the challenge of completing it. You can use a navigation system or you can follow road signs. Either way, it is wise to memorise major waypoints and towns around the route. This will give you a sense of orientation during the ride that is useful when you try to find the right dosage of effort.

![Follow road signs or use a GPS navigation system - whatever you do, make sure you have some idea where you're going](https://willem.com/global/images/c0f6cc5d1683.webp)

## Bike and gear

Long distance riding takes a little extra preparation than a normal quick ride around town. You must make sure you’re bike is in technical good condition, you should bring along some spare tires and tools, and you must think of how to “refuel” yourself along the route. It might be a good idea to practice servicing_a_flat_tire (https://willem.com/en/2021-11-19_escaping-the-flat-tires/), if you have never done this before.

![I prepared my bike for a new season of cycling with fresh rubber and headset bearings](https://willem.com/global/images/1ba63cc196da.webp)

![The day before my departure, I checked my bike thoroughly and even did a little test ride around town](https://willem.com/global/images/8d7c932a893f.webp)

Another challenging thing to get right is clothing. Long distance riding often takes multiple hours on the bike. Weather forecasts are local and only ‘so so’ reliable. Get yourself a set of clothing that is neither too cold, nor to hot. You really want to focus all your energy on the ride itself, not on being chilly or overly hot during the ride.

## Mental support

As we live in modern times, you could consider leveraging friends and family to provide you with support along the route. For this I connected my Garmin Edge with my iPhone so it could relay incoming messages on the bike computer’s display. With Garmin’s live tracking feature you can share your route and progress (including current position, speed and heart rate) with your family and friends. I prepared a message before I left and shared it with about a dozen persons, it makes the solo challenge a little less lonely. Trust me, this can make a big difference whenever you go through the “why did I want to do this”-fase that you will eventually encounter during the ride.

![Link your bike computer to your phone to be able to receive messages of support from family and friends](https://willem.com/global/images/e5e33079ac6a.webp)

## Start slow

Whenever I set out to ride a long distance, I always start slow: if you can comfortably ride at 30KM/h, consider starting at 25KM/h. Energy is easily spent during the first few hours as you feel fresh and fit. The real challenge is to have enough energy left in the proverbial tank to complete the last hours. Prepare for this by training with an heart rate monitor and figure out where your limits are, then try to find an optimal speed that you can comfortably maintain for hours. This takes a little practice and it changes based on the conditions (like weather or how well you’ve slept). Learn to listen to your body and only gradually increase your effort as you go!

![My heart rate during the 10 hour ride from Amsterdam to Hegelsom: note how I kept my heart rate relatively low during the first few hours!](https://willem.com/global/images/b42e688740ab.webp)

## My ride

After a relaxed morning at home in Hegelsom, I set out for Amsterdam. The weather was fair, with some medium headwind on the early part of the route. I planned my route via various Dutch national parks (Maasduinen, Hoge Veluwe) and through different cities and villages. This way I would have a great variety of scenery and plenty of opportunity to refuel. As a contingency measure in case my performance was not enough (after being infected by COVID), I made sure to bring along my public transport chip card to be able to bail out of the ride by taking the train to Amsterdam.

![Leaving my new hometown of Hegelsom, Limburg](https://willem.com/global/images/918e7e99a1ce.webp)

Upon departure I shared my_live_tracking_link (https://twitter.com/wlmiddelkoop/status/1648945912511643652?s=20) with friends and family on Twitter (https://twitter.com/wlmiddelkoop/status/1648945912511643652?s=20). In addition to the real time data, I posted photos during the day to give folks an idea what I was seeing. This is a fun way to create (and share) memories.

## Impressions

Another amazing thing about long distance bicycle rides is the sheer amount of impressions you get during the day. I once jokingly said that a ride like this feels like a major holiday journey. As you traverse through the country you’ll see many different things, see many different people (in their ‘natural habitat’) and experience different emotions and thoughts while you’re pedaling away.

![While many cyclists eat while riding, I prefer to stop and enjoy the moment while eating something](https://willem.com/global/images/35c389e5e2ef.webp)

![You're amazed by the things you'll encounter - like the beauty of the Dutch National Park Hoge Veluwe...](https://willem.com/global/images/939e679db681.webp)

![... or by an unexpected road block, deferring you into "the unknown" (route)](https://willem.com/global/images/f8f6b79ec8d0.webp)

Take your time to enjoy the surroundings, it is you, your bike and your route. I think it is one of the “purest” ways to enjoy your country, I love it.

![Refueling at a tank station](https://willem.com/global/images/f34098469657.webp)

![This felt as a fitting place for a little drink stop... Willemsplein in Arnhem! ](https://willem.com/global/images/e775bf274648.webp)

![Beautiful scenery - long straights on dykes near Flevoland](https://willem.com/global/images/290e39b9d95e.webp)

![Flowers from Amsterdam... grown in Flevoland!](https://willem.com/global/images/d235eca5f95e.webp)

## The man with the hammer

If your ride’s distance is long enough, chances are you’ll encounter the proverbial “man with the hammer”. The moment you feel wasted, gone, out of energy and motivation. It happens, and you should not be afraid for this. An easy fix for it is to make sure you have some (small) snacks with you to enjoy while you take a small break. Just a few minutes on a bench can make a world of a difference. If you gain more experience, you can feel it coming and plan for it. Don’t feel ashamed by stepping of the bike - it is the only way to keep going!

![At about 80% of the route I really felt my legs and back complain... this bench was a welcome change for my bum on the saddle](https://willem.com/global/images/41e797762568.webp)

## Victory

When you complete your ride you will feel victorious, in a “raw” and “primal” way. This feeling of euphoria will last for days, possibly weeks. It is a great reward for your efforts - enjoy it with pride!

![Crossing the last bridge into Amsterdam felt like victory.](https://willem.com/global/images/90842261f5cb.webp)

![Hello Amsterdam! Made it all the way!](https://willem.com/global/images/30e572072ef8.webp)

![Look who's WHOOP's #1 of The Netherlands in terms of strain! Euphoria!](https://willem.com/global/images/90587eae69a3.webp)

## Conclusion

Long distance riding is something special, its impact goes way beyond the mere kilometres your ride. It is physical and mental. You’ll learn about yourself in a way few other experiences can do. If you’re thinking about doing this, take my advice: DO IT - you’ll love it.

Check out my ride data on Garmin_Connect (https://connect.garmin.com/modern/activity/10946133420)

![The morning after: Make sure to be kind to yourself - after such an intensive effort your body needs time to recover. My WHOOP noticed this clearly, even after getting a good night's rest.](https://willem.com/global/images/796fe5d75342.webp)

---

## Cutting Cloud Costs

*The Significance of Software Optimisation* · 2023-04-05 · https://willem.com/en/2023-04-05_cutting-cloud-costs/

Like many, I faced soaring cloud service costs for my clients, prompting a wake-up call. To stay afloat, it's essential to incorporate software optimisation as a strategy for managing cloud expenses. Join me as I share how I managed to save up to 90% on cloud costs through optimisation!

## Understanding Cloud Costs

For many people, "the cloud" seems intangible, making it difficult to grasp what exactly contributes to cloud costs. Simply put, the cloud consists of computers without displays, housed in large cabinets and occupying entire rooms or buildings. These computers are not very different from your personal devices, such as laptops.

![The cloud consists of computers without displays](https://willem.com/global/images/666d74824f8d.webp)

![Housed in large cabinets occupying entire rooms or buildings](https://willem.com/global/images/00337c3ca6cf.webp)

The more tasks you perform on a cloud computer, the greater the processing power and memory required to avoid slowing down or crashing. Cloud providers charge you for the amount of computing power and memory you use.

![In the cloud, increased storage demands at a data centre lead to more hard drives being used, thus consuming more energy](https://willem.com/global/images/cc991dc9663a.webp)

Much like your laptop's or phone's battery draining faster when pushed harder, cloud computers consume more electricity when working at full capacity.

The recent surge in cloud costs is primarily due to rising energy expenses. Cloud providers pass this expense on to the end-users of their services: YOU!

Although I had to raise prices, too, it did not feel right to simply forward the bill and dismiss it as "not my problem". I believe that for my businesses to prosper sustainably, taking full responsibility for the rising costs is essential. That's why I set out to cut my cloud costs.

![Much cloud work is remote, but occasionally, a console display is required for specialised maintenance tasks.](https://willem.com/global/images/40ac00e2ec67.webp)

![Hello from the cloud! ](https://willem.com/global/images/5979fe5a829f.webp)

## How to cut cloud costs

Let's look at three simple strategies for reducing cloud expenses: doing tasks less frequently, deleting unnecessary data, and delegating tasks to others.

### Doing less (frequently)

Firstly, one way to cut costs is to reduce the frequency of specific tasks. Analyse your processes and identify operations that consume a significant amount of resources. Determine if these tasks can be performed less often without compromising your objectives. By running resource-intensive processes less frequently, you can conserve resources and lower your overall cloud expenditure. For example:

- Consider whether your cloud applications need to run continuously, or if you can scale down during quieter periods, such as at night. By analysing your workload, you may identify patterns that offer opportunities for optimisation.

- Carry out tasks once and serve results from a cache. For example, rather than calculating webshop prices for each individual visitor, perform the calculation once and serve the results to all visitors.

- Instead of enabling features by default, make them opt-in based on a 'need-to-have' principle. Think about it like this: when you're home alone, do you switch on all the lights in the house or just those in the room you're in?

### Delete data

Another strategy is to regularly delete unnecessary data. As storage costs can make up a considerable portion of your cloud expenses, it's crucial to audit your stored data and remove any outdated or irrelevant files. By doing so, you can free up valuable storage space and avoid incurring unnecessary costs for data you no longer need. For example:

- Delete old log files, as it's not always necessary to retain them indefinitely on the cloud, which can lead to increased storage costs. Consider transferring logs to another computer or email inbox instead.

- Optimise photos, images, music, and videos using cutting-edge compression techniques. With lossless compression, you can save up to 80% of storage without compromising quality. Read_my_post_on_image_optimisation (https://willem.com/en/2018-09-26_optimising-images-for-the-web-and-performance/)

- Be selective about what you store in the first place: do you genuinely need to log, save or store everything? It's a bit like not "eating the entire restaurant" when you're only there for dinner.

### Let others do it

Lastly, consider delegating certain tasks to others or utilising client-side computing resources. There are many services available that specialise in handling specific cloud-based operations, often more efficiently than trying to manage them in-house. By outsourcing some of these tasks to specialists or leveraging the fast processors and memory of users' devices, you can take advantage of their expertise and resources, while reducing the burden on your own cloud infrastructure. Read_my_post_on_leveraging_client-side_computing_power (https://willem.com/en/2020-05-11_scalable-application-design-without-magic/). This approach can lead to both cost savings and improved performance. For example:

- Contemplate compressing and resizing resources such as images and videos on the client-side before uploading them to your cloud service, or offload the optimisation tasks to specialised online services.

- If your application includes a search function, think about implementing it entirely client-side using JavaScript and a JSON data structure. You'll be amazed at how quickly this can handle thousands of records.

- When employing animation or interactive graphics, consider tapping into the powerful graphics chips of modern client devices, particularly for (web-based) games or charts

## Doing it myself

After months of diligent work, I managed to reduce my cloud footprint by 66%, while retaining approximately 80% of all features and services. By the end of the year, I anticipate further reductions as some contracts are due to expire.

![Extracting hardware from the data centre - the epitome of energy-saving wizardry!](https://willem.com/global/images/99ff67fb68de.webp)

At first, the task seemed insurmountable; it was unclear where to begin. However, as I gained confidence and progressed with my optimisation strategy, I developed a knack for it, discovering more opportunities for optimisation along the way.

![A "cloud cart", loaded with a decommissioned computer on it, outside the datacenter](https://willem.com/global/images/e79eab6420dd.webp)

## Conclusion

Cutting cloud costs doesn't have to be a complex process. By adopting these straightforward strategies—performing tasks less frequently, deleting unnecessary data, and delegating tasks to others—you can make a significant impact on your cloud expenses and optimise your overall operations. Ultimately, you might find yourself wondering why you hadn't started this process sooner. As the saying goes, better late than never!

![Clouds above the KPN DC2 datacenter in Amsterdam](https://willem.com/global/images/95da32d82f1e.webp)

---

## Back to the University

*Diving into Scientific Programming* · 2023-02-08 · https://willem.com/en/2023-02-08_back-to-the-university/

This month, I headed back to university for a special course on scientific programming. With numerous recent advancements in machine learning (referred to as "AI" in PowerPoint parlance), including ChatGPT, it felt like the ideal moment to delve into Python programming. Join me on this journey.

## Why Python for Scientific Programming?

Python (https://www.python.org) has gained immense popularity within the scientific community, and for good reason. Its simplicity and readability make it approachable for newcomers, whilst retaining the power to tackle complex tasks. The language's versatility enables researchers and scientists to implement algorithms and models with relative ease.

An extensive array of libraries tailored for scientific computing, such as NumPy (https://numpy.org), SciPy (https://scipy.org), Pandas (https://pandas.pydata.org), and Matplotlib (https://matplotlib.org), bolsters Python's position in this domain. These libraries offer comprehensive functions and tools for data analysis, statistical modelling, and visualisation, thus streamlining the scientific programming process.

In comparison to other programming languages, such as JavaScript or Ruby, which often find use in non-scientific contexts like web development, Python boasts a more straightforward syntax. This characteristic allows users to focus on the problem at hand rather than wrestling with language intricacies. Additionally, Python's extensive scientific ecosystem renders it a more suitable choice for research applications.

Examine the following two code samples, one in C++ and the other in Python 3. Each program performs identical tasks: requesting the user's name and date of birth, carrying out basic input validation, and ultimately revealing the user's current age.

![C++ example code: Determining the user's age](https://willem.com/global/images/d7d44f31e43e.webp)

![Python 3 example code: Determining the user's age](https://willem.com/global/images/779bab33d53c.webp)

One can easily observe the contrasting syntax between the two languages, with Python bearing a closer resemblance to everyday English. This aspect of Python often enhances readability and comprehension for many users.

Another factor contributing to Python's success in scientific programming lies in its thriving community. Researchers and developers from various disciplines share knowledge, offer support, and contribute to open-source projects, fostering an environment of collaboration and continuous learning.

## The Course

Throughout the course, the absolute basics of programming were explored by tackling problems from various scientific domains. Upon completion, a solid grasp of programming principles was acquired, with the ability to apply them across different fields and projects.

![The Universiteit van Amsterdam at the Science Park campus - friends of the blog will recognise my bike](https://willem.com/global/images/8534073ce0ee.webp)

Revisiting the basics of programming, even for experienced programmers (like myself), can prove to be immensely beneficial. Over time, it's not uncommon for programmers to develop habits or shortcuts that may not adhere to best practices. By returning to the fundamentals, you can unlearn any detrimental habits and re-establish a strong foundation in programming principles. Additionally, the fast-paced nature of the tech industry means that innovations and updates are constantly emerging. By revisiting the basics, seasoned programmers can stay up to date with the latest advancements and methodologies. This process of re-evaluation also offers an opportunity to approach programming with a clean slate.

![Me taking part in a programming class at the University (class mates blurred for privacy reasons)](https://willem.com/global/images/9b78d21c6e59.webp)

The course consisted of multiple modules, starting with Level 1, where a choice was made between ALGORITHMS, which focused on breaking down intuitive problems into steps a computer could understand, and NUMBERS, a mathematically oriented module that delved into number properties without requiring prior maths knowledge. In Level 2, the choice was between TEXT, which centred on natural language processing and sentiment analysis of tweets, and NUMERICAL INTEGRATION, where important techniques for determining surface areas under functions when traditional integration didn't suffice were taught. Level 3 involved working with BIG-DATA, analysing large datasets and weather patterns in the Netherlands. An optional bonus level, MOVEMENT, provided a simulation of digging a tunnel through the planet and explored physics problems solvable with computer assistance.

![The weekly lab sessions offer a delightful opportunity to stay on track with your coding adventures, ensuring you have a helping hand from others whenever you hit a snag.](https://willem.com/global/images/4cabf419ba55.webp)

![Bang on trend with a bleeding-edge gender-neutral toilet](https://willem.com/global/images/ccb637c740eb.webp)

## Conclusion

No matter one's age or wisdom, there's always room to learn something new, particularly with advancements in machine learning like GPT4. Moreover, going back to university provides a refreshing change, presenting a completely different context compared to the commercial or professional sphere in which I typically operate. Embrace the mantra: stay hungry, stay foolish!

![Toilet wisdom](https://willem.com/global/images/a8111c91accb.webp)

---

## Rolex DateJust 36

*A crown for every achievement* · 2022-12-22 · https://willem.com/en/2022-12-22_rolex-datejust-36/

The year 2022 has been very special to me, after working very hard to make it possible: me and my family finally made the big move to Limburg. To commemorate this milestone, I got myself a timeless timepiece: the Rolex DateJust 36. Read on to find out what it's like!

## 2022

Earlier I_described_me_and_my_family's_big_move (https://willem.com/en/2022-11-01_moving-to-the-countryside/) from bustling Amsterdam to the peaceful countryside of Noord-Limburg. To make it possible, both financially and professionally, I had to move quite some mountains. In the end, it all came together and we now live happily - in the middle of nearly nowhere (ha!)

![This year, my coffee mug became my lifeline, as I endured countless all-nighters and intense labor - turning myself into a caffeinated superhero](https://willem.com/global/images/d61ef1c573be.webp)

## Looking for that special watch

Upon sharing my passion for watches at a near-nerdy mechanical level, I received an invitation to try on exquisite Patek Philippe masterpieces. These intricate works of art rival the cost of a family_home_in_Limburg (http://willem.comhttps://willem.com/en/2022-11-01_moving-to-the-countryside/). While I find the comparison amusing, I believe that the timing wasn't suitable for me to sport such a lavish timepiece. As a devoted father, I am constantly immersed in the lively world of children, engaging in LEGO-building, role-playing, bath-time assistance, and playground slide heroics. This boisterous environment hardly seems like the ideal sanctuary for a sophisticated Patek Philippe Grand Complications watch.

![Feeling welcome in the Patek Philippe boutique, which resembles an extraordinary candy shop of unparalleled grandeur](https://willem.com/global/images/780bc09bf309.webp)

![Wearing a Patek Philippe Nautilus annual calendar - the Nautilus was originally crafted by the esteemed watch designer Gerald Genta - an icon](https://willem.com/global/images/fd49e1bd0371.webp)

## Rolex DateJust

Since its inception in 1945, the Rolex DateJust has secured its position as an iconic timepiece. This classic wristwatch boasts a distinct design that transcends fleeting trends, with its elegant form and timeless appeal. As the first self-winding wristwatch to feature an automatically changing date on the dial, the DateJust demonstrated Rolex's commitment to innovation and precision. Over the years, this masterpiece has seen various refinements, yet it retains its original charm and enduring allure.

![Original Rolex DateJust advertisement from the 1960's](https://willem.com/global/images/d5a45ae4ab64.webp)

The Rolex DateJust's history intertwines with notable figures, including U.S. President Dwight D. Eisenhower, who sported the watch during his tenure. Apart from its association with distinguished personalities, the DateJust has graced the wrists of adventurers and explorers, showcasing its versatility and reliability. This horological classic, available in various materials, sizes, and dials, captivates watch enthusiasts worldwide.

![Today's DateJust 36 (reference model 126234) with fluted bezel and bright blue dial on a jubilee bracelet](https://willem.com/global/images/563b4fb54a07.webp)

## Finding it

Due to factors such as speculation, inflation concerns, and cash restrictions, Rolex watches have recently experienced surging demand leading to stock shortages. If you manage to find one at a local authorised dealer, count yourself fortunate. By doing so, you can purchase at the list price, avoiding the hefty premiums associated with the second-hand or grey market, where some models command a 200% markup.

![Buying a Rolex ain't as easy as putting your old watch on the table and simply asking for a new one - but I did :-)](https://willem.com/global/images/47138c3c4044.webp)

Perhaps it was luck, or perhaps it was fate, but I chanced upon a Rolex DateJust 36 in stock at Gassan_Amsterdam (https://www.gassan.com/en/shop-in-shop-rolex-boutique). While I'm not particularly superstitious, I thought the 22nd of December would be a fitting date to purchase a watch to commemorate the year '22. Therefore, when the friendly staff uttered the enchanting words "this one is available," I eagerly responded with a resounding "YES, please!"

![Celebrating the year '22 with a Rolex DateJust 36 bought on the 22nd of December (I have a thing for numbers, I guess)](https://willem.com/global/images/4070152dce0c.webp)

This particular Rolex DateJust model showcases the classic size of 36 millimetres in diameter. While this dimension might seem small for a men's watch by contemporary standards, I appreciate the restrained proportions of all my belongings, whether it's my phone (https://willem.com/en/2021-12-09_for-the-love-of-mini/), tablet (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/), or timepieces like the Tudor_Black_Bay_36 (https://willem.com/en/2020-06-17_tudor-black-bay-36-long-term-review/) or my_custom-made_ochs_und_junior_annual_calendar (https://willem.com/en/2020-11-30_designing-my-own-watch/).

![The DateJust boasts a bright blue dial, accentuated by a sunburst effect that imbues it with a sense of dynamism](https://willem.com/global/images/ba3b2f29699f.webp)

![Its interaction with light is nothing short of enchanting, as it emanates a lively energy](https://willem.com/global/images/ecd1dd9d41f1.webp)

![The watch's thickness and overall proportions are spot-on; handling it makes it clear why it's a timeless classic.](https://willem.com/global/images/412ae466b229.webp)

The watch possesses a vibrant blue dial that transitions from a stately near-black to a brilliantly luminous hue in direct light. Featuring a fluted bezel made of white gold (Rolesor, in Rolex parlance), this DateJust variant, when paired with the jubilee bracelet, garners admiration from both enthusiasts and novices alike.

![It sits comfortably on the wrist and complements virtually any outfit, such as a pair of blue jeans](https://willem.com/global/images/6bdf9d58bf13.webp)

I cherish the hope that I can wear this timepiece in good health for numerous years to come. In a sense, its dimensions and hues evoke memories of my late father's watch, which, in turn, bore a resemblance to the size of my grandfather's timepiece – who has also passed away. As the years unfold, perhaps my children will look back fondly on me and this watch, creating a lasting legacy that transcends generations – the future holds endless possibilities.

![Heirloom pieces: On the left is my late father's watch, which features a bright blue dial (a little hard to see), and on the right is my grandfather's watch of a similar size - I swear I did not set the dates on the watches for the picture, they just happen have stopped at 22 and 12... a nod to my watch from up above?](https://willem.com/global/images/20137a331918.webp)

## Wearing it

The DateJust 36 is the ultimate wingman, always there to lend a hand no matter what life throws at you. Need to build a LEGO tower? It's got your back. Cracking open a cold one with the boys at work? It'll be right there with you. Hitting up the casino for a night of gambling? No problem, the DateJust 36 is ready to roll.

![Some might say that the DateJust 36 is the ultimate GADA-watch](https://willem.com/global/images/2f5dbfa96ff4.webp)

![Constructing LEGO on a rock-hard surface? Fear not, this watch won't go to pieces!](https://willem.com/global/images/b6d7b6c6fd54.webp)

![A few brews with your brothers at the office? No problem, this watch is always up for a good time!](https://willem.com/global/images/57f1a3233710.webp)

![Sporting this watch at the casino is a safe bet, just don't expect it to spin you a fortune!](https://willem.com/global/images/7af2c82d4e1e.webp)

And if you're feeling adventurous, take it out for a spin on your bike or wear it while scrubbing the bathroom floor - it's tough enough to handle anything you throw at it. So go ahead, live your best life with the DateJust 36 by your side - just don't blame it if you wake up with a hangover or a broken LEGO tower.

![The DateJust isn't one to throw in the towel when it's time for a bathroom scrub-down!](https://willem.com/global/images/18c1bcc65802.webp)

![Tough enough, it's the perfect watch to join you on a pedal-powered adventure - making me a happy chap!](https://willem.com/global/images/58359bd4c2b9.webp)

## Conclusion

The DateJust serves as a dependable wrist worn companion, sure to endure for years ahead. What a fitting method to commemorate a remarkable year! Its adaptability and wearability are truly endearing. Given that time holds such great value, this watch aptly aids in monitoring its passage!

---

## Moving to the countryside

*Leaving the big city for a small village* · 2022-11-01 · https://willem.com/en/2022-11-01_moving-to-the-countryside/

This month marked "the big move": relocating my family from Amsterdam to Noord-Limburg's countryside. Motivated by my wife's longing for her roots and our desire for space, the timing felt right. As our oldest child neared four years and primary school, we considered embracing the countryside lifestyle. Would trading Amsterdam's bustle for a new pace be rewarding? Read on!

## Amsterdam and Willem

Born in the mid-80s, I grew up near Amsterdam before pursuing my Bachelor of Information Technology and later, my Master of Information Studies at the Universiteit van Amsterdam. After purchasing an apartment, I launched three companies, catering to hundreds of customers. My connection with Amsterdam runs deep, as I adore its diversity, energy, and proximity to everything. For cycling enthusiasts like myself, Amsterdam offers the ideal environment for exploring on two wheels.

![Experience the thrill of Amsterdam's vibrant nightlife, all within reach of your bike!](https://willem.com/global/images/45b0b7a6cb73.webp)

Despite its charm, Amsterdam harbors drawbacks that I've come to know all too well. Tranquility remains elusive, as planes and cars create an unrelenting buzz throughout day and night. I've experienced firsthand the darker side of urban living: the theft of my car's wheels and the chilling encounter with a burglar inside my apartment bedroom during an early morning awakening.

![Nearby planes make good subjects for closeup photos, but their continuous noisy presence can be annoying, too](https://willem.com/global/images/e28e6b8ef31b.webp)

![Dude, where are my wheels?!](https://willem.com/global/images/05e645ef02e9.webp)

The city's streets, teeming with life, can turn into grimy alleyways, where rats scurry through shadows, and an overwhelming sense of crowdedness pervades. Indeed, the very attributes that make Amsterdam so vibrant can also transform it into a challenging place to call home, where the struggle for peace and safety sometimes overshadows the allure of the bustling metropolis.

![The dirty downside: litter on the streets in Amsterdam at Kingsday](https://willem.com/global/images/019d2906fec3.webp)

While I relish the thrill of urban living and its inherent vibrancy, my role as a father of two compels me to reconsider my priorities. In providing my children with a safe environment to savor their childhood, I aim to strike a balance between sheltering them from the harsher aspects of city life and offering a more gradual introduction to the exhilarating, fast-paced world that awaits them. By nurturing their growth in a secure setting, I seek to instill in them a sense of confidence and resilience, ensuring that they can navigate the challenges and excitement of city living when the time comes.

![The game-changer: from living for myself to living for my two kids](https://willem.com/global/images/65043b74d322.webp)

## Noord-Limburg

Tucked away in the southeastern part of The Netherlands, Noord-Limburg captivates with its forests, hills, creeks, farms, and villages. Instead of a single metropolis dictating the rhythm of life, Limburg features numerous small villages, each brimming with clubs and unions. Residents, well-acquainted with one another, take pride in maintaining their surroundings.

![The creek "De Groote Molenbeek" meanders through forests and countryside, a picturesque sight to behold, a typical scene for this region](https://willem.com/global/images/014814f41fd3.webp)

Some friends and business connections humorously cautioned that rural life might lag a few decades behind the city's cutting edge. Yet, contemplating the virtues and drawbacks of this slower pace, I wondered if trading some recent urban developments, such as rising crime and overcrowding, for a more peaceful existence could prove worthwhile. Only one way to find out!

![Moving to Limburg: pack your life in a box and hope it doesn't break!](https://willem.com/global/images/4b39899c875c.webp)

![Making new friends... the rural way!](https://willem.com/global/images/76d4f8a09479.webp)

We discovered a spacious house in the village of Hegelsom (±1965 inhabitants in 2021), within walking distance of the primary school. Streets experience minimal traffic, and planes only fly high overhead infrequently. Upon moving in, the welcoming villagers kindly greeted us, extending invitations to various neighborhood events.

![Our house in Hegelsom, a small village in the province of Limburg, located in the southeastern part of the Netherlands](https://willem.com/global/images/7d914e86eb26.webp)

![Providing a safe haven (... of sorts) for the kiddos](https://willem.com/global/images/e809b9a3fb2f.webp)

Spotting litter on the streets proves a rare occurrence, and residents maintain their homes in tidy condition. The native locals converse in their distinct dialect, which might sound alien to urban dwellers. However, after a decade of knowing my wife and her family, I've managed to comprehend their unique language.

![The breathtaking splendor of Mother Nature, just a stone's throw from our new front door](https://willem.com/global/images/9d4a3f76b6a0.webp)

![Wandering the wild on a frosty morn at daybreak](https://willem.com/global/images/9bbc7f2982ae.webp)

## Connecting Metropolis-Countryside

Our new house's proximity (by foot) to a train station with direct access to Amsterdam isn't mere coincidence. Although I no longer reside in the city area, I retain my Amsterdam apartment as a pied-a-terre and office, allowing me to enjoy the urban bustle at my leisure while providing a secure haven for my family and moments of respite.

![The train station is like a teleporter that beams me right into the city - I'm basically a modern-day Star Trek character](https://willem.com/global/images/56f0d0adc86f.webp)

![The 1h45m express ride is my chance to transform into a high-speed businessman, cruising at a decently-fast 140KM/h in my mobile office](https://willem.com/global/images/65a5b1254412.webp)

## Conclusion

Moving to Limburg sometimes feels like a jump into the unknown, but it offers me a new world to explore, learn from, and live in. I am excited to see how this move will shape and influence my daily routines and lifestyle choices over time. I am sure its impact on my life extends far beyond just changing my address!

!["De Limburgers heten u welkom" - now I am one... or am I? :-) "Het is een kwestie van geduld" - resistance is futile! Ha!](https://willem.com/global/images/3b1a98856df9.webp)

---

## MUSE in Carré

*Rock meets elegance* · 2022-10-23 · https://willem.com/en/2022-10-23_muse-in-carre/

Last Sunday I experienced a breathtaking fusion of legendary rock band MUSE and Amsterdam's iconic Royal Theatre Carré. The band's electrifying sound in the theatre's sophisticated atmosphere proved to be a recipe for an unforgettable night.

## MUSE

Hailing from Teignmouth, Devon, MUSE emerged onto the music scene in the late 1990s, quickly gaining attention for their unique blend of alternative rock, electronic, and progressive elements. Comprising vocalist and guitarist Matthew Bellamy, bassist Chris Wolstenholme, and drummer Dominic Howard, the trio has crafted a powerful sound, characterised by soaring vocals, intricate guitar work, and dynamic drumming. Over the years, MUSE has captivated audiences worldwide with their electrifying live shows and thought-provoking lyrics, garnering multiple awards and securing their place as one of the most innovative and influential bands of their generation.

![MUSE](https://willem.com/global/images/5a6f69ea3b41.webp)

## Royal Theatre Carré

Undoubtedly an iconic cultural landmark in downtown Amsterdam, the Royal Theatre Carré traces its history to 1887. Conceived as a circus theatre by Oscar Carré, it has evolved into a revered institution known for classic appeal and diverse world-class performances. Carré captivates audiences with magnificent architecture, elegant interiors, and an enchanting ambiance, exuding unrivalled sophistication. In 1991, the theatre received the "Royal" title, enhancing its prestige. Today, Royal Theatre Carré remains a proud symbol of Amsterdam's cultural scene, enchanting visitors with timeless charm and captivating artistic experiences.

![Royal Theatre Carré in Amsterdam by night](https://willem.com/global/images/083a60ae0805.webp)

## Intimate Reverberations

Imagine MUSE's electrifying performance resonating within the intimate confines of Carré's classic setting. Every soaring note and intricate guitar riff amplified by the theatre's exquisite acoustics, while dazzling lights dance and shimmer, reflecting off the elegant interiors. In this fusion of raw energy and timeless charm, the audience becomes one with the music, submerged in a mesmerising, unforgettable encounter where the boundaries between past and present, tradition and innovation, simply dissolve into the atmosphere.

![The audience gathering inside the classic theatre](https://willem.com/global/images/507bee98a59d.webp)

![Full house: the theatre has a capacity of just a few thousand](https://willem.com/global/images/d6bd2c44ced1.webp)

![Blue lights from the podium perfectly complimenting MUSE's electrifying sound](https://willem.com/global/images/43a2d929eb13.webp)

![Bright flashes illuminate the audience and shedding light on Carré's classic interior](https://willem.com/global/images/f33dff882d73.webp)

![Bellamy rocking the guitar!](https://willem.com/global/images/97fd1dcedc3d.webp)

![The audience singing along!](https://willem.com/global/images/04d941e65bf2.webp)

![Matthew Bellamy playing the guitar - you know you're in a small theatre when you can read the text on his shirt / pants](https://willem.com/global/images/979457723e20.webp)

![Dancing in Theatre Carré!](https://willem.com/global/images/a35ddfdcf770.webp)

![Bassist Chris Wolstenholme](https://willem.com/global/images/6eb532d7720e.webp)

![A mosh pit in Theatre Carré!! ](https://willem.com/global/images/c3b19869f06a.webp)

![Modern rock band on a classic podium](https://willem.com/global/images/6300c66954f0.webp)

MUSE delivered a riveting setlist, blending old classics with fresh material, as cool, balanced lighting elevated each song. The intimate theatre setting revealed the band's expressive faces, while the enthralled audience, an unusual sight at Carré, sang and danced along. This unique experience culminated with their harmonica-infused "Knights of Cydonia" finale, leaving everyone in awe.

![You can see the expression on their faces!](https://willem.com/global/images/0016277996c6.webp)

![Lead vocalist Matthew Bellamy singing](https://willem.com/global/images/210cf8205414.webp)

![Chris Wolstenholme playing the harmonica for the "Knights of Cydonia" finale](https://willem.com/global/images/b3f0370231db.webp)

## Conclusion

Wow! I simply feel very fortunate to have witnessed MUSE's magic within Carré's walls. A night surpassing the sum of its parts!

---

## The Ultimate Freedom Bike

*Riding the Brompton foldable bike* · 2022-09-15 · https://willem.com/en/2022-09-15_the-ultimate-freedom-bike/

Rarely have I been so amazed by a bike: the past 5 months since I've picked up my Brompton foldable bike in Amsterdam have been great fun! About 500KM down the road, I'm happy to share some of my experiences with this ingenious piece of engineering, read on!

## About Brompton

In 1975 Andrew Ritchie invented a bike with an 3-part fold: a vehicle that transformed in a small package and could go anywhere with him. The following years Andrew obsessively honed his invention from a rented workshop in a local engineering company.

![Andrew Ritchie inventor of the Brompton 3-part foldable bike](https://willem.com/global/images/27a6a91e0280.webp)

Despite the demand, Andrew faced endless rejection letters from banks and bike companies to invest. Things changed in 1987 when an impressed Brompton owner and founder of Naim Audio, Julian Vereker, stepped in: the Brompton folding bike won the coveted Best Product Award in the Cyclex Bike Show in London. The rest is history, as they say!

![Early Brompton model](https://willem.com/global/images/78a1e7268536.webp)

## Iconic design

Today there are more than 1500 official dealers and 15 Brompton Junctions around the world, including one in Amsterdam. The original design has influenced many other bike makers, it can therefore easily be considered an iconic bike with a proven track record and fans from all around the world.

![The Brompton Junction in the "Negen Straatjes" in Amsterdam is missing one bike... guess where that one went? HA!](https://willem.com/global/images/2a19e2d7b5b8.webp)

![My modern Brompton foldable bike - note how similar it is to the earlier model](https://willem.com/global/images/f2bd67b2fef9.webp)

## Modern Brompton

My orange M6L Superlight Brompton takes everything that defines a Brompton to a next level using lightweight parts made of titanium. My bike came with 6 gears (2 using a derailleur, 3 inside a hub) and dynamo lights. I installed a Brooks cambrium saddle and opted for an integrated toolset. Equipped with my favourite puncture_resistant_tires (https://willem.com/en/2021-11-19_escaping-the-flat-tires/) from Schwable, I figured this bike would be perfect for some serious action.

![Lights are powered using a dynamo - never have to think about batteries!](https://willem.com/global/images/34f552cf78e8.webp)

![The front-carrier block enables easy clicking on and off of bags and frames, and is compatible with all Brompton models](https://willem.com/global/images/d98037afab64.webp)

![I hope that I won't need it anytime soon; but my bike has a perfectly fitting toolkit inside the foldable bike frame - how clever!](https://willem.com/global/images/7cce2f2032a9.webp)

![My bike has both a 2-speed rear derailleur and a 3-speed internal gear hub, making a total of 6 gears with a very wide range](https://willem.com/global/images/120b10499c01.webp)

![You can tell the Brompton bike design is both refined and matured: things like the super strong reinforced mudgards give you plenty of confidence to simply use the bike - also note the titanium rear frame](https://willem.com/global/images/8c980000a1b4.webp)

## How does it ride?

Unfold the bike in 20-ish seconds and you're ready to ride! The first few kilometers I needed a little getting used to the agility of the steering. Compared to my single_speed_Schindelhauer_Siegfried_Road (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/) bike, the Brompton accelerates quickly and handles very direct. The smaller wheels are not a problem as the gears and frame are well balanced for them. Thanks to simple geometric science, the smaller circumference maximises the efficacy of the brakes.

![My Brompton foldable bike compared to my Schindelhauer Siegfried Road: two very different machines](https://willem.com/global/images/0c6afd72eb83.webp)

As I_like_cycling (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/), my trained legs allowed me to easily go much faster than I thought was comfortably possible on a foldable bike. The Brompton quickly gives you the confidence to handle it like a *normal* bike. While great handling may be considered table stakes for any bike, I am sorry to notice that many modern "designer bikes" seem to have missed *that* memo. Any bike should be a pleasure to ride - before anything else!

![Riding the Brompton foldable bike surprisingly doesn't feel much different from a normal bike: it quickly gives you the confidence needed to go faster (if you wish)](https://willem.com/global/images/db752d4c2039.webp)

![Watch the GCN video on YouTube where pro cyclist Andrew Feather compares the Brompton to a super road bike in a hill climb](https://willem.com/global/images/ea9d196da4a2.webp)

Don't take my word for it, you should definitely check out the video_from_GCN_where_they_find_out_what_happens_when_you_put_a_pro_on_a_Brompton (https://www.youtube.com/watch?v=CCAwg9OMa84), taking it out of its comfort zone? Can a folding bike climb? How does it compare to a top of the bill road bike? They have brought along multiple British Hill Climb champion Andrew Feather to find out!

## Where it shines: versatility

While riding the Brompton is a pleasure, it really shines when you step off. You can take it with you, pretty much anywhere! Combine your cycling with public transport: metro, bus, tram and train. Heck, you can even check-in your Brompton on the Airport!

![Combine your cycling with public transport: reach any station or nearby address with ease](https://willem.com/global/images/b66c0a439693.webp)

![It's compact and lightweight, easily allowing you to move it around the platform and trains (<10KG)](https://willem.com/global/images/48e2ac12cdb5.webp)

![No need to pay extra for the foldable bike in the train: it is considered "normal luggage"](https://willem.com/global/images/a21c97827361.webp)

If you have family or friends with a car, you'd be surprised how many extra possibilities there are to use the foldable bike *and* hitching a ride. You can join and/or split whenever you feel like doing so. Unlike a regular bike, the foldable bike doesn't require a bulky bike carrier to be mounted on the car.

![The Brompton in our family car: taking up less space than a baby stroller!](https://willem.com/global/images/d7eb752895f1.webp)

If you live in an urban area you might enjoy the fact that it is very easy to bring the bike with you inside. No need for bulky locks or to unnecessarily expose it to the elements or thieves. Chances are that you can always find a place for your bike, even inside your_favourite_coffee_bar (https://www.facebook.com/people/Louffee-Coffee/100063489670875/).

![The bike is small enough to bring with you: it certainly won't look out of place while you enjoy your latte!](https://willem.com/global/images/14df7d035531.webp)

![In my small apartment in Amsterdam I put my Brompton bike on top of the fridge - one might even consider it another piece of art, ha!](https://willem.com/global/images/f59eff081687.webp)

## Conclusion

The Brompton is a great bike that folds into a small package: making it very versatile. I'm still discovering ways to use this bike that I haven't imagined with any of my other bikes! It can go where other bikes can't: maximising the freedom you enjoy as cyclist!

![Wherever and whenever you go: the Brompton foldable bike is like a friendly companion ever willing to join you!](https://willem.com/global/images/8eca65e85081.webp)

---

## Computer says no

*How today is ruled by Artificial Intelligence* · 2022-09-11 · https://willem.com/en/2022-09-11_computer-says-no/

This morning I enjoyed my bike ride on a nearly empty bicycle lane, picture perfect rays of sunlight illuminated the dew above the fields around me. Where were all the other cyclists? I suspect it has something to do with popular weather apps. It strikes me how great the control of computers on people's lives already is.

Apparently, there was a chance of rain this morning, as indicated by the iPhone's weather app. Although I did not encounter any drop of rain, that tiny rain cloud icon on the phone made fewer people go out for a ride.

Sure, I get it: few folks like to get wet on their fancy bikes. But what happened with actually looking out of the window to check out the actual weather? A quick glance would have shown anyone the perfect conditions for a ride. Do you make decisions based on the weather_app (https://en.wikipedia.org/wiki/Weather_rock)?

![Weather Stone - more accurate than your favourite app (image credit Wikipedia)](https://willem.com/global/images/3bb701f68379.webp)

## What is Artificial Intelligence (AI)?

Despite its recent renaissance in the ranks of "buzzword_bingo (https://en.wikipedia.org/wiki/Buzzword_bingo)", concepts of artificial intelligence and machine learning are not all that novel. The idea of using learning as a means of bootstrapping a simpler system to human-level intelligence can be traced back at least to Alan Turing's notion of a "child machine" in 1950. Instead of trying to produce a programme to simulate the adult mind, why not rather try to produce one which simulates the child's? If it were then subject to an appropriate course of education, one would obtain the adult brain.

![A photo of humanoid robot children going to school](https://willem.com/global/images/f062a73c56f8.webp)

In his book "Superintelligence"(https://duckduckgo.com/?t=ffab&q=superintelligence+book&ia=web), Nick Bostrom thoroughly explores the possible paths towards the creation of an artificial intelligence. What happens when machines surpass humans in general intelligence? Will artificial agents save or destroy us? Even Elon_Musk_agrees_with_me_that_everybody_should_read_this_book (https://duckduckgo.com/?q=elon+musk+book+superintelligence&t=ffab&ia=web).

Although the general consensus is that a true artificial general intelligence does not exist yet, I would argue that society in general is lining up perfectly for an AI to take control. The boiling_frog_metaphor (https://en.wikipedia.org/wiki/Boiling_frog) is a powerful way to think about this, where the frog does not perceive the danger of water brought to a boil slowly. We shouldn't allow ourselves to be cooked by anybody, lest alone an AI!

![A photo of humanoid robots boiling water in a large pan on a white background](https://willem.com/global/images/03f3d7062e06.webp)

## Examples of today's computer control

While enjoying the empty bike lane this morning, it occurred to me that the weather app is not alone in controlling people's behaviour. Consider the following examples:

- **where people live**: it is easy to understand why financial institutions want to asses the risk of lending anyone money, but today's computers calculating your credit score indirectly control things like what house you can buy, where you will live, what school your kids will go to. Machine learning is a hot_topic (https://duckduckgo.com/?t=ffab&q=credit+rating+machine+learning&ia=web) in the money business, and unknown to many people, those algorithms do not only look at your financial data. One of the world leaders in credit assessments, GDS Link, is_candid_about_it (https://www.gdslink.com/credit-risk-scorecard-model-development-monitoring/): a borrower’s payment background is essential, it still just composes just over one-third of the credit rating score. 

- **meteo alarms:** your weather app is jealous of the power that meteo alarms have on society: entire nation states can be shut down based on the weather computer indicating "code red". Everybody understands the obvious reasons of safety. But, one could wonder how much human suffering is actually caused by cancelling holidays, shutting down roads, halting trains, closing schools and limiting hospitals services.

- **what people see: ** the auto play feature on everyone's favourite video website uses algorithms to decide your next video. Even if you deliberately decide to watch one_particular_video (https://www.youtube.com/watch?v=0n_Ty_72Qds), you are automatically presented something else afterwards. Same goes for popular apps like TikTok (https://newsroom.tiktok.com/en-us/how-tiktok-recommends-videos-for-you) and Instagram (https://duckduckgo.com/?t=ffab&q=instagram+algorithm&iar=news&ia=news).

- **what people hear: ** don't think the shuffle function on your iPod (https://www.wsj.com/articles/SB115876952162469003) or Spotify-app is truly random. This_explanation (https://www.quora.com/Is-Spotifys-shuffle-feature-truly-random-I-keep-hearing-the-same-songs-in-my-library-too-often-for-it-to-be-a-mere-coincidence-Does-Spotify-use-some-kind-of-special-algorithm-to-determine-what-song-plays-If-so-why/answer/Mattias-Petter-Johansson) by former Spotify engineer Mattias Petter Johansson is an interesting read.

- **what people read: ** Elon_Musk_understands_why_it_is_important_to_make_newsfeed_algorithms_like_the_Twitter_feed_public (https://edition.cnn.com/2022/04/19/tech/twitter-algorithm-open-source-elon-musk/), because it determines what people read! But as not everybody understands code, I think it would only be part of the solution.

![A crazy news editor with a type writer reading a news paper on fire](https://willem.com/global/images/a591dfa4b729.webp)

## Conclusion

New technology always scares people. When the first bicycles appeared,  people_blamed_almost_anything_on_them (https://twitter.com/paulisci/status/1561848479470694403)! Yet, they are now integrated in our lives in a reasonable good way. People know the risks and many act accordingly. Helmets (https://willem.com/en/2020-07-09_repairing-a-giro-aeon-bicycle-helmet/) and bike_lights (https://willem.com/en/2019-11-26_supernova-e3-pro-2-dynamo-powered-headlight/) are very common. Eventually, I expect the same for computerised decision making: we will learn to deal with it in a good way.

In the meantime we should actively remain curious and enjoy the modern wonders of technology, like the amazing DALL-E_AI_system (https://labs.openai.com/about) that can create original, realistic images and art. I worked with it to create the artwork accompanying this blog post. The recently started_discussion_about_who_owns_the_generated_works (https://duckduckgo.com/?t=ffab&q=dall-e+copyright) doesn't surprise me at all. Policy makers would be wise not to ignore the greater questions surrounding artificial intelligence!

![Artwork for this blog post was created with DALL-E - the amazing AI system that generates original images](https://willem.com/global/images/9e681973fa62.webp)

---

## CAPTCHA Alternative

*Protect your forms in a user friendly way* · 2022-07-30 · https://willem.com/en/2022-07-30_captcha-alternative/

Chances are that you've encountered a CAPTCHA in the wild: they protect web forms by asking you to type over weirdly rendered characters or by asking you to select photos containing a particular thing. Why are they used and is there a user friendly alternative?

## What is CAPTCHA?

Designed to tell computers and humans apart, CAPTCHA's often require you to do something that computer's can't easily do. Hence the acronym stands for: Completely Automated Public Turing test to tell Computers and Humans Apart. Web builders use CAPTHA's to protect their web forms against automated spam and abuse.

![Typical CAPTCHA's you may encounter on the web (image credit: Wikipedia and Google)](https://willem.com/global/images/a95bd60124e8.webp)

## Why do you need form protection?

A typical web form uses two steps:

- **enter information:** You enter some information and then you click "SUBMIT" (or something similar) to continue.

- **process information:** The information you entered is processed by a server, possibly forwarding your message or request to somebody's email.

![A typical web form: server processes information from a person, forwarding it to other people, like yourself. Malicious actors can easily fake the sending person, enabling automated abuse of your processing server](https://willem.com/global/images/062f9ea6ddbf.webp)

The problem with this typical approach is that the first step can easily be automated by malicious actors. They use another computer to repeatedly submit information to the server, forcing it to process loads of information, often containing spam messages. Hackers are especially keen on finding web forms where they can manipulate the "TO"-address, because then they can use your server to send spam messages to anybody in the world.

A CAPTCHA protects your form by obstructing a computer from automatically submitting information to your server.

## Problems with CAPTCHA

Frankly, I think they're ugly and cumbersome, and I_am_not_alone (https://duckduckgo.com/?q=do+not+use+captcha). They introduce a threshold for people: lowering conversion rates, click through rates, etc. In addition, they are often very unfriendly to people with sub optimal sight.

Critics also complain about Google being one of the most popular suppliers of free CAPTCHA tests. One may wonder why they offer such a service free of charge? It is an excellent way for them to get in the loop of many (commercial) customer journeys, feeding their algorithms with more data to profile people. It is something to consider if you value privacy and GPDR/cookie laws.

## Alternative

That's why I set out to create an effective alternative for CAPTCHA's to be used on the web forms that I build for my customers. My approach is two-fold:

- **hide:** most malicious actors search for possible targets by looking for any FORM-tag, which is often used to build web forms. My forms do not have the FORM-tag, but use other common elements such as DIV: creating a perfect camouflage. If they can't it, they can't break it. 

- **harden:** my web forms use an additional step to make it harder to automate their abuse. I call it "getting a post stamp" before submit.

## Cryptographic pre-submit signature: the post stamp

You must understand that malicious actors think economically: they will only do as much of an effort if the potential gain is worth it. If you make it hard enough for them to abuse your web form, chances are they'll move on and call it a day. Before I explain what I did, I must warn you:

**Disclaimer:** *You must consider the goal of your form protection, in my case it is (greatly) reducing the number of spam messages while preserving user-friendliness. This allows me to think of a system that does not necessarily provide "bomb proof" protection, yet if you're trying to protect nuclear secrets then this approach might not fit you. Always consider your threat model!*

To protect web forms I introduce an extra step that I dubbed "getting a post stamp". The steps of the protected web form then become like this:

- **enter information:** You enter some information and then you click "SUBMIT" (or something similar) to continue.

- **get post stamp:** Just before the actual information is submitted, your device contacts the server to ask for a cryptographic token that matches characteristics of the actual information *and* the sender. This happens in mere milliseconds, people won't notice it. Think of the token as a post stamp, specific for the package you're sending - to be used only once.

- **process information:** The information you entered is combined with the cryptographic token and posted to the server. If the token is valid, the information is processed as usual. Invalid tokens are simply ignored, which is important to make reverse engineering very hard by not providing any feedback (the server always says "OK" :-) )!

![By introducing a unique, use-only-once, token for each message it becomes much harder for malicious actors to automate the process of sending messages - protecting your form against spammers](https://willem.com/global/images/53152b30a5b4.webp)

Since 2016 I have been running this approach and the post processing servers have handled literally millions of messages, with extremely few messages (<100) being spam. Upon closer inspection, most of the spam that get through is "manual labour": possibly indicating malicious actors investigating the mechanism. As it appears to be too much of an effort to break the system, it is very effective in achieving my goal of protecting the web forms.

## Conclusion

While CAPTCHA's are understandably very popular, it is not always necessary to have them on your web forms if you consider alternatives. It's my advice to make it harder for malicious actors and easier for your audience!

---

## Offline Music

*Streaming Music Alternative* · 2022-07-17 · https://willem.com/en/2022-07-17_offline-music/

Music has the universal power to move people. Different rhythms, emotions and vocals enable us to enjoy music very personally. Music is very close to my heart and I don't like anything to get in between. Therefore I don't rely on streaming music services, but manage my own offline music library.

Before the rise of streaming music services like Spotify or Apple Music, people had other ways to listen to music. People bought records, CD-albums and some even pirated music using services like Napster or Kazaa. Listening to digital music took a rise when Apple released iPod, making it very easy to put your music in your pocket.

![Original iPod ad: Say hello to iPod. 1000 songs in your pocket](https://willem.com/global/images/b143eee6b578.webp)

![Original iPod ad from 2005 - advertising pure emotion, not any technical specification](https://willem.com/global/images/6099f6099ad9.webp)

The iPod had a monumental impact on how people listen to music. While early smartphones imitated iPod's behaviour, modern devices use their omnipresent connectivity to enable new ways to discover and listen to music.

Streaming music services are very popular because they offer a convenient way to listen to music: you don't need to manage *anything*. Just play. Skip songs you don't like and the algorithms adjust automatically to your preferences. Why would anyone not want this kind of magic, one would wonder?

## Why manage your own music?

While streaming music services are very convenient, there are good reasons to consider managing your own music library:

- **freedom:** if you buy a record or CD, it is yours. Nobody will demand periodic payments from you. You can enjoy it as long as you wish, pretty much on any device you own.

- **intentional:** artists define the order of songs purposefully, often a music album tells a story with depth and meaning to it. No algorithm will fiddle with the order of songs you're listening to. 

- **audio quality:** although streaming services are getting better, old fashioned CD's are still very good. And, some even prefer the warmth of an analogue record. Streaming services that use lossy compression are literally throwing away bits of music. You don't like reading a book when some letters are missing, right?

- **hunting:** If you're into music, you may actually enjoy hunting for it. Visit a music store, read about it and talk to people. Music connects people, you might make some new friends along the way. 

## Me and my music

People know I love music and sometimes ask me how I find, collect, digitise and listen to music. Let me explain:

- **finding music:** occasionally I visit record stores in Amsterdam and talk to people about music. That's where you can discover new releases and artists. Music_festivals (https://willem.com/en/2018-07-10_enjoy-a-festival-without-alcohol/) can be a great hunting ground for discovering new things, especially when you check out the smaller stages. Obviously you can search for new_music_online (https://artsexcellence.com/blog/category/music-reviews/), too!

- **collect:** I buy all my music on CD's, I have a lot of them. Thousands of songs on hundredths of albums. I buy new and second hand, you'll be amazed what you can find in your local recycle store.

- **digitise:** To replicate some of the modern convenience, I digitise all my CD's into lossless audio files. I use an old_MacBook_Air (https://willem.com/en/2017-09-14_saving-a-macbook-air-with-exploded-battery/) with iTunes to do this. I take the time to do this by hand. I check and correct the meta data and album art. I keep all my CD's in storage. 

- **listen**: think of it as a modern iPod on steroids, my Astell&Kern_Ultima_SP2000 (https://www.astellnkern.com/product/product_detail.jsp?productNo=18). It drives my Shure_SE846_sound_isolating_earphones (https://www.shure.com/en-US/products/earphones/se846_wired) through a balanced_DreamDuet_cable (https://www.crystalcable.com/products/crystal-cable-portable/duet/dream-duet/). I love it.

![Digitising CD's using iTunes running on an old MacBook Air](https://willem.com/global/images/dbbea05b99d0.webp)

![Astell&Kern Ultima SP2000 - it connects to headphones, stereo systems and it can even stream wirelessly using Bluetooth APT(X)](https://willem.com/global/images/0265a4c5db8f.webp)

![My private concert hall: Shure SE846 earphones on the DreamDuet crystal cable, no need for active noise reduction as these earphones isolate perfectly](https://willem.com/global/images/ee0b9c2aa347.webp)

## Conclusion

Considering that I really love music, I really don't mind the little extra effort of managing my own offline music library. It offers me freedom and control, but above all: pure joy!

---

## Snake '97 High Scores

*Game inspired art by Zena Van den Block* · 2022-04-18 · https://willem.com/en/2022-04-18_snake-97-high-scores/

Last week I received a very kind invitation from a Belgian artist, to attend her art exhibition in Antwerp. The work on display involved the Snake '97 game that I have created. Uttering to find the right words and thrilled with excitement, I happily accepted the invitation!

## Snake 97: Retro phone game

Chances are you have heard or seen the game I have created: Snake_97 (https://snake97.com). The dot-matrix graphics and monotone sounds enable millions of fans to get a dosis of nostalgia in retro phone gaming. While I_created_the_game_by_accident (https://willem.com/en/2018-02-21_updating-snake-97/), its impact hasn't stopped amazing me.

![Snake '97 - your dosis of retro game nostalgia ](https://willem.com/global/images/ead2fd53cae7.webp)

## Zena Van den Block

Among the fans of the game is Zena Van den Block (1995), a Belgian artist who inspires by creating visual art in unexpected ways. Often through play and chance, she searches for translations of patterns that she discovers around recurring habits using images from popular culture. By creating context or by purposefully reversing it, her work makes your rethink the visuals you (think you) know.

![Work from Zena Van den Block (source zenavandenblock.com)](https://willem.com/global/images/3fd210797619.webp)

For her work involving the Snake game, she meticulously collected her end game screens. She uses the final arrangement of the Snake, often in nearly impossible twists, as building blocks on her canvas.

![Snake art works in SECONDroom Antwerp: "High Scores" by Zena Van den Block](https://willem.com/global/images/0eb1e4ab051c.webp)

In addition to the dot-matrix lines on the canvas, the funky old school green glows in the dark. It took her months to find the right mix and to perfect her application technique. The "High Score" art pieces are finished with a plastic-like surface, perfectly completing the retro vibe of yesteryear's mobile phone displays.

![The art works glow in the dark](https://willem.com/global/images/b71d3e7bd7fb.webp)

## SECONDRoom Antwerp

Named after the original exhibition room in the founder's apartment, SECONDroom (https://secondroom.org/) organises exhibitions with a short-lived vernissage, giving expositions an intimite character. This setting allows you to connect with the artist and other spectators.

![Meeting Zena Van den Block: the intimate character of SECONDroom offers plenty of room to connect](https://willem.com/global/images/107dfd912670.webp)

As the creator of Snake_97 (https://snake97.com) I have seen the graphics of the game a *bazillion* times. Yet, experiencing the graphics as genuine art feels totally different. Humbled and uttering to find the right words I examined these works of art.

![Game graphics elevated to genuine art works](https://willem.com/global/images/cd7e20bbdb90.webp)

![Amazing detail: green dot-matrix canvas, manual brush strokes and a glossy plastic like surface ](https://willem.com/global/images/75d5e0fdfce5.webp)

## Conclusion

I can only think of one word to describe seeing Snake exhibited as art: WOW! People often ask me what the Snake game has earned me... Well, I find it hard to think of something more valuable than the privilege of meeting amazing people like Zena. Nokia's well-known slogan *"Connecting People"* seems ever more applicable to Snake. I am incredibly grateful!

- Zena Van den Block website (https://zenavandenblock.com) and Instagram (https://www.instagram.com/zenavandenblock/)

- SECONDroom_Antwerp (https://secondroom.org)

- Play_Snake_97 (https://snake97.com)

![Look ma: me standing next to Snake art! WOW!](https://willem.com/global/images/d6a3bdaa5b45.webp)

---

## Wearing WHOOP 4.0

*Why you should wear a biometric sensor* · 2022-01-14 · https://willem.com/en/2022-01-14_wearing-whoop-4-0/

How often do you look in the mirror? Probably more than a few times a week! I have been thinking about this ever since I received my newest WHOOP 4.0 biometric sensor. It's great. But, why do I wear it? What value does it provide? Why should you wear it?

## What is WHOOP?

First things first, let me explain WHOOP in a nutshell. Founded by a bunch of passionate folks, WHOOP is making biometric sensors and software since 2012. The sensors collect health and fitness data, which is processed using advanced algorithms to provide each individual wearer with personalised insights.

![Designed to be worn 24/7, the WHOOP strap collects biometric data over a longitudinal period of time - providing you with personalised insights in your health and fitness](https://willem.com/global/images/06db9f1b2e02.webp)

Comparing current measurements with personalised historic data, WHOOP can tell if you're ready for maximum performance or if something is off. Among other things, it captures the effects of eating, drinking, illness, medication, working out, menstrual cycles and sleeping.

## WHOOP 4.0

The newest generation sensor is called "WHOOP 4.0" and features many improvements over its predecessor_that_I_discussed_in_an_earlier_post (https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/). It now tracks:

- heart rate

- heart rate variability (HRV)

- respiratory rate (breaths per minute)

- skin temperature

- blood oxygen saturation

- sleep (duration, cycles)

![WHOOP 4.0 is smaller than its predecessor - packs more sensor technology - allows for easy charging while wearing it](https://willem.com/global/images/50e3638c0e83.webp)

![The WHOOP sensor is small - smaller than many regular watches](https://willem.com/global/images/c8d9e089c57b.webp)

Compared to its predecessor there are some notable differences:

- it is 33% smaller, which is a big deal for something you wear on your body

- it has a vibration function to discretely wake you up at a given time or when you're body is sufficiently rested

- it has 5 LED's using 3 different wavelengths of light to capture readings using 4 photodiodes

- it can be charged under the shower using the new waterproof battery pack

- it can be worn on the wrist or on other places on your body using "ANY-WEAR" apparel, including boxers, shorts, leggings, bras and tops

With literally years_of_experience_with_wearable_biometric_sensors (https://willem.com/en/wearable-sensors-measuring-the-body-questioning-the-data/), I can be very short on WHOOP 4.0: **it's great**. Seriously, I often compare it to a good_smartphone (https://willem.com/en/2021-12-09_for-the-love-of-mini/) or a comfortable pair of sneakers: you no longer think about it as it fades into the background - enabling you to move on with your life:

- no tinkering required

- no unexpected buzzing or bleeping

- no interrupting notifications

- no taking off and putting it back on again

- no interaction necessary

![WHOOP offers you various ways to wear it - I like to wear mine on the bicep using a larger strap - and alternate between my two arms every few days](https://willem.com/global/images/53dd72074c24.webp)

![Worn on the bicep, WHOOP easily hides under your clothing - indicated with blue arrows - keeping your wrists free for mechanical watches](https://willem.com/global/images/ef8a5e8d4ee0.webp)

You can access your data when you want to, from your smartphone or on a big screen computer. It collects *all data, all the time*, there is no need to manually start and stop measurements like_on_Apple_Watch (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/). WHOOP's holistic approach to data collection enables it to capture all activities. I really love to see how my_adventures_as_daddy (https://willem.com/en/2021-09-30_inspiration-from-a-child/) compare to riding_my_bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/). When_my_daughter_was_born,_WHOOP_captured_the_impact_on_daddy_very_clearly (https://willem.com/en/2021-07-13_the-birth-of-a-child/).

![My daughter was born on Tuesday, July 13 - the data clearly shows the impact on my body and its gradual adjustment to this new fatherhood](https://willem.com/global/images/17eb98bbd260.webp)

There is no silly stuff like step counting, activity rings or unnecessary gamification with childish stickers or achievements.  WHOOP is not the device that reminds you to breathe, to stand up or to reward you with a sticker for walking to the coffee machine.

![Unlike other "smart" wearables, WHOOP won't remind you to breathe or reward you for standing up and walking to the coffee machine - it's a serious device for people that can think for themselves](https://willem.com/global/images/ad82c6501d16.webp)

## Why wear it?

This brings me back to the main question, why wear WHOOP? As I love minimalism (/en/digital-minimalism-doing-more-with-less-technology/ism) I often challenge myself with this question. Wearing a sensor 24/7 on my body seems to be at odds with my desire to live an uncluttered life.

I think it is because in order to live an uncluttered life, you first and foremost have to live! I don't need a reminder that my  health is precious and fragile. I have seen friends and family suffer or even pass away. Being fit and healthy maximises your oppertunity to spend meaningful time with friends and family. Like a special kind of mirror, WHOOP shows me myself - and it reminds me to take care for that man.

Work, stress, kids, and illness can wear you down - gradually, silently and invisible to the naked eye. By looking at my WHOOP data I have seen bad patterns emerge - often when I was too busy on some important project. Seeing the toll your body takes, makes it easier to make better choices (with "better" being a pun, referring to health!).

![Better choices, better health, more fun! (even when it's freezing!)](https://willem.com/global/images/2a8588bb5cdc.webp)

## Conclusion

There is only one you - and your time on this planet is limited. Are you wearing your body down? How often do you wonder what would happen if you make different choices? Let WHOOP be the mirror, through which you see yourself. Make the right choices, whatever those are, and see their effects on you. Backed with data, you have everything to become the best YOU!

### Get a free WHOOP strap + one free month!

Want to find out how you look in WHOOP's data-driven mirror? Then get your free WHOOP strap and your first month free through this link: https://join.whoop.com/willem

---

## For the love of mini

*The unexpected greatness of iPhone Mini* · 2021-12-09 · https://willem.com/en/2021-12-09_for-the-love-of-mini/

People regulary ask me why I have a small smartphone, a modern iPhone 13 Mini. Often I simply reply that I like it. The smaller size offers more than just an easier fit in your pocket. I have come to appreciate its intangible greatness, read along for the love of mini!

![iPhone Mini - fits in one hand](https://willem.com/global/images/662a5182d4cf.webp)

In my line of work I see a lot of big phones, as IT-guy people expect me to have one, too. Yet, I carry an iPhone Mini and wouldn't trade it for anything else! The iPhone Mini is very much on par with its larger cousins when you look at things like the camera, processor speed, software and features.

![Mobile phones have been around in many different shapes and sizes, top left to right bottom: original iPhone, Motorola DYNA T-A-C, Sony CMD-Z5](https://willem.com/global/images/ca15100fdd9f.webp)

Over the past decade smartphones have grown larger, offering more screen real-estate than their smaller predecessors. I understand why people are tempted by this "bigger is better" trend: More content, more pixels, "more of everything"!

![Larger, bigger, shinier, more powerful... Phones have grown - they're even called "Pro" now!](https://willem.com/global/images/d5c3ad97159e.webp)

That "more of everything" includes costs: never *ever* have smartphones been as expensive as today's top of the bill flagship phones. The increase in price means an increase in significance - making even the wealthiest consumers consider insurance and financing plans.

![... "Pro Max" will cost you up to € 1839, without the recommended € 229 AppleCare insurance](https://willem.com/global/images/3c2bd305675f.webp)

If you have been following my blog, you know that I have a thing for minimalism (/en/digital-minimalism-doing-more-with-less-technology/ism). You'd be mistaken to think that minimalism is just about having less or tinier things. Instead, I find it more useful to think about minimalism as reducing the influence all your stuff has on you - in terms of costs, space and clutter.

The iPhone Mini costs about half as much and weighs almost 40% less, yet it still performs as fast as its "Pro Max" brethren. It shares the same powerful chip. Make no mistake, the Mini's innards are very much high-end! It helps that iOS maximises the use of the smaller screens because of it being extremely optimised: the result of many generations of smaller screens.

![Generations of small screen iPhones: iPhone 4S, iPhone SE, iPhone 12 Mini, iPhone 13 Mini](https://willem.com/global/images/e219888d5bbc.webp)

![iOS maximises small screen usage: compare the commonly sized Volla Phone (left) with the iPhone Mini (center) - and a commonly sized card (right) for reference](https://willem.com/global/images/84f54ac01d74.webp)

The smaller size makes it easier to ignore the iPhone Mini, liberating you from distractions. I carry it in a compact leather sleeve which protects the display *and* acts as a barrier for me to use the phone. The package still comfortably fits in my pocket. The sleeve reminds me only to use the phone if I really intend to do so.

Large phones don't fit in most pockets, as a result people often put the phone on the table - or hold them in their hands. This diminishes any barrier to use the device. It maximises exposure to the dopamine loops that are built in most social media apps, news feeds and messaging services. The larger the phone, the more immersive the experience. People use their phones out of habit, they no longer control it.

![My everyday carry: iPhone Mini, an analogue watch and keys](https://willem.com/global/images/2946b6ee942a.webp)

## Conclusion

While there are many reasons to choose a particular smartphone, I think there are good reasons to choose a smaller one over an omnipresent mobile monstrosity. In the end it comes down to personal preference - just know about the unexpected greatness of a small smartphone!

---

## Escaping the flat tires

*Are puncture-proof tires really puncture proof?* · 2021-11-19 · https://willem.com/en/2021-11-19_escaping-the-flat-tires/

You might wonder how puncture proof a "puncture-proof" bicycle tire really is. I set out to find the answer when I installed Schwalbe Durano Plus tires on my bike. It was inevitable for me to find the answer to the question: How many kilometers can you ride without flats using puncture-proof tires?

![In search of answers: how many kilometers can you ride without flats? ](https://willem.com/global/images/d3eb859d6351.webp)

## The answer is 4200KM

![After 4200KM the Schwalbe Durano Plus puncture-proof tire failed ](https://willem.com/global/images/1d94e88f064d.webp)

It took them so long to fail that I didn't even carry a spare tire anymore! The Schwalbe Durano Plus tires are really puncture *resistant* - but only up to so many kilometers. During one of my commutes the rear tire suddenly lost pressure - a sensation no cyclist really wants. Alas, the answer!

![Fresh Schwalbe Durano Plus with "Smartguard dual compound" - these are very resilient tires!](https://willem.com/global/images/7205bb32ddec.webp)

## Conclusion

Before switching to puncture resistant tires, I frequently had flats during my rides. On average one per 1500KM, depending on conditions. Statistically I need more testing to make any bold statements, but I like where this is going: less flats, more cycling!!

![Less flats, more cycling!](https://willem.com/global/images/43717fbbd0ea.webp)

---

## Using Google Free Android

*Volla Phone as alternative to mainstream Android and iOS* · 2021-10-25 · https://willem.com/en/2021-10-25_using-google-free-android/

Nearly all folks I know use iOS or Android from a mainstream smartphone brand, yet alternatives still exist! The German Volla Phone prides itself to be a worthy option for those who value privacy and freedom. I bought one to experience it firsthand, read along for my thoughts!

![Volla Phone - Viel vergnügen (loosely translated as "enjoy!")](https://willem.com/global/images/fdb743ce7d60.webp)

The Volla Phone can be described as a midrange Android smartphone. The specs won't blow you away, but it carries enough to get things done. Volla comes in two flavours, the original "Volla Phone" and the rugged, waterproof "Volla Phone X". They are relatively large, offering plenty of screen real estate for your apps.

![Volla Phone and Volla Phone X](https://willem.com/global/images/c579f7830dd5.webp)

![Who has a smartphone these days that says "Made in Germany"?](https://willem.com/global/images/784b2b7d223a.webp)

Handling the phone feels very much like any other modern smartphone, I consider that a good thing. The phone feels very solid, punching far above its price tag of € 359. This price includes a charger, USB-C cable, and a transparent case.

![Volla Phone comes with a charger, USB-C cable and a transparent case](https://willem.com/global/images/19d9429b59d2.webp)

![Its main camera shoots nice photos, especially when light conditions are fair](https://willem.com/global/images/1d2711a2aebe.webp)

![The selfie cam gets things done - but lacks certain detail - which may or may not be a problem for you](https://willem.com/global/images/b5f1eda338b6.webp)

![No complaints in the battery department either - measuring remaining time in... days!](https://willem.com/global/images/723ef9a7585f.webp)

Unlike the common hardware, the software sets Volla apart from most other smartphones. Its Android flavour is called "VollaOS" that has a strong emphasis on privacy and freedom. The operating system comes without any preloaded Google apps, leaving you in control about what you install on the phone. I very much value this and applaud Volla for providing us with this alternative to mainstream Android.

![Volla's features oriented towards privacy and freedom ](https://willem.com/global/images/f133f8ce544b.webp)

With Volla's "Springboard" and "Type anything" start screen the phone tries to offer you a different experience. I can appreciate the concept, but it lacks the (localised) refinement and polish of its mainstream competitors. One might wonder if a small company like Volla should take on great ambitions such as redesigning the home screen experience - then again, why not?

![Volla OS features a Springboard and a centralised way to access your contacts - an interesting idea yet it lacks refinement (the typos in this screenshot taken from the official Volla website are illustrative to this)](https://willem.com/global/images/5649367904ce.webp)

Instead of crying about it, the freedom that Volla offers enables you to take matters in your own hands to refine the experience. You can change pretty much anything on the phone. Most mainstream smartphones won't allow you to do this.

![My Volla phone runs an alternative, minimalistic launcher, aptly called the "unlauncher"](https://willem.com/global/images/b4ab0945c94c.webp)

There are many great alternatives available for the Android start screen. I love minimalism (https://willem.com/en/digital-minimalism-doing-more-with-less-technology/) and therefore I found the unlauncher (https://github.com/jkuester/unlauncher) a fantastic alternative to the stock Volla experience. The freedom that Volla offers makes it hard to return to a mainstream smartphone.

![The "unlauncher" in action on my Volla phone - offering a minimalistic alternative to the stock Volla experience](https://willem.com/global/images/b9ab4cee6430.webp)

You are free to choose how to install apps on the Volla phone. You can use alternative "App Stores" like the_F-Droid_app_catalog(https://f-droid.org/en/) or Aurora_Store (https://auroraoss.com). You're free to sideload apps, too. With all this freedom comes the responsibility to make sure that what you install is safe and genuine, do not underestimate the dangers a malafide app poses to something as personal as your smartphone.

![Browsing the web using Fennec, a browser based on Firefox available in the F-Droid app store - this works well!](https://willem.com/global/images/bd16ca027bfc.webp)

![Syncing my photos to my NAS using Syncopoly, a rsync client for Android](https://willem.com/global/images/ed53da2901c6.webp)

Many modern Android apps depend on the proprietary Google Play Services that some describe as an evil piece of integrated spyware. Things like push notifications, and in-app purchases often require Google Play Services. Most apps refuse to work without it installed, severely limiting the potential of your "Google Free" smartphone.

![microG on my Volla phone](https://willem.com/global/images/5e9fd40f0258.webp)

The "microG"_project (https://microg.org) aims to fill in the gaps with their re-implementation of Google's proprietary apps and libraries. With microG installed on your Volla, most apps simply work again. While very practical, microG still depends on different Google cloud services to function. So, in the end you're still using Google on your "Google Free" smartphone...

## Conclusion

One can do nothing but respect and applaud the effort behind Volla's attempt to provide an alternative to mainstream Android and iOS. Where it lacks in refinement, it makes up in freedom and privacy. I love it for this and hope that enough of you do so, too - enabling Volla to continue its development!

---

## Inspiration from a child

*Experience the world like a kid* · 2021-09-30 · https://willem.com/en/2021-09-30_inspiration-from-a-child/

Together with my kids I love to explore the world that we think we know as adults. A kid's perspective inspires and surprises! No need to travel half the world for an adventure: Fly planes, catch bad guys, solve problems, build and break stuff - (re)discover the adventure right at your doorstep!

![This plane flies everywhere - yet it never leaves the ground (at Schiphol Airport Amsterdam)](https://willem.com/global/images/801a19469386.webp)

![Young pilots at the helm take you to places one can only dream of! ](https://willem.com/global/images/64f26550b16d.webp)

One of most influential professors at the University during my Master education always challenged the students in the room: "BUT-, IS IT FUN?!" With all his wisdom he saw the need to remind young and bright minds on fun. When was the last time you had *real fun*? No, not just "nice" or "fancy", but real unbridled "FUN"? It strikes me that daily routines following your work and responsibilities have a tendency to induce dullness - taking the fun away. Fortunately, parenthood offers you a real escape - grab the opportunity for fun and adventure!

![Go offroad instead of taking the beaten path - mud in the local park adds to the adventure!](https://willem.com/global/images/57a7c68d93a3.webp)

![Stuck in mud offers an opportunity for the teambuilding effort to loose the jeep/spaceship/rocket - only adults see a cargo bike, ha!](https://willem.com/global/images/fc5be1ba1165.webp)

![Look a little longer - do you see the bottom of this mighty river? Do you see the bubbles... making you wonder what hides underwater?](https://willem.com/global/images/820fb2bd6eff.webp)

![Amaze yourself with a kid's answer to questions like: "How do we solve this challenge, mate?" instead of presenting a "wise" adult solution.](https://willem.com/global/images/0e7d0a5363f8.webp)

![Bonus points for looking badass at the local kindergarten's parking lot!](https://willem.com/global/images/407a6ded9a21.webp)

Visit a nearby city, zoo or park and consider the journey an integral part of the experience. Your commute will never be the same after seeing the disarming effect a young kid has on people. Talk with strangers, ask honest questions, look at all the wonders of the metropolitan's madness. Learn to ignore the inclination to be quiet: one question can unlock wildly interesting interactions with everyday people!

![Parent, Gorilla and Kid: who's watching who? Learn about nature by seeing, hearing and smelling the animals - a zoo offers so much more than mere entertainment with the right narrative.](https://willem.com/global/images/96cee535f612.webp)

![Compare the zoo to the "wildlife" you'll encounter in the city's metro. Find answers for questions like "Why do you wear sunglasses (in darkness)?", "Where are you going?", "What's in the bag?" ](https://willem.com/global/images/5d0c3bf637a0.webp)

Wipe away any emphasis on achievement and accumulation by destroying a freshly built block structure, you'll learn how liberating and how much fun this can be. Play with Lego and confront yourself with the implicit assumptions of our society: who we consider as crook might just be a nice guy eating an ice cream.

![While parents often emphasise on building things, destroying structures can be big fun! Past creations and achievements should not hold you back - destroy them and play on!](https://willem.com/global/images/ab2bd8cecdee.webp)

![Discover the Lego world together and learn about our own implicit assumptions - about good, bad, wrong and right.](https://willem.com/global/images/07a4ebcc5d93.webp)

![Do you see a crook with a diamond or a nice chap with a striped shirt eating a blue ice cream? ](https://willem.com/global/images/e64f4b243674.webp)

When was the last time you solved a puzzle? Do you present others with a ready solution or can you learn someone how to solve things themselves? We often choose the quickest way and simply present the finished puzzle - yet solving things together creates a shared feeling of victory!

![Share the victorious feeling when you solve a puzzle together!](https://willem.com/global/images/2840bb7c0d23.webp)

Modern user interfaces in software are much like puzzles, especially when you haven't learned how to read. It seems hard to overstate the usefulness of having a kid look at your app or game. Great apps offer clues with animation, colour and sound to guide the player. Interacting with software using nothing but your fingers appears to be so natural when you see a young kid do it. Who needs a mouse or keyboard anyway?

![Seeing kids discover your app or game learns you a great deal about how intuitive it is. Does it require you to read? Does it require a mouse? ](https://willem.com/global/images/eb6adf9aaa6e.webp)

Let's get physical! Explore the real world together by climbing, running and sliding! You'll be forgiven to forgo your usual round through the fitness club after playing outside with your kids for a while. Even your normal neighbourhood offers plenty to be discovered!

![Why not take the John Deere to explore the world?](https://willem.com/global/images/a376552fba67.webp)

![Go down the slope after climbing a "mountain"!](https://willem.com/global/images/bb30be2de5f2.webp)

![Only brave men take the tree top tour... "Will daddy follow along?" YES, you bet!](https://willem.com/global/images/565cf65f75d3.webp)

![Mysterious markings on the slope - what do they mean?](https://willem.com/global/images/a0538d4c9903.webp)

![Combining water and sand offers a fascinating way to learn about the powers of the sea](https://willem.com/global/images/d415022db9dc.webp)

![My kid's response to me explaining that if you dig deep enough, you'll reach the other side of the world - where people, relative to us, walk upside down](https://willem.com/global/images/5b38500388c5.webp)

Don't skip the local pool or indoor playground! Tunnels, platforms, ramps and slopes will challenge you in many ways! You'll feel sympathy for Mario after going through tight tunnels yourself. Learn to build the trust required to scale the highest slopes and slide down together.

![Does your kid trust you enough to know that you'll catch him? ](https://willem.com/global/images/e09323f13a60.webp)

![Going through tight tunnels will make you feel like Mario! ](https://willem.com/global/images/0c0166224f87.webp)

![When was the last time you where trapped in a red plastic box? ](https://willem.com/global/images/dafc7c7e1261.webp)

![Going down together! ](https://willem.com/global/images/a1ac1d981a75.webp)

![At the end of the day you'll feel exhausted beyond measure - but in a very rewarding fashion!](https://willem.com/global/images/b47fd5e7e4e4.webp)

## Conclusion

Given the limited time we have, one must carefully consider how to spend it. You don't need to get philosophical to reap the rewards of spending time with your kids. They are a great source of inspiration. Learn about yourself when you learn about the world together. Above all, they are a wonderful way to experience FUN! Where are you waiting for?

---

## Protecting VMware ESXi

*Improve security using a firewall and proxy server* · 2021-08-31 · https://willem.com/en/2021-08-31_protecting-vmware-esxi/

In response to an incident on a server, I detected a possible security breach. The affected machine ran VMware ESXi, a bare metal hypervisor used to run virtual private servers. In standalone mode, a web based management console offers full control over the infrastructure, posing a risk.

Big and powerful server hardware offers a ton of computing capacity, often much more than one single application needs.  Through virtualisation cloud operators can optimise hardware usage by dynamically loading multiple virtual machines onto a single physical machine.

![VMware ESXi is a bare metal hypervisor that divides one physical server into multiple virtual servers](https://willem.com/global/images/15606d128603.webp)

Physical machines running VMware ESXi are managed as centralised VSphere network or as standalone machine. Administrators create, manage and configure virtual machines through a powerful web interface. Without a centralised VSphere network, administrators need this web interface - but exposing it on the public internet attracts unwanted attention from hackers.

![VMware ESXi web interface - inviting you and others to manage this physical machine](https://willem.com/global/images/dae8ec43ceca.webp)

Malicious actors actively search for exposed management consoles, hoping to find one with a weak password or with known security_weaknesses (https://www.cvedetails.com/vulnerability-list.php?vendor_id=252&product_id=22134). Unleash the curious explorer in yourself and simply utilise Google to find_a_whole_bunch_of_exposed_machines_with_a_special_query (https://www.google.com/search?q=%22To+streamline+your+IT+operations+with+VSphere%22&filter=0). See my blog post about_special_queries_on_Google (https://willem.com/en/2019-04-25_search-like-a-pro-google-search-operators/) if you need to brush up your searching skills.

![Finding exposed VMware ESXi web interfaces requires nothing but some Google skills](https://willem.com/global/images/936addf5c1b8.webp)

Leave the management console exposed and anybody can try to login. Hackers and their automated bots will certainly do so! Remote access for ESXi local user accounts will be temporarily locked after multiple failed login attempts - for everybody! This can be frustrating whenever you as legitimate administrator need access to the console.

Following my own easy_cyber_security_tips (https://willem.com/en/2018-03-10_cyber-security-5-easy-tips-to-protect-your-server-against-hackers/) the security of VMware ESXi can be improved by hiding the managent console altogether. You may be tempted to use a simple "cover it all" firewall for this, but do consider the need for the administrative console: it provides vital access to running virtual machines. You really want your administrators to be able to access the interface 24/7 from anywhere in case of emergency.

So instead of completely shutting down or hiding the management interface, I looked for a way to selectively allow access while maintaining a stealthy online profile. Because I want legit administrators to access the interface from anywhere in the world, I could not use a simple IP-address filter. Using a Debian GNU/Linux machine with nginx as a proxy server, I am able to pre-authenticate traffic to the management console.

![Pre-authenticate traffic to the administrative console through a small and simple Debian GNU/Linux server with nginx proxy](https://willem.com/global/images/48c92af16a45.webp)

In this setup the Debian machine runs on a separate network, on different hardware, with a fixed IP-address. The VMware server only accepts traffic from this proxy server using its firewall. The proxy server filters traffic using HTTP-authentication over SSL/TLS. Anybody can connect to the proxy server, but only those with valid credentials can reach the VMWare administrative console. The proxy server appears to be a very tiny, standard webserver for anybody that scans it: providing a stealthy online signature.

Add another proxy server from another network on different hardware in the mix to prevent a single point of failure. Nginx can forward authenticated traffic to different administrative consoles based on different hostnames, enabling you to re-purpose a single proxy to secure multiple VMware machines. The proxy servers can be configured to use HTTP Basic authentication using standard and simple tools, check out the nginx_documentation_for_tips_on_this (https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/).

![Two proxy servers providing secure access to multiple VMware hosts](https://willem.com/global/images/bb1ad8e30b8e.webp)

![nginx configuration to authenticate and forward traffic to a VMware administrative console](https://willem.com/global/images/b43f9ed92c73.webp)

## Conclusion

By using nginx as a proxy to the administrative console you can add a layer of authentication *and* create a stealthy signature for anybody scanning your network. This improves the security of your VMware machines by making them harder to find and to access. Legit administrators can still access the administrative console using any computer without the need for a VPN or pre-authenticated IP-address. Bad actors, hackers and bots will have a hard time finding you. You're hiding in plain sight!

---

## The birth of a child

*Impact on daddy and his biometrics* · 2021-07-13 · https://willem.com/en/2021-07-13_the-birth-of-a-child/

Today I witnessed the birth of my daughter! You feel humble as a man, witnessing the labour and magic. Not sure if I can come up with something having more impact on a man than this. For the purposes of science and curiosity I wore a biometric sensor, and this is what it recorded.

![One of the advantages of a planned cesarean section is that you know when the action will begin - giving you plenty of time to drive to the hospital](https://willem.com/global/images/8facdb7ed07c.webp)

![Yours truly dressed up and ready - it's an incredible privilege to be able to witness the surgery as a man - big, big thanks to the hospital staff!!](https://willem.com/global/images/8b1904d8ca12.webp)

![Less then one hour later you're a dad - WOW, hello you!](https://willem.com/global/images/2b24699a9b03.webp)

![Luckily my experience from our first child came in handy! Like knowing how to ride a bike, you'll never forget how to change diapers! ](https://willem.com/global/images/400cf13561c9.webp)

![Hours later, when the adrenaline tunes down, you'll start to feel the impact (and have plenty of smudges on your shirt to prove it, ha!)](https://willem.com/global/images/cb860628a6f7.webp)

## Data

For my personal curiosity, learning about my body, I wear a WHOOP_sensor (https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/). It continuously records:

- my heart rate (beats per minute)

- my heart rate variability (HRV, ms)

- respiratory rate (breaths per minute)

- relative, personalised, recovery score (how well rested is *my* body today?)

The beautiful thing about WHOOP is that it allows you to compare one day's data to your normal values, collected and analysed over a longer period of time. This enables WHOOP to very clearly identify deviations from the normal. And, boy, becoming a daddy certainly qualifies: the impact is clearly visible in the data!

![Heart rate data during the day - my average rate increases during the day as I am increasingly exhausted - a spike in heart rate is clearly visible around the time I first saw my daughter - amazing](https://willem.com/global/images/f3bf1ddb2bd6.webp)

You don't recover from birth overnight - that takes at least 18 years, I've been told... - and the biometrics shows. The data from the days following the birth clearly shows that my body needs time to adjust to the new reality.

![My daughter was born on Tuesday, July 13 - the data clearly shows the impact on my body and its gradual adjustment to this new fatherhood ](https://willem.com/global/images/12aa501a4a23.webp)

A week after my daughter was born things went south for me, I simply ran out of energy and fell ill. On Tuesday, July 20th you can see this in the respiratory rate data. Whenever your body is fighting illness or infection, respiratory rates tend to go up.

![Respiratory rate data showing me falling ill, about one week after the birth of my daughter at July 20th. ](https://willem.com/global/images/fb653aa5a91d.webp)

Respiratory rates captured by WHOOP are known to be very stable over time. This makes them a clear indicator whenever things are out of the ordinary. You can clearly see it having a peak in the graph. At that time, I had a fever and had to take precautions because of a possible COVID infection (which turned out not to be the case).

![Fever time - 38 degrees Celsius is way above my normal](https://willem.com/global/images/a4ec776cfcde.webp)

Luckily I recovered quickly and was able to get back to my family in good health. I can ensure you that being a parent of two kids requires all the energy you can find!

![Returning home recovered and feeling well, time for celebration: "Hoera een meisje"](https://willem.com/global/images/508b470d9471.webp)

![One happy daddy - two amazing kids - multiplayer!](https://willem.com/global/images/12a53180edb3.webp)

## Conclusion

Its not every day that you become a dad, and boy its impact is tremendous. While the woman's work is rightfully respected and heralded as incredible, the birth of a child has physical impact on a man, too. Take care of yourself to be able to put in your best self as parenthood is all about team play!

---

## Migrating to the Cloud

*Clearing an on-premise server room* · 2021-06-30 · https://willem.com/en/2021-06-30_migrating-to-the-cloud/

For a Dutch organisation that serves customers throughout Europe, I was asked to help dismantle a live server room. Instead of simply pulling the plugs, some of the services had to be migrated to the cloud. For fun and inspiration I share three different strategies to do so.

## On-Premise server room

Like many companies this Dutch firm had a dedicated server room in their office building. Over the years hardware accumulated inside this room. Whenever I am asked to assist with jobs like this, it always strikes me as a surprise how these things seem to (almost) organically grow. Lots of wires, intertwined much like the roots of trees in a forest.

![Typical on-premise server room situation: lots of intertwined wires](https://willem.com/global/images/d18a67696a49.webp)

Like finding your way through a jungle you must first get a grasp on what you're looking at. Determine what machines are actually in use, what are the tasks of these machines and who uses them? Only a thorough understanding can provide the necessary basis for any thoughtful migration.

![Determining "what is what?" involves opening doors, following cables, checking lights and listing machine names](https://willem.com/global/images/5da90ab917b9.webp)

## Strategies

Once you have a clear understanding of the current setup you can define the next steps. For this particular organisation the desire was to completely clear the on-premise server room. Per machine there where basically three options:

- **turn it off: ** as simple as pulling the plugs, but do not forget to securely wipe any data containers such as disks and memory

- **move it to a data centre: ** some machines may be hard to migrate to the cloud due to hardware capacity demands or software restrictions; simply moving the existing box to a professional data center might then be a viable idea

- **migrate its software to the cloud: ** this can be a little trickier as it involves decoupling hardware and software, but ultimately this can set you free from any trouble associated with hardware ownership

## Implementation

For this customer we were able to simply turn most machines off. The remaining machines where carefully analysed and whenever possible a cloud migration was performed. Think about things like moving the email from the Exchange server to Microsoft 365. Tackle each service one by one and you'll be surprised how many cloud offerings there are. For most things you can find a suitable cloud solution.

After migrating the low hanging fruit into the cloud, you'll end up with the more challenging machines and services. One machine involved a big database with millions of records running a specific version of Red Hat Enterprise Linux and Oracle. Virtualising this "bad ass" server would be very expensive, its demands on memory, storage and processing are very serious. That's why we decided to move it to a professional data centre where it can continue to run as is.

![Never underestimate the bandwidth of a Dacia Duster: moving millions of database records to the data centre](https://willem.com/global/images/ecba482dcfde.webp)

You might think of this as "cheating your way to the cloud" but make no mistake: a professional datacenter is *much* better than most on-premise server rooms as it provides security, redundant connectivity and stable climate control. Just be very sure to make a backup before loading the machine in any car: as crashing the car could have devastating effects on its cargo!!

Two other specific machines where to be virtualised into the cloud. They where running on Microsoft Hyper-V, hosted on one of the on-premise servers that ran other Windows domain services, too. The trick was to decouple the machines from the (legacy) Windows domain to be able to run them independently. A single virtual machine is much easier to host at a commercial infrastructure provider.

![Migrating a Microsoft Hyper-V VPS to VMware ESXi using VMware vCentre Converter ](https://willem.com/global/images/de0136a34d63.webp)

You need some bandwidth, time and preparation - but this is a relatively safe operation to execute. During conversion data is only copied - leaving you with two virtual machines afterwards. Once the VPS is migrated you should test the new copy thoroughly   before wiping the old ones.

![Overseeing VPS migration during nigthly hours - well past normal business hours to reduce downtime](https://willem.com/global/images/475e0d38c841.webp)

When everything comes together you can happily enjoy lunch in the sunshine, being able to connect to the migrated machines through the magic of the cloud.

![Connecting to the migrated servers through the cloud - and having a nice lunch, too!](https://willem.com/global/images/97c2bf574aee.webp)

## Conclusion

At first a data room jungle might scare you and the task to migrate it to the cloud insurmountable. Take tiny steps to create smaller chunks to be migrated, then determine what to do with each service separately. That way everybody can find its way to the cloud!

---

## Wearing Grand Seiko

*On craftsmanship, innovation and practicality* · 2021-06-05 · https://willem.com/en/2021-06-05_wearing-grand-seiko/

Sadness could be seen in my eyes when my custom made watch got damaged earlier this month, while awaiting repairs I was fortunate to wear a Grand Seiko. Its unique mix of craftsmanship, innovation and practicality is worth sharing with you.

As a friend of my blog, you might know that I have a thing for watches (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/). These miniature machines keep on fascinating me. When my custom_made_watch (https://willem.com/en/2020-11-30_designing-my-own-watch/) needed unplanned service..., I took the opportunity to find something else worthy of wearing on my wrist.

![Grand Seiko SBGA285 Spring Drive](https://willem.com/global/images/fc4aee4696a2.webp)

The local Seiko boutique in Amsterdam offers you access to the fine Japanese craftsmanship of Grand Seiko. Amidst mediocre mainstream shops, you’ll be forgiven if you miss it. The boutique’s shelves provide you with a glance into - what almost seems - an alternative reality with meticulous attention to detail. Photos hardly do the fine artwork justice, the watches must be seen in the metal to appreciate their quality.

![The depth of the dial and its markers are hard to capture in a photo](https://willem.com/global/images/3ffea520a99a.webp)

![The Zaratsu polishing reflects light like fireworks, surrounding the matte black dial which maintains a classy state of calm](https://willem.com/global/images/fb78dbbf54f1.webp)

![Sharp, bevelled hands indicate time with the sharpness of a Samurai’s Sword](https://willem.com/global/images/47c31b212a47.webp)

![Yet it blends in like a true chameleon - tuning down the fireworks and Samurais - ideal when you try to read a book](https://willem.com/global/images/8ec31c33a981.webp)

Inside the watch hides a Seiko innovation called the “Spring Drive”. Unlike conventional mechanical watches, an electro magnet frictionlessly regulates the speed of time. Instead of “ticking” it makes the hands sweep smoothly. It operates in silence with incredible precision. Unlike cheap watches powered by disposable batteries, the Spring Drive generates its own power. A swinging rotor captures the kinetic energy from your wrist, winding a spring like a traditional mechanical watch.

While you might not care about the nerdy details of your watch’s movement, the Spring Drive quintessentially conveys time in its true nature. Watching the passing of time as a continuous flow acts a reminder how little influence one has on its pace.

The watch has no trouble facing the daily challenges of my life as a father, a programmer and as the man around the house doing some mandatory gardening... Water does not scare the stainless steel case of the watch, neither does dust or yellow creatures from the kid’s corner. This wrist worn companion happily joins you on your adventures.

![Sandy beaches and plastic watering cans pose no problem for the stainless steel case](https://willem.com/global/images/1f3de4c71300.webp)

![Neither do yellow creatures in the kid’s corner  scare the watch](https://willem.com/global/images/b9b37a6d7143.webp)

![It works well whenever you're doing some gardening](https://willem.com/global/images/c005e6a71137.webp)

![It works when you work, too.](https://willem.com/global/images/7c4b743c0fbe.webp)

![And it happily accompanies you - wherever your duties as daddy / person / man / hero will take you...](https://willem.com/global/images/e84700609bfc.webp)

## Conclusion

If you’re looking for an everyday watch that performs superbly with an uncommon attention to detail, then look no further! Wearing my Grand Seiko reminded me of the joy a personal wrist watch can deliver if you forgo the status symbolism associated with the popular Swiss brands. This is a watch you wear for *you* - very much worthy of the “Grand” moniker!

---

## Using the reMarkable paper tablet

*Read, write, think and repeat* · 2021-05-31 · https://willem.com/en/2021-05-31_using-the-remarkable-paper-tablet/

This month I received my reMarkable paper tablet and ever since I have been using it extensively: reading, writing and thinking. The paper-like display makes you forget about its digital innards. Read along for my thoughts.

![reMarkable's party trick: better paper, better thinking](https://willem.com/global/images/ebb3c5ee0176.webp)

You're greeted with the slogan "Better paper, Better thinking" when you open reMarkable's box. How can one possibly improve paper?

![The reMarkable's display: very much like a piece of paper in colour and texture](https://willem.com/global/images/2ae339e0eda0.webp)

Hard to capture in a photo, but the faithful recreation of paper on the reMarkable's display feels very real to your eyes and fingers . The thin and lightweight body perfectly matches the unique display for its goal: creating "better paper".

![Thin and lightweight](https://willem.com/global/images/f568feb3a4d1.webp)

![Like reading a real printed book](https://willem.com/global/images/68b542e7ebdb.webp)

![No clutter, just content.](https://willem.com/global/images/bce720541916.webp)

At first I thought of reMarkable as a fancy reading (and writing) tablet. But after a short while something odd happened. No longer I thought of the "thing" as an electronic computer tablet. The technology faded into the background. The "thing" became *just* my book or *just* my writing.

![Working with reMarkable - using it in tandem with iPad](https://willem.com/global/images/68a4b1ba6907.webp)

On many occasions this "device-less" characteristic removed any awkwardness that one could imagine when you combining it with other devices. The minimalist in me did not have any problem combining reMarkable with my other favourite tablet: iPad.

![Working on an idea - sketching on reMarkable](https://willem.com/global/images/dab6444cbf81.webp)

Sketching ideas helps me iterate my thoughts. Outlining an idea, thinking about it, and filling in missing details. The reMarkable delivers its promise of "better paper" by being able to digitally copy, archive and share your work.

![Digital copy (PDF) from the idea that I sketched](https://willem.com/global/images/2b1033f33a6c.webp)

![Annotating digital documents directly - no need to print and scan](https://willem.com/global/images/b06ba88acfc9.webp)

## Conclusion

If you're looking for "better paper", then reMarkable provides you with a strong option. The tablet does (almost) everything right to get out of your way. Its focus on *one task* sets it apart from pretty much all other tablets that attempt to do *everything*. This singular emphasis might not please everybody, but for those that do value this focus it can be quite remarkable (pun intended!).

---

## Hospitalised with MCADD

*Averting a metabolic crisis by infusion* · 2021-05-04 · https://willem.com/en/2021-05-04_hospitalised-with-mcadd/

This week we experienced the first time that our son was hospitalised since he was diagnosed with MCADD, a metabolic condition that limits his body's ability to utilise fats for energy. Do you or your kid have MCADD? Then, read along and don't worry, as everything will be allright!

## Explaining MCADD

Like a marvellous machine, your body can utilise many different resources to power itself. You can practically eat anything and through the magic of the metabolic system, your food is converted into energy.

When you run out of food, your metabolic system eventually turns to burning body fats. The so-called MCAD-enzyme prepares the fatty acids for energy conversion. Patients diagnosed with MCAD-deficiency, or MCADD, have trouble producing (enough) MCAD-enzymes to make this work.

Without enough MCAD-enzymes, the body runs into metabolic crisis after it depletes its supply of glucose (https://en.wikipedia.org/wiki/Glucose) and glycogen (https://en.wikipedia.org/wiki/Glycogen). Unprocessed fatty acids can become toxic if your body is unable to get rid of them. Running out of energy and toxic blood levels will ultimately kill you.

### The Danger of MCADD

Under normal circumstances MCADD is relatively easy to manage, just make sure you eat or drink (something) regularly. It doesn't have to be much, as long as it keeps your body from running out of energy. MCADD becomes a problem when the food intake is disrupted, like in case of a regular illness causing you to vomit. An empty stomach in combination with fever is especially dangerous as your body will then require even more energy.

## Vomit

Out of the blue our son started vomiting! Apparently, he did not feel well and threw everything out. This caused our immediate concern as our son is diagnosed with MCADD. We are well aware of the procedures and tried to offer him some food and sugary drinks after we cleaned the mess.

![Ella's Kitchen fruit pouches are a perfect way to offer something sugary - we always have a few in stock for MCADD emergencies](https://willem.com/global/images/ac475e788401.webp)

Unfortunately the fruit pouches didn't work as they almost directly came out again! Following the standard procedures, I contacted our doctor at the hospital. Because of the MCADD diagnosis, the hospital knows our son and his condition. This saves me the explanation in case of emergency. When I called our doctor we agreed to try to administer a special fluid aimed to deliver sugar while limiting the chance of vomiting.

![Magic potion from the local academic hospital (UMC Amsterdam)](https://willem.com/global/images/e0ad427f25ed.webp)

Living near the hospital (±15 minute drive) is a great convenience, it allowed me to pick up the specially prepared fluid and get back in time. Relax, as patients with MCADD do not immediately go into metabolic crisis: depending on age and body mass it can take hours before the situation gets really dire. But, considering the risks, you don't want to stretch your luck by pushing the time limits either.

Shortly after administering the fluid our son threw it out again! The magic potion didn't work and the risky situation remained. By this time our son started to appear a bit drowsy - reason for extra concern. I contacted the hospital again and we agreed to pack our bags and head for the emergency room!

## Hospitalised

The hospital was already expecting us and shortly after our arrival we were directed to a chamber in the emergency room of the UMC Amsterdam. Following MCADD emergency procedures, our son was hooked onto an infusion system. A simple glucose fluid is then directly fed into the blood stream, bypassing the stomach and digestion system, preventing further vomiting.

![Bring your bunny rabbit when you're going for an infuse!](https://willem.com/global/images/37ccecf8cff4.webp)

![Hello from the emergency room - connected to the infusion system](https://willem.com/global/images/c84b4024108f.webp)

Almost instantly our son responded to the glucose feed, like with a fresh set of batteries our son started talking and making his usual jokes again! It worked and I felt relieved, knowing that a metabolic crisis was averted!

### Emma kinderziekenhuis Amsterdam

With the infusion system working our son was perfectly safe, but it was suspected that it would take some more time before he would eat and drink normally again. A regular cold, or a simple flu can take a few days to overcome. During this time our son stayed in the Emma Kinderziekenhuis. It is a special department of the UMC Amsterdam with spacious rooms to accommodate a child plus parent. Nurses and other staff are extra friendly and attentive to their young patients.

![Nurses explain what they measure - making the kids (and parents) feel comfortable in the hospital](https://willem.com/global/images/fe21530af2da.webp)

![The hallways in the Kinderziekenhuis are full of interesting things to allow the kids a little break from being a patient - I'll happily play along!](https://willem.com/global/images/e9d369ff9544.webp)

After a few days of incrementally returning to normal food and drinks, the infusion system was disconnected. Our son felt fine again and learned a lot about how things are done in an academic hospital. Before we left, we thanked everybody for what *almost* felt like a little family holiday! :-)

## Conclusion

There is a first time for everything, they say. This was our first emergency MCADD hospitalisation for our son. There was no anxiety, panic or stress: thanks to the amazing professionalism of the hospital staff everything felt very natural and smooth.

I would almost recommend it to anyone, ha! No, seriously: the fantastic care we received deserves a 5-star review. I can't emphasise enough how grateful I am. THANK YOU, Emma Kinderziekenhuis!

---

## Enter text without keys

*Tap: the wearable keyboard and mouse* · 2021-04-15 · https://willem.com/en/2021-04-15_enter-text-without-keys/

This month a special piece of wearable tech arrived for me to try: the Tap Strap. Worn on your fingers, the Tap Strap recognises tapping and moving. It enables you to control and type your computer without a mouse or keyboard!

![The Tap Strap](https://willem.com/global/images/fe578b372a87.webp)

![How the Tap Strap works](https://willem.com/global/images/bbaaa56e40c8.webp)

![Store and charge the Tap Strap in its case](https://willem.com/global/images/97eb781104da.webp)

The Tap Strap connects to any computer, tablet or phone by Bluetooth like any keyboard or mouse. There is no need for special drivers or software - other than learning how to use the Tap Strap. You wear the  strap by putting your fingers through rings that have sensors on them. These sensors work in concert to recognise taps and movement. It weighs very little and your skin can easily breathe through the elastic fabric.

![Wearing the Tap Strap](https://willem.com/global/images/94df2353866e.webp)

![Lightweight and breathable material](https://willem.com/global/images/7f34e276fa4b.webp)

I had no trouble getting the Tap Strap to work with my iPad Pro. Using special_Tap_Strap_apps (https://www.tapwithus.com/apps/) you can learn to use Tap Strap or play games with it. The device itself provides no feedback or instruction how to use it, therefore I experienced a rather steep learning curve requiring me to memorise different ‘rhythms’ and ‘chords’.

![Learning to Tap takes time and practice](https://willem.com/global/images/1468b34b0281.webp)

Just like learning to play the piano or guitar you can become proficient. I have read stories of people that gained speedy typing performance using Tap, able to type 20-30 words per minute. Tap Strap puts the potential on your fingers, quite literally.

![Ultimately, Tap Strap can replace your keyboard and mouse](https://willem.com/global/images/cbeff13a20a6.webp)

As a touch typist, I would not replace my keyboard with anything else: it would render years of experience and training useless. Rather, I think of Tap Strap’s potential in being something else than a keyboard or mouse. Using it in augmented and virtual reality seems a natural fit, as it can digitise your fingers’ moves, as subtle as a gentle tap.

![Using Tap Strap beyond the keyboard](https://willem.com/global/images/582b3a20cc74.webp)

## Conclusion

Conventional keyboards have been around for decades, modern miniaturisation of technology enables them to be augmented or even replaced by wearable technology.

Tap Strap illustrates this shift in technology in an elegant and beautiful way. Wearing this kind of technology enables you to type and control far beyond the natural habitat of keyboards and mice. That’s the *key* thing to take away from this post, pun intended.

---

## Fixed Gear Gran Fondo

*Cycling 176KM through rain and wind* · 2021-04-10 · https://willem.com/en/2021-04-10_fixed-gear-gran-fondo/

Today I took my fixed gear bike for a ride, 176KM from Amsterdam to America (Limburg, The Netherlands). Rain and wind added to the challenge, creating an ultimate test for man and machine. Let some of my fun be of inspiration to you!

## Gran Fondo

The Italians call a big cycle ride (>120KM) a “gran fondo”. You better prepare yourself as these long distance rides can be very demanding. Can you ride for hours and hours, alone? Through unknown terrain withstanding ever changing weather?

If you have been following my blog, you know that I like the occasional long distance ride:

- Solo_around_the_Markermeer_211KM (https://willem.com/en/2019-05-29_solo-around-the-markermeer-211km/)

- Fietselfstedentocht_Friesland_235KM (https://willem.com/en/2017-06-30_fietselfstedentocht-2017/)

This time, however, I decided to do it more hardcore... on a fixed_gear_road_bike (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/)! That means that whatever weather, wind, or pain you are suffering, there is only one gear. Strong wind? Pedal harder! Going downhill? Pedal faster! Pain? Grunt!! GRRRRRR!

![Schindelhauer Siegfried Road - a fixed gear bike with a Gates Carbon belt drive ](https://willem.com/global/images/b1a122c6b1a3.webp)

To prepare myself for my ride from Amsterdam to America, I gradually cycled longer rides. You feel your stamina improve each ride, building confidence in the success of this maddening endeavour. Believe you can do it, and sure you will!

![Training through chilling hail... (Haarlemmermeerpolder)](https://willem.com/global/images/a5a1de597c2b.webp)

![... and through radiating sunshine! (Zuiderheide, near Laren)](https://willem.com/global/images/32aafd2683bd.webp)

## The Ride

My wife and son took the family car to America to visit our family, leaving me to follow them by bike! Unlike my_ride_around_the_Markermeer (https://willem.com/en/2019-05-29_solo-around-the-markermeer-211km/) where I brought plenty of food, I decided to trust my ability to source supplies along the route.

![Getting ready for departure: Some coffee and 176 kilometers to go! ](https://willem.com/global/images/ff069e5096e3.webp)

![The mighty “Prinses Irenesluizen” connect the Amsterdam-Rijnkanaal to the southern rivers of The Netherlands, Lek, Waal and Maas](https://willem.com/global/images/b6f279556990.webp)

![Find tasty croissants in Kesteren’s local bakery, Bakkerij de Greef!](https://willem.com/global/images/e3ef8b0fb9bc.webp)

![Bridge over the Waal river near Nijmegen](https://willem.com/global/images/a1946b824f3a.webp)

![Nijmegen skyline ](https://willem.com/global/images/f31f995492c0.webp)

![Crossing the last river by ferry](https://willem.com/global/images/65e6ee9d09a7.webp)

![There is no such thing as bad weather... only bad gear!](https://willem.com/global/images/26a05896a4b4.webp)

![Cycling route as recorded by Apple Watch](https://willem.com/global/images/a55652c391d0.webp)

![My heart rate during the entire day, by WHOOP](https://willem.com/global/images/fa4dac00013e.webp)

## Conclusion

Challenge yourself and push the limits! Get to know *you*, physically and mentally. I love gran fondos for this uncensored view in one’s inner self.

Finish and feel victorious, a lasting feeling that fuels future ambition! Ready for the next challenge, whatever it may be!

![Daddy arriving by bike inspired the next generation!](https://willem.com/global/images/7afc4fb3addb.webp)

---

## Art of visualisation

*Creating mouth-watering food photos* · 2021-03-26 · https://willem.com/en/2021-03-26_art-of-visualisation/

You learn from working with experts and this month I had the privilege to work with a professional food photographer, my brother. Together we set out to photograph the entire menu of Café Carbòn in Amsterdam, enjoying the fabulous food afterwards.  Read along for some food photography takeaways!

## Café Carbòn Amsterdam

Thanking its name to the enormous charcoal grill, Café_Carbòn (https://www.cafecarbon.nl/) is well-known in Amsterdam for its steaks and ribs. Their three restaurants are local favourites, a welcome escape from the many mediocre tourist restaurants.

![Café Carbòn - a local favourite in Amsterdam](https://willem.com/global/images/9ebdcd625f58.webp)

## Food photos

Takeaway and delivery webshops benefit from great food photos. In the food_ordering_app (https://lemmid-store.com) that I_have_created (https://willem.com/blog/lemmid-store/), I see an average increase in sales of 300% for products with photos! Making great food photos is an art by itself.

Meet the expert: Kevin_Middelkoop (https://kevinmiddelkoop.nl) is no stranger to this blog. He had_a_hand (https://willem.com/en/2018-02-21_updating-snake-97/) (pun intended) in the success of Snake_'97 (https://snake97.com) by creating faithful images of retro phones. It's hard to overstate the importance of visuals in digital business!

![His special tools, his craftmanship and his attention to detail enable my brother to deliver his art](https://willem.com/global/images/1e6d8835b25e.webp)

## Light

In a similar way to what paint is for a painter, light is fundamental to photography. What happens around the photo is just as important as the actual subject. Reflections and shadows can make or break a good (food) photo. You use light as a core tool for your creativity.

![Working with light is a creative process, using reflections and shadows to create emphasis with natural elements](https://willem.com/global/images/443dfd71dfc5.webp)

![Highlights on the steak draw attention - an intentional effect created by the food photographer](https://willem.com/global/images/f28569609bed.webp)

![Look at the result and note how your attention is drawn to the juicy highlights of this tasty steak, illuminating the texture: you can almost taste it by looking at it!](https://willem.com/global/images/be47002e1b49.webp)

## Composition

Arrange food and dinnerware intentionally, nothing is random in a great composition. You can choose to cover many different dishes or to focus on one hero product. You use composition to add and subtract, changing what you communicate through your visuals.

![Arranging dishes intentionally to create a pleasing composition](https://willem.com/global/images/d845dc5c77a6.webp)

![Covering many different dishes this image communicates the many different options the menu offers](https://willem.com/global/images/b50848df7eab.webp)

![In contrast this hero image of the Café Carbòn Ribs puts full emphasis on one product](https://willem.com/global/images/7871036d9101.webp)

## Conclusion

There is more to food photography than meets the eye. Using light and composition the photographer acts like an artist. Have a look at his_website (https://kevinmiddelkoop.nl/2021-03-24_een-kijkje-achter-de-schermen-in-de-keuken-van-de-fotograaf/) for his explanation of the chosen composition and light. Or simply check out the result yourself as the Café_Carbòn_store (https://zuid.cafecarbon.nl) is now open!

![Me helping the expert by eating the food photos afterwards, yummy!](https://willem.com/global/images/c8a3fa99ddb6.webp)

---

## Three tips to make a content strategy work

*Maximise the effect of your writing* · 2021-03-25 · https://willem.com/en/2021-03-25_three-tips-to-make-a-content-strategy-work/

When you write for your blog or for your company's website, there are things you can consider to maximise the discoverability, longevity and impact of your writing. Leverage the energy you put in into your words. Today I share with you three of my lessons learned while writing for this website.

## What is a content strategy?

Simply put, a content strategy is how you create, publish and manage content; written or in other media. Write for your website, blog, favourite soccer club or company. You do this to spread your message, reaching as many people as possible, connecting you with new people, fans or potential customers.

## Write specific

Consider people looking for *your content*, how will they find you? People search using Google (https://google.com) or DuckDuckGo (https://duckduckgo.com). They enter their search phrase, for instance "how to cook potatoes". You should try to specifically match their search phrase by writing a specific, actionable answer to their search. The more specific the topic, the less competition you have. For example, instead of simply "potatoes", which includes the farming, distribution, growing, you focus on "how to cook potatoes". You better write three shorter (specific) articles than one generic overarching longread.

## Write timeless

Use your imagination to travel through time! How can you make your writing interesting for your future self? The internet never forgets, something you must remember when writing for the web. Let your words work longer by making them timeless. Forgo the fad of the day and focus on the underlying principle instead. *Give a man a fish and you feed him for a day, teach a man how to fish and you feed him for a lifetime.* Write to help people for a lifetime!

## Write with impact

You are the voice inside people's head when they read your content! Speak to *them* instead of creating noise about yourself or your company. Directly address your reader to maximise the impact of your message. Provide an actionable message directed at your reader. Instead of *"we can help to do X Y or Z"*, you should use: *"you can do X Y or Z by contacting us"*. You increase the chance for action with a clear and direct message.

## Tools

Direct your energy to the right words without being distracted, these tools can help you:

-  **Finding the right words**: Search your topic, see what suggestions the search engine gives you when entering your keywords. Try different words and phrases. Know that the search engine's suggestions are driven by other people's queries: this can help you find the right words for your content! 

-  **Focus on writing**: Before you can become the voice in other peoples' minds (when they read your text), you must create silence in order to hear yourself. It's just you, your thoughts and your words. Consider an app like_iA_Writer (https://ia.net/writer) to help you do this.

## Examples

You may find some inspiration in the following examples. While I am still honing my writing skills, I do an humble attempt to practice what I preach:

- **Discoverability**: In this_article (https://willem.com/en/2020-11-30_designing-my-own-watch/), I write about a very specific niche topic: designing your own watch. It has little competition and therefore it is effective at attracting the attention of a specific audience.

- **Timeless**: Instead of focussing on the launch of my latest product, I write about the underlying principle in the article about creating_products_on_a_platform (https://willem.com/en/2021-01-31_building-a-product-platform/). I used Duplo bricks to illustrate the abstract concepts.

- **Impact**: In this article about saving_photos_from_a_crashed_computer (https://willem.com/en/2020-10-15_rescuing-photos-from-a-crashed-imac/) I described what I did, but I directed the text to the reader. Instead of "I did this and that" I write "You can do this or that"

## Conclusion

Written words are powerful, especially if you arrange them well to deliver your message. Pay attention to discoverability, timelessness and impact.

But most of all, write! Now! Don't wait for a magical moment or a long desired spark of inspiration. You have everything you need to start writing: you, your words and your thoughts!

---

## Wearing two watches

*Both a mechanical and a smartwatch* · 2021-02-28 · https://willem.com/en/2021-02-28_wearing-two-watches/

For the past weeks I have been wearing two watches, and boy this is a thing! I love my mechanical watch, but I needed the modern connectivity of a smartwatch. I couldn't choose between them, so I decided to wear both. It's not as bad as you think, let me share some thoughts on my experience.

## Mechanical watches

If you have been following the blog, you know I like watches (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/). They always fascinated me and this goes beyond any rational reason. This admiration is emotional, intangible and personal (https://willem.com/en/2020-11-30_designing-my-own-watch/). I am not (https://www.ablogtowatch.com) alone (https://www.hodinkee.com) - mechanical watches are popular, despite the rise of modern wearables like smartwatches.

![Wearing my mechanical watch because I like it](https://willem.com/global/images/921434406009.webp)

## Smartwatches

In part because of my professional background in technology, I am into gadgets. I love how technology has evolved over the years and how computers have gotten smaller and smaller. It is amazing what you can do with mobile devices like tablets (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/), smartphones (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/) and smartwatches (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/). I wondered_if_the_smartwatch_is_the_modern_toolwatch (https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/).

![Wearing an Apple Watch Series 6 because it is useful](https://willem.com/global/images/ced0cc310480.webp)

## Double wristing

After toggling between either a mechanical watch and a smartwatch I came to the conclusion that choosing between them is very difficult for me. I realise that if this is the kind of problem you have, one could argue that you're experiencing "first world problems". But, I genuinely believe there is something more fundamental, more human, fuelling my indecision.

![Double wristing: wearing two watches at the same time](https://willem.com/global/images/474b0f66ec77.webp)

![Mechanical watch and Apple Watch](https://willem.com/global/images/19c652569268.webp)

![You wear both on the wrist, yet they are very different things!](https://willem.com/global/images/1cdce86c5e47.webp)

## Painting versus TV

Over the past few weeks during which I alternated between different "wrist configurations", I very much realised that I was trying to choose between a painting and a television. Both can occupy the same physical space (on a wall or wrist), but they are very different things altogether. It has everything to do with how we perceive them, how we attach meaning to them, what we consider valuable.

![The heart and soul of the watches are very unlike - they are created and powered differently](https://willem.com/global/images/24ecc12d975c.webp)

The modern smartwatch offers connectivity that can save (https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/) you, even literally (https://duckduckgo.com/?q=apple+watch+saved+life)! It enables control and tracking (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/) of everything you do, which in combination with some proper_planning_and_tuning (https://willem.com/en/2021-02-22_the-value-of-notifications/) can save you a lot of time. A mechanical watch on the other hand can be something that can move_beyond_generations (https://willem.com/en/2020-08-23_cleaning-a-vintage-watch/), picking_up_patina_and_character (https://willem.com/en/2018-01-21_something-the-smartwatch-will-never-have-patina/) over time. Most of its value is not derived from its technical capabilities. This is probably why people collect watches in similar ways as how people collect   art (https://www.sothebys.com/en/departments/watches). One could imagine a mechanical watch to be a wearable piece of art.

## Minimalism and human expression

People differ, but I am not a guy that likes to wears a ton of ornaments, jewels and frills. I prefer minimalism (/en/digital-minimalism-doing-more-with-less-technology/ism/) in my daily life, but I do appreciate the wonders of how humans express themselves. I love live_music (https://willem.com/en/2018-07-10_enjoy-a-festival-without-alcohol/), I sometimes_create_something_useless (https://willem.com/en/2017-10-23_from-tree-to-table/), I_love_to_lose_myself_in_a_game (https://willem.com/en/2017-03-26_repairing-a-nintendo-gameboy-advance-sp/) or to_feel_the_adrenaline_by_needlessly_burning_rubber_on_a_circuit (https://willem.com/en/2017-05-31_beast-of-the-green-hell/).

## Conclusion

If you can't choose between a mechanical watch or a smartwatch, then don't: try both! It isn't all that weird if you take a minute (pun intended) to consider why you have this "problem" in the first place.

We're creatures that attach emotional value to otherwise worthless things. Or did you think worshipping a 379x453cm_piece_of_canvas_with_some_old_oil_on_it_made_sense (https://www.rijksmuseum.nl/en/collection/SK-C-5)? Of course not! But, that's fine because being irrational is part of being human. Now wear your two watches and enjoy being crazy!

![The Night Watch (De Nachtwacht), Rembrandt van Rijn, 1642 - oil on canvas, h 379.5cm × w 453.5cm - rijksmuseum.nl](https://willem.com/global/images/08693ca263c3.webp)

---

## The value of notifications

*How to setup your smartphone to save time* · 2021-02-22 · https://willem.com/en/2021-02-22_the-value-of-notifications/

It's easy to dismiss your phone's notifications as something that disturbs you, something annoying. But if you take the time to set them up correctly, notifications can actually save you time in the long run. Gain more focus by taking control over your online connection to the world. Read along for some tips!

## Screentime

Start with taking a good look in the mirror, how do you use your phone? Did you know that a lot_of_people_underestimate_the_amount_of_time (https://www.zdnet.com/article/americans-spend-far-more-time-on-their-smartphones-than-they-think/) they use their smartphone?

If you're looking at your screentime you should pay attention to three different things:

- **time spent**: the actual time you spend inside apps or on websites

- **pickups**: the number of times you've picked up your device

- **notifications**: the number of notifications you received

![Usage of my iPhone and iPad, from left to right: time spent, pickups and notifications ](https://willem.com/global/images/7b93bee0f933.webp)

Look at my usage pattern, you see that I spend most of my time in an app called "Blink" (https://blink.sh), this is where I code and develop new products. If you look at my pickups, you'll see that I am a heavy "Mail" user. This is because email is my primary communication channel with my customers, followed by Messages, WhatsApp and Signal.

The real value of notifications is that you can use them to reduce the number of times you pickup your device. In the long run this can save you a lot of time!

## Break the loop

A lot has been written about people getting addicted to their phone. This has something to do with what is called a "dopamine_loop" (https://www.psychologytoday.com/us/blog/brain-wise/201802/the-dopamine-seeking-reward-loop). If you disable all notifications, you must manually engage (and "search" your phone) to see if there is anything new available. This is known to be an addictive pattern, because our brain is looking for a reward: perhaps *this* time you'll find something new and amazing on your phone! *(et voila, you're sucked in again)*

This brings me back to notifications, you can use them to break this dopamine loop. If you configure them correctly, the notifications will only inform you if there is *really* something you need to check out. You can then safely ignore your phone if there is no notification, the need to manually "check it" will cease to exist.

Instead of checking your mail manually 10 times per day, you should have the notifications setup to inform you when something important comes in. This may only be once or twice a day, saving you the time it would take to manually check 8 or 9 times!

## You decide "who and what"

The key thing to make this work, is to have a very refined and strict notification policy. It will take time for you to find the right balance, don't be afraid to "steer along". It took me weeks to reach my balanced configuration and I continue to occasionally make changes. For instance when emphasis on different projects or customers change.

Start by turning off most of the non-critical notifications, optimising the "noise to signal" ratio. I killed all notifications for apps like "iOS tips", social media trending topics, any advertisements, games, etc. As a rule of thumb, only *real* people *may* interrupt me - I do not wish to be disturbed by any algorithm!

The only exception to this rule is my realtime_server_monitoring_system (https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/), which alerts me if my servers go down. This algorithmic push notification will save me many "people driven notifications" like calls and messages. Knowing about problems *before* my customers do saves me time, too.

![The UptimeRobot is the only algorithm that I allow to wake me up at night](https://willem.com/global/images/09d9d892b551.webp)

Then you can choose to further refine your policy by differentiating your notifications settings per sender or caller. You can define groups or add people to the VIP-list. I use this to filter out 90% of my mail's notifications. Who is on the VIP-list is something you should decide for yourself. My VIP-list changes as I start and finish projects over time.

![Add any email sender to the VIP list and configure notifications differently for them](https://willem.com/global/images/ab7850507ad1.webp)

Few other tips you can consider:

- **mute group chats**: while people driven, messages are often not directed at *you*

- **mute social media**: while you may think these notifications are people driven, social platforms impersonate people to increase engagement: "someone liked you" is not really a person

- **ignore the news**: its safe to ignore the news if it doesn't affect you directly, and if it does, chances are *real* people will talk to you about it!

- **send fewer messages**: treat others as you would like to be treated, if you send fewer messages and emails, chances are you'll receive fewer replies! Make those that you send count, take the time to consider what you send.

## Do not disturb

If you're dealing with customers from abroad, from different timezones, you must take pay special attention to your night's rest. It's OK to be offline! I have configured an automated schedule to activate the "Do not disturb" function on my phone.

![The "Do not disturb" feature on iOS enables you to automatically activate a different notification policy - e.g. during the night](https://willem.com/global/images/4f472d5e997b.webp)

This allows me to filter out 99% of the notifications during the night, while allowing emergency calls and notifications to come through. I prefer it over shutting my phone down entirely, as I do like to stay available for close family, friends and the UptimeRobot.

![UptimeRobot - the monitoring system - is allowed to send me notifications at night, by enabling the "Critical notifications"  ](https://willem.com/global/images/6a2ceb0c5a85.webp)

## Conclusion

It's easy to be overwhelmed by notifications in our modern connected world, but it is a mistake to bluntly "kill them all". Be wary of the dopamine loop that lures you into regularly picking up your phone to "check it", it's a waste of time!

Instead you should take the time to look at how you use your device. Come up with a refined policy to stay connected, but in a selective way that *you control* - it will save you time in the long run!

---

## Realtime service uptime monitoring

*Discover problems before your customers do* · 2021-02-02 · https://willem.com/en/2021-02-02_realtime-service-uptime-monitoring/

Downtime happens and it is nothing to be ashamed of, just make sure that you set yourself up to discover problems as soon as possible! You can use realtime uptime monitoring to automatically keep an eye on your servers and services. Read along to find out how.

## Uptime, downtime and things in between

When everything works you might not think about downtime or service disruptions. But, it might actually be the right moment to do so! The best way to deal with downtime and disruptions is to be prepared for problems. Spending a little time implementing a good monitoring system can save you critical moments when the going gets tough! One way to prepare for downtime is to make sure you are among the first to find out if problems occur.

You can use realtime uptime monitoring to shorten your response time to outages. This can help you save valuable time during downtime. The faster you know you have a problem, the faster you can actually solve it.

Uptime monitoring can be done using different methods. The simplest form is simply to check if a server responds to a request ('is it there?'). If there is no answer then you know there is a problem.

A more refined way to monitor your services is to have multiple checks touching different parts of your infrastructure. For instance you can configure the uptime monitoring to perform a common function. This will catch 'deeper problems' that might not be detected if you were simply checking if a server is online. Then you're not only checking 'is it there?', but also 'is it functioning correctly?'

## UptimeRobot

Normally I prefer to see if I can do things myself before I look for external services. But, when you're talking about uptime monitoring, it makes perfect sense to use an external service for this. Because if *your* product or platform fails, chances are that your internal monitoring service would fail, too. I have selected https://uptimerobot.com to monitor my platform (https://willem.com/en/2021-01-31_building-a-product-platform/) because if has a great app and offers the types of monitoring that I need.

### Keyword monitoring

In addition to simply check if a server is online, I want to know if the key algorithms and functions are working properly. Therefore I have implemented special URL's on my web services to run common (but harmless) functions that give a clear indication  if key backend systems are working properly. Think of executing a simple database query; if the test succeeds you'll know both that the server is online *and* that the database is responding correctly.

![A special URL returns a simple text response if a few common (internal) function calls succeed ](https://willem.com/global/images/25a9e9483f49.webp)

One thing to consider is that you design your monitoring endpoints to be as efficient as possible. It's OK to perform a query, but don't push the server too hard as the monitoring URL will be requested very often!

![Set up UptimeRobot to detect the text that you expect when the service is online](https://willem.com/global/images/a65df145e260.webp)

## Dashboard

The great thing about UptimeRobot is that it only asks for your attention if something is wrong. Under normal circumstances you can "configure and forget" about it, it will perform its work in the background. But, if you want to, you can open the app and see the status of all your monitors - including historic data.

![Keep chillin' - The app offers a glanceable view on all your uptime monitors](https://willem.com/global/images/1712f5b55395.webp)

## Apple Watch downtime notifications

One of the great features of UptimeRobot is that it can be configured to send you a push notification when an unexpected outage occurs. The settings allow you to precisely tune when and where you want to be informed about outages. You can mute individual monitors or add additional persons and/or notification channels. One thing that is very useful, is that you can configure the app to work with Apple Watch.

![Downtime notifications on Apple Watch using UptimeRobot](https://willem.com/global/images/d0036ceb4556.webp)

In addition to normal iOS notifications, the app supports the so called "critical alerts" which can override the phones "do not disturb" function. This gives you fine-grained control over what type of reach certain outages can have. I have configured it to wake me up in the middle of the night if something really bad happens.

![UptimeRobot supports iOS "critical notifications" - allowing you to be woken up at night when really bad things happen...](https://willem.com/global/images/6a2ceb0c5a85.webp)

## Conclusion

Using UptimeRobot I have detected some rare bugs and outages that would otherwise have gone unnoticed. Continuous monitoring gives me a little peace of mind, knowing that it allows me to catch more than I otherwise would.

Although you may not be able to prevent an outage, there is little excuse for not being informed about it! Know about problems before your customers do and you buy yourself some extra time to save the day!

---

## Building a product platform

*Designing for reusability, flexibility and extensibility* · 2021-01-31 · https://willem.com/en/2021-01-31_building-a-product-platform/

This month I am leveraging platform capabilities to launch a new product. Over the years I have developed the "Lemmid" platform, a set of building blocks that allow me to swiftly develop new products. Designing a platform takes some extra considerations, but if you follow some simple rules you can do it yourself!

## What is a platform?

Simply put, a platform is something that you can build upon. The key thing that separates a platform from a simple product is that the platform can do (or become) other things that were not originally envisaged at the time of its initial design.

![A Duplo brick is can be so much more than just a brick](https://willem.com/global/images/adf7e59ff725.webp)

Modern smartphones with their hardware capabilities and respective app stores can be considered platforms. The platform enables all kinds of originally unforeseen functionality by enabling developers to use the platform's capabilities in novel ways and in new combinations.

![New combinations can create novel products](https://willem.com/global/images/e201ce03c6f5.webp)

## Reusability, flexibility and extensibility

If you're designing a platform you must take special consideration for reusability, flexibility and extensibility. In a sense you're designing for an unknown future. To understand how to design a platform it is a good idea to have a look at Duplo bricks.

![Duplo brick design is brilliant](https://willem.com/global/images/940bb223debf.webp)

The simplicity of a Duplo brick is deceptive, yet the design is incredibly brilliant as it enables:

- **Reusability**: Take a brick, use it somewhere and when you're done, you can take it out and use it somewhere else.

- **Flexibility**: Even a single Duplo brick can be used in numerous ways, you can connect it to other bricks creating many different combinations.

- **Extensibility**: The standardised studs on Duplo bricks allow easy extensibility: new and future parts can connect to existing bricks if they incorporate the same "stud standard". 

These three design principles enable the Duplo bricks to become a platform, enabling the creation of new things. If you're designing a platform you can think of these Duplo bricks. The components you create must support the "platform principle".

![Building upon a platform - the coloured blocks could be imagined as products upon a platform foundation](https://willem.com/global/images/dacc99c30d87.webp)

The best way to design a platform is to focus on a single brick. It will be the elementary piece of your platform, imagine how it can connect to other pieces and how you'll standardise that (inter)connection. If you get this right, you'll be amazed how easy it becomes to incorporate new and novel ideas.

![A funky new and exciting idea](https://willem.com/global/images/feb76726f55d.webp)

![If your platform design is good - adding new and exciting pieces to it should be child's play (and thus, a lot of fun!!)](https://willem.com/global/images/5ed17f5114f9.webp)

## Lemmid

Over the years I have developed the "Lemmid" platform, it is a set of digital building blocks that provide a foundation for pretty much any product I develop. This includes apps, websites, webshops and even games!

![The Lemmid platform is the foundation for the products that I build on top of it](https://willem.com/global/images/5e5ce4edc998.webp)

The platform is designed as a set of micro_services (https://willem.com/en/2020-03-03_monolithic-vs-microservices-software-architecture/) that share a common interface and design principle. Each piece is "unaware" of its siblings in terms of design: they're locally scoped and as simple as possible. They can only connect to each other using a standardised protocol that I designed to be as simple as possible, too.

For instance, there is a "Lemmid Bill"-block that is capable of sending bills. To "whom and what" is unknown for this block, other pieces can use the "Bill"-block send digital invoices. It can be reused and it works for invoices with things on them that I haven't even imagined yet.

Another example is the "Lemmid Manager"-block that is capable of managing content. It is used in multiple ways by different products that I created. Sometimes it is used as a website content management system and sometimes it is used to manage a product catalog (driving webshops). It is capable of managing content for sites and apps that I haven't created yet!

### Leveraging the platform's capabilities

The food_ordering_app (https://willem.com/blog/lemmid-store/), known as "Lemmid_Store" (https://lemmid-store.com), that I created on top of the Lemmid platform leverages its capabilities by using the individual building blocks to:

- allow stores to be online: web server, domain name registration, dns links, etc.

- allow stores to be filled with products: managing texts, prices, product photos, product categories, etc.

- allow stores to accept orders: check capacity, accepting customer information, processing payments.

- allow the authentication of store owners: to secure store management.

- allow the commercialisation of the product by sending bills

- allow new customers to sign on

![From signup to product: automated onboarding of Lemmid Store is enabled by leveraging the Lemmid platform's capabilities](https://willem.com/global/images/e879a65253ea.webp)

## Conclusion

Take a moment to consider if you're building just a product or if it could become a platform by itself. If the latter is true, you may be wise to design for the future and embrace reusability, flexibility and extensibility.

"I love it when a plan comes together" is exactly what I think if I am able to leverage my platform's capabilities. Launching new products and being able to utilise the power of existing building bricks is "nice", to paraphrase the same Hannibal Smith from the A-team.

![When the design comes together - great products appear: Harry van de Laar showing Lemmid Store straight from the kitchen! ](https://willem.com/global/images/d3d2dd047fb3.webp)

---

## Abandoning my own tablet OS

*Why I moved back to iPad and the Mac* · 2021-01-14 · https://willem.com/en/2021-01-14_abandoning-my-own-tablet-os/

The past year I have been experimenting with creating my own tablet operating system using Debian GNU/Linux and the i3 window manager on a Microsoft Surface Go 2 with LTE. After months of intense use I have now decided to abandon the experiment to move back to iPad Pro and the Mac. Read along to find out why.

## Building "WillemOS" using Debian GNU/Linux on Microsoft Surface

After being fed up by the umpteenth bug in Apple Photos, I got serious about leaving the Apple ecosystem. I thought that I could do things better. How hard could it be to make your own OS.., *right*?

![WillemOS in optima forma: Debian GNU/Linux on Surface GO 2 ](https://willem.com/global/images/a311f5097a11.webp)

It turns out that you can actually achieve a lot, if you have some spare time and a ton of dedication. It's amazing what you can learn if you simply try things. It led to some interesting posts and findings over the past months:

- Making_my_own_tablet_OS (https://willem.com/en/2020-03-09_making-my-own-tablet-os/)

- Free_from_iCloud_escape_Apple_Photos (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/)

- Syncing_files_seamlessly_between_tablets_and_smartphones (https://willem.com/en/2020-09-16_syncing-files-seamlessly-between-smartphone-and-tablet/)

- And finally: Refining_my_tablet_OS (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/)

![Writing and reading blog posts using my own tablet OS ](https://willem.com/global/images/a89149613f88.webp)

But then something happened, I had an opportunity to use a Windows laptop for a while, the Surface Laptop Go. It_is_a_jolly_simple_laptop (https://willem.com/en/2020-11-03_the-joy-of-a-simple-laptop/) and I liked it for precisely that: no hassles. The laptop just worked in a predictable, reliable way that - apparently - I was missing in "WillemOS".

![A plant, a laptop and some coffee - the joy of a simple system that works!](https://willem.com/global/images/fbf1ade29b85.webp)

## The problem with my own OS

Building your own OS is great for all kinds of reasons, but mostly because *you* get to decide how things will work. You're the architect, the master, the one that decides. You're god. The flip side of that great power is that you're also *responsible* to make things work!

Very often things worked fantastically, especially when I spent some time finetuning the experience. But even with all my knowledge and experience, there were times when things broke down, sometimes badly. Mainly this happened because:

- I run software on unsupported hardware: the Surface Go tablet is designed to work with Windows

- Most GNU/Linux software is designed for keyboard and mouse: using it on a tablet with just a touch screen is nearly impossible (try entering your disk encryption key without a keyboard)

- I prefer the cutting edge software versions from the Debian unstable repositories, which sometimes have 'breaking' changes...

- I created my own weird mix of free software in WillemOS: combining packages and apps that were not necessarily designed to work together

Over the past 6 months (when I used my OS as daily driver) there where at least 3 occasions when the OS broke down at critical moments. Usually after waking up the tablet from hibernation, things went bad...

For instance, one time I had to respond to a service outage, a customer called and they where in *direct* need for support. Precisely at that moment I ran into trouble getting my networking online after waking up the tablet. I lost precious time, but most of all I felt like an amateur not being able to respond instantly because some stupid networking bug. People pay me big time to help solve their problems, I'd better be ready!

![In this "Cloud age" you'd better have a working internet connection - all the time: no time for amateur hour!](https://willem.com/global/images/b45e0aec3a05.webp)

Another annoying example is when I had this super great idea for the next big unicorn IT concept... I was ready to use the tablet's pen to capture this spark of creativity when all of a sudden the tablet's digitiser failed to respond. My pen didn't work and the touch screen was all over the place. I was able to fix it by restarting some system services, closing and opening a few apps. But, by the time I was ready, the magical idea was gone!

![Pen input is great if it works - but good ideas can be lost if it fails!](https://willem.com/global/images/d72bcced9787.webp)

![You know you're digital pen is lacking trust if you grab for old fashioned pencil and paper...](https://willem.com/global/images/1c010a7e0303.webp)

## Lessons learned

Besides getting comfortable with Debian GNU/Linux in a deep, hardcore fashion, I learned a thing or three about the reality of building a system that you want to use on a daily basis.

First of all, reliability is incredibly important. This goes hand in hand with predictability (but they are not necessarily the same). It is not a problem if things break down, but only if you expect them so. This is extremely hard to get right, I have gained huge respect for all the good work that commercial software/hardware vendors have achieved. The performance of a critical tool that you plan to use on a daily basis must be extremely predictable.

Second, to achieve this you'd better use supported hardware and common software concepts. Use a conventional PC with standard components with a normal mouse and keyboard if you plan to use free software (like Debian GNU/Linux). The frictionless tablet experience using free software isn't ready yet.

Third, and this is probably the most important thing: when it works it is magic! All the problems that I encountered were manageable and do not take anything away from the fact that when my OS worked, there sometimes_was_some_true_magic (https://willem.com/en/2020-12-31_working-with-special-hardware-from-china/).

![When everything comes together there is magic: WillemOS doing things no iPad can do](https://willem.com/global/images/c29221027bf4.webp)

## Conclusion

You really have to be a little bit crazy to try to build your own operating system. You're a special kind of crazy if you make your experimental operating system your daily driver!

That's what I did... and I am glad I survived to tell the story. I will try again some day, because the taste of freedom is hard to forget once you have experienced it!

![Back to iPad Pro (right) after some an incredible time with WillemOS on Surface Go (left)](https://willem.com/global/images/6125494a73dc.webp)

---

## Commuter bike checkup

*How is my commuter bike doing after 21.000KM?* · 2021-01-10 · https://willem.com/en/2021-01-10_commuter-bike-checkup/

This week my trustworthy commuter bike started making strange squeaking noises when braking. It has been just over three years since I started cycling on it. People frequently ask me how the bike is performing and how the Gates Carbon CDX belt drive is doing? Time to have a look at the bike after 21.000KM!

## Commuter bike

My bike is a modified Sensa Cintura that has become the best bike I ever owned. It is very reliable and I use it multiple days a week, pretty much all year round. The bike as gained a following, I have received comments, questions and reactions from all over the world! If you haven't seen them, you should check out the previous posts:

- Creating_the_ultimate_commuter_bike (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/)

- Removing_paint_from_a_bike_frame (https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/)

- One_year_on_the_commuter_bike (https://willem.com/en/2019-02-27_one-year-on-the-ultimate-commuter-bike/)

- Replacing_my_bike's_headlight (https://willem.com/en/2019-11-26_supernova-e3-pro-2-dynamo-powered-headlight/)

- Related is my minimalistic road racing bike, which_also_uses_a_Gates_Carbon_Belt_Drive (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/)

- Both my bikes can track_my_rides_using_an_analogue_cycling_computer (https://willem.com/en/2020-09-29_riding-with-omata-one/)

![My Commuter bike in January 2021 - sharp eyes among you will spot the child's seating mount - as some things do change, ha!](https://willem.com/global/images/8784dfa2f0f4.webp)

## 21.000KM

It has been a while since I have written about my commuter bike. This is because there is very little to write about, ha! I have been riding it for months and months, years and years, and it has proven to be the most reliable bike I have ever had.

![I use the bike all year long - under pretty much all weather conditions](https://willem.com/global/images/a7fd921cf858.webp)

## Squeaking Noises

Then all of a sudden my bike started making strange noises under braking this week! It sounded like "metal scraping metal"... not good! It has been freezing these days and somehow the roads have been extra dirty because of snow mixed with salt and sand.

![Investigating my rear brake](https://willem.com/global/images/95f70d134b08.webp)

The sound came from my rear brake, a Shimano hydraulic disk brake. I never had any problem with it and I suspected that it was either stuck or something was stuck inside it. I removed my rear wheel from the bike's frame to clear the brake and to be able to investigate the system a little bit better.

![Removing my wheel to investigate the rear brake - note all the dirt!](https://willem.com/global/images/ea8924745def.webp)

Upon close inspection I noticed that one of the brake pads was loose! The 'fork' that was supposed to keep it aligned was no longer in place. I removed the brake pads and all of a sudden I realised where the metal scraping noise was coming from...

![My hydraulic brake pads were worn out! Note the damaged fork in the upper right (which is supposed to keep the pads in place)](https://willem.com/global/images/df97aa2d3bbb.webp)

![After some cleaning you can clearly see how 21.000KM look on a set of brake pads!](https://willem.com/global/images/1581f83a1dd5.webp)

Replacing the pads was easy enough, just order some replacement pads at your local bike shop (velominati rule #58). Know that there are different compounds available to fit in your hydraulic disk brake. The main difference is how durable they are versus how snappy they 'bite'. I opted for a hard and long lasting compound.

![New brake pads installed](https://willem.com/global/images/34bd1f9a6114.webp)

![You can see the light coming through right next to the disc - nothing is obstructing it and the squeaking noise is gone!](https://willem.com/global/images/43f91e33a844.webp)

## Gates CDX Carbon Belt Drive

After only 1800KM I ran into trouble with the original CDN drive. Since I_wrote_about_it (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/) both Sensa and Gates have taken notice, they no longer sell the CDN system! Instead the CDX system is now standard and that's a good thing!

The Gates CDX Carbon Belt drive has proven to be very reliable on my commuter bike. After about 10.000KM I replaced the remaining CDN parts (the belt and the front sprocket), and ever since I have not had the slightest problem with my drive. I check my belt's tension every two / three months using the handy app: Android (https://play.google.com/store/apps/details?id=com.gates.carbondrivecalculator&hl=en&gl=US) and iOS (https://apps.apple.com/us/app/bicycle-belt-tension-meter/id438346486)

![This front CDX sprocket and CDX belt have powered my bike for ± 11.000KM - replacing the previous CDN parts that lasted for about 10.000KM](https://willem.com/global/images/1c2f265966d5.webp)

![The rear CDX sprocket is still looking great (albeit a bit dusty) after 19.000KM! ](https://willem.com/global/images/177197a151f8.webp)

## Schwalbe Marathon Plus Tour tires

After experimenting with road racing tires on my commuter bike I was quickly fed up with flats! I like my daily commute to be hassle free and opted for Schwalbe Marathon Plus Tour tires. They're real beasts and Schwalbe's claims that they are "unplattable" (insert German accent here) are valid! Over the past ±11.000KM that these tires are fitted on my bike, I haven't had a single puncture!

![The Schwalbe Marathon Plus Tour tires are very reliable](https://willem.com/global/images/e8811df8e108.webp)

![Only some signs of wear after 11.000KM - and not a single puncture! ](https://willem.com/global/images/e8607d6aa841.webp)

## Conclusion

My commuter bike is living up to its "ultimate" status as I hoped it would be. It has become the most reliable bike that I have ever owned.

The bike shows its signs of wear and tear, but that is not a problem for something you use often and intense. I hope to be able to safely use it for many more kilometers to come!

![You instantly forget that you're riding a 21.000KM bike if you see the sun rise on a brand new day!](https://willem.com/global/images/21cf084ad8bd.webp)

---

## Working with special hardware from China

*On developing software without a manual* · 2020-12-31 · https://willem.com/en/2020-12-31_working-with-special-hardware-from-china/

This month I received a shipment from China containing some special hardware, Android devices with embedded printers! To make life easier for the restaurant and business owners that use my food ordering app, I want these devices to automatically print new orders. If only I can get these machines to work with my software... challenge accepted!

## Food ordering app

Through an_highly_optimised_webshop (https://lemmid-store.com) people can order food for takeaway and delivery. My customers are restaurants and store owners that sell their products through the app. Orders are forwarded to kitchen and delivery staff, making sure everything is prepared and delivered.

![People use the app to order food - orders are forwarded to kitchen and delivery staff](https://willem.com/global/images/d9984fd291cb.webp)

### Need for a printer

Over the past months I have been adding_features (https://willem.com/blog/lemmid-store/) to help my customers manage their online stores better. A commonly heard request is to get rid of the computer or tablet in the kitchen that they now have to use to access online orders. Instead of a big and bulky computer I searched for a compact alternative.

## Android with embedded printer

After some digging through various international market places, I was able to contact a Chinese hardware vendor that has created an Android device with an integrated printer! Few weeks later it arrived from China - what a wonderful world we live in!

![Handheld Android Terminal - OEM hardware straight from China](https://willem.com/global/images/be106b0b6553.webp)

This is an interesting piece of hardware as it is:

- compact (compared to a conventional PC, tablet or laptop)

- it can run on batteries *and* on direct power

- works on WiFi *and* has the option for 4G mobile internet

- has a large touch screen

- it can run native Android apps

- it can access the web

- it has an integrated printer!

![It runs Android - with some Chinese sauce on it (figuratively speaking...)](https://willem.com/global/images/4ca3fdca17db.webp)

The integrated printer is super practical as it enables the device to become a total solution for handling online orders. Using the touch screen orders can be accessed and the device can be configured to automatically print them. This allows for easy forwarding to the kitchen and delivery staff.

![Its party trick is the embedded printer - super useful in the context of handling (online) orders](https://willem.com/global/images/c22d0497647e.webp)

## Running something / software

In order to make all of this happen, I need to be able to run custom software on it. Although it runs Android, the devices came without any manuals, guidance or software development kit. This means I had to reverse engineer my way into this device.

The best thing you can then do is to try something you know well, see if you can get another of your apps running on the device. I connected the device to my_Linux_tablet (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/) and started tinkering! I happen to have created a little_Android_app (https://snake97.com) before... that seemed like the perfect candidate to test my development uplink to the device.

![Snake '97 on the Lemmid Printer - ha!](https://willem.com/global/images/490062964133.webp)

The advantage of running something well known on unknown hardware is that you are able to establish some kind of a reference to what the hardware capabilities are. It turns out that the Android printer is quite capable!

## No documentation or SDK

To fully leverage the hardware's capabilities I needed to figure out how to program the integrated printer. The Chinese hardware vendor integrated the printer in a non-standard Android way (for as much as there is *a standard way* on Android..). The devices I received came without any software or source code, a real bummer!

I investigated the serial and model numbers on the OEM device. I looked for any clue I could find and I searched the internet for similar devices. Perhaps that I could find some piece of (related) source code that would give me a starting point to work on this device.

## Reverse engineering Java code

After hours of research, I found a package on a remote part of the internet that contained some source code for a similar device! The problem was... it was all in Chinese!

![Chinese code to make the printer work... how can one possibly understand this?](https://willem.com/global/images/e8928f950eb8.webp)

![Google Translate to the rescue!](https://willem.com/global/images/f0cc5bc39dcb.webp)

I analysed the source code and quickly figured out how the basics worked. Using Google Translate I discovered that some parts of the source code were limited or not fully supported. But at least it offered me a starting point! Eventually I was not only able to read the Chinese source code, I was able to write software for it, too!

![Java code to drive the printer](https://willem.com/global/images/31571969ba3a.webp)

The next step was to create a test program that could test if the adapted Chinese source code would actually work. If I would succeed this would enable me to start writing real software for the Android printer, software that will eventually be used by my customers. Well... low and behold, it worked! The printer started making some noise and voila: a Lemmid Logo appeared!

![YES! The printer prints the "Lemmid" logo on a ticket!](https://willem.com/global/images/25e13cb105b2.webp)

## Conclusion

This is brilliant stuff! I am really happy that I found a way to write software for this special hardware. It enables me to integrate the hardware into the platform that I am building for my customers.

If there is one thing to takeaway from this post is that you sometimes simply need to try and see if you can figure out a way to make things work. Because only if you don't try, you can be really certain it won't work!

---

## Why Apple Silicon is a big deal

*Blown away by a MacBook Air* · 2020-12-15 · https://willem.com/en/2020-12-15_why-apple-silicon-is-a-big-deal/

Apple now designs its own processors and I had a chance to work with the very latest from Cupertino: a brand new MacBook Air with M1 processor. Never ever have I been so blown away by a MacBook Air, pun intended. Let me share some thoughts why I think Apple Silicon is a big deal.

## Power versus battery life

Anybody that has any interest in mobile computing knows that power usually comes at the expense of battery life. A powerfull processor burns energy, it becomes hot and requires fans to cool. Well, not anymore, meet Apple Silicon!

![The M1 processor is the first Apple Silicon available in a Mac](https://willem.com/global/images/1d10bae09d93.webp)

I am still fully flabbergasted - the new MacBook Air that I have here is without a doubt the fastest computer I ever owned. Yet it is utterly silent and its battery indicator seems to be stuck to "full". It is a weird, almost alien, experience: you expect some kind of trickery, but none is to be found: this is a game changing computer.

![The new M1 Apple Silicon in the MacBook Air blows me away](https://willem.com/global/images/68db3d5bf737.webp)

One thing I always appreciated of iPad (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/) and my Surface_tablet (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/) is that they are silent. This allows me to focus on my work, no distracting hissing of a fan. Or distracting heat underneath the keyboard. Now the Mac has it too, zen-like silence combined with raw performance.

## How does Apple do it?

The short answer: lessons from mobile. The iPhone and iPad have been hugely successful because Apple deeply integrates hardware and software. Compared to a conventional PC processor, the mobile chips that Apple produces are tailored to the workload they expect them to run.

This allows them to optimise the processor for *both* speed and energy efficiency. The operating system cleverly utilises the processor to run tasks on those cores that are best suited for the job. For instance, fetching new email can be done using a slower but highly efficient CPU-core while playing a game uses the powerful cores.

In addition to clever software, they have integrated a lot of chips inside the processor chip that would otherwise be an external chip on the main logic board. The most incredible feat is integrating the system memory into the chip. This alleviates the need for an ultra high bandwidth 'highway' between the CPU and external memory banks. As the memory is right there inside the main chip, there is a no need to transfer all those bits and bytes hence and forth. It is far more efficient, by design.

![Integrating chips inside the processor reduces the need to transfer data hence and forth to other (external) chips](https://willem.com/global/images/e008bfc50bc4.webp)

## Conclusion

The thing that should scare the competition is that *this is just the beginning*. This is Apple's first attempt to make a Mac processor and it has exceeded most expectations.

It's hard to escape the feeling that all the computers I own are now antiquated, it's really that big of a difference. From my power hungry servers in the datacenter (consuming kilowatts a day), to the tablet I carry. That's yesterdays inefficient tech, the future has arrived - oh boy!

---

## Designing a multi dimensional capacity queue

*Managing kitchen-, delivery- and pickup capacity* · 2020-12-02 · https://willem.com/en/2020-12-02_designing-a-multi-dimensional-capacity-queue/

This month I needed to create additional dimensions to a capacity queue mechanism. The food ordering app that I created needed to be able to restrict capacity based on the number of orders, the contents in individual orders and the dispatch type (takeaway/delivery). Read along to find out how I used a Lambda Architecture to do this.

## Restricting capacity

Although you may not realise this, one of the most powerful features of the food_ordering_app_that_I_created (https://willem.com/blog/lemmid-store/) is actually to be able to restrict the number of orders. This sounds counterintuitive, but by limiting the number of orders that can be placed, my customers (the restaurants and store owners that use my app) can ensure that orders get prepared and delivered in a good manner.

## Three pizza complexity

Say, you want to order three pizzas. The food app then needs to know:

- Do you want to **pick them up** or have them **delivered**?

- At **what time?** when will they need to go in the oven?

- Is is there **enough space available** for *three* pizzas **in the oven** *at that time*?

- If you have chosen pickup: **can we safely receive you** at that time?

- If you have chosen delivery: **is there a delivery boy/girl available** to bring you your pizzas? 

- **Yes to all of this?** Then **please pay** while we **keep your pizzas scheduled** in the oven and delivery or pickup. Failed to pay? Second thoughts? Then we "undo" all the scheduling and wait for somebody else to order some pizzas! 

![Eating pizza during development is how you "live the algorithm"](https://willem.com/global/images/e9229d524bd1.webp)

## Three capacity dimensions

Especially around "dinner o'clock" there is a risk that too many people order food at once. While the app can handle the extra traffic thanks to its highly_scalable_architecture (https://willem.com/en/2020-05-11_scalable-application-design-without-magic/), physical constrains remain, such as:

- **kitchen capacity**: the number of dishes you can prepare at once

- **pickup capacity**: the number of people you can safely receive at once with respect to the COVID-19 restrictions

- **delivery capacity**: the number of orders you can deliver, taking into account traffic, distance and routing

![Three capacity constraints: kitchen / delivery / pickup](https://willem.com/global/images/db564dd30d9f.webp)

### Distinct yet interdependent

These three different types of constraints are interdependent. For instance, it is possible that one large pickup order can take up all the kitchen capacity, leading to unavailability for delivery, too. Smaller orders could still be accepted to fill up kitchen capacity, while there may no longer be enough capacity available for large orders. This means that you need a mechanism that looks at *all* the metrics combined to determine the availability for new orders, including the contents of an unplaced order (e.g. what's in your shopping cart).

### Differences in timespan granularity

It is common to define a physical constraint by using a timespan, for instance *"the kitchen is capable of producing 10 dishes per 15 minutes"*. It becomes challenging when you define other physical constraints using different timespan lengths. While the kitchen could be limited per 15 minutes, the delivery capacity could be using a longer timespan (e.g. 3 deliveries per 30 minutes). Somehow the mechanism should be capable of dealing with these differences in timespan granularity.

### Ordering in advance

Adding to the challenge is the option for people to place their orders in advance. People can select a time slot in the future and have the required capacity reserved. Sometimes I see people place their order days in advance to be sure that they get their food delivered on a specific day and time. This means that there are (at least) two times associated with each order: order time and delivery time.

### Reserving and releasing capacity

Most business owners require online payments for online orders, this is to ensure that all orders are legit and no capacity (or food) is wasted on no-shows or ghost orders. The problem_with_online_payments (https://willem.com/en/2020-03-25_designing-and-implementing-a-micro-payment-system/) is that not all transactions are successful. Sometimes a credit or debit payment is rejected (e.g. due to insufficient funds). Sometimes people simply close the app before completing the order. The system should reserve the required capacity for a given order, while it allows people to perform the online payment, and it should release the reserved capacity in case the order is abandoned or when the payment fails.

### High volume, high speed

Last, but not least, the mechanism should be reliable and performant. Order availability should be determined within mere milliseconds while dealing with heavy concurrency as there are many different clients connected to the food ordering app during rush hour. When somebody places an order, it affects the availability for all other (potential) orders. Not everybody will be connected reliably as some people use the app on phones with poor reception or wifi. The system must work well under varying conditions with many different connected people.

## Lambda Architecture

The Lambda_Architecture (https://en.wikipedia.org/wiki/Lambda_architecture) is one way to deal with handling large quantities of data by using both stream processing and batch processing methods. A lambda architecture depends on a data model with an append-only, immutable datasource, often comprised of timestamped events.

### Immutable data

This is a very important foundation to the mechanism: all data is timestamped and *never* changes. Instead of mutating existing records, new records are simply added to overwrite the existing records. This allows for high concurrency and distributed algorithms, as synchronisation becomes simpler as one only has to look for new data (instead of both new and updated!).

### Realtime / speed layer

The stream processing, or realtime/speed layer, in a lambda architecture is designed to provide super fast answers to realtime data needs. It maintains views and metrics based on realtime processing of events.

### Precomputation layer

The batch processing, or precomputation layer, provides an complete and accurate basis of all the data in the system. As processing large quantities of data can take up time to process, the batch processing is not fast enough to do everything instantly. This is why the two layers work in tandem in a lambda architecture.

## Implementation

The backend servers that handle food orders from the app work with a data stream of timestamped events. In essence: every order is an event in the system. Each order is stored with its order date/time, dispatch date/time (scheduled delivery or pickup time), customer details and order contents (number of dishes, etc).

### Reserving and releasing capacity

If payment fails or if an order is abandoned, a "negative" order is added to the data stream. It neutralises any effect on capacity constraints by its negative metrics. For example: to cancel an order of three pizzas, a negative order of "minus three pizzas" is created in the data stream with the same dispatch timestamp. This is an elegant way to make sure capacity is both reserved and released.

### Multidimensional realtime metrics

Instead of abstracting capacity into counters, the backend server uses the *real* stream data to anwser queries for realtime metrics. This enables the system to deal with differences in timespan granularity.

![An event stream of orders is the heart of the mechanism, queries are fulfilled by looking at this stream: how many pizza's will be ready at 18:00hrs?](https://willem.com/global/images/1e59e0b31de7.webp)

The first time a query is received for a given metric, the system loads historic data through a batch mechanism to initialise the model that it can then keep up to date in realtime. This metric is kept up to date by looking at all new orders coming into the system for as long as queries for a given metric come. Once the data is no longer requested the model is unloaded. If it is needed again, the proces repeats.

The great thing of this approach is that most queries are answered within mere milliseconds as they are directly read from RAM memory with no database or disk interaction. This enables ultra high performance on a "need to have" basis. This works well with the food ordering app as not *all* timespans are equally populair.

The food ordering app repeatingly queries a central capacity server that maintains the queue metrics. It then filters out available time slots by looking at the actual things that a person is selecting for his or her order. Selecting a (likely) available time slot therefore happens client side, reducing the load on the backend. Once an order is placed, the capacity is reserved by the backend by updating the central queue metrics, blocking other people from claiming the same spot in the queue.

## Conclusion

Queue mechanisms can be challenging when you deal with multiple metrics that control the speed. You should really take the time to model it right, think of the kind of data you *really* need to perform queue related checks.

Now you know that ordering three pizza's isn't quite as simple! Guaranteeing that they can be served hot and on time is a major technical challenge - in addition of being a good chef. Happy for you that *I* don't focus on the latter, ha!

---

## Designing my own watch

*Timeless timepiece, both functional and comfortable* · 2020-11-30 · https://willem.com/en/2020-11-30_designing-my-own-watch/

Last month a very special package arrived from Switzerland, containing my custom made wrist watch. I decided to sell all my big brand watches and have them replaced by something unique, tailored to my personal preferences. This is the story of my watch.

## Watches

There is something magical in these miniature machines that sit on peoples' wrists: watches. They are technical marvels that often are much more than mere tools to tell time.

Some are status symbols, some are pieces of art, some are fitness tools and others are digital companions. But most of all, a watch is something truly personal: you wear it on *your* body. With smartphones and computers everywhere, nobody really needs a watch to tell time. Wearing a watch is a deliberate choice, one I like to carefully consider.

![Some of my watches over the years](https://willem.com/global/images/5cbf46c5e43e.webp)

Over the years I have worn many different watches and each of them has its own story and reason. Yet none of them felt like a perfect fit *for me*.

You'll be surprised how hard it is to *precisely* define what you *really* want. I took my time (pun intended) to distill a list of features that would define *my perfect watch*:

- **analogue display:** like the natural passing of time I like the hands of a watch to sweep by as time progresses

- **simple:** devoid of any unnecessary distractions I like my watch to be (visually) focussed on its function

- **autonomous:** in line with how I value my own independence, I like my watch to be capable of running all by itself, without the need to charge or wind it manually

- **waterproof:** as I don't fear rain while riding_my_bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) and as I do like to swim, my watch should be capable of dealing with water, too!

- **day and night:** with a young kid, the distinction between night and day becomes fuzzy every now and then.., any bearing the watch can provide in total darkness is welcome!

- **timeless:** in a world where things_become_obsolete_rapidly (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/), I love to think of my watch as something more timeless, like a piece of art

- **inconspicuous:** I wear my watch for myself, I don't want it to attract any unnecessary attention

- **honest:** it should be true to the nature of the material, I don't like to hide things behind layers of superficial markup

## ochs und junior

Then I stumbled upon ochs_und_junior (https://www.ochsundjunior.swiss), a small watch company from Switzerland. Founded in 2006 by Ludwig Oechslin, Beat_Weinmann (https://www.instagram.com/beatweinmann/) and Kurt König, they undertook an intense construction and design process to create their watches. While the company is in a state_of_transformation (https://www.ochsundjunior.swiss/news/) at the moment, they're still producing the watches that earned them their reputation.

![Ludwig Oechslin is obsessed with reducing the number of parts - he is described as a living legend](https://willem.com/global/images/2dbe726ea482.webp)

Their wrist watches use fewer parts to deliver mechanical complications, displaying other things than just the time. The watches are designed by Ludwig_Oechslin (https://en.wikipedia.org/wiki/Ludwig_Oechslin), a renowned, recognised and awarded watchmaker, inventor and designer. He got widely known for his restoration of the astronomical clock in the Vatican Library, known as the Farnese Clock, and for the time he spent as Director of the International Museum of Horology in La Chaux-de-Fonds, Switzerland. He is obsessed with reducing the number of parts because simpler mechanics are more reliable and easier to manufacture and service.

This focus on removing unnecessary complexity is something that I totally value. It is something that I try to attain in everything I do, design and work with. Like my coffee_button (https://willem.com/en/2020-03-25_designing-and-implementing-a-micro-payment-system/) or my road_bike (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/). I knew immediately that this was the company that would be able to build my watch.

After contacting the company, we had several phone calls and email exchanges to discuss my ideas. Over the years they have made some very spectacular examples, yet I wanted to stay true to my wish list. When the sky is the limit, it's hard to stay on the ground - yet that's what I tried to do when creating this  understated piece of art.

![Timeless timepiece: an annual calendar watch, custom made to my specifications](https://willem.com/global/images/ca9e9c0d6a12.webp)

My watch is made from titanium (which is light and durable), it's small (36MM diameter), it's waterproof (with a screw-down crown), the hands are luminous (visible in the dark), it has an automatic movement (not requiring batteries or manual winding) and its colours are true to the material (no painted surfaces).

The watch is a so-called "annual calendar", which means it can show the correct date with only one manual adjustment per year (during February). An annual calendar "knows" the difference between short and longer months. In haute horlogerie this is a higher end complication, sometimes requiring more than hundredth additional parts. Thanks to Oechslin's brilliant design, this watch only uses only 3 additional parts!

![The annual calendar complication using just 3 additional parts](https://willem.com/global/images/c0fbb2277584.webp)

![How to read the time, month, date and weekday](https://willem.com/global/images/dc745e2a8599.webp)

As an hidden luxury (it is only noticeable by the wearer), the watch is made lighter by milling away any excess material. While some people prefer a certain heft to communicate (material) value, I appreciate lightweightness as it improves comfort (especially when you're active).

![Milling away material to make the watch lighter](https://willem.com/global/images/5b2d2c137ac6.webp)

![Before (left) and after (right) milling away material](https://willem.com/global/images/d198d78af6bb.webp)

During the design process I remained in contact with the company. Every now and then I received images from the workshop, keeping me in the loop as things progressed.

![The 3D model of my watch case](https://willem.com/global/images/bd97c01919d4.webp)

![The super luminova makes the watch clearly readable in darkness](https://willem.com/global/images/483fbca4a00a.webp)

![While the subtile contrast allows my watch to fly under the radar during the day ](https://willem.com/global/images/14e7b7f637fc.webp)

![The "maestro" himself working on my watch - this feels like I have picture of Rembrandt painting my very own Nachtwatch! ](https://willem.com/global/images/cfe479fe9996.webp)

![Before leaving Switzerland the watch is tested and calibrated to make sure it is working well](https://willem.com/global/images/b4ea32ba8b5e.webp)

## Delivery day!

After waiting patiently for a few months, I received my watch per mail last month. Normally you're welcome to pick it up in person, but due to all the COVID-19 restrictions I opted for parcel delivery. If you hate paying (import) tax you might want to reconsider this... the Dutch customs' office wanted their part of my piggy bank before releasing my package for import.

![My son offered an helping hand while importing his future heirloom piece](https://willem.com/global/images/e59d50ccf678.webp)

![It's all about the product, no money or energy is wasted on superflous boxes or booklets - I love this](https://willem.com/global/images/08e6115a13bf.webp)

![Like a kid in the candy store - happy me!](https://willem.com/global/images/7e57559d1dbf.webp)

![The natural colours work well with light](https://willem.com/global/images/9e152553584c.webp)

![The sturgeon leather strap is waterproof by nature](https://willem.com/global/images/518142ba9fb0.webp)

![The case is milled with extreme precision, making it unnecessary to hide mistakes by polishing (as there aren't any!)](https://willem.com/global/images/b8be900406cb.webp)

![The curved case design is very comfortable on the wrist, as there are no sharp edges sticking in your arm](https://willem.com/global/images/af326b0723b7.webp)

![The dial is spectacular in an "under the radar way" - there is an incredible depth that is hard to capture in a photo (I tried anyway!)](https://willem.com/global/images/f3175a9e5dd7.webp)

![The 36MM size is perfect on my wrist](https://willem.com/global/images/0995265aa49e.webp)

![Changing the strap is easy and transforms the watch - because the watch itself is rather neutral](https://willem.com/global/images/ef4d1a42bd62.webp)

![The black fabric strap features a Kevlar core making it extremely durable and strong - perfect when riding your bike!](https://willem.com/global/images/fac8ba7e8757.webp)

![The carbon buckle hardly adds any weight](https://willem.com/global/images/8592aa859652.webp)

![Different colours have different effects on the watch - here you see it with a 'tan'-coloured fabric strap](https://willem.com/global/images/9384fb6ebcd6.webp)

![In line with the "LIGHT"-case of my watch, the buckle of this strap is milled to remove any unneeded weight](https://willem.com/global/images/d2c35a3b5470.webp)

## Conclusion

While there are many reasons to choose a watch, I wanted my watch to be perfect *for me*. In a fast moving world where things get replaced rapidly by newer fads, spending time and money on a timeless timepiece felt right.

Don't be afraid to make decisions for yourself. Wear the watch you want to wear. If it doesn't exists, don't panic. Thanks to the wonders of our connected world, you can find people that will help you!

![Wear the watch you want - if it doesn't exist you can create it!](https://willem.com/global/images/a8807f4b67b5.webp)

---

## Replacing a Shimano shift cable

*Fixing the cargo bike after hunting for bears* · 2020-11-22 · https://willem.com/en/2020-11-22_replacing-a-shimano-shift-cable/

Last week my son and I where looking for bears in the local park... a child's fantasy is priceless! Unfortunately, during some off road riding with our cargo bike, one of the cables got tangled up with a sturdy branch! Our wounded carbo bike was in need for a repair!

## Looking for bears

One thing I love about cycling (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) is that you experience the world around you very intensely. You smell nature, you hear the birds and you see so much more around you. It's no coincidence then, that I enjoy going out on adventure with my son using our cargo_bike (https://willem.com/en/2019-06-25_assembling-a-cargo-bike/).

![Looking for bears... in the local park - priceless adventure!](https://willem.com/global/images/14701bce2442.webp)

![Our adventure machine - the Babboe Big cargo bike](https://willem.com/global/images/6cec290ce7de.webp)

One of the cool things my son and I sometimes do, is to ride the cargo bike off road... Going through mud and bushes adds to the adventure! This time the bushes fought back! A sturdy branch got stuck right between the shifter cable underneath the cargo bike's frame! It pulled the entire cable from the frame, causing it to tear apart!

![My small colleague inspecting the damage to the cargo bike](https://willem.com/global/images/709aad539c10.webp)

![The shifter cable underneath the cargo bike was pulled apart by a branch...](https://willem.com/global/images/2e0235d40364.webp)

![Oops... this is not right!](https://willem.com/global/images/179b3a671c8b.webp)

## Replacing the shifter cable

Fortunately, I have collected all the necessary tools to repair bikes myself. It's a great thing to invest in some good tools *and* to learn how to use them. The cargo bike is equipped with a 7-speed Shimano Nexus gear hub, it's relatively easy to service.

![The Shimano Nexus 7-speed gear hub - the cable is fixed using a bolt, inside the red circle](https://willem.com/global/images/c48d5ebf3aea.webp)

To remove the (damaged) shifter cable you should place the shifter in its first gear, loosening tension on the shifter cable. Then you can use your finger (or a screw driver) to push the cable bracket at the gear hub back. This will allow you to pull out the bolt that holds the cable.

![The bolt holding the gear cable pulled out of the bracket at the gear hub](https://willem.com/global/images/2993f11ce454.webp)

![Loosening the bolt is easily done using two pliers](https://willem.com/global/images/c8b1618b281b.webp)

Remove the bolt from the cable's end point and keep it in a safe place (as you'll need it later!). To remove the cable you should open the shifter's handle. Shimano's integrated steer shifter is closed using two tiny screws. If you remove them, you should be able to remove the cover plate. This will allow you to see (and loosen) the other cable's end point.

![The endpoint has a fixed piece of metal on it - pulling it out can therefore only be done in one direction](https://willem.com/global/images/37a9182a24b4.webp)

![Pull the damaged cable out, all the way](https://willem.com/global/images/e2fb5fee2592.webp)

Finding yourself a new cable isn't hard, most (local) bike shops will have them in stock. Mind you, though, if you're working on a cargo bike or a tandem you'll need a longer than standard cable! It's a good idea to measure the exact length of the cable using the old cable.

![New inner and outer shifter cable](https://willem.com/global/images/c102442c70d7.webp)

![Cargo bikes and tandems require longer cables! If your local bike shop doesn't sell them, you can find them on Amazon](https://willem.com/global/images/03baf5e21f6a.webp)

The first step is to measure and install the new outer cable. Make sure to include enough clearance around your steer. If the cable is too tight, it will intervene with steering! Once you have installed the outer cable, you can install the inner cable. Start at the handle bar and work your way through all the tiny holes and cable caps.

![Install the new shifter cable starting from the handle bar](https://willem.com/global/images/09989dc79f7d.webp)

![Make sure you include + install all the end caps as they prevent moisture and dirt from entering the outer cable(s)](https://willem.com/global/images/95082c8e5318.webp)

![If things work out well, the inner cable will come out of the outer cable at the rear hub](https://willem.com/global/images/b13a07126ced.webp)

Don't immediately cut the cable, yet. You should first try to install it and see if everything works. After installing the bolt and fixing it to the rear hub bracket, you should look for a yellow marker. The yellow marker is an easy way to see if the shifter cable is properly tensioned. The two yellow parts of the marker should align when you have selected the fourth gear on the shifter.

![Properly tension the Nexus 7-speed gear hub by aligning the two yellow lines when you have selected the fourth gear](https://willem.com/global/images/8953b0eb5b15.webp)

It is my strategy to get it 'roughly right' using the bolt, and finetune the alignment using the special alignment bolt near the shifter at the handle bar. Once you're confident that it is properly aligned, you should do a little test drive. If all works well, it is safe to cut the cable and install the end cap, which prevents the cable from unraveling into individual threads.

![Don't forget to put an end cap on the cable to prevent it from unraveling ](https://willem.com/global/images/f94472545d61.webp)

![New shift cable installed and ready for new adventures!](https://willem.com/global/images/153ebf8d45eb.webp)

## Conclusion

Sometimes adventure takes its toll on your gear... our cargo bike suffered some damage to the Shimano shifter cable. Luckily, repairing the bike wasn't hard with the right tools and parts.

Investing in proper tools (and learning how to use them) is a good idea. I was able to repair the cargo bike for as little as € 12. Being able to do simple repairs yourself is really a great asset for all adventures!

---

## The joy of a simple laptop

*Surface Laptop Go with Windows 10* · 2020-11-03 · https://willem.com/en/2020-11-03_the-joy-of-a-simple-laptop/

Every now and then I switch my gear to keep a tap on what is going on outside my regular tech habits. You’ll be amazed by what you can learn from trying out different things. This week I had a chance to test the Surface Laptop Go running Windows 10. Quite frankly, it amazed me!

## Surface Laptop Go

As part of the popular Surface line-up, Microsoft introduced the Surface Laptop Go. It is a small, simple laptop that does not have any particular feature that stands out. On paper, its spec sheet probably won’t blow you away. As it turns out though, *that* is actually a good thing.

![Surface Laptop Go](https://willem.com/global/images/91bb997949a5.webp)

The thing with modern hardware is that far too often people look for fancy features. Things to brag about, things to show off. “I’m better than you” and “look what I can do?!” Flagship devices, including smartphones, are introduced like rock stars on main stages. But chances are that you are not a groupie nor a fanboy.

Like living with a rock star is probably not without practical difficulties, ultra high end devices often have their hidden flaws. They may overheat, behave unpredictably or demand a high price for their presence. If you’re looking for an everyday companion, then you may prefer a little less “rock starrieness”. The Surface Laptop Go might then just be what you’re looking for!

![The Surface Laptop Go is a nice, compact laptop with no frills](https://willem.com/global/images/7da4fd2c9d4f.webp)

![Opening and closing the laptop gives you a solid feeling of its sturdiness and build quality](https://willem.com/global/images/ae013303e31f.webp)

![The laptop is made from aluminium and plastic, moulded together as a singular piece](https://willem.com/global/images/f348850ea45f.webp)

Handling the laptop quickly gives you a sense of how well it’s built. It is sturdy and solid, yet without excessive weight. It strikes a very nice balance that gives you the confidence to use it wherever you go.

![Using the Surface Laptop Go, on the go - hence the name!](https://willem.com/global/images/67586ee7b5e8.webp)

Unlike the multi thousand euro high-end computers, the relatively affordable price tag of the Surface Laptop Go (starting at € 629) does not immediately require you to opt for a second mortgage. It makes everything easier as you’ll feel more comfortable to use it: it’s a tool, not a precious jewel!

## Using it

I have been using the Surface Laptop Go with Windows 10 as an alternative to my beloved_little_tablet (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/) that runs free software. I try different devices and operating systems on a regular basis to maintain an up to date understanding of “the other side of the fence”. This goes for my computers, but it_applies_my_smartphone_too (https://willem.com/en/2018-10-09_using-a-budget-android-as-main-smartphone/). You must never limit yourself to any particular platform, it is really useful to keep an open mind about the different options out there. My dad used to say: “Check out the menu everywhere, but enjoy the home cooked diner!”

My daily routine involves anything from handling email, reading articles, writing blog posts, programming, server management and the occasional_hacking (https://digidef.nl/). I work from home *and* from my office in Amsterdam, for which I use a bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) to go hence and forth. For practical matters, I love my computers to be portable, preferably so they fit in my_weather_proof_backpack (https://willem.com/en/2018-12-22_business-in-a-bag/).

Sharp eyes among you may have spotted the Windows 10 screenshots in the past few blog posts, involving some_rsync_magic (https://willem.com/en/2020-10-30_how-to-use-rsync-to-make-backups/) and some_programming (https://willem.com/en/2020-10-31_increase-traffic-to-your-blog-with-a-rss-feed/). Getting along with Windows 10 required some tinkering. The Surface Laptop Go comes with Windows 10 in S mode. Oh, boy.

![Windows 10 Home in S mode](https://willem.com/global/images/c988abd0e4a3.webp)

Running Windows 10 in the so called “S mode” means it is locked down. Not even Microsoft’s own apps work well, like I experienced when I tried to use the Windows Terminal:

![Error 0x800711c7 when launching ‘powershell.exe’ - a friendly reminder that you’re running in S-mode, stupid...](https://willem.com/global/images/15bf4ce1e09b.webp)

The main advantage of Windows 10 S mode is that you are better protected against threats and malware. I get it, it’s just like you can’t crash your car if it doesn’t drive. Switching out of S mode is possible, but you won’t be able to return... ever! Like being expelled from the nest, the S-nest.

![Switch out of S mode is possible and “free of charge”](https://willem.com/global/images/14c48f0b2f0c.webp)

Somehow this feels a little weird, I can only hope that Microsoft finds a better way to provide a secure Windows experience instead of this “do or dare” ultimatum. But credit to where it’s due: once you’ve left the S mode, pretty much anything is possible with Windows these days!

![Enabling the Windows Subsystem for Linux (WSL) ](https://willem.com/global/images/65d81c39a04f.webp)

![Installing Debian Linux from the Microsoft Store is as easy as one click - I like that](https://willem.com/global/images/d28fcec71d4f.webp)

If you take the time to configure Windows 10, it is quite the capable operating system. I quickly found my way when I set out to do my work. Windows 10 is good in a predictable, professional way.

Using the Surface Laptop Go reminded me of the simple joy of using a laptop as a tool. It just works. Open it, do some work, close it and repeat. Microsoft nailed the Windows 10 experience on Surface, software and hardware are nicely integrated (in a way that reminds me of Apple at their finest).

![Unlocking Windows with your fingertip](https://willem.com/global/images/dc6c8ebf462a.webp)

A nice example of the refined nature of the experience is the fingerprint sensor. The computer boots in an unbelievable speed, to await your touch to unlock it. A subtle but clearly visible clue is given: the power button lights up. Touch it “et voila”, you’re ready to go.

![A plant, a laptop, some coffee](https://willem.com/global/images/fbf1ade29b85.webp)

Working with the laptop is a charm. It operates in cool silence, allowing you to fully focus on your work. The thin bezels around the screen give it ample space for your work. Maximising the canvas for your creativity, while preserving the portable footprint.

![The keyboard is like candy - sweet and soft with enough bite, not too jelly, flat or fuzzy](https://willem.com/global/images/5a3bf8fb70cf.webp)

The keyboard of this laptop is fantastic, the keys feel extremely comfortable. Don’t be fooled by the plastic appearance, there is nothing flimsy about this keyboard. The keys are surrounded by aluminium which provides a nice feeling when you rest your palms next to the trackpad.

![The multi touch trackpad works well with Windows 10](https://willem.com/global/images/09e712d9c859.webp)

The spacious trackpad is another example of integrating hardware and software. Microsoft added support for multi touch gestures in Windows 10. It’s a warm welcome for those of us that have enjoyed this on Apple macOS for so many years.

## Conclusion

The Surface Laptop Go stands out for the right reason: it is a perfect everyday companion. While there are cheaper third party alternatives available, I can’t help but feel that none of them offer the same level of integration of hardware and software. This refinement makes all the difference, worth every penny.

Using Windows 10 to get work done isn’t all that bad, that’s high praise from someone like me that likes to build_his_own_operating_system (https://willem.com/en/2020-03-09_making-my-own-tablet-os/). Working with different systems reminds me to keep an open mind, there are good things outside my regular habits!

---

## Increase traffic to your blog with a RSS feed

*How to setup RSS/Atom using NodeJS* · 2020-10-31 · https://willem.com/en/2020-10-31_increase-traffic-to-your-blog-with-a-rss-feed/

Writing for my blog has been a lot of fun, I receive messages from all of the world about the things I like. Traffic is growing, every month more readers are finding their way to my blog. This week I received a request to support RSS feeds on my blog. I wondered, are RSS feeds still relevant today?

## RSS Feeds

With RSS (or "really simple syndication") users and applications can access updates to websites in a standardised and computer-readable format. This allows them to combine updates from many different websites into a single news aggregator, basically like a personalised "newspaper".

Before social media became hugely popular, RSS feeds where widely used to share links and content between different news and blogging sources. Subscribing to a website's feed is similar to "following a thing" on social media, you'll automatically receive updates.

The great thing about RSS is that it is distributed, there is no single authority (or big corporation) that controls the content or the platform.

## Decline of RSS usage

As social media has surpassed RSS feeds in popularity, support for RSS has been declining. Platforms such as Twitter and Facebook, allow single, simple, users to share content. This is far easier than setting up a blog with a corresponding RSS feed. The bulk of social media content is then moderated and filtered through algorithms, coupled with advertising, to be turned into a money generating mass media platform.

## Resurrection of the e-mail newsletter

When Google Reader closed its doors, some_bloggers_lost_6.500_RSS_subscribers (https://www.dannybrown.me/2015/03/12/does-your-blog-really-need-to-provide-an-rss-feed-anymore/) overnight! If you think about maintaining contact with your audience, email makes sense. For most of us, email is interwoven with our daily routines. We check it regularly and have access to our mail from our mobile devices. If done properly, sending out email newsletters is a viable way to stay in touch with your audience. Heck, it's no surprise that people_describe_this_to_be_a_news_media_renaissance (https://medium.com/the-mission/how-on-earth-did-email-newsletters-become-popular-again-3fcee1addc7e).

## Why still use RSS feeds?

In the era of social media and newsletter resurrections one may wonder why you would still support RSS feeds? I think the main reason is that it takes very little effort to do it right, and it (still) provides value.

People, but perhaps more importantly, computers can use RSS feeds to automatically fetch updates from your blog. Popular newsletter_software_can_use_RSS (https://mailchimp.com/features/rss-to-email/) to automate the newsletter creation process. By supporting RSS on your blog, you'll make it easier for others to send newsletters *for you*.

Did you know that other people use RSS feeds to automatically tweet about *your* content using modern services like IFTTT (if this then that)? You should check out this_article (https://www.wpbeginner.com/wp-tutorials/how-to-automate-wordpress-and-social-media-with-ifttt/). In short, RSS is a great way to support content automation. Even if *you* don't intend to do this, you should consider supporting others with their efforts by supporting RSS.

Same goes for software like narrow casting (or digital signage), where headlines can be automatically fetched from your website. RSS_feeds_are_widely_supported_by_digital_signage_software (https://duckduckgo.com/?q=digital+signage+rss) to generate news tickers.

With modern RSS reader apps like Feedly (https://feedly.com) normal users can overcome many of the problems of the original RSS reader apps: overwhelming information overload. At this moment they serve a niche as they are less popular than social media, but this niche can be an important one (quantity vs quality). Perhaps one day there will be a RSS-feed renaissance, just like the email newsletters.

![Modern RSS reader apps offer advanced features to filter and organise different feeds - making you like a ZEN information overload master .... of sorts](https://willem.com/global/images/f423a61315b1.webp)

## Adding RSS support to your blog

If you're blogging with popular blogging software, like WordPress, chances are that you already have RSS_support_build_in (https://wordpress.com/support/feeds/). Try adding "/feed" to your blog's address, it may pop up automatically. Good for you! If you're using custom blogging software, like I do, you may need to implement RSS feeds yourself.

## Implementing RSS support yourself

Technically, RSS is nothing more than a dialect of XML. It is a file that contains your content in a standardised, structured way. The RSS_specification_is_open (https://cyber.harvard.edu/rss/rss.html) and holds very little secrets as it is well documented.

This blog is managed using custom software that I developed for my customers. My software generates so called "static HTML pages" from a dynamically managed back-end that runs on NodeJS. This means that I needed to find a way to generate the RSS feeds from my static site generator, along with the HTML files. Now, it's time to get technical! :-)

![The popular NodeJS module "feed" makes content syndication simple and intuitive](https://willem.com/global/images/efdaa472a270.webp)

It is always a good idea to check out existing implementations of open standards before you'll set out to "reinvent the wheel". Chances are that somebody already did all the hard work. But moreover, choosing a well tested package over a self built implementation (with undiscovered bugs and flaws) can be  smart thing to do. For NodeJS there is the "Feed"_module (https://www.npmjs.com/package/feed) that makes it easy to generate RSS, Atom and JSON feeds.

![Implementing RSS, Atom and JSON feeds on my blog using NodeJS and the Feed module](https://willem.com/global/images/b72d1c6597a5.webp)

Using the Feed-module (https://github.com/jpmonette/feed) I added a function to my static site generator called "generateFeeds()" that implements the code necessary to generate RSS, Atom and JSON feeds. Its main function is to map the different fields as specified in the RSS feed structure to those of my website's object model. Its not hard to get right if you already have a descent object model with references to to fields like an image URL, a post's title and publishing date.

![Configuring NGINX to redirect common feed URL's to the generated RSS files](https://willem.com/global/images/d21d6e79f505.webp)

I figured that it would be a good idea to setup my webserver, NGINX, to automatically redirect common feed URL's to the generated RSS files. This way my custom RSS-implementation is easier to discover by other people and computers; as it mimics behaviour of popular blogging software.

You can check out the result yourself, by using any of the following URL's:

- https://willem.com/feed/

- https://willem.com/blog/feed/

- https://willem.com/blog/feed.rss (RSS)

- https://willem.com/blog/feed.atom (Atom)

- https://willem.com/blog/feed.json (JSON)

## Conclusion

Sometimes it makes sense to have a second look at yesteryear's technology. While RSS feeds may not be as popular as they once were, they can still provide value to your blog.

As implementing an RSS feeds is easy and maintaining it can be fully automated, there is really no reason why you should not consider adding it to your blog. As a bonus you'll be ready for the next renaissance!

---

## How to use rsync to make backups

*Explaining a powerful file transfer tool* · 2020-10-30 · https://willem.com/en/2020-10-30_how-to-use-rsync-to-make-backups/

It is very important to make backups of your data, as you never know when disaster strikes! One powerful, cross platform, tool to help you achieve this is 'rsync'.  In this post I'll explain why rsync is useful and how you can use it to set up your own backups.

## Rsync

Ever since it was originally created in 1996 (by Andrew Tridgell and Paul Mackerras), rsync has grown to become a standard utility that is available on popular GNU/Linux distributions, Apple macOS, FreeBSD, NetBSD, OpenBSD and (through Cygwyn or WSL) on Windows.

### Key features

Rsync is typically used for synchronising files and directories between two different computers. It can use SSH to connect to another computer and to transfer files. In addition to remote computers, you can use rsync to synchronise to external hard drives and network attached storage (NAS) drives. Rsync is popular because:

- It is licensed under the GNU_General_Public_License (https://en.wikipedia.org/wiki/GNU_General_Public_License), making it **free software**; both free as in "free speech" and "free beer"

- Rsync's algorithm is a type of delta_encoding (https://en.wikipedia.org/wiki/Delta_encoding) meaning that it minimises data / network traffic as it **only copies the parts of the files that have changed**. In addition, data can be compressed to even further optimise the file transfer traffic.

- It can **resume interrupted transfers by using checksum verification**. This allows rsync to detect errors when copying a file from one place to another. If two files differ by just one bit, their checksums would become different. Checksum verification is an efficient way to check that every byte was properly transferred to its destination.

## Installing rsync

If you're on GNU/Linux, *BSD or Apple macOS you probably already have rsync installed. If you're on Windows you can look_at_the_Windows_Subsystem_for_Linux_or_WSL (https://docs.microsoft.com/en-us/windows/wsl/install-win10) to get access to all the standard GNU/Linux tools. Alternatively to WSL, you can use Cygwin (https://www.cygwin.com/) to install the large collection of GNU and Open Source tools on Windows.

## Typical usage of rsync

Using rsync is done from the command line, or terminal. You run the 'rsync' command followed by (optional) flags, a source path and a destination path.

![Typical rsync command, showing the -arvz flags, a My-Source-Directory and My-Remote-Directory on a server](https://willem.com/global/images/7a7bafa71781.webp)

Using the **-arvz** flags you configure rsync to:

- **a**: "archive" mode which preserves permissions, created and last updated times

- **r**: "recursive" mode enables rsync to recursively synchronise subfolders inside the source/target directories

- **v**: "verbose" will enable more verbose output on the console, allowing you to track its progress, line by line

- **z**: "compress" will enable the compression of data as it is sent to the destination machine, which reduces the amount of data being transmitted, useful over slow or metered connections

- **--delete**: will enable files to be removed on the remote side if they are removed from the source directory. You should be careful with this option!

There are many other flags and options which allow you to customise the behaviour of rsync to your needs. You should check out the man_page_for_rsync (https://www.man7.org/linux/man-pages/man1/rsync.1.html) for a full list of all options.

## How to use rsync to backup files

In the following example I'll use rsync to copy a directory ("Sample-Files") on my Windows 10 desktop to a remote server. I use WSL_on_Windows (https://docs.microsoft.com/en-us/windows/wsl/install-win10) to have a working Debian_GNU/Linux environment in my Windows Terminal.

![Using rsync on Windows 10 using WSL](https://willem.com/global/images/0c7ba3c82117.webp)

Let me explain the command that I use:

- **rsync** is the name of the program that I use

- **-arvz** are the flags that configure rsync to make an archived backup, including subdirectories and transfer data using compression

- **/mnt/c/Users/mail/Desktop/Sample-files/** is the path to the source directory as seen through the WSL directory structure. It points to my Windows desktop (which is on the C: drive)

- **willem @ store.willem.com:./Backup** is the destination, which you should read as "user willem at the server 'store.willem.com'", and "on that server" use the "Backup" folder inside the "./" home directory of the "willem user". 

If you execute this command for the first time, the remote server's cryptographic fingerprint is shown. This is used to ensure that you're talking to *your* server. This prevents hackers to impersonate *your* server without you noticing (as the fingerprint is unique to your server. If rsync detects a change in this fingerprint, it will refuse to transfer files. This is critical as copying your backups to a random remote destination would be a potential risk for data leaks!

You're asked for your password if you're connecting over SSH without key-based authentication. This is fine if you intend to run your file transfer manually, but if you intend to automate transfers you might want to setup_key-based_authentication (https://www.redhat.com/sysadmin/configure-ssh-keygen) (using the handy command "ssh-copy-id"). You're computer will then be able to securely login to the remote machine without the need to enter a password manually.

![Using rsync to copy files from my Windows 10 desktop to a Debian GNU/Linux server over SSH (using WSL)](https://willem.com/global/images/c497fa4abfcc.webp)

If rsync can connect successfully it will then continue to determine which files need to be transferred. If you have set the "-v" flag, you'll see the progress line by line. After the transfer is complete rsync will exit with a summary.

## Incremental transfers

Rsync's party trick is that it fully supports incremental data transfers out of the box. If you have some new files and then run the same rsync command again, it will only transfer those files that are in need of transfer.

![After adding the Milky Way photo to my sample files I run rsync again to use have it transfer my files incrementally, only copying the new file](https://willem.com/global/images/d76217c9a685.webp)

You can see in the screenshot that rsync automatically detected the new file. It only transferred that file to the remote server. Saving bandwidth, time and processing power. It works with new files and files that have been updated.

Optionally you can use the "--delete" flag to propagate local deletes to the target directory, creating a perfect mirror image of the local file structure. For backup purposes you might consider skipping this (as you might remove files unintentionally).

## Automating transfers and backups

Because rsync is "just a terminal command" you can easily use it inside your own scripts. Think of a script as a collection of rsync commands that comprise a set of "source" and "destination" links between your files and their respective backup locations.

You can schedule your script to be executed automatically at a given day of the week and time of the day. On GNU/Linux, *BSD and macOS you can use **cron** to do this. On Windows you can use the "Task Scheduler" app.

## Conclusion

With rsync you can transfer files from your computer to another system efficiently, securely and incrementally. It can be a crucial tool in your backup schedule.

It is free and widely available. Its performance and reliability are widely established. There really is no excuse for why you shouldn't setup your backups properly!

---

## Rescuing photos from a crashed iMac

*Using advanced tools to read files from a faulty disk* · 2020-10-15 · https://willem.com/en/2020-10-15_rescuing-photos-from-a-crashed-imac/

This week I received a message from someone with a iMac that crashed. It contained more than 50.000 photos, covering two decades of personal history. As there was no backup, it was up to me to attempt to safe as much as I could. Could I possibly recover the personal photos?

## iMac

The Apple iMac is an impressive all in one computer. The computer is integrated into the display. All components are closely packed together using tiny screws, tape and magnets. It’s a challenging computer when it comes to repair (and recovery).

![Crashed iMac on my desk - ready to be opened](https://willem.com/global/images/510971f83c8d.webp)

The iMac did not boot any more, likely the result of an hardware failure as the standard Apple (software) recovery system did not work either. This often means trouble, as I_have_learned_the_hard_way (https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/) after some handy work on my own iMac...

![Some iMacs require a special cutting blade to cut through the adhesive tape holding the glass on to the Aluminium frame](https://willem.com/global/images/5a6b87888fc6.webp)

Depending on the exact iMac model, you might need a special blade to remove the display from the enclosure. It is the only way to access the components inside the computer. To recover lost files (and photos) you’ll need to find the hard disk (or SSD).

![Removing the glass panel using suction caps](https://willem.com/global/images/c5655a533b15.webp)

This particular iMac has a glass panel that is held on to the aluminium frame by (strong) magnets. You can remove the panel using suction caps. Be careful with the glass panel to prevent it from cracking. You don’t want to hurt yourself!

![The display is fixed using Torx screws - it can be a little tricky to remove the screws as the magnets easily catch them!](https://willem.com/global/images/ae8c5ffaf3e9.webp)

After you have removed the glass panel you should be able to remove the display once you have removed all the Torx screws. Take your time to do this as it can be a little tricky with the strong magnets close to the screw holes.

![Be careful when lifting the display as it has multiple cables attached to the main logic board](https://willem.com/global/images/67230f56fa7d.webp)

Once the screws are removed you should be able to lift the display with your fingers. Be careful as the display is connected to the main logic board with multiple cables. Once the display is removed you should have a clear view on the iMacs innards.

![The iMac’s innards are visible after removing the display](https://willem.com/global/images/720262fa53d4.webp)

For my attempt to recover the personal photos from this iMac I was only interested in the hard disk. It’s an easy part to recognise, usually big and bulky. You can recognise it by its rectangular shape and green chip. After I removed it, I closed the iMac again to return it in its current condition.

![The hard disk inside the iMac - containing the personal photos](https://willem.com/global/images/b68f125ad627.webp)

## Recovering photos from the hard disk

If you cannot get your computer to start any more, it does not necessarily mean that everything on it is lost! Very often (parts) of the computer’s memory are still functional. You can compare it to personal injury: although you cannot walk (easily) with a broken leg, you might still be able to move when you get a little help from someone. If the computer contains valuable data, it can be a good idea to do an attempt to recover files.

![Connecting the disk to a SATA-to-USB convertor](https://willem.com/global/images/06d2b9e325bc.webp)

![This chip is was originally part of a external USB disk drive - you might have one around that you can use for this ](https://willem.com/global/images/480714b82b47.webp)

Using a standard SATA-to-USB convertor chip (that I once removed from an external hard disk’s enclosure) you can connect the disk to another computer. This enables you to read from the disk, even if the operating system on the disk is broken. I have used_this_strategy_before (https://willem.com/en/2018-10-16_rescuing-files-from-a-broken-harddisk/) to rescue photos from a broken laptop.

![Connecting the salvaged disk to another Mac](https://willem.com/global/images/73384ebdb549.webp)

The best thing you can do is to connect the disk to a computer running the same operating system. Disks are formatted into data structures that comprise a “file system”. These file systems differ per operating system. Some file systems can be read by different operating systems, while others can’t. By using another Mac that I borrowed from my brother, I knew that the operating system would be able to understand the filesystem on the salvaged disk.

### Go for the gold, first!

If the disk is not (entirely) defect, you might be able to read its contents using the other computer. You may be tempted to ‘click around’ and browse its contents. But you must focus on recovering the most important files first! You don’t know how long the damaged disk will continue to work - it may die any second!

As I am familiar_with_Apple_Photos (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/), I know where the (original) photo files are kept. This allowed me to optimise my strategy, directly attempting to copy the personal photos. Instead of using the macOS Finder (or Windows Explorer), I prefer to use terminal commands to copy files from unreliable sources.

With a tool like ‘rsync’, you can copy directory structures just like you would normally do. But its advantage is that it’s able to skip unreadable files and it can ‘resume’ copying if it is ever interrupted. I started the command and simply hoped for the best.

![Reading files from the salvaged disk - if you understand Dutch you’ll understand the personal nature of these photos (‘bevalling’ means birth)](https://willem.com/global/images/e1139f08b04c.webp)

Things were looking great for the first years of photos, one by one the photos where copied onto the “rescue computer”. Depending on the disk’s condition, copying can take a long time - much longer than it would normally take. You should pay attention to the hard disk’s sound, if it starts making weird noises you might be running into trouble...

![Ohhhh no! Trouble! Read errors while copying photos!](https://willem.com/global/images/a7ca5763c004.webp)

Suddenly the disk started to make weird rattling sounds, the copying stalled and errors appeared on my terminal window. I’ve hit a rough part on the disk. For a few moments I allowed the disk to attempt to read the damaged files, but to prevent it from damaging further I stopped the copy process.

![Running macOS “First Aid” from Disk Utility](https://willem.com/global/images/55594ba1a852.webp)

Using the Mac’s Disk Utility app I attempted to do a “First Aid” file system repair. Perhaps that the disk’s file mappings could be restored. Because I use “rsync” to copy the files, my next attempt would continue where it was previously interrupted. Unfortunately the First Aid did not repair the disk, the photos from September 2017 where still unreadable.

The next thing I tried was to tell my copy command (rsync) to skip the photos from September 2017. You can use the “--exclude” option from rsync (https://linux.die.net/man/1/rsync) to do this. Perhaps that the bad sectors on the disk where only affecting those photos, newer photos could possibly still be recovered.

![It doesn’t hurt to be nice to the damaged disk... “pleasssssse little disky... give me the photos!” - But don’t touch the chips!](https://willem.com/global/images/3dcfc02fcda8.webp)

Guess what? It worked! Copying continued without any trouble once I excluded the damaged photos from September 2017. Ultimately I was able to rescue all other photos! Not a bad yield: only one month of photos was unrecoverable from a collection of about 20 years!

![Ultimately I was able to rescue all other photos!](https://willem.com/global/images/931ba8f932ef.webp)

## Conclusion

Protect yourself from data loss by making decent backups! It is incredibly important, don’t wait for (hardware) trouble to surprise you unprepared.

Just don’t panic if you do happen to be struck with some bad luck. Using the right tools you might still be able to recover files from a faulty drive. If you don’t feel comfortable doing it yourself, find someone that can help you.

---

## Riding with Omata One

*Analogue cycling computer with GPS* · 2020-09-29 · https://willem.com/en/2020-09-29_riding-with-omata-one/

For the past week I have been riding my bicycle with Omata One, a special bike computer. Its mechanical hands indicate speed, distance, ascent and time ridden measured using precise GPS data. It is fun, read along to know why.

## Cycling purism

Some ride their bike to be the fastest, but I believe there is more to cycling than getting somewhere first. Being out in the open, breathing fresh air and being free from distractions of our connected world, is what makes cycling extra valuable for me.

![Clear your mind by riding your bike in the early morning (photo taken during my morning commute)](https://willem.com/global/images/bde6686f1a2e.webp)

![Let your thoughts wonder freely while the sun rises to a brand new day](https://willem.com/global/images/019ece7431b4.webp)

Riding your bike is good for the body and soul. You can use it to commute, to exercise or both. If you’re interested in your physical performance, you might consider tracking your rides using a bike computer.

![Riding my bike as workout (photo by Niels)](https://willem.com/global/images/8a257f35c88c.webp)

Modern bike computers are technological marvels. Their digital displays show an incredible amount of data. Many of them connect to your smartphone, notifying you of incoming messages and phone calls.

Modern connectivity is great for when you need it, but the omnipresent blinking and beeping can be distracting. Not everybody will go  through the multi-layered settings menus to restrain this flow of information. This is why Omata One was created.

## Omata One

The Omata One is a bike computer that is radically different from most other cycling computers. It uses analogue hands to indicate speed, ascent, distance and time ridden. It doesn’t blink or beep, but it does collect highly precise GPS data that you can analyse *after* your ride.

![The Omata One uses four mechanical hands to indicate speed (orange), distance (outer ring), ascent (left) and elapsed time (right)](https://willem.com/global/images/1bc31f6fa806.webp)

![The dial has a lot of depth and detail, with balanced symmetry, legible typography and functional colours](https://willem.com/global/images/9be1c9ed2867.webp)

Operating the Omata does not require any touch screen interaction or fiddling with tiny buttons. The rotating outer ring functions as a simple selector:

- **arrow:** start riding your bike, data collection is automatically paused

- **zero:** finish your ride and reset the hands, your ride is saved

- **plus:** download your ride data to your smartphone or computer

![Operating the Omata One is done using the outer ring which functions as a selector](https://willem.com/global/images/619df8eca85c.webp)

![The outer ring is easy to operate with gloves on, it is precisely engineered from 6063 aluminium and has a nice tactile feel to it](https://willem.com/global/images/dcf2417c1184.webp)

![The mechanical display is actually very power efficient, providing a 17+ hours battery life. Charging is done using a standard USB-C connector on the back.  ](https://willem.com/global/images/95d793fa83dd.webp)

## Cycling with Omata

Simply start riding and the hands will move along! There is something weirdly natural to analogue indicators that set them apart from their digital counterparts. Instead of “reading” numbers you simply “see” the angle of the hands, this becomes very intuitively once you have ridden with Omata for some time.

![Legibility remains great, even if you pickup some dirt ](https://willem.com/global/images/5df01991d38b.webp)

There is great depth in the dial, which is a pleasure to look at under changing light conditions. It is beautiful but it doesn’t scream for attention. It quickly became an integral part of my bike, in a very natural way. I like that.

![Once you finish your ride you can analyse the data by connecting Omata to your smartphone or computer](https://willem.com/global/images/f4fc4c543978.webp)

Using the Omata app you can easily download your ride data. The ride is saved as an industry standard FIT file, compatible with most fitness and health apps. You can upload your ride to Strava (https://www.strava.com), import it in Cyclemeter (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/) or send it to your computer for further analyses with GoldenCheetah (http://www.goldencheetah.org/). You can use the app to connect Omata to external ANT+/Bluetooth sensors, like a power meter or heart rate monitor.

![Importing ride data is easy - with apps like Cyclemeter](https://willem.com/global/images/5ae3408670fb.webp)

![Analysing FIT files using GoldenCheetah on my tablet](https://willem.com/global/images/b32a26e839d8.webp)

## Conclusion

If you are looking for an alternative to hyper connected modern cycling computers, then you could consider the Omata One a worthy option.

The lack of distractions and the beautiful analogue display with moving hands set it apart. If you appreciate its design ethos, then the Omata is worth every bit of its premium price!

---

## Refining my tablet OS experience

*Using Surface Go 2 with 4G/LTE, Debian GNU/Linux and i3wm* · 2020-09-28 · https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/

Earlier this year I tried to create my own tablet operating system by installing Debian GNU/Linux on a Microsoft Surface Go tablet. I learned a great deal about what I like about tablets. But I still preferred my iPad Pro, mainly because of its polished user experience. This time I set out to refine my tablet software to replace my iPad.

## Linux on (Surface) tablets

If you’re thinking about installing Linux on a tablet: you’re not alone. My earlier post on installing_Debian_GNU/Linux_on_Surface_GO (https://willem.com/en/2020-03-09_making-my-own-tablet-os/) received a ton of attention. Apparently, many of you are looking for an alternative for the locked down operating systems that are usually installed on tablets (like iPadOS, Android or Windows 10S).

### Microsoft Surface hardware and Linux

As history is full of sweet irony, it’s Microsoft that actually makes some pretty handsome hardware that works well with Linux. Their Surface line-up includes different laptops and tablets. The “SurfaceLinux” (https://www.reddit.com/r/SurfaceLinux/) reddit page is is full of interesting user stories worth checking out. People are doing this and you could do it yourself, too.

![Microsoft Surface hardware is popular because it’s genuinely nice](https://willem.com/global/images/e8c8c006c48d.webp)

## First attempt: Surface Go (versus iPad Pro)

After installing_and_modifying_Debian_GNU/Linux_on_Surface_Go (https://willem.com/en/2020-03-09_making-my-own-tablet-os/), dubbed “Willem OS”, I tried to make it my main computer. If you’re a frequent visitor of my blog, you’ll know that I_have_been_using_iPads_and_tablets_for_years_as_main_computer (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/). Ultimately I deemed my first version of “WillemOS” not good enough: iPad Pro was light-years ahead when it came to a polished user experience.

From this first attempt I learned (https://willem.com/en/2020-04-14_talking-tablets-what-makes-a-great-tablet/) a great deal, it led to a better understanding of what I seek in a tablet experience. **I am looking for simple, yet versatile software to run on my tablet.**

But “simple” is actually very hard to achieve. In order to make things *really* simple, you need to seamlessly integrate hardware and software. Apple does this well, iPad Pro provides a great user experience because:

- **continue where you’ve left**: it saves everything when you put it in a bag (https://willem.com/en/2018-12-22_business-in-a-bag/), being (instantly) ready to continue when you take it out. No manual saving or (re)booting required.

- **internet everywhere**: it automatically switches between WiFi_and_4G/LTE_networks (https://willem.com/en/2017-07-31_the-day-i-killed-my-lan/), you don’t need to do anything this ‘just works’

- **any orientation and position:** iPad functions great without an external keyboard (https://willem.com/en/2020-08-11_the-best-keyboard-for-ipad/) or mouse, allowing you to use it in many different scenarios (the display automatically adjusts its brightness and white balance to match your surroundings, too!)

It turns out that getting these things working seamlessly with Debian GNU/Linux on Surface is hard. My first tablet OS required a lot of manual interaction and was therefore cumbersome in comparison to iPad Pro.

## Second attempt: Surface Go 2

Microsoft released a new Surface Go tablet this year, the Surface Go 2. It has a faster processor (up to 64%!), thinner bezels and an improved screen. It is a very descent upgrade that puts the Surface Go 2 much more on par with the 11-inch iPad Pro in hardware terms. For my second attempt to create the ultimate tablet experience, I decided to use the top model Surface Go 2:

- 10.5” touch screen (1920x1250, 220PPI), 3:2 aspect ratio, Corning® Gorilla® Glass 3

- Intel Core m3 processor (8th gen)

- 8GB RAM

- Wifi 802.11a/b/g/n/ac/ax

- LTE Advanced (Qualcomm® Snapdragon™ X16 LTE Modem)

- Bluetooth 5.0

- Intel UHD Graphics 615

- Dimensions: 245 mm x 175 mm x 8.3 mm

- 256GB SSD

- 512GB MicroSDXC card

- 1x USB-C and 1x Surface Connect port

![Microsoft Surface Go 2 with black type cover and Surface Pen - a nice piece of hardware!](https://willem.com/global/images/9bdbd1ab55e3.webp)

### Installing Debian GNU/Linux on Surface Go 2 

The Surface Go 2 is very similar to its predecessor when it comes to installing a base installation of your favourite GNU/Linux distribution. I followed my own steps from the original Surface Go installation here (https://willem.com/en/2020-03-09_making-my-own-tablet-os/).

![Installing Debian GNU/Linux on Surface Go 2 is very similar to the original Surface Go](https://willem.com/global/images/facf756bc1c8.webp)

In short, you must take the following steps when installing Linux on your Surface:

- 1) Update Windows 10 and install all the firmware patches/updates

- 2) Create a bootable installation medium containing your favourite GNU/Linux distribution

- 3) (Optional) connect a wired ethernet connection

- 4) Boot the Surface from the USB drive

- 5) Install the operating system using the installer

- 6) Finetune and optimise the software experience

![Debian GNU/Linux with i3wm (“aka WillemOS”) running on Surface Go 2](https://willem.com/global/images/831bf15741b3.webp)

## Refining the experience

The last step of the installation is where you can make the difference between a fantastic and lousy user experience. To *“encourage”* myself to stick to this experiment I decided to sell my iPad Pro: burning the ships (as there would be no way back)!

![Selling your iPad Pro is easy if you keep the original boxes - I sold mine in just a few days: enforcing myself to make the new tablet work!](https://willem.com/global/images/0e5191befac8.webp)

On a small display, running apps full screen makes perfect sense. I know that the conventional PC concept of managing distinct application Windows doesn’t provide the best user experience on a small tablet computer. Therefore I decided to try a tiling window manager: i3wm (https://i3wm.org/).

### Tiling window manager

The principle of a tiling window manager is simple: apps take up as much space as there is available. This means that if you run just one app, it will be full screen. Two apps run split screen, etc, etc. You can define rules that automate the arrangement of apps. Using keyboard shortcuts you can quickly switch between apps. You may need some time to figure out what works best for *you* when you use a tiling window manager, but in the end it can save you a lot of time!

![Running Firefox (left) and a MOSH/tmux terminal window (right) in splitscreen using the i3wm tiling window manager](https://willem.com/global/images/82029e2aa184.webp)

### Workspaces

Another powerful feature of i3wm is that you can have different ‘workspaces’ (https://i3wm.org/docs/userguide.html#_using_workspaces). They are an easy way to organise groups of apps running together. I use different workspaces for different things that I do. A common approach is to put the web browser on one workspace, mail applications  on another one, and the ones with which you work, on the third one.

![Multiple workspaces are very powerful: it’s like switching TV channels](https://willem.com/global/images/e72f2eb2e0ee.webp)

The great thing about multiple workspaces is that one app (e.g. your browser) can run multiple instances on different workspaces. This enables many different combinations of apps. This is really where the i3wm window manager is *much* better than iPadOS’s take on multi tasking.

The i3wm window manager supports external monitors very well, using the same concept of a workspace. You simply designate one or multiple workspaces to be shown on the extra/external screen. This works well with the Surface Dock and USB-C-to-HDMI accessories for Surface. Multi monitor support is really great.

![Three finger swipe to switch workspaces - a trick from macOS - using fusuma you can use multi touch gestures in i3wm](https://willem.com/global/images/0865c8fa1a0d.webp)

One thing that you should try is to use fusuma (https://github.com/iberianpig/fusuma) to enable three finger gestures on the trackpad. If you have ever worked on a MacBook you’ll know that the multi touch trackpads enable useful gestures to switch desktops (or workspaces in i3wm). It works really well!

### Storage

For managing_my_photos_using_Shotwell (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/) I wanted some serious storage on my tablet. Altough I have the top model Surface Go 2 with the 256GB SSD drive, I used the MicroSD card slot to extend my storage capacity by another 512GB. The MicroSD card is slower than the integrated SSD, but for files that you don’t read every day/hour/minute it is fast enough.

![Extending storage on a Surface Go 2 is possible using a MicroSD card](https://willem.com/global/images/4c4616d1c2e0.webp)

My Debian GNU/Linux installation had no trouble recognising the MicroSD card. I encrypted the entire MicroSD card to prevent my photos from leaking if I would ever lose my card. You should (always) consider this, take appropriate measures to protect and backup your data!

### Connectivity WiFi/4G/LTE

After installing the ‘non-free’ wireless firmware in Debian the WiFi works well on Surface Go 2. Getting the LTE/4G to work was a lot harder! For some reason the WWAN connection did not start, even though I inserted a working SIM-card in the Surface Go. For some mysterious reason the modem did not start correctly, 4G/LTE did not work!

![Installing the SIM in the Surface Go 2 tablet](https://willem.com/global/images/2ead4f4bf1d6.webp)

One of the great things of iPad is that it shares the connectivity logic from iPhone. It automatically manages different wireless networks and mobile broadband connections. I wanted this to work on my Linux tablet, too!

When I looking for a clue to get 4G/LTE to work, I looked into reports on Surface Pro. The Surface Go 2 is technically very similar to the larger Pro. I figured that I could learn from peoples efforts with mobile broadband on the Surface Pro. After many hours of searching and trying different things, I found this_solution_to_get_4G_to_work_on_Surface (https://github.com/jakeday/linux-surface/issues/306#issuecomment-518898603):

![Resetting the buffers of the Surface broadband modem allowed it to work with Debian GNU/Linux!](https://willem.com/global/images/6d41b18777f8.webp)

You can use the Network Manager (and Modem Manager) to automate connectivity management under Linux. By default it will prefer WiFi connections over mobile broadband. You can have it automatically connect over 4G/LTE if there is no WiFi available. It now works very well in combination with the Surface Go 2 hardware!

![Network Manager (nm-applet) automatically switches between WiFi and mobile broadband connections](https://willem.com/global/images/81a36fb447f0.webp)

### Suspend/Hibernate/Resume

Another thing no iPad user ever thinks of, is how great Apple got things right when it comes to suspend and resume. When you have an iPad you can have it in standby mode for many days, yet it is always very quick to continue where you have left once you pick it up again.

To make my Surface with GNU/Linux do the same I needed a way to quickly suspend and resume. In Linux / PC world there are basically four power modes:

- **on:** apps are running. System is fully powered on, consumes a lot of power 

- **suspend (to RAM):** app states are preserved in RAM memory. System is still powered on, but every component is turned down as much as possible, still consumes power (+/- 10% battery drain per hour in my case with Surface Go 2)  

- **suspend (to disk) / hibernate:** app states are preserved on disk. System is powered off and does not consume any power

- **off:** apps are closed. System is powered off, no power is consumed

In order to “instantly resume where you have left” you need to preserve app states. The fastest (and near instant) resumes are possible when the app state is stored in RAM memory. The problem with RAM memory is that it needs current (power!) to maintain it’s value. Once power is lost, app states are lost.

The alternative is to suspend to disk (or hibernate), where the state is stored on the permanent storage device in the computer. It will allow the computer to turn off completely. The problem with suspending to disk is that resuming is slower and will require re-entering encryption passphrases for full disk encryption.

The good news is that modern GNU/Linux comes with systemd that enables you to configure how the computer handles suspend and resume. You can configure your tablet to first suspend to RAM (enabling instant resume) and then, after a period of time, suspend to disk.

![The systemd setting “AllowSuspendThenHibernate” in sleep.conf enables you to define a timeout between suspending to RAM and suspending to disk (hibernation)](https://willem.com/global/images/81abf9b1270b.webp)

On a normal working day, I wake up (very) early to work on my most challenging projects from home. Then I ride_my_bike_to_work (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) and continue working from there. I timed my commute and figured that if my tablet would stay on for at least two hours, it would allow me to instantly resume work. If I do not continue working on my tablet within two hours, it will save battery power by suspending to disk. This way I have the best experience for my particular situation.

![Configure the LidSwitch (in systemd’s login.conf) to automatically suspend and resume when you close the Surface type cover, I have configured it to suspend-then-hibernate using a timeout](https://willem.com/global/images/e2cc2410d5a6.webp)

### Uniform appearance

Unlike the tightly controlled iPad, software on GNU/Linux is created using many different approaches to user interface design. There is no such thing as the User_Interface_Guidelines (https://developer.apple.com/design/human-interface-guidelines/) that Apple dictates for iOS and iPadOS. This is a problem as it causes software to look and feel inconsistent.

A consistent look and feel is important to enable a frictionless environment and user experience. Therefore I made many small adjustments to colour, fonts, icons and toolbars to make my apps all look and feel similar. Although it is is not perfectly harmonious, it no longer feels as if I am working with “Frankenstein OS”.

I prefer a dark theme as it is easier on my eyes, but you should decide for yourself. Use tools like **lxappearance** to make adjustments for multiple apps. But, you’ll probably need to make adjustment on individual app basis, too. I use the **adwaita-dark** theme and (monochromatic) **HighContrast** icons, with the **Open Sans Light** font.

![Thunar file explorer (left) and GIMP (right) in visual harmony - create a uniform look by matching colours, icons and fonts](https://willem.com/global/images/47e363822994.webp)

![Shotwell (left) and Xournal (right) - two very different apps running side by side, looking visually coherent](https://willem.com/global/images/dfc9b4ac76c9.webp)

## Using it as daily driver

Building a beautiful system is one thing, but actually using it as daily driver is something else! The Surface Go is my daily driver and over the past few weeks I have been experimenting with different things and settings. Here are some highlights.

![Surface Pen is great and when you configure Xournal to use Xinput the pressure sensitivity works perfectly: you can see the thickness of the line vary, just like a real pen](https://willem.com/global/images/6039e558b1d5.webp)

![The kickstand is brilliant in combination with Xournal and the Surface Pen - no iPad can do this](https://willem.com/global/images/a248d70075f2.webp)

![The kickstand is very sturdy as it uses two strong metal hinges](https://willem.com/global/images/11ab54c312b3.webp)

![The type cover is charm to type on with real (backlit) keys, including ESC and a row of function keys](https://willem.com/global/images/251c859582d7.webp)

![You can use a Bluetooth keyboard, too - enabling a comfortable distance between your eyes and display](https://willem.com/global/images/807ff12f0120.webp)

![While USB-C is the future, the Surface connector port is quite handy as it works with Surface Dock 2 (that offers a ton of connectivity)](https://willem.com/global/images/cf9e3a3ad1b7.webp)

![The back of the Surface has no extruding camera lens which allows the tablet to lay perfectly flat on a table - as it should!](https://willem.com/global/images/dff454cf49ab.webp)

![It’s a tiny computer, but it is incredibly powerful and versatile!](https://willem.com/global/images/4fae13e5079f.webp)

![Reading mails in Evolution works well!](https://willem.com/global/images/b2cfb6eddb63.webp)

![It is light enough to handle with one hand - you can read the gyroscope sensor to automatically rotate the display - useful when reading an (interesting) article](https://willem.com/global/images/2429d7f15a38.webp)

![The Surface Go 2 is a serious tool, capable of powerful things when you connect to the cloud (using a terminal, MOSH and tmux)](https://willem.com/global/images/eee21875c9c9.webp)

## Conclusion

Building my own tablet OS is a real challenge. My first attempt was not good enough to replace my iPad. This second attempt however is different. The time and effort I put into refining the user experience results in a much better system. I now use it as my main computer on a daily basis.

Although I always appreciated the work that Apple has done on iPad, it remains limited by its locked down software. Especially now, when Apple has decided to double_down_on_its_AppStore_control (https://duckduckgo.com/?q=appstore+fortnite&t=ffab&iar=news&ia=news). The only way to control the future is to create it yourself: I believe the time is right to become captain on my own ship!

### Update January 2021

After_months_of_intense_use_I_have_decided_to_abandon_my_own_tablet_OS (https://willem.com/en/2021-01-14_abandoning-my-own-tablet-os/)

---

## Syncing files seamlessly between smartphone and tablet

*Using unison to automatically sync between GNU/Linux and the iPhone* · 2020-09-16 · https://willem.com/en/2020-09-16_syncing-files-seamlessly-between-smartphone-and-tablet/

In order to optimise my workflow, I was looking for a way to seamlessly access the same files on both my computer and smartphone. This is useful to when you want to quickly send files from your computer using your smartphone through various messaging apps and vice versa. Read along to find out how I did it.

## The goal: seamlessly shared files

When I am working, I usually use both a tablet and a smartphone. I use a tablet (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) as main computer. My iPhone is very useful as a second screen. I also use it to send files, screenshots and photos to people using the many different messaging apps that run on iOS.

For the better or the worse, there is a shift going on from email to apps such as Slack, WhatsApp, iMessage and Signal. My iPhone is the gateway to these channels of communication. As I do not want to use iCloud Drive or DropBox I needed another way to seamlessly have my files on both my tablet and smartphone.

## Meet Unison: the multi platform file synchroniser

After a quick search I found Unison (https://www.cis.upenn.edu/~bcpierce/unison/) in the Debian_software_repository (https://wiki.debian.org/Unison). As my tablet runs on Debian GNU/Linux I looked for a way to synchronise files securely using open standards. Unison does this using rsync over SSH/SFTP. This means it will work with my existing_NAS_server (https://willem.com/en/2019-11-22_building-a-professional-72tb-nas/) that lives in a data center.

Although you could setup file sharing directly between your tablet and a smartphone, I use the central NAS server to allow communication between my devices, even if they’re not on the same network. This happens when one (or both) devices are on cellular networks. To access files from my iPhone, I use the Secure ShellFish app that integrates nicely with the native iOS files app.

![Synchronising files between my tablet and iPhone: the NAS server act as an intermediate station; overcoming differences in protocol and connection](https://willem.com/global/images/0c3af5ec4a88.webp)

Setting Unison up is easy. You should check out the English documentation on the Unison_website (https://www.cis.upenn.edu/~bcpierce/unison/docs.html) or follow this great_Unison_guide_in_German (https://wiki.ubuntuusers.de/Unison/). You can run Unison from the command line, but I like it to run automatically using a preconfigured profile and a frequently running cron job.

![My Unison profile with parameters for the ‘WillemCloud’](https://willem.com/global/images/69ec55902e0c.webp)

The Unison configuration profile is straightforward: you define two root folders and you can use some toggles to adjust the default behaviour. I have setup my profile to do things in batches and automatically decide which files to keep. I have a dedicated "Cloud" folder that I choose to share between my devices, it acts as a kind of "Desktop"-folder. Check out the Unison man page for all the possible parameters (try to type 'man unison' in your terminal).

Authentication is done using your system’s SSH configuration. You can (and should) setup authentication_using_shared_client_keys (https://wiki.debian.org/SSH#Using_shared_keys). This will enable password-less SSH communication between your client and server. Once you have tested and configured your Unison profile, you can create a cron job to automatically synchronise your files. Because file transfers can take a longer time, the cron job should only run if the previous run was completed. You can do this using a PID file, acting as a check.

![My cron command is wrapped in a check to prevent starting synchronisation when it is already running](https://willem.com/global/images/172e19ff4677.webp)

## Setup Secure ShellFish on iOS

Once you have your computer synchronising files to your NAS, you should setup your smartphone. I use an iPhone and therefore looked for the best app that integrates well with the native iOS files app. After testing different apps I found Secure_ShellFish (https://shellfishapp.com/) to be the best:

![Download and configure Secure ShellFish to connect to my “WillemCloud”](https://willem.com/global/images/d74a7d2d31ab.webp)

The beautiful thing of the Secure ShellFish app is that it integrates into the native iOS File app (and the underlying iOS storage provider API’s). This means that all apps that access local storage can connect with your NAS! This enables access to your files from practically any app.

![Accessing files using the native iOS Files app enables you to use many different apps and shortcuts](https://willem.com/global/images/56496fdc5e80.webp)

## Conclusion

Optimising for your daily workflows can really provide you with huge benefits in the long run. By making it possible to seamlessly share files between my tablet and smartphone I did just that!

By automating the synchronisation, it moves into the background. I no longer have to think about it as an advanced process involving different protocols, servers and apps. It just works, and that’s exactly how I like it!

![The same files on both my smartphone and tablet - it just works!](https://willem.com/global/images/e9f915e8f52d.webp)

---

## Free from the iCloud: Escaping Apple Photos

*Using offline photo library management software* · 2020-08-31 · https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/

After encountering the umpteenth ‘magic’ bug while managing my iPhone’s photos, I was done with it. Apple came a long way since it  launched iPhoto (the predecessor of iCloud Photos). But for something as valuable as my personal memories, I want to be in full control. Read along to learn how I migrated my photo library away from the iCloud, using free, open source software.

## Shooting digital photos since 2001

Due to some luck (a relative won it in a lottery), I got my first digital camera in 2001. It was a 0.8 megapixel camera from Samsung: a Digimax 800K. In every way it was extremely limited: it was very slow, it had a lousy battery life, it lacked a display and its memory card could only fit approximately 12 photos.

![My first digital camera: a Samsung Digimax 800K shooting 1024x768px photos](https://willem.com/global/images/c8e223932080.webp)

Despite its limitations, I used this bad boy to take pictures. It captured some of my most interesting teenage memories. When I look at those pictures, it’s like visiting a museum... the “Willem museum”, ha!

![My computer in 2001, captured using the Digimax 800K](https://willem.com/global/images/eb8ade2ffd85.webp)

![No vintage photo filters applied: this is an untouched original digital photo from 2001. (Lake Garda, Italy, 2001)](https://willem.com/global/images/d7cee4d45ab0.webp)

![Yesteryear’s memory cards - note that they are sized in MB, as in mega, not gigabyte!](https://willem.com/global/images/59341fab5bb5.webp)

## Hello Apple Macintosh

Fast forward a few years and my digital photo library grew significantly. Software of that day wasn’t designed to accommodate the ever growing digital memories. My Windows computer was very much an office tool.

![My computer in 2005: Windows XP, Nokia Communicator and MSN Messenger](https://willem.com/global/images/a0a3d7661cb5.webp)

When Steve Jobs introduced the iLife apps for Apple Macintosh in 2002 he described it as *“It’s like Microsoft Office for the rest of your life.”* It was specifically designed to as a center piece to manage your digital lifestyle: iTunes for music, iMovie for video, iPhoto for photos. It was designed to be easy and fun!

![Introducing iLife in 2002 - shown on an iMac G4 - designed to be fun, easy and powerful](https://willem.com/global/images/a3c5668f7a82.webp)

You should watch_the_iLife_introduction_video (https://www.youtube.com/watch?v=RyvEgHo5sTU), featuring Jony Ive and Phil Schiller. This was visionary stuff in 2002 (Windows Vista wasn’t invented yet!).

![My first Mac in 2006: a G4 Mac Mini with 1GB RAM running OS X Tiger](https://willem.com/global/images/87e7ba93a65e.webp)

In 2006 the Mac and its operating system were amazing: it looked like it came from the future. Translucent windows, colourful buttons, powerful software and a UNIX software basis.

![Using my 2006 Mac Mini to connect to a Sun Microsystems server using the fancy looking, yet powerful, terminal app.](https://willem.com/global/images/3685afb1a6d6.webp)

## iPhone

Everything changed in 2007 when Steve Jobs introduced the original iPhone. The device was designed to be an iPod, a phone and an internet device all in one. Like the Mac and its accompanying iLife suite of software, the iPhone was designed to become a center piece of your digital life.

![Steve Jobs introducing the original iPhone in 2007 as ‘ultimate digital device’](https://willem.com/global/images/0b21feab6ea5.webp)

Together with some buddies I went to Miami to get an iPhone (among other things)! I knew this device was the future and I wanted one *badly*. They weren’t sold in Europe and stock in the U.S. was extremely limited. We visited multiple Apple Stores in the early mornings hoping to find an iPhone in stock. There where people waiting with us - every morning. It was crazy.

![Visiting the Apple Store in Miami Beach in 2008](https://willem.com/global/images/cf388125cfb2.webp)

Ultimately we found some iPhones in a slightly shady store in some nearby mall. Gray market dealers made some pretty penny reselling unlocked iPhones. But it didn’t matter: I got an iPhone!

![Drinking happy beers: I found myself an iPhone! (2008)](https://willem.com/global/images/191b4a3f89f1.webp)

![What seems normal today, was futuristic in 2008: browsing the web on a full touch screen device (while drinking beer)](https://willem.com/global/images/774e42ab7748.webp)

While the original iPhone’s camera wasn’t that great, things changed when the iPhone 4 came out. The fourth iPhone replaced my normal photo camera. Its high resolution “retina” display made the pictures pop on the iPhone. The 5 megapixel camera with autofocus wasn’t all that bad.

![The iPhone 4 replaced my camera in 2010 - selfie of Mr. Blurry Cam](https://willem.com/global/images/657de386c1a7.webp)

![The camera inside the iPhone 4 wasn’t all that bad: shooting detail rich pictures - Winter in Amsterdam (December 2010)](https://willem.com/global/images/c82cd2219547.webp)

## iCloud Photos

In 2015 Apple introduced_iCloud_Photos (https://www.theverge.com/2015/4/8/8367469/apple-photos-app-launch-iphoto-replacement) and stopped_developing_iPhoto (https://www.theverge.com/2014/6/27/5849756/apple-stopping-development-of-aperture-and-iphoto-for-osx). It was not Apple’s finest hour as the new iCloud Photos had_numerous_problems (https://www.google.com/search?q=apple+photos+problems+year%3A2016). I decided to wait and to stick with the now abandoned iPhoto app.

Eventually Apple greatly improved the Photos app, but its focus was no longer to be a digital hub that *you* control (like the Mac with iPhoto). Instead, Apple Photos is designed to be a service that fully controls your photos. I guess this is convenient for those folks that don’t want to be bothered with managing their own stuff. While Apple Photos still allows you to keep a local, offline, photo library, you’ll be getting a limited experience (riddled with bugs). Therefore the best way to use Apple Photos is by enabling_the_so_called_‘iCloud_Photo_Library’ (https://support.apple.com/en-us/HT204264).

With iCloud Photos, all your photos are uploaded to Apple servers. While Apple arguably has the best reputation and policy (https://www.apple.com/privacy/) when it comes to user privacy, it's still an American company doing big corporate stuff you don't control as simple user. It is something you should decide for yourself, but when it comes to my photos, I’d rather be responsible and in control myself. My distrust is not ungrounded: only recently the big (multi billion dollar) Adobe caused panic across photographers world wide when an update to their popular Lightroom app caused_photos_to_disappear_forever (https://www.theverge.com/2020/8/20/21377411/adobe-lightroom-ios-ipados-app-update-pictures-photos-presets-deleted)! Whatever cloud you’re using: **always make a backup yourself!**

## Managing photos with free software

On various (https://willem.com/en/2018-07-20_helping-people-with-free-software/) occasions (https://willem.com/en/2020-03-09_making-my-own-tablet-os/) I have been an advocate for free software. It is better because it offers you “free” as in freedom of speech (which is not the same as in “free beer”). Free software allows you to take control over your data, like your photos.

When you set out to look for an alternative for proprietary photo management apps, you have various free options:

- **Shotwell (https://wiki.gnome.org/Apps/Shotwell)** is an app very much like the original Apple iPhoto in such a way that it allows you to organise your photos in events, group them by month and year. It is better than Apple Photos as it offers you much more control over photo files. It works with all the popular photo file formats, including RAW. 

- **Darktable (http://www.darktable.org/)**: is an app that enables you to develop RAW photo files, manage them and view them through a zoom able light table. 

- **GIMP (https://www.gimp.org/)**: is an image manipulation program that enables you to retouch and edit individual photos. It is very powerful and offers many advanced features. 

- **GNOME_Photos (https://wiki.gnome.org/Apps/Photos)**: is an application that allows you to manage your photos in a simple manner. It is the default photo application in the popular GNOME desktop environment that you’ll find in many GNU/Linux distributions. 

- **digiKam (https://kde.org/applications/en/digikam)**: is an advanced photo management application that offers many different options to import, manage, edit and export your photos. It has been the default photo app on the popular KDE desktop environment. 

## Prerequisite: clean your library!

Before migrating your photo library you must make sure it is organised well and you have cleaned it. They sometimes say *“if you put shit in, you’ll get shit out”*. This is why I took the time to go through all my photos and remove those that I deemed duplicate, bad or unnecessary. By selecting and filtering your library, you’ll make *any* migration easier.

![Going through my old photo libraries using iPhoto and Apple Photos](https://willem.com/global/images/4a02046444e5.webp)

For me this meant firing up an old MacBook to run an old copy of iPhoto. This enabled me to (rather aggressively) filter my photos. I removed many (near) duplicates, fuzzy ones and obvious meaningless photos. I took the time to do this, going through my photos a few hours per day for two weeks! Ultimately I reduced the number of photos by approximately 50%!

## Export photos from Apple Photos

After cleaning my library, I upgraded it to Apple Photos. The latter runs better on modern Apple computers, like my powerful_iMac (https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/). Using Apple Photos you can export the original masters all at once. Select (all) your photos and choose “File” > “Export unmodified originals”. I used sequential filenames with a manually set prefix. This enabled me to do batch renaming using EXIF creation dates in a later step. Exporting the originals will take some time depending on your library’s size.

![In Apple Photos you can export the unmodified originals](https://willem.com/global/images/507cc05a4802.webp)

![I used sequential filenames with a manually set prefix](https://willem.com/global/images/9cc8d0270776.webp)

### Batch renaming photos based on EXIF creation date

With my files freed from Apple Photos, the next step was to update all the individual filenames to a more meaningful something. I figured that a photo file with the date + time would be best. I opted for a YYYYMMDD-HH-MM template. I copied my files over to a computer that runs on GNU/Linux, offering me all kinds of terminal programs to do this. If you’re running on Windows or macOS you should be able to find the same (or similar) tools to do these things without Linux.

![Using EXIF information to rename the photos to include the date and time the photo was taken](https://willem.com/global/images/b4967c1674df.webp)

I used the **exiftool** available on GNU/Linux to do this, the exact command I used was: **exiftool -d '%Y%m%d-%H%M%%-03.c.%%e' '-filenameCreateDate'**. I ran this command on a powerful server that could go through the thousands of photos more quickly than my tablet (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/).

### Batch converting HEIC to JPG

Altough the modern HEIC image format (used by iPhones) is superior (https://heic.imobie.com/heic-and-jpg.htm) to JPG in terms of compression and image quality, it lacks support in many popular free software solutions. Support for HEIC is growing, but I wanted things to work well *now*. The easiest thing to do was to convert all my HEIC photos to JPG. To do this I used the ‘mogrify’ command that is part of the popular ‘imagemagick (https://imagemagick.org)’ suite of tools available on pretty much any platform. As my photos where copied to a (powerful) server, I took advantage of the server's computing power by running the conversion there. The exact command I used was **mogrify -format jpg *.HEIC”**, don’t forget to remove the HEIC files after you’ve converted them to JPG.

![Batch converting HEIC image files to JPG using a VPS with a ton of CPU power](https://willem.com/global/images/70940e6862ad.webp)

## Creating a new library

After checking the various free software apps I selected Shotwell to be the new home of my photo library. It runs well on my_tablet (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) and it works well in combination with advanced apps like Darktable and GIMP. It can automatically import new photos, organise them by year and month, and provide me with quick ways to export my photos. This works best for *me*, but you might select a different application or method to organise your photos. The beautiful thing about free software is that you can decide for yourself what works best for *you*.

![Importing all photos into Shotwell caused my tablet to run a little hot (as it generated new thumbnails) - a problem solved using an rather analogue solution: a ventilator](https://willem.com/global/images/ae6d16dd8c1b.webp)

My entire photo library now fits on a single Micro SD card (512GB) that I have put in my Surface tablet. If you look at the old memory cards (shown earlier) it makes you realise how far technology has come. I have encrypted the entire Micro SD card so that my photos remain private even if my SD card is lost or stolen.

![My entire photo library on a single SD card - unbelievable!](https://willem.com/global/images/bb889c594a1e.webp)

## Photo library backups

As my new photo library lives on the filesystem with no "secret Apple magic" obfuscating the photo files, I can now easily backup my photos by making copies of the photo directories. I do this using ‘rsync’, another command line tool that enables you to create incremental copies of directories and files. It will only copy new and modified files, which saves you a lot of time when you’re working with large libraries. You can use a task scheduler such as ‘cron’ to automate the backups. I automatically backup my photos to a_server (https://willem.com/en/2019-11-22_building-a-professional-72tb-nas/) that I manage myself, which sits in a secure (and fire protected) data center.

## Cloud access to my photos

Part of the appeal of the new iCloud Photos by Apple is that you can access your photos from any device, anywhere. I like this, too. Luckily, the server that I use to backup my photos can double as an ‘always on’-way to access my photos from pretty much any device. I can login to the server using the secure_file_transfer_protocol (https://wiki.debian.org/SSH), allowing me to browse my photo files. Alternatively you can setup protocols like WebDAV (https://duckduckgo.com/?q=setup+webdav+debian) or SMB (https://wiki.debian.org/SambaServerSimple) to access your files in even more ways.

## Importing new photos

It is very easy to import new photos into Shotwell. Depending on the camera you use you can import wirelessly (using WiFi) or by using a simple cable. I have small USB-C cable in my bag that connects my camera to my tablet, allowing me to import new shots without any hassle. New shots are automatically copied to my server and from there become available on all devices I use.

![Importing new photos from my camera is easy - very much like the Apple iPhoto ad from 2002! ](https://willem.com/global/images/f816dceb5dc8.webp)

![Ahhh, the sweet taste of freedom: managing my photos using Shotwell on my tablet](https://willem.com/global/images/843a5fd8f358.webp)

## Photos on iPhone

One final thing I wanted to achieve is to have access to *all* my photos from my iPhone using the native iOS Photos app. Although I can access all my photos through my server, the iOS Photos app is unparalleled in speed and ease of use.

In addition, I think Apple has done a truly remarkable job with the on-device machine learning that enables you to search your photos based on what’s on them. Ask Siri for photos you took of watches, cars, bikes or whatever, and it will find them in your library. This works surprisingly well and it provides novel ways to rediscover old pictures.

But it requires some sweet irony...: the only way to get this to work is to go back into the “photo jail”. In order for the iPhone's neural engine to do its job, all your photos have to be loaded to your device. Few people know however, that you can have your photos inside the iOS photos app without the need to have a desktop Apple Photos library!

![In the macOS finder you can setup photo synchronisation using a normal directory on the file system as source - no need for a full fledged iCloud Photo library!](https://willem.com/global/images/1837475054b1.webp)

MacOS provides you the ability to synchronise *any* directory containing photos with your iPhone. As the Mac is still very much UNIX based, setting up an automatic synchronisation with my server based photo repository was as easy as configuring a cron job that uses rsync to get new photos. Then you can setup your iPhone to automatically synchronise over WiFi once it is within range of your Mac. The only downside of this approach is that you still need a Mac to do this, although I suspect that you could - in theory - achieve this using by running macOS inside a virtual machine. I'll leave that for another time.

![Happy together: Using the native iOS Photo app to browse through my entire photo collection managed with Shotwell](https://willem.com/global/images/3156a91b1d91.webp)

## Conclusion

Some things require time, effort and energy to get right. For a long time I accepted my personal photo library to be in bad shape, held within the constrains of the modern Apple Photos that continues to nudge you to upload your everything into the iCloud. That has changed!

Now I am able to manage my photos using free software, enabling me to do it in exactly the way I deem fit. I took back control over my personal memories, and it feels great! The alternatives to Apple iCloud Photos are more than capable to do this - just take your time to do it right!

*Fun fact: many of the older photos that I used in this blog post where rediscovered because I took the time to go through my photos. You’ll be surprised by the hidden gems in your own photo library if you take the time to revisit them!*

---

## Cleaning a vintage watch

*Rediscovering old beauty under layers of dirt* · 2020-08-23 · https://willem.com/en/2020-08-23_cleaning-a-vintage-watch/

This week I was cleaning my closet when I found an old watch. It came from my grandfather’s house. It looked like it had an adventurous live, full of wear and tear. I recognised that it had an automatic mechanical movement. Upon picking it up it almost instantly started running again. I wondered how cool it would be if I would gently clean it.

## Citizen Automatic, 21 jewels 6000

After my grandfather passed away we cleaned his house. Among the many (old) items was this Citizen Automatic watch. I did not know its story, but it clearly seemed like it went through *things* during its time on the wrist.

![Citizen Automatic, 21 jewels, 6000, 4-601084-Y](https://willem.com/global/images/e7bc9b8135b6.webp)

It is an automatic mechanical watch from the 70’s (judging by it’s design and by looking up the reference numbers on the back). Back in the day a mechanical watch was something you would simply need; there were no smartphones and computers with abundant digital clocks. This was just before the so-called ‘Quartz_Crisis’ (https://en.wikipedia.org/wiki/Quartz_crisis), which spurred a ton of cheap battery powered watches. The watch I found was a relic from a time gone by, with a mechanical heart that was still beating! How cool!

![The rear of the watch, showing various numbers and markings](https://willem.com/global/images/cb1eaa101432.webp)

Unlike most smartwatches (that last only a few years), most mechanical watches were worn for many years. During their time on the wrist they picked up the signs of daily wear. This watch clearly went through its fair bit of beating around.

![Wear and tear is a great thing on a watch: it communicates the story of adventurous wrist time](https://willem.com/global/images/f07c3913db68.webp)

As far as I could determine the watch was in original, unpolished or serviced condition. This is a *good* thing when it comes to watches. A vintage watch can lose all of its charm when it is polished or when characteristic parts such as the dial or hands are replaced by service parts. Hence, it’s no wonder that an original vintage piece commands a premium price on the watch market.

## Cleaning a vintage watch

When you’re planning on cleaning a vintage watch you should be really careful. Old watches can be very fragile. Even though the casing may state texts like “waterproof” or “water resistant”, chances are that it no longer is protected against moisture. If in doubt, you should consider bringing your watch to a professional watch maker to have it cleaned and handled professionally.

![Dirty bracelet](https://willem.com/global/images/7f4d18a47030.webp)

If you’re planning on doing it yourself, you should get yourself some watch tools. They can be found on the internet and they will enable you to open and close the watch without damaging it. Using the right tools it is easy to remove the bracelet from the watch head. This will allow you to more easily clean it (as a bracelet is better resistant against water).

![Removing the bracelet from a watch is easier with the right tools](https://willem.com/global/images/2b2938aeda50.webp)

![Dirt inside the clasp](https://willem.com/global/images/59cfa439ed7e.webp)

This watch had a ton of dirt inside the bracelet. You’ll often find dirt stacking up in between different links and parts. Over time, bracelets can become a flourishing_microbial_ecosystem (https://www.hodinkee.com/articles/in-other-news-your-wristwatch-may-harbor-a-flourishing-microbial-ecosystem), with germs, bacteria and other microscopic life.

![Especially the parts facing the human skin can pick up interesting collections of dirt over time, giving rise to microbial ecosystems](https://willem.com/global/images/4b3db8430dfe.webp)

You can use different things to clean the bracelet and the watch head. I often use my electronic tooth brush (with a spare brush!) to easily remove dirt from between links. A bracelet can be cleaned using an ultra sonic bath, too. Be careful with the watch head as it houses the movement, use water sparsely (if at all).

![Opening the watch can be done using a special tool](https://willem.com/global/images/1222910e2806.webp)

![Set the tool to match the mounting points on the case back, to enable it to rotate it open](https://willem.com/global/images/c444b13b3213.webp)

![You can rotate the case back and remove it from the watch head to reveal the movement](https://willem.com/global/images/687a24dbe12d.webp)

![This watch has an automatic Citizen 6000 movement with 21 jewels](https://willem.com/global/images/acadabbb37e1.webp)

![There is a rotor that winds the watch when it is moved (on the wrist), a clever system that negates the need for batteries](https://willem.com/global/images/9239e4fceb5c.webp)

I checked the mechanical movement on the inside of the watch to determine if the case was ever open to moisture or dust. If this is the case, you should have the movement serviced by a professional to prevent any (water / dust) damage from damaging the movement any further. As there are many steel parts, oxidation is a real danger to a mechanical movement. This watch looked clean on the inside, no signs of trouble and the automatic movement appeared to be in good condition!

![Citizen 6000 movement](https://willem.com/global/images/7495ca6cd1df.webp)

If you’re really adventurous, you can probably find technical schematics of common watch movements. They’re like the blueprint of the movement, allowing you to identify individual parts. Luckily, this watch movement was alright.

## Results

After carefully cleaning the watch I put it back together. Just like  the_vintage_bike_I_cleaned_earlier (https://willem.com/en/2016-09-03_batavus-champion-bike-from-1978/), I was amazed by the beauty that was hidden underneath the dirt. Cleaning it was a good thing to do!

![The cleaned bracelet](https://willem.com/global/images/93961ec5b2ec.webp)

![The cleaned watch head, as seen from the bottom](https://willem.com/global/images/0dec1affae90.webp)

![The cleaned watch head, from the top](https://willem.com/global/images/6539dc8e72b0.webp)

Obviously the plexi crystal is damaged, it has many scuffs and cracks. The good news is that you can easily have them replaced. But, I like things original and did not mind to leave it like this. I think it adds to the character of the watch and it has an interesting way of refracting (sun)light.

![The watch back on the wrist: cleaned and running!](https://willem.com/global/images/8b9c1fc917f6.webp)

Thanks to the modern wonders of the internet, you’ll be able to find many different straps and bands for your vintage watch. Fitting them is easy and they will often allow you to rediscover your old watch in new ways!

![Replacing the original metal bracelet for a nylon NATO strap](https://willem.com/global/images/9aee5b993b81.webp)

![Wearing your watch on a different strap can make it feel like an entirely different watch](https://willem.com/global/images/5536295c7413.webp)

## Conclusion

Vintage watches are popular for their unique characteristics that evolved during their time on the wrist. Each watch tells a different story and this is what makes it interesting. Collectors love the fact it takes time for a watch to become the way it looks today. Countless tiny scratches and occasional scars tell the story of previous owners. One may even imagine inheriting some of the machismo of previous wearers.

If you ever come across a nice vintage watch, you should handle it with respect and care. Consider signs of wear and tear to be something beautiful instead of something that should be refinished to factory conditions. If you want a *new* watch, buy one. Vintage watches are about the stories of their lifetime, handle them well and you might add a chapter of your own to their story!

![Wearing a 50 year old watch, I like it!](https://willem.com/global/images/8eecd9d7aad1.webp)

---

## The best keyboard for iPad

*Smart Keyboard Folio vs Magic Keyboard* · 2020-08-11 · https://willem.com/en/2020-08-11_the-best-keyboard-for-ipad/

The tablet is at the frontier of mobile computing and its hardware form factor is evolving. This year Apple introduced a new Magic Keyboard for iPad that includes a trackpad. Everybody is raving about it, yet I think there is something to be said for the "mouse-less" Smart Keyboard Folio. Read along for some key differences.

## iPad Pro as serious computer

If you have been following my blog, you'll know that I am a fan of using a tablet_as_main_computer (http://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/). I have used_different_tablets_with_different_operating_systems (https://willem.com/en/2020-04-14_talking-tablets-what-makes-a-great-tablet/) to explore what works best (and why). A tablet is best for its own merit, being a tablet. I think it is a mistake to turn it into a laptop or desktop computer. This is why I think that the new Magic Keyboard is not universally an improvement over the older Smart Keyboard Folio.

![Smart Keyboard Folio (left) and the new Magic Keyboard (right)](https://willem.com/global/images/1978a5e07319.webp)

## Smart Keyboard Folio

The Smart Keyboard Folio is the original keyboard for iPad, it is an lightweight folio that 'flaps around' the iPad like a protective case. It is made from a single piece of fabric-ish polymer. You can flap the keyboard onto the back, to handle the iPad like a tablet. The keys are integrated in the bottom flap, with no opening underneath them, this allows them to be water and dust resistant. The typing experience is like a "love or hate" affair, unlike most conventional keyboards.

![Smart Keyboard Folio (11-inch) with iPad Pro and Apple Pencil weighs 528 grams](https://willem.com/global/images/b7c503117026.webp)

![iPad Pro Smart Keyboard Folio as seen from the side](https://willem.com/global/images/bab0cd3fe508.webp)

## Magic Keyboard

The new Magic Keyboard is Apple's latest and greatest companion product for iPad Pro. It is an advanced, metal enforced, folding stand that includes a keyboard and trackpad. It is extremely sturdy, and because of this it is heavier. You cannot use the iPad as a tablet when it is connected to the Magic Keyboard as its folding mechanism does not allow flapping around. The backlit keys have a conventional scissor mechanism, providing 1MM of key travel. The typing experience is superb, very much like an high-end laptop.

![Smart Keyboard Folio (11-inch) with iPad Pro and Apple Pencil weighs 844 grams (that's about 59% heavier than the Smart Keyboard Folio)](https://willem.com/global/images/f4f044203d42.webp)

![iPad Pro Magic Keyboard as seen from the side, it is thicker and it has a dark aluminium hinge sticking out (on the left side)](https://willem.com/global/images/08595e15c99a.webp)

![The Magic Keyboard is made like a laptop keyboard (with distinct keys and ditto mechanisms) - the Smart Keyboard Folio is made with a woven fabric from a single piece of material](https://willem.com/global/images/33c26818260d.webp)

## Mouse

Aside from weight, material and typing experience, the most obviously visible difference is the trackpad on the Magic Keyboard. Apple introduced pointer support in iPadOS 13 and more and more apps are supporting it. If you have ever touched an Apple laptop, you'll know that their glass trackpads are fantastic. The trackpad on the Magic Keyboard is no exception: it's great.

![The trackpad on the Magic Keyboard for iPad Pro is great - you can see the 'cursor' being a grey circle (just between the FaceTime and Zoom icons)](https://willem.com/global/images/28666bcf13f8.webp)

## Problem: The Toaster Fridge

When asked if laptops and tablets would converge one day, Tim Cook (Apple's CEO) answered_analysts (https://www.smh.com.au/technology/apple-ceo-tim-cook-emerges-from-steve-jobs-shadow-with-toasterfridge-20120426-1xmig.html):

*"I think anything can be forced to converge. The problem is that products are about trade-offs, and you begin to make trade-offs to the point where what you have left at the end of the day doesn't please anyone. You can converge a toaster and a refrigerator, but those things are probably not going to be pleasing to the user."*

I think that years after Tim Cook said this, Apple did in fact create the proverbial "Toaster Fridge" when it added pointer support to iPad. Adding a mouse to an iPad is converging the tablet with a laptop. You'll loose the flexility of a full tablet experience, adding weight and bulk, while gaining little as pointer support remains optional (and partial) in iPadOS.

![Smart Keyboard Folio vs Magic Keyboard for iPad](https://willem.com/global/images/5a9c803a7d55.webp)

Make no mistake, the Magic Keyboard is brilliantly executed. It is an intriguing design that tries to bridge the gap between a tablet and laptop. The resulting product is highly complex (e.g. if you count the number of parts, engineering effort, etc). Yet, I can't help but think that this takes something away from the real tablet advantage: the need to reimagine your workflow instead of recreating old patterns.

![If you want a laptop experience, why not just buy a MacBook?](https://willem.com/global/images/9b60377a5d01.webp)

A real laptop will offer you the very best of a desktop operating system. With highly precise pointer support, decently spacious trackpads and advanced application support. The MacBook Air (from € 1199) is a fantastic computer that will cost you less than an 12-inch iPad Pro with Smart Keyboard (€ 1119 + € 399 = € 1518).

## Making the case for the Smart Keyboard Folio

If you really want an iPad *and* a keyboard, you can still consider the Smart Keyboard Folio. As if Apple knows about the compromise in their latest product, the original Smart Keyboard Folio is still available. I have used both keyboards to write long texts, to work and to browse the web. Here's why I think the Folio isn't all that bad:

### In touch with your content

As there is no trackpad on the Smart Keyboard Folio, you really need to use your fingers get around in iPadOS. If you're thinking in laptop paradigms, this may sound cumbersome: an ergonomic disaster and clumsy. If you however explore new ways to work with your content, you'll note that touch screens can be very useful when:

- you rotate things (like a photo, image, graphs)

- manipulating sliders to explorer different manipulations (like photo effects, volumes, mixers, etc)

- you resize things

![Touching is an integral part of the tablet experience - your hand can rest on a table for most tasks](https://willem.com/global/images/f439591cffa8.webp)

![Cropping and rotating photos feels natural, making multiple adjustments (size, rotation, dimensions) with one gesture instead of multiple mouse clicks](https://willem.com/global/images/51311d90c673.webp)

![Precisely adjusting sliders and immediately see their effects, zoom in with a simple pinching gesture while trying different settings. ](https://willem.com/global/images/2ca165ca0d14.webp)

![Composing multi layered images by dragging, dropping, rotating, resizing in a matter of seconds. Optimised tablet apps help you achieve alignment precision using guides and rulers. ](https://willem.com/global/images/deb8e8b57bad.webp)

Naturally you could argue that all of the above is possible *with* the Magic Keyboard. While that's true, the availability of a trackpad will invite you to use it. If you do, the tablet touchscreen will always be an extra step away. Before you know it, you're using the iPad as a laptop.

### Don't forget your palms while typing

Most people talk about key-*this* and key-*that* when talking about keyboards. Yet, most reviewers forget about the palm rests. When I am really into a piece of programming code or writing an article, my hands get warm - sometimes even a little sweaty. For this I like to have my hands rest at the table surface. Most of my desks are made from natural pieces of wood. I really like the feel of this. With a trackpad underneath the keyboard you're forced onto the plastic palm rests of the Magic Keyboard. Their plastic edge irritates my palms when I type for longer periods of time. The Smart Keyboard Folio allows my palms to rest on whatever comfortable surface I choose to work from.

![Hand palms comfortably resting on the table surface](https://willem.com/global/images/f2e07c82d729.webp)

### Text selection, scrolling and clicking

Typical arguments *for* a mouse involve text and clicking buttons. How are you supposed to select text? Move the cursor? Click that button on a toolbar? Scroll a webpage? Most folks never take a minute to learn shortcuts, but if you do, you can actually save yourself quite a lot of time in the long run!

I would advise everybody to learn keyboard combinations and to learn navigating around text using the keyboard. In iPadOS, Apple made it easy to learn keyboard combinations for common actions. Just long-press the CMD button to reveal an app specific cheat-sheet of shortcuts.

![Reveal available keyboard combinations by long-pressing the CMD-key in any app](https://willem.com/global/images/e559ebdd6b82.webp)

You don't need a mouse for navigating through text, making selections and copy/pasting around. Try this (in any app) and before you'll know it, you're moving the cursor at the speed of light:

- **Arrow (keys):** move the cursor one position at at time

- **CMD+Arrows:** move the cursor all the way up/down/left/right

- **OPTION+Arrows:** move the cursor one word at a time

- **SHIFT + (any of the above):** to select text

- **CMD+A:** to select all text

- **CMD+C:** to copy selected text

- **CMD+V:** to paste selected text

![Don't underestimate the powers of the CMD / OPTION / Arrow / Shift keys: I bet I am faster than most folks using a mouse](https://willem.com/global/images/849c5f0449a2.webp)

If you don't feel like touching the screen when you need to scroll a webpage, email, you can use the keyboard:

- **arrow keys:** scroll up/down precisely

- **space bar:** scroll down one entire screen's height at a time

- **SHIFT + space bar:** scroll up one entire screen's height at a time

## Conclusion

After having used both keyboards on my iPad Pro, I am convinced that I don't want to turn my tablet into a laptop. If I wanted a laptop I would have bought a MacBook.

The key thing (pun intended) to take away from this post, is that you should ask yourself *what* it is you really want from the keyboard? Only you - dear reader - can answer that!

---

## Influencing purchase behaviour

*Applying behavioural sciences principles to the purchase decision process* · 2020-07-31 · https://willem.com/en/2020-07-31_influencing-purchase-behaviour/

This week I stumbled upon a brilliant report on how people make their purchase decision. For my work on the online food order app I am continuously looking into scientific sources to improve performance, conversion and online revenue. This report by Google discusses six biases influencing decision making. It's worth reading their full report, let me explain why.

## Buyer decision process

The buying decision process is the decision-making process used by consumers regarding market transactions before, during and after the purchase of a good or service. It has been subject of academic research for many decades. If you know how customers make their decisions, it might be possible to influence it for the positive.

![A brief history of the evolution of marketing models (Rennie Et Al., 2020)](https://willem.com/global/images/8c5026a5cf32.webp)

Common "marketing speak" often involves phrases like "purchase funnel", "customer journey", "path to purchase". In general this is all the same: buzzword bingo! Yet, this field of research has become increasingly important. The 2020 outbreak of the COVID-19 virus has emphasised online business incredibly.

## Investigating the "messy middle"

The report focuses on what the researches call the "messy middle", it sits between "exploration" and "evaluation" states. Consumers explore their options and expand their knowledge and consideration sets. Then (either sequentially, or simultaneously) they evaluate the options and narrow down their choices. It is modelled as a loop to describe the non-linear nature of the "messy middle", with its iterating between states until a purchase decision is made. **The main question the researchers ask is what can you do to ensure that your product or service wins? How do you persuade someone to stop shopping around and actually buy what you're selling?**

![The Messy Middle model (Rennie Et Al., 2020)](https://willem.com/global/images/0cf7f2b42b33.webp)

## Homo-not-so-economicus

It would seem that most behavioural scientists now agree that our decision-making apparatus involves both reason and emotion. It is not purely rational! From an extensive list of more than 300 principles that where codified over the past 50 years of academic behavioural sciences, the researches distilled a prioritised list of just 6 biases that they deemed closely associated with the explore and evaluate states from their model.

![Six biases influencing the purchase decision process (Think with Google)](https://willem.com/global/images/ce2c504ff301.webp)

- **Category heuristics:** Short descriptions of key product specifications can simplify purchase decisions.

- **Power of now:** The longer you have to wait for a product, the weaker the proposition becomes.

- **Social proof:** Recommendations and reviews from others can be very persuasive.

- **Scarcity bias:** As stock or availability of a product decreases, the more desirable it becomes.

- **Authority bias:** Being swayed by an expert or trusted source.

- **Power of free:** A free gift with a purchase, even if unrelated, can be a powerful motivator.

The researchers used these biases as a basis for a large-scale (they're Google...) shopping experiment with real shoppers, simulating 310.000 purchase scenarios across financial services, retail, consumer packaged goods, utilities and travel.

## Amazing results

What amazes me, is that you can have a fully fictional brand win significant market share if you apply the six biases simultaneously (e.g. creating a 'supercharged product'). Their results showed no less then 28% marked share in the worst case scenario, up to 87% for some categories like car insurances!

![Fictional brands, made up by the researches, won significant market share after applying the six biases (Rennie Et Al., 2020)](https://willem.com/global/images/7a829f7016cd.webp)

![Transfer of preference from original choice to fictional brand, per shopping category (Rennie Et Al., 2020)](https://willem.com/global/images/0cf9a23d0f36.webp)

## Conclusion

Read the full_report (https://willem.com/etcetera/2020-07_Decoding_Decisions_The_Messy_Middle_of_Purchase_Behavior.pdf) for a complete understanding of the messy middle and the behavioural science principles the researches examined.

Use behavioural science principles to your advantage, not to trick the customer into forcing a decision, but by supporting their "normal" shopping process in an optimal way. Provide them with the information and reassurance they need to decide to buy from you (and live up to it)!

### Reference

Rennie, A, Protheroe, J., Charron, C., Breatnach, G. (2020). Decoding Decisions: Making sense of the messy middle, "Think with Google"

---

## Upgrading a 27-inch iMac 5K to 14 terabytes

*Replacing the Fusion Drive with both a SSD and an harddisk* · 2020-07-30 · https://willem.com/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/

This month I did an attempt to upgrade my 27-inch iMac 5K. I wanted to replace the fusion drive with a SSD and a large hardisk. In addition I decided this was a good time to upgrade the RAM memory as well, maxing it out at 64GB. I was on a mission to create the ultimate iMac, but things didn't go to plan!

## iMac

The original iMac was introduced in 1998, it's announcement was not without controversy or anticipation. At that time Apple had suffered a series of setbacks and it was in bad shape. Steve Jobs returned to Apple and Jonathan Ive designed the iMac. The iMac needed to be a grand success in order to save Apple. It did!

![iMac G3 (1998)](https://willem.com/global/images/36dc6e9176cf.webp)

![iMac ad - note the text emphasising to get you online in 10 minutes](https://willem.com/global/images/52c5422faa00.webp)

Unlike most other computer vendors of those days, the iMac was designed to be fun and friendly. No complexity, no hassle, no need to be a geek. It put Apple back on track to become the most valuable consumer electronics company it is today.

![iMac evolution](https://willem.com/global/images/a0434f9e705d.webp)

## 27-inch iMac with 5K retina display

Today's iMac is still very much based on the same concept: a fun and friendly computer. There is only one cable to connect (the power cable) and you don't need a PhD in computer science to set it up. All the computer components are fitted immediately behind the display, creating a slim unified design that tilts up and down on a simple metal base.

![Today's iMac (in two sizes)](https://willem.com/global/images/7859c24f492b.webp)

The iMac of today is an impressive computer, mainly because of its gorgeous high resolution display. The 5K retina display is super sharp and it produces accurate colours. Combined with the many options for storage and processors, it makes a very solid case for the ultimate all-in-one computer. Hence, this is why the iMac *is* Apple's "hero" on the desktop.

## Upgrading

But the upper echelon models don't come cheap: if you fully spec the iMac Pro model, you'll need € 16.308! Then you have an incredible machine that will easily last for *years*. For many professionals this is a 'no brainer'. But for me, it's a lot of money. So, how about a little do-it-myself, I thought? Would it be possible to take my base model iMac and upgrade it into higher stratospheres? How hard can it possibly be...?

![The ultimate iMac Pro, 18 cores, 256GB RAM, 4TB SSD... € 16.308!](https://willem.com/global/images/e7dbc75c11ac.webp)

### Friendly notice: DON'T DO IT!

Upgrading an iMac is not easy. My simple advice would be: don't do it yourself. See an expert, buy a ready-to-go upper spec model. It's easier, safer, and you'll save plenty of time that you can use to earn the extra cash needed to pay for it. Naturally I ignored any such friendly advice... and went into the deep with my crazy plan.

## Preparation

The first step is to make sure that you have updated all the software on your iMac. Make sure it runs well. Then you should make a complete backup of everything. Consider "everything lost" when you're going to do any adventurous tinkering. Then you should determine the exact model you have. You can find this using "About this Mac" in macOS, look for the model number. My iMac 27-inch (2017) had the model number "18,3".

## Find parts

With the exact model number you can start your quest for upgrade parts. There are various shops and online stores offering upgrades. Many of them come with a set of tools, instruction videos and an healthy dosis of *"good luck, you're on your own"*-conditions. I opted for the fastest, biggest PCIe SSD, and a set of maximum RAM from the friendly folks of other_world_computing (https://www.owcdigital.com/products/upgrades-and-tools).

![Few days after ordering my parts, a magic box appeared on my desk](https://willem.com/global/images/f163664e6f14.webp)

![It contained the 64GB RAM and the 2TB PCIe Aura Pro X2 for iMac](https://willem.com/global/images/7617e7c1834f.webp)

## Upgrading the RAM

Upgrading the RAM memory is fairly easy as the iMac has a special hatch near its power connector that provides access to the RAM modules. I upgraded the RAM first to be able to check if the new modules were allright. This is important to know as the next steps are significantly more risky. Knowing that the RAM works makes it easier to identify possible other problems.

![The RAM hatch pops open using the secret button inside the power connector ](https://willem.com/global/images/b821772c6692.webp)

![After installing the new RAM, I powered on my iMac to see if the new modules worked - they did!](https://willem.com/global/images/5f3680361976.webp)

## Fusion drive magic

If your iMac has a Fusion drive you should know that this is not a single device. In fact, a fusion drive are two distinct parts acting 'as one' by a software trick. If you intend to replace either one of them you should "decouple the fusion" before taking the iMac apart. You can do this using some terminal commands.

![Decoupling the fusion drive: separating the conventional harddisk from the PCIe SSD](https://willem.com/global/images/0840a2f57bba.webp)

For my upgrade I intended to replace the Fusion drive's 32GB SSD with a very fast 2TB PCIe SSD. This would provide enough, yet very fast "work" storage. In addition to the ultra fast work drive I opted for a very large 12TB "archive" disk. This would house files I do not access on a hourly basis. By upgrading both parts of the original Fusion drive I would achieve the best of both worlds.

## Opening the iMac

This is where the real adventure starts: the iMac can only be opened using a special roller blade that cuts through the adhesive strips that keeps the display connected to the aluminium enclosure. You should really watch some YouTube_instruction_videos (https://www.youtube.com/user/OWCmacsales/search?query=imac) before you do any attempt.

![Using a special roller to cut the iMac open](https://willem.com/global/images/70231e0fae69.webp)

The gorgeous 5K retina display is very fragile. You should take special care when you attempt to remove the large glass panel from the enclosure. If you order a complete upgrade kit, chances are that you receive some suction caps to help you lift the display. Make sure you don't pull the display too far as there are two cables connecting it to the main logic board. You need to carefully detach them before you can remove the panel.

![Be careful when lifting the glass, there are cables connecting the panel to the logic board](https://willem.com/global/images/5477badcf576.webp)

After you have removed the glass panel you should take the time to remove any remaining adhesive strips. This is a fairly simple process - a welcome chance to breathe again after the nerve breaking step of removing the glass.

![Removing adhesive strips - pretty low tech task](https://willem.com/global/images/ffb68195aa61.webp)

Once you have removed the panel you can see the innards of the iMac in full glory. If you have read Steve Jobs' biography (https://www.amazon.com/Steve-Jobs-Walter-Isaacson/dp/1451648537) (by Walter Isaacson) you know why the inside of the iMac looks beautiful, too. His father was a carpenter that paid equal attention to the parts that one could not see, like the rear panels of a piece of furniture. The mere thought that hidden parts would be ugly, cheap or messy was unacceptable for him. If you buy an Apple computer you should know that all parts (visible *and* invisible) got the same level of attention.

![The inside of the iMac is beautifully arranged](https://willem.com/global/images/71710e6f8d72.webp)

The hardest part to reach inside the iMac is the PCIe slot where the SSD should be installed. Before you can access it you have to remove nearly all components from the iMac. This is a really cumbersome operation, involving many different (super tiny) screws. Take your time, follow a guide, don't rush yourself.

![Removing screws from the iMac ](https://willem.com/global/images/511bdbe89c5e.webp)

![An average fly is bigger than most screws inside the iMac](https://willem.com/global/images/380b3c662163.webp)

![Removing an iMac speaker](https://willem.com/global/images/d16255accbe7.webp)

![Disconnecting the power button cable](https://willem.com/global/images/94e90ec49273.webp)

![Removing the Fusion Drive 1TB harddisk](https://willem.com/global/images/147d54f8316c.webp)

![Removing the main ventilator shaft](https://willem.com/global/images/d4958154c293.webp)

![Removing the other iMac speaker](https://willem.com/global/images/b6c5ebc897e6.webp)

![The Power Supply should be handled with extra care, don't touch any solder joint as the capacitors can retain some charge after disconnecting the power cable!](https://willem.com/global/images/3536798be919.webp)

![Removing the power supply board](https://willem.com/global/images/0ab106c1e2c8.webp)

![Work in progress: most parts removed, the logic board remaining](https://willem.com/global/images/85849bd18759.webp)

![Removing the antenna cables, remember their order using a piece of tape](https://willem.com/global/images/e2178564b3d1.webp)

![Disconnecting the iSight's (Applespeak for webcam) USB cable](https://willem.com/global/images/bd68062a51db.webp)

![Disconnecting the microphone cable - right under my thumb - it's very tiny!](https://willem.com/global/images/c76fa90e60f7.webp)

![Disconnecting the headphone cable](https://willem.com/global/images/276dc432468d.webp)

![Removing screws from the heatsink](https://willem.com/global/images/6cfde83486e4.webp)

![A (nearly) empty iMac enclosure](https://willem.com/global/images/100051ed9848.webp)

After all the parts are removed from the enclosure, you can simply flip the logic board over to gain access to the PCIe slot. Here there is one last screw that keeps the factory installed SSD in place.

![The factory installed 32GB SSD that we're going to replace](https://willem.com/global/images/8e6f6c1d3de1.webp)

![The new drive is ready to be installed - what could possibly go wrong?](https://willem.com/global/images/35c8bf89fa6e.webp)

After installing the new drive you have to reverse the entire process to see if your handy work was any good. You have to put back all parts before you can power on the iMac to see if the new parts get recognised correctly. This means you really have to be patient, take your time to put back all the (tiny) parts and connectors.

## Oops!

After putting back all the parts, cables, screws and connectors I powered on the iMac. This is the moment of truth... will it work? Well..., in my case: NO!!

![iMac in trouble: no system drive found](https://willem.com/global/images/ab8f7a8173c7.webp)

When you see the folder with a question mark you should be able to start the recovery process by CMD+R or CMD+OPTION+R. But my iMac did not respond to keyboard input. I connected a wired USB keyboard to exclude any Bluetooth connection problems. It did not work... o oooh!

![Creating a USB recovery drive using another MacBook](https://willem.com/global/images/344fe607d496.webp)

Then I tried to create a bootable USB recovery drive using another MacBook. Perhaps that getting in the installation process would enable me to get the keyboard working again. But the recovery drive was not recognised either!

In a last attempt I connected a bootable Debian GNU/Linux installation drive that I used to_create_my_own_tablet_OS_earlier (https://willem.com/en/2020-03-09_making-my-own-tablet-os/). I was stupefied when the iMac *did* recognise *that* drive. WHAT?

![The Debian GNU/Linux installer was in fact recognised by the iMac](https://willem.com/global/images/e8636f886162.webp)

Unfortunately I could not get the keyboard to work, although the iMac would boot the Debian GNU/Linux installer I could not communicate with it. This was hugely frustrating. I decided to open the iMac again to see if I had made any mistakes during the hardware upgrade... repeating all the steps again! Once I got to the PCIe slot I noticed that the drive was not entirely snug into the slot: you can see that the copper connector is partly visible.

![Oops: the newly installed SSD drive is not correctly fitted in the PCIe slot! An expensive mistake! ](https://willem.com/global/images/7ce0798e7272.webp)

I reinstalled the new PCIe drive and made sure it was installed correctly. Again I had to reassemble the entire iMac to test if this would make any difference. I feared that my mistake could have caused an electrical surge, causing permanent damage to the iMac.

![The SSD drive installed correctly, note how the connector is much deeper in its socket](https://willem.com/global/images/cecc39b2cc83.webp)

To my great disappointment it did not make any difference. Believe it or not, I repeated this process for at least 5 times with different configurations:

- no drives (at all)

- only a SATA disk

- only the new PCIe SSD

- only the old PCIe SSD

- the original Fusion Drive combination

And yes, that meant assembling and disassembling the iMac 5 more times... you gotta love tiny screws!

## Visiting the doctor

At this stage I pretty much assumed that I had caused permanent damage to the main logic board. The misfitted PCIe SSD probably damaged some internal chip that is responsible for USB connectivity. I only know "so much" and before calling it a loss I wanted to double check if there was not one more thing I should have done. So I visited the doctor, the Apple Premium Service Provider.

![Visiting Microfix in Amsterdam - the local Apple Premium Service Provider](https://willem.com/global/images/97bc9f87ec45.webp)

Naturally this feels like a walk of shame, taking your wounded iMac into the workshop and confessing the horror you did to it. Luckily, the local expert seemed to agree with me about my diagnosis: a damaged logic board. The bad news, a new logic board (excluding installation) will cost you € 750-ish... with no guarantee that would solve the issue. After I thanked Microfix for their time and expertise, I brought back my wounded aluminium friend, indecisive of what my next step would be.

![On the logic board I found a number - I took a photo of it during one of my numerous assembling sessions](https://willem.com/global/images/cb3515c407de.webp)

Inspired by my recent_success_on_eBay (https://willem.com/en/2020-07-09_repairing-a-giro-aeon-bicycle-helmet/), I tried to find a replacement logic board for my iMac. There are sellers outside Apple's official network that offer parts for refurbishing computers. Perhaps that one of these shops would have an exactly matching logic board in stock.

![LUCKY ME! Found a perfectly matching replacement logic board - in new old stock condition!](https://willem.com/global/images/20432f71b906.webp)

A seller in Ireland happened to have just the right part in stock. I contacted them upfront to verify if I was indeed right when thinking this was the right part for me. They confirmed and shipped the logic board. Few days later it arrived and - hooray hooray - I could start disassembling again!

![Another box with parts - this time from Ireland](https://willem.com/global/images/1a4c986a048f.webp)

![It contained a new logic board, but without a processor](https://willem.com/global/images/41ff42b59d2b.webp)

Although the logic board was entirely new, it did not have a processor installed. That meant that I had to remove the processor from my faulty logic board. In a normal computer this is difficult enough, but on an iMac with integrated heatsinks it is a little extra challenging. Luckily my "screwing skills" where perfected by now.

![Removing the heatsink from the logic board](https://willem.com/global/images/68e38d95030f.webp)

![Holding the Quad core processor in my hand](https://willem.com/global/images/230aeb827529.webp)

After I transplanted the processor onto the new logic board I reattached the heatsink. Then I installed the PCIe SSD, double, triple, quadruple checking it. As I had clear access to it, I moved the RAM memory to the new logic board, too. Finally I had to reassemble the entire iMac once more to see if I had any more luck this time.

![Double, tripple, quadruple checking the PCIe SSD drive](https://willem.com/global/images/5f3245a66b84.webp)

![Migrating the RAM modules to the new logic board](https://willem.com/global/images/dc8243a14800.webp)

![YES, it works! The new logic board accepted keyboard input and allowed me to proceed with macOS installation](https://willem.com/global/images/0b5cfdf6fc29.webp)

![Many hours later, the iMac was working again!](https://willem.com/global/images/eadd52f31e13.webp)

## Conclusion

It took quite some determination to save the iMac from my mistake. But I really wanted the computer to survive as I really like its design and display. I would have felt guilty if I had let it go to waste.

If there is one thing to take away from this post is that not all things I do are successful. I make mistakes and screw up (pun intended) every now and then. Giving up and calling it a day is sometimes the best thing to do. But I didn't and ultimately that is what made this computer work again. Happy me.

---

## Repairing a Giro AEON bicycle helmet

*How to replace the Roc Loc 5 system* · 2020-07-09 · https://willem.com/en/2020-07-09_repairing-a-giro-aeon-bicycle-helmet/

This month my trustworthy Giro Aeon bicycle helmet broke down! Normally I wouldn't hesitate to invest in safety and thus buying a new one. But I like the Aeon helmet so much that I went through some extra trouble to fix it. Read along to see how I did it.

## Giro Aeon

The Giro Aeon was once the top of the range from the American Giro brand. I bought it in 2016 and it has been my companion on the bike ever since. It is one of the lightest helmets available at around 190 grams. With 24 vents, coupled with internal channeling, the Giro Aeon is one of the better helmets in terms of keeping your head cool on hot days.

![Wearing the Giro Aeon helmet](https://willem.com/global/images/3022f2495dae.webp)

## Roc Loc 5

Inside the helmet is the so called "Roc Loc 5" fixation system. It is a set of lightweight plastic straps and tightening wheels that allow you to fit the helmet precisely to your head. Unfortunately the Roc Loc 5 system in my helmet got damaged: one of the plastic connections got broken.

![The Roc Loc 5 broken in my Giro Aeon helmet](https://willem.com/global/images/f54562060071.webp)

## Attempt 1: Trying to glue it

I tried to fix the plastic connection by glueing it. Instead of a simple joint, I tried to maximise my glue attempt by wrapping the plastic connection in another piece of (thin) plastic. It didn't work and it is a bad idea. You should never try to fix your helmet by glueing or taping it together again. Helmets are designed to sustain certain impacts. If you change the way it's fixed to your head, you'll effectively change the dynamics that give the helmet its protective characteristics. When it comes to safety you should never do this. I tried it because I thought it was better than no helmet, just for a few single rides... Just don't!

![Glueing the Roc Loc 5 - bad idea](https://willem.com/global/images/7d60416fd8ce.webp)

## Attempt 2: Replacing the Roc Loc 5

The only other thing I could think of was replacing the faulty Roc Loc 5 system. When the helmet was new this would have been easy peasy. Just order a new part "et voila". But Giro does not produce the Aeon anymore, and conveniently enough newer models do not use the Roc Loc 5 system... this smells like planned_obsolescence (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/) to me, bleh!

![Roc Loc 5 - try finding this part on the internet...](https://willem.com/global/images/71a943add0fc.webp)

There my hunt for a replacement part started. Boy, I did find *a lot* of product listings, but upon close inspections nearly all these product pages indicated the Roc Loc 5 being 'out of stock'. But... if anything fails, try_eBay (https://www.ebay.com/itm/GIRO-ROC-LOC-5-REPLACEMENT-SYSTEM-ONE-SIZE-FITS-ALL-BRAND-NEW-AND-AUTHENTIC/170669935334)!

![You'd be surprised what you can find on eBay... hooray! New old stock Roc Loc 5!](https://willem.com/global/images/2c57a701058b.webp)

Because of the very few remaining sellers that offer the Roc Loc 5 system, I took my chance and ordered from this_eBay_seller (https://www.ebay.com/itm/GIRO-ROC-LOC-5-REPLACEMENT-SYSTEM-ONE-SIZE-FITS-ALL-BRAND-NEW-AND-AUTHENTIC/170669935334). Oh, and yes did I buy a few of them, ha! Shipping (due to COVID-19) took nearly an entire month! My Roc Loc 5 travelled through 3 different States in the U.S. before it arrived in The Netherlands... :-)

![Shipping details - my new Roc Loc 5 has seen parts of the World I have yet to visit!](https://willem.com/global/images/a90c4f779970.webp)

## Replacing the Roc Loc 5

Once you've found yourself a replacement part, installing it isn't that hard. Just make sure you take some photos before you remove the original Roc Loc 5. It makes it easier to put back the strap in the right place.

![New Roc Loc 5 installed](https://willem.com/global/images/9921b6bd1a66.webp)

![Rear of the helmet, note how the strap goes through the Roc Loc 5 ](https://willem.com/global/images/d57e937fdd4d.webp)

![Side image the helmet](https://willem.com/global/images/584e2e65af1c.webp)

While my new Roc Loc 5 was shipping, I did find another store selling new old stock paddings for my Aeon helmet. A fresh set of paddings would make my helmet feel (and smell) new again!

![Removing the old padding is easy, just detach the velcro tape](https://willem.com/global/images/0fd953caaf8f.webp)

![Installing fresh paddings isn't hard either, just make sure to align it properly](https://willem.com/global/images/c26e84b2acf2.webp)

## Conclusion

After hunting down parts from the other side of the world, my helmet is on my head again! Hooray! Agreed, one could wonder if it was worth all the effort, but I really like my helmet.

I really hate so see an otherwise fine product go to waste. This world has enough garbage already, if you want to make a difference, you should consider fixing things more often!

![Wearing my helmet again!](https://willem.com/global/images/41b6864cad77.webp)

![For those of you that are interested, this is a picture of the barcodes + part codes of the Roc Loc 5 system and the pad set](https://willem.com/global/images/6229135b5e5f.webp)

---

## Some thoughts on touch screen user interface design

*Creating intuitive natural interfaces* · 2020-06-24 · https://willem.com/en/2020-06-24_some-thoughts-on-touch-screen-user-interface-design/

Past weeks I have been working on a new app involving personal health. The main challenge is to come up with an intuitive, natural interface that works well on small touch screen devices. But what is it that makes an touch screen interface any good? Read along for some best practices.

## Mouse and keyboard heritage

Traditional PC application interfaces have been primarily designed and developed with distinct input devices in mind, like the keyboard and mouse. Many conventions, best practices and design patterns have their link to this past. This is all fine when you are desiging an app for traditional PC's, but chances are that your target audience is using modern touch screen devices these days. It would be a mistake to recreate the old UI on modern touch screen devices!

![Recreating old UI patterns on a modern touch screen device is not going to win you any usability awards... (although, who doesn't miss Clippy?) ](https://willem.com/global/images/9710101b75bf.webp)

## Natural interactions

Modern touch screen devices enable interactions to become more natural as they eliminate the need for input devices such as the mouse. The device *is* the input button: on screen elements can be easily manipulated for direct and immediate interactions, using touch and gestures.

![Directly manipulating the on screen elements feels natural - a mouse in this use case would be redundant](https://willem.com/global/images/37433282f380.webp)

## Declutter and size elements adequately

A finger is a lot larger than a pointy mouse cursor, this requires a different approach to sizing interface elements. Interactive elements should be big enough to be touched, with ample margins between them. Targets to close together increase the likelihood of error.

![The big 'yes/no' buttons reduce the likelihood of error as they do not require mouse pointer pixel precision](https://willem.com/global/images/1c0b65647905.webp)

## Optimise textual inputs

Depending on what you're building, chances are that you will need some kind of text or numeric input at some stage. The easy (and wrong) way to do this is to simply show a complete virtual keyboard. Instead of recreating a virtual recreation of the past (the physical keyboard) you should take the opportunity to rethink *what* you're asking the user. Depending on this *input context* you should then show a minimal keyboard that only offers those keys that are relevant.

![Contextual keyboards provide a better way to enable textual input. It makes no sense to show a full QWERTY-keyboard if you only ask for a numeric value.](https://willem.com/global/images/9022cd4a6bb1.webp)

## Rethinking positions

Where traditional PC applications often have their toolbars on top of the windows, replicating this on a touch screen device would cause the hands to obstruct the remainder of the screen. In addition to keeping the contents of the screen visible, you should also consider the ergonomics of handling the device. Frequently used buttons should preferably be placed near the natural position of the fingers.

![The Back / Hide / Save buttons are near the thumb: they are within range and reaching for them does not cover the contents of the screen](https://willem.com/global/images/9e15010dbbdf.webp)

## Forget hovering and tooltips

Forget interface elements, such as navigation structures, that rely on hovering. Most touch screens do not register fingers floating above the glass. Neither can you rely on tool tips to explain functionality of your interface. A touch screen UI should be clear to the user at first glance.

![Navigation structures that rely on hovering are NOT going to work on touch screens](https://willem.com/global/images/8b0744e3bebc.webp)

## Be creative

Designing for touch interaction is something you should - above all - approach as something creative. Instead of recreating *the old*, you should be thinking of all the possibilities *the new* offers.

![Snake '97 - It's fun, but it's UI design is arguably bad](https://willem.com/global/images/840381231d21.webp)

When I created the Snake_97_game (https://snake97.com) for touch screen devices I recreated the old input mechanism with painstaking_attention_to_detail (https://willem.com/en/2018-02-21_updating-snake-97/). While I think this is fun, it is arguably bad UI design as it totally ignores all the possibilities offered by the new technology. It's no surprise then that games like Angry Birds are so successful as they take *full* advantage of the natural interaction made possible by touch.

![Catapulting birds is fun because of the natural interaction that is key to the Angry Birds game](https://willem.com/global/images/c673e319ed77.webp)

## Conclusion

One influential professor once asked me: "But is it *fun*, Willem?". When you are designing for touch, you should really consider this question. If you answer it with *"YES!"* then you should consider yourself on the right track.

You should be reimagining interaction instead of recreating old things. Sure, not everything old is bad; but it would be a mistake to ignore the potential good that modern technology enables!

---

## Tudor Black Bay 36 long-term review

*Six months on the wrist* · 2020-06-17 · https://willem.com/en/2020-06-17_tudor-black-bay-36-long-term-review/

For the past six months I have been wearing the same watch, pretty much every day and night. It's a Tudor Black Bay 36 watch in steel, with a black dial. I like minimal (yet functional) design that lasts, this watch certainly ticks the right boxes. Read along to find out how wearable a smaller watch is in daily practice.

## Tudor

Tudor is the secondary brand of Rolex, it's founder Hans Wilsdorf was very clear that the purpose of the Tudor watch company was about "making a watch that our agents could sell at a more modest price than our Rolex watches, and yet one that would attain the standard of dependability for which Rolex is famous".

![Tudor Oyster Prince ad (1952) ](https://willem.com/global/images/0ffebbd149c9.webp)

Fast forward to today and you'll find the Tudor brand very much alive, refreshed and fully firing on all cylinders. Modern Tudor watches provide excellent value, with quality fit and finish.

## Tudor Black Bay 36

If you are a regular visitor of this website, you'll know that I_like_minimal_design (https://willem.com/en/digital-minimalism-doing-more-with-less-technology/). Things that are designed like this don't scream for attention, they'll fade into the background in a reliable, predictable, functional way. The Tudor Black Bay 36 is very much like that: unremarkable on a photo, yet very dependable and practical on the wrist.

![Tudor Black Bay 36 (photo by Tudor)](https://willem.com/global/images/743025cc12e3.webp)

The watch features a glossy black dial and a non-rotating smooth bezel. It gives it a smooth appearance, devoid of visual clutter and unessecary decoration. There is subtile silver printing on the dial, and the indexes are composed of a triangle at 12, batons at 3/6/9 and dots for the rest. The watch features the so-called "snowflake" hands that have a cult following thanks to legendary historic timepieces worn by special units in various militaries. It's a subtle hint to Tudor's heritage. The watch strikes a very nice balance between elegance and sportiness. I think it is a timeless timepiece.

![The pitch black dial, smooth bezel and high contrast indexes come alive under daylight](https://willem.com/global/images/9fb490f96236.webp)

Just like early Tudor watches, this Black Bay 36 follows the classic lines of the (Rolex) Oyster case - which is heralded as a masterpiece in horological design. It gets its name from the waterproofness, like an oyster shell closing itself to protects its innards against the sea. It sits beautifully on the wrist.

![Tudor Black Bay 36 on the wrist](https://willem.com/global/images/ce7d4ff62d55.webp)

Although 36MM could be considered a small watch size for men by modern standards, the watch's incredible balance makes you forget about millimeters once you'll start wearing it. Yes, it is smaller, but it makes the watch unobtrusive in a way that few modern timepieces are.

![Black Bay 36MM size compared to a Whoop bio sensor](https://willem.com/global/images/a21f7b7da71c.webp)

![In my average-sized hands, the watch is just the right size](https://willem.com/global/images/11d535e5868b.webp)

The Black Bay 36 is powered by the ETA 2824 automatic movement. For those unfamiliar with mechanical movements, this means that the watch runs without batteries. It's one of the advantages_over_modern_smartwatches (https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/). The watch 'charges' by your body's movement. It has been calibrated by Tudor to keep time accurately (my watch has a -1.5/2.0s a day). Some watch enthousiasts are favouring inhouse movements these days. Yet, owning a watch with a very common movement, like the ETA 2824, has the practical advantage that you pretty much have the guarantee that somebody will be able to service it in the future. This ensures longevity and future reparability, and I really like that - as I_hate_planned_obsolescence (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/).

![The Black Bay 36 is powered by the ETA 2824 movement (photo by Zeitauction GmbH) - a well known mechanical calibre with a trustworthy trackrecord](https://willem.com/global/images/91dd1ac8cffd.webp)

## In practice

For the past six months I have worn the watch during pretty much everything I do:

- typing

- visiting customers 

- sleeping

- cycling

- swimming

- being a daddy

![The watch feels at home in and around the pool](https://willem.com/global/images/b4679d90938a.webp)

Thanks to the legendary Oyster case you can be very comfortable when you take this watch in or near a pool. The metal bracelet is perfectly waterproof, too. Other models in Tudor's Black Bay watch lineup are dive watches; this watch carries the same pedigree in a compact package.

![The 36MM size is really very comfortable](https://willem.com/global/images/088c48756082.webp)

Because of the watch being a little smaller than most contemporary men's watches, it wears a little lighter on the wrist, too. This is especially nice when you wear your watch while sporting. Don't worry about sweating, it's easy to clean as you can simply keep it on when you take your shower. During my bike rides I really didn't mind wearing the little Tudor.

![It's light enough to be comfortable while cycling...](https://willem.com/global/images/ce798262a900.webp)

![... and when eating ice-creams afterwards :-) ](https://willem.com/global/images/d8eaf6ee0ce7.webp)

The Oyster case is accompanied by the Oyster bracelet. It fits the watch perfectly. Unlike most Rolex bracelets that feature shiny polished center links, this Tudor's bracelet is fully brushed. When you wear it, you immediately feel why Rolex is famous for their bracelets: they are comfortable, yet very strong and precisely engineered.

![The Oyster bracelet - precisely engineered to be both comfortable and strong](https://willem.com/global/images/60cb9537fcc7.webp)

![The steel bracelet fits the watch perfectly](https://willem.com/global/images/754aee3b3f24.webp)

![But the Oyster case is beautiful on other straps, too, like on this gray NATO](https://willem.com/global/images/eed23a6734d0.webp)

![The Black Bay works well on other straps, too](https://willem.com/global/images/65a5b3e03c37.webp)

## Conclusion

If you are looking for a perfect everyday watch, a reliable timepiece that strikes a nice balance between formal and sporty? Look no further, the Tudor Heritage Black Bay 36 is it!

While wearing it for six months I really learned to appreciate it's understated appearance. Don't let the small(ish) 36MM size hold you back: there is greatness in this fine little watch!

![This is what 6 months of continuous wear look like on a Oyster bracelet!](https://willem.com/global/images/a997226a7353.webp)

---

## Linking Lemmid Store with kitchens

*Integrating with external systems that you don't control* · 2020-06-12 · https://willem.com/en/2020-06-12_linking-lemmid-store-with-kitchens/

As part of the food ordering app I am building, I needed to design a reliable way to link the app to external systems. These external systems are beyond my direct control and include different checkout registers, kitchen management systems and ticket printers. Read along for more on designing for the unknown and unreliable.

## Food ordering app

The app I am building is Lemmid_Store (https://lemmid-store.com), it is a user friendly app that allows people to place (and pay for) takeaway food orders. You can find all_posts_on_Lemmid_Store_here (https://willem.com/blog/lemmid-store/).

![Lemmid Store - an app to order takeaway food](https://willem.com/global/images/e4dce3b523ff.webp)

## External systems

The need to connect to external systems is driven by the desire to integrate the food ordering app into the business processes related to the food delivery service. Think of things like:

- collecting order data into administrative records (e.g. bookkeeping)

- forwarding orders to the kitchens, where the meals are prepared and packed 

- providing easy access to routing information, showing where the food should be delivered

- scheduling food orders that are meant for later deliveries

![Printed ticket - through an external connection - including detailed order data like product modifiers (customer's choices per product)](https://willem.com/global/images/2c395cf2f419.webp)

### Challenges with connecting to external systems

You may not realise it, but connecting to external systems can be tricky. If you think of the ordering app as a kind of "engine" (like in your car), you essentially want to integrate this engine with external parts. As you can imagine, not all parts are equally suitable to fit under the figurative hood. To make matters even more challenging: you do not know for sure how reliable the external parts are. You must design your integration in such a way that different external parts can be connected easily and that performance is independent on the reliability of these external parts.

![Integrating external systems into your app is like fitting third-party parts to an engine: you must carefully consider their fit and reliability (image of a combustion engine, public domain)](https://willem.com/global/images/a1d4ad9cd8a3.webp)

Like with a combustion engine, you must consider fit and reliability when connecting integrating your software with external systems. **You cannot assume that external software:**

- is a perfect fit 

- is always consistent

- is always available / present

- is trustworthy

To design for this rather grim view on external connections, I thought it was a good idea to let the main backend server of my food ordering app offload the responsibility for connecting with external systems to a purpose built 'connector server'. The connector server would then independently connect to the external system. This way the main server only communicates with 'first party' parts and systems, minimising risks of misfits and possible downtimes.

![Separating the main backend server from the external systems by introducing a purpose built 'connector server'](https://willem.com/global/images/2e9aca708f2b.webp)

In practice this means that the 'connector server' is actually a different machine, running its own software stack. There are a few important advantages to this segmentation:

- **security:** the connector server does not keep a complete record of all orders, only those orders that need to be forwarded to an external system are kept in memory temporarily. A possible security problem in an external system will only expose a minimum amount of data. 

- **fits anything:** the connector server can accommodate many different protocols and ways to connect to external systems. Connections to external systems can be added much like the server 'learning a new language to speak'. As it's already a 'multi language affluent', adding a new dialect or language is often easy. Connecting to different external API's is easier when you have all the building blocks in place to (re)structure data. 

- **accommodate unreliability:** A simple queueing mechanism in the connector server allows it to elegantly handle possible downtime and problems with external connections. By logging and queueing per external service it becomes possible to minimise impact on other parts and connections when one services goes down. 

## Conclusion

However tempting it is to simply bolt on new and fancy parts to your app, you must carefully consider your setup to make sure it will perform reliable.

Designing backend server software to connect with external API's is challenging. You must hope for the best, but design for the worst!

---

## Different ways to visualise health

*Looking at games and fitness apps* · 2020-05-25 · https://willem.com/en/2020-05-25_different-ways-to-visualise-health/

This month I did some research into how health is visualised in fitness apps and games. For a new app involving personal health I am looking for an intuitive way to visualise how healthy one person is. There are many colourful approaches out there!

## How healthy your are

The app I am working on is still very much under development, but it provides a way to calculate how much risk you have on a cardio vascular event, like a heart attack or illness. For this app I am looking for a modern, fresh way to visualise this risk / health ratio.

## Research

I looked at various health and fitness apps to see how they visualise health. In addition to these "serious" apps I thought it would be fun to look at games, too. Game designers sometimes have find creative ways to visualise health. It can be a good source of inspiration for the app I'm working on.

## Apple Health, Activty and Apple Watch

As companion app to the Apple Watch, the Activity_app (https://apps.apple.com/nl/app/activiteit/id1208224953) is the central hub for everything the Apple Watch measures with regard to personal health and fitness tracking.

![The Activity app by Apple shows data measured by Apple Watch](https://willem.com/global/images/2e660ac913d9.webp)

Things to take away:

- bright neon colours

- main graphics are circles ("rings")

- different colours indicate different metrics

- there are colourful medals to be earned

- these medals can be shared with others (look how healthy I am)

## Biostrap

The Biostrap (https://biostrap.com) app is the way to access data collected by the Biostrap_sensor (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/).

![The Biostrap app shows data collected by the Biostrap sensor](https://willem.com/global/images/ecfe9d33c8da.webp)

Things to take away:

- bright neon colours

- colourful graphs and circle icons

- green indicates 'good', red indicates 'bad'

## Pillow

Using the Pillow (https://apps.apple.com/nl/app/pillow-automatic-sleep-tracker/id878691772) app users can analyse their sleep. The app works with Apple Watch to collect sleep data such as heart rate and body movement.

![Pillow sleep app](https://willem.com/global/images/2aa0def4304d.webp)

Things to take away:

- bright purple colour as main theme

- bright colours in graphs

- main graphics are circles

- circles work well on the small (squarish) Apple Watch display

## Whoop

The Whoop (https://whoop.com) app allows access to data collected by the Whoop_sensor (https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/). The app consolidates large quantities of data into two main metrics "strain" and "recovery".

![Whoop showing strain and recovery](https://willem.com/global/images/4b67e45f4985.webp)

Things to take away:

- bright colours 

- different colours have different meanings

- green indicates 'good', red indicates 'bad'

- main graphics are circles with percentages in them

- graphics are supported by "the voice of Whoop" text boxes

## Mario

Nintendo's Mario is possibly the worlds most famous game character. The Japanese game company is known for their creativity and friendliness in their game design.

![Mario 64 and a the Super Mario Galaxy life bar](https://willem.com/global/images/1e59f261fd36.webp)

Things to take away:

- bright colours

- life counter "4x Mario" (upper left)

- life meter in a circles (bottom)

- different colours for different "life"-values

- numbers inside the circulair graphics

## Doom

Possibly one of the most legendary first person shooters is Doom (https://en.wikipedia.org/wiki/Doom_(1993_video_game)) from 1993. This video game by ID Software greatly influenced many other games, it's an absolute classic.

![Doom and the protagonist "Mud" showing how he feels ](https://willem.com/global/images/d55fb06b37b7.webp)

Things to take away:

- health is expressed as percentage

- Mud (the protagonist) is visible, showing how he feels

- The lower his health score gets, the more beaten up he appears

## Conclusion

By looking at different apps and games you can get an idea of how to design health visualisation yourself. This is certainly something that helped me understand how to visuale health.

Visualising health is done in various ways, but there are common themes across most of the apps and games. Circulair graphics and bright (neon) colours are often used. It's funny to realise that game design overlaps with the design of the more serious heath and fitness apps. Therefore I think I need to spent more hours gaming, purely for work of course. :-)

---

## Scalable application design without magic

*Leveraging client computing power for high performance with many users* · 2020-05-11 · https://willem.com/en/2020-05-11_scalable-application-design-without-magic/

As part of the online food ordering app I'm building, I needed to design a scalable backend infrastructure that could handle lots of concurrent users. Scalability is considered a hard problem to tackle. Often it's presented like it's something magical, done by million dollar companies using secret tools. But, there is no such thing as magic, or is there?

## What is scalability?

If you're building an app, you probably start very small. Just a few users (or only you, the developer) that work with the app. Everything will be jolly good: the app works well, fast and there are no problems. *(cherish this feeling!)*

![One user interacting with one server](https://willem.com/global/images/02bda6e71f78.webp)

In this early and small scenario the single server that runs the app can handle the user interacting with it. Every time the user  taps or clicks a button, the single server does some work. If you program well, these workloads can be optimised into efficient chunks of work. Doing it like this is a typical example of a monolithic_software_architecture (https://willem.com/en/2020-03-03_monolithic-vs-microservices-software-architecture/).

Even if your project or app is rather small, at some point there may be an influx of users. If your system can't support high loads, it has high chances of failure.

![Server under high load handling multiple concurrent users](https://willem.com/global/images/0983daa5d3fa.webp)

Because of the_monolithic_app_design (https://willem.com/en/2020-03-03_monolithic-vs-microservices-software-architecture/), all users interact with the same server. All their interaction (taps, clicks, input) is handled by this server. With an increased load it has to work a lot harder. At a certain point, you will notice things slowing down because the server cannot keep up with the amount of work it has to do. This means your app does not scale well, in other words: you're in trouble.

### Failure on 'moment supreme'

Not scaling well is a big problem that nobody should underestimate. Most apps (and their business models) rely on high volumes with little revenue per individual user. If you want your app to be a (financial) success, you need to make sure it works well when there is a sudden increase of traffic. If your app crashes when it suddenly gets the attention of the masses, you'll miss a 'one-in-a-lifetime' opportunity for (organic) growth.

In a way designing for scalability is like keeping your seatbelts fastened when you're sitting in your self-built rocket ship, featuring experimental engines. You never quite know exactly when it will ignite, but when it does you'd better make sure you sit tight (and enjoy the ride!).

## Common ways to achieve scalability

A lot has been written on building scalable apps, common ways to improve scalability are:

- **Increase server capacity**: add more memory, CPU power, storage. This will work, but it will only get you 'so far'. 

- **Add more servers**: instead of a single server acting as a bottle neck, you can add more servers that will share the workload. This is easier said than done as it will require load balancing and data sharing which can be tricky (e.g. if you have an order counter, and two servers are counting, which one determines the next number?)

- **Optimise programming code**: use the right tools! Choose a performance oriented programming language and ditto server software. Look into functional programming to allow your code to run on multiple cores asynchronously. Make it stateless. Benchmark it. Optimise it. Every millisecond gained on a single request adds up quickly when you're handling big volumes. 

- **Use the database and separate it from the application server**: If you're using a database, leverage its power! Take advantage of query caching, indexes and search capabilities. Most database solutions offer battle-proof clustering options; don't try to invent the wheel that others have perfected already.

The best thing you can do is to consider all of these options. Even if you're not adding more servers right away, you should write your code to support it later on. Benchmarking and optimising your code should be an integral part of your work, not just an afterthought.

## Leveraging client computing power

When you have considered all the common ways to achieve scalability, there is "one more thing".

![Smartphones (and tablets, PC's) have become more powerful over the years (image: Apple)](https://willem.com/global/images/e4d580ef3ee0.webp)

Few developers consider this: the scalability problem contains the solution! When you have 1000 users, you have 1000 computers with powerful CPU's and lots of memory. Modern computers and smartphones have become increasingly capable.

You simply have to find a way to tap into the client's computing power. While it may sound like an evil thing (using the user's computing power), it will provide them with a much better, faster, experience. What's best is that *their* computing power will be spent on *their* fantastic experience, solving your scalability problem as happy side effect.

![Leveraging a user's device: the user's phone does most of the work originally done by the server](https://willem.com/global/images/3b24ef5be7d6.webp)

By leveraging the user's computing power, you reduce the amount of work the server has to do. Instead of the server doing a little work *every* time the user taps or clicks a button, this work is now mostly done by the user's device. This is more efficient than communicating over a Wifi/4G connection with a server (saving battery power and time).

It requires a little re-thinking, but this principle can be applied to web applications too. Instead of handling all things on the server, you can perform a lot of work on the client. Things like searching, browsing, filtering, navigating and even adding things to a shop cart can be done using client side JavaScript. You - dear developer - have to look for ways to make this work, but if you succeed you'll have near infinite scalability at your fingertips.

## In practice: food ordering app

For the_food_ordering_app (https://willem.com/en/2020-05-01_designing-an-interface-for-a-food-ordering-page/) I looked for ways to leverage the client's computing power to achieve high performance. The main challenge with delivery and takeaway orders is that they peak around diner time. Lots of people use the app around the same time, this is a recipe for scalability problems.

![Ordering food online](https://willem.com/global/images/d08b396a761f.webp)

If you think of ordering food online, you can break the entire process into smaller chunks:

- **1) Opening the page**: loading the app/page

- **2) Browsing the different options**: listing the products, seeing their descriptions, prices, photo's, etc.

- **3) Searching for something specific**: search by category, product name, etc.

- **4) Selecting a product**: adding it to your order

- **5) Customising a product**: selecting a sauce, side-dish, topping, etc. 

- **6) Entering your information**: your name, phone number, delivery details, etc. 

- **7) Paying for your order**: selecting a payment method, connecting to your bank or credit card

- **8) Closing the app**

Most of these steps can be programmed in such a way that the server is *not necessary*. Only step 1 (**loading**) and step 7 (**paying**) require contact with the backend infrastructure. It is important to realise that steps 2 to 5 are repeated multiple times, as it's common for users to add multiple products to their order.

![Separating the remaining server workload: serving products and handling orders](https://willem.com/global/images/1d2831da7a52.webp)

By separating the remaining workload by task, the software can be further optimised. The **"product server"** is optimised to serve static assets (texts, prices, images) that allow the client to create the product browsing experience. You can highly optimise this kind of server, by leveraging caching, HTTP/2, compression, etc.

Only those users that complete the ordering process will be forwarded to the **"order server"** which handles the payment. It will connect to the payment provider. Once a payment is completed, the payment provider will contact the order server to inform it about the payment status. This is something you want to take full (server side) control over, as I did when I_designed_a_payment_system (https://willem.com/en/2020-03-25_designing-and-implementing-a-micro-payment-system/) earlier. The remaining workload on the "order server" is much smaller as not everybody will place an order, and much of its order processing work can be done in the background.

![Handling lots of traffic through distributed computing](https://willem.com/global/images/4c106f30570a.webp)

To maximise scalability you can easily add multiple servers (or use a content delivery network) to serve the static assets. For the food ordering app I use a separate "product server" *per restaurant*. This enables high performance and reduces loading times. People notice it's fast, some can't believe it's web technology, it's *almost* magical.

## Conclusion

Designing a scalable application can be done without magic or million dollar budgets. You just have to think it through and look for opportunities that present themselves along with the challenges.

The problem contains the solution. Dealing with lots of concurrent users is not just a problem: they bring their own computing power, it's the solution! You just have to use it.

---

## Designing an interface for a food ordering page

*Striking a balance between powerful options and mobile usability* · 2020-05-01 · https://willem.com/en/2020-05-01_designing-an-interface-for-a-food-ordering-page/

Online ordering pages are more important than ever before. The COVID-19 virus, the resulting lockdowns and the social distancing rules have  emphasised the need for a well-designed webshop user interface. This is surprisingly hard to get right!

## The challenge: online food orders

You might not realise it when you choose your pizza or french fries at your favourite takeaway restaurant, but ordering food is actually quite hard from an user interface design perspective. You must consider:

- **product customisation**: for instance offering different sauces, side dishes, toppings and sizes

- **validating customisations**: some customisations require an answer (like how would you like your steak, rare, medium or well done?), yet other customisations allow for more variance in their answer (like choose a "maximum of 5 pizza toppings")

- **multiple variants**: someone should be able to order two same pizza's, yet with different toppings

On top of this you must consider that about 80% of all this user interaction is done on a very small screen. This limits the amount of space available for buttons, toggles and switches. It's hard to get right and I was not surprised to see many existing apps and order pages fail to address this in an elegant manner.

## Tackle complex challenges by sketching!

Whenever I face a complex design challenge I often start by sketching. I use_an_tablet_as_main_computer (https://willem.com/en/building-a-tablet-os-what-happens-when-you-reject-the-mainstream/) that enables me to explore ideas by drawing them. Obviously you can use old fashioned paper, too. What's important is that you visualise your thinking, as it will unveil possibilities and limitations of your concept.

![Initial sketch for the food ordering user interface](https://willem.com/global/images/46615fdc8e0d.webp)

The sketch above shows my initial idea for the interface. You can see an image, a title, a product description, the price, plus and minus buttons and a box containing the number of products you've bought. It might seem like a good (and simple) start, but this design is flawed because:

- some products won't have an image, causing text to align weirdly if you have this interface in a list

- some products have long titles and descriptions, you must allow your the design to accommodate text wrapping 

- this design totally ignores the product customisations (like choosing a topping or sauce)

![Sketching in context: try framing your design in a smaller viewport](https://willem.com/global/images/92caf81f6d3a.webp)

Sketch in the context of a smartphone and you'll quickly see where your design is wrong. In the second sketch (above) you'll see only two products listed on the ordering page, yet the number of visible buttons (plus / minus) is already double of that. Always exposing multiple buttons per product is clearly a bad idea, especially if you're dealing with a lot of products.

## Real world thinking: two step interaction

In order to come up with something more elegant I tried imagining ordering dinner in a actual restaurant. I discovered that the waiter actually fulfils an important part of the puzzle: he or she responds to your choice by asking *product specific* questions. For instance, when I order steak, the waiter would ask me how I would like to have it cooked.

The trick is that only those questions are asked that are relevant to your selection. This helps when two persons (at the same table) order the same product, the personal approach allows for different customisations per person.

![Sketching a two step interaction: differentiating between list and detail modes](https://willem.com/global/images/4fcb33754a9f.webp)

If you would try to capture this two step interaction in an user  interface you could design a list/detail mode. Answering product specific questions is done in "detail mode", whereas the "list mode" offers a compact (yet informative) overview of the different products.

## Completing the design: order food in 3 steps

Often the waiter in a restaurant completes the order taking by offering a summary of what has been ordered by all the different persons at a given table. This summarising is a very important (last) step before the order is send to the chef.

On the online ordering page this last step would work, too. It would function as a last check before you place the order. Following the real world analogy then leads to a simple 3 step food ordering user interface:

![Ordering food in three steps: list, detail, summary](https://willem.com/global/images/2eb5b8a8f3a5.webp)

## Conclusion

Designing a food ordering page is challenging because of the many different variables that you need to accommodate on a very small screen. Great design takes this complexity and makes it simple.

If you design an interface, it can be very useful to apply some real world thinking. Come up with a different analogy or metaphor. Seeing the ordering page as a "virtual restaurant waiter" helped me to come up with a simple three step design. I eventually implemented_this_design (https://lemmid-store.com) and it works fantastically!

![Deceptively simple: the resulting food ordering page](https://willem.com/global/images/c80a12452033.webp)

---

## Minimalistic road bike with Gates carbon drive

*Meet your new therapist: the Schindelhauer Siegfried Road* · 2020-04-30 · https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/

For the past few months I have been riding a special kind of bike, the minimalistic Siegfried Road from Schindelhauer. It is unlike most road bikes as it lacks a conventional chain and derailleur. It features the Gates CDX carbon drive. It's an exercise in minimal design. After riding it for nearly 1000KM, it's time to tell you all about it.

## Schindelhauer

Since 2009 the Berlin based Schindelhauer (https://www.schindelhauerbikes.com/) has been designing bikes that are technologically advanced yet straightforward. They value good design and practicability, their minimalistic bikes are built for everyday use.

![Schindelhauer Bikes designs belt drive bikes since 2009 (photos: schindelhauerbikes.com)](https://willem.com/global/images/db2bfaef07e7.webp)

They use high-quality parts that are meant to last. From the very beginning Schindelhauer developed bikes with a Gates Carbon Belt drive.

## Siegfried Road

Although my_commuter_bike (https://willem.com/en/2019-02-27_one-year-on-the-ultimate-commuter-bike/) is still going strong, I wondered what it would be like if one would design a road bike with the Gates Carbon Belt Drive. Schindelhauer designed such a bike, the Siegfried Road.

![Siegried Road delivered through Kaptein Tweewielers Amsterdam](https://willem.com/global/images/4267c7998698.webp)

Adhering to the good Velominati_rule_#58 (https://www.velominati.com), I supported the local bike shop and ordered the Siegfried Road to be delivered in Amsterdam, by Kaptein_Tweewielers (https://kapteintweewielers.nl). It's a fabulous shop in downtown Amsterdam, if you're a local and in the need for some road bike advice you should check them out.

![Siegfried Road as I got it from the bike shop - with a brown Brooks Swift saddle and matching Continental tires ](https://willem.com/global/images/8c7a0443e939.webp)

The Siegfried Road comes with a high quality, brown leather, Brooks Swift saddle, an absolute legend_with_lots_of_history (https://www.brooksengland.com/leathersaddles/). The bike comes with matching brown leather bar tape.

![If you've got the shoes to match, brown bar tape looks magnificent](https://willem.com/global/images/83bfcff4d3f4.webp)

Although I appreciate the quality, I did not like the retro vibe of the brown colour. I couldn't help but feel that the bike would benefit from a little modernist touch, while staying respectful to the overall minimal design. Leave it to me to take a brand new bike apart...

![Replacing the brown leather with black rubber bar tape (from Brooks)](https://willem.com/global/images/92c9d497da13.webp)

It's amazing what you can learn from YouTube (https://www.youtube.com/watch?v=4iekC7HnG4o), replacing the bar tape takes a little practice but it's not that hard to do. I removed one of the cranks to install a power_meter (https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/) and fitted a Wahoo speed sensor to work_with_my_favourite_bike_computer_app (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/).

![Removing the Alfine, Hollowtech II crank](https://willem.com/global/images/0e05f8d0a468.webp)

![The Shimano FC-R9100 Dura Ace power meter by 4iiii fits perfectly](https://willem.com/global/images/31f69ac9ecb1.webp)

![One day I might remove the paint from the crank, but it's better for your warrantee to leave things in their original condition](https://willem.com/global/images/0391adc31c6d.webp)

![The Wahoo Speed sensor installed on the flip-flop rear hub](https://willem.com/global/images/6d35a7477f96.webp)

Changing the tires on a bike with a belt drive can be a little tricky as the belt should not be 'flexed' in any direction. By loosening the rear axle it becomes possible to create *just enough* clearance to carefully take the belt from the sprocket. I installed the very dependable, durable, black, Schwable Durano Plus tires.

![The Continental Grand Prix Classic tires are beautiful, if you like brown retro vibes](https://willem.com/global/images/c1fb19ecf4bf.webp)

![Loosen the rear axle to create just enough clearance to take the belt from the sprockets](https://willem.com/global/images/e073a53811cd.webp)

![The CDX rear sprocket is designed to last](https://willem.com/global/images/270039390b88.webp)

I replaced the Swift saddle with a high quality Brooks Cambium C13 carbon saddle and installed Look carbon click pedals. After some hours of tinkering on my new bike, I endend up with what one could call: *"Siegfried Road with a touch of Willem"*

![Siegfried Road with a touch of Willem](https://willem.com/global/images/d0697eed9933.webp)

## Pure awesomeness

If you think it looks great, you're not alone. Over the past 1000 kilometers I have received numerous remarks from fellow cyclists, inquiring what bike it is that I'm riding. People notice the lack of screaming colours and decals. Its minimal design stands out in a good way.

![The seatpost clamp is integrated in the minimal AL6061-T6 aluminium, triple butted aero tubing frame](https://willem.com/global/images/79d4cbe5247e.webp)

![The rear wheel is fixed using a 'crocodile' belt tensioning system](https://willem.com/global/images/c7a982fa75a5.webp)

![Kleo Carbon pedals (by Look) on the front crank on the BSA bottom bracket](https://willem.com/global/images/9eb7108ff73e.webp)

![Without the conventional derailleurs the drive train is rather straightforward (60T/22T gear ratio)](https://willem.com/global/images/a19f14b03972.webp)

![Siegfried Road features simple, yet very functional Tektro R539 / TRP - RRL brakes](https://willem.com/global/images/b5df038595c4.webp)

![The Alexrims CX30 silver high polished wheels have high quality hubs ensuring a smooth ride](https://willem.com/global/images/4d6d29e248e4.webp)

![The beautifully spoked wheel is nothing short of harmonious, simple yet beautiful](https://willem.com/global/images/c299922bea97.webp)

![The Schwalbe Durano Plus tire is the most puncture resistant road bike tire available ](https://willem.com/global/images/7205bb32ddec.webp)

![Out in the wild: Siegfried Road x Willem](https://willem.com/global/images/c9248d84bfe1.webp)

## Riding minimalism

If you like cycling, you probably know that it can clear your mind in a very refreshing way. Some say that riding your bike has a therapeutic effect, an exercise of mindfulness during your workout.

![Happy chap riding a bike on an empty road](https://willem.com/global/images/9d08f34e8657.webp)

### Fixed gear bike

The Siegfried Road is a single speed bike, I ride it in the so-called 'fixie'-configuration: where the drive train is fixed to the pedals, enforcing the pedals to rotate as the bike moves. You'd be surprised how much mental effort you unconsciously allocate to the continuous process of selecting the right gear while cycling.

Riding a fixed gear bike means that "you're always in the right gear", you just have to pedal a little harder or faster. It takes a little time to get used to. Some cyclist describe riding a fixed gear bike as something that makes them feel "more connected" to the cycling. I kind of understand what they mean with that. It's nice, in a therapeutic, tranquil way.

![You, the bike, the road, nothing else: cycling in optima forma](https://willem.com/global/images/814681120fae.webp)

### The belt drive advantage

The Gates Carbon drive on a road bike like the Siegfried is a perfect fit. It operates in absolute silence, there are no rattles, no chain-slap-sounds, nothing. Just you, the bike, the road and nothing else.

Adding to the riding pleasure, the Gates Carbon drive on the Siegfried Road means that maintaining your bike becomes a lot easier. If you ride your bike on a wet road, you can easily rinse of any dirt with a little bit of water.

![No degreasing and oil required - simply rinse off your bike after a wet ride](https://willem.com/global/images/264f052287c6.webp)

## Conclusion

The Siegfried Road is not for everyone, but for those who appreciate minimalistic design in a sporty package, it is great. Have it in single speed or fixed gear configuration and simply go out and ride.

Its timeless design, combined with long lasting components make the Siegfried Road a trustworthy companion for those times when you simply want to ride your bike. I love it for this!

### Update

**September, 2020: **: I found a beautiful_bike_computer_for_this_bike:_Omata_One (https://willem.com/en/2020-09-29_riding-with-omata-one/)

---

## Talking tablets: what makes a great tablet?

*Working with Microsoft Surface Pro X* · 2020-04-14 · https://willem.com/en/2020-04-14_talking-tablets-what-makes-a-great-tablet/

Earlier this year Microsoft released their brand new Surface Pro X tablet computer, in many ways this is a forward thinking device. As I like working with tablets I wondered what exactly makes a great tablet? Is Surface Pro X any good? Read along to find out.

## Surface Pro X

Unlike traditional PC's that often provide backwards compatibility in software and hardware design, Microsoft primarily designed Surface Pro X to be a next generation device. It is ultra thin, always connected (using 4G/LTE) and it is equipped with an efficient ARM processor to perfectly power web-first experiences. Just like other_Microsoft_Surface_devices (https://willem.com/en/2018-03-07_tablet-as-main-computer/), Surface Pro X represents Microsoft's best as it integrates hardware and software unlike other Windows PC's.

![Unpacking Surface Pro X ](https://willem.com/global/images/d7d698b4b179.webp)

### Keyboard

You should get the signature keyboard with the surface "slim pen" to fully enable the tablet's versatility. They're sold separately (just like iPad Pro's keyboard and pencil), which I still think is stupid.

![Surface Pro X Signature Keyboard with the Slim Pen](https://willem.com/global/images/d7a9b5cf2240.webp)

![The keyboard connects using a magnetic connector that also provides power and connectivity (no separate battery or connection setup required)](https://willem.com/global/images/39529d91bc66.webp)

![The keys are 'real' and there is a nice multi touch glass trackpad](https://willem.com/global/images/8ce089ff1868.webp)

The Surface Pro X Signature Keyboard is the very best tablet keyboard that I have ever seen. It includes all the normal keys you'd expect on a PC keyboard (including escape and function keys). Yet it is slim, sturdy and it feels very solid. Tactile feedback is great, I love typing on it!

I only wish the keyboard would work when it is disconnected. It would enable even more different use cases, especially combined with the integrated, fabulous, Surface kickstand, the Surface dock and Window's powerful support for external monitors.

![Disconnected keyboards have their advantages, too... :-)](https://willem.com/global/images/9cffa9cba02f.webp)

![Alcantara covered keyboard](https://willem.com/global/images/1b6f735c1ad2.webp)

Something you'd either love or hate are the alcantara covered palm rests. I don't love them as they are way too "warm and mushy" for my taste, especially when you work for longer periods of time. But it is a personal preference - I guess - as I don't like cushions or blankets on a couch either, I prefer cold_and_uncomfortable (https://willem.com/en/2018-12-06_do-amazing-things-with-a-focused-mind/).

![Surface Pro X with its keyboard is just like a laptop](https://willem.com/global/images/e8ad49a47760.webp)

### Surface Slim Pen

The Surface Pro X supports the Slim Pen, a oval-shape stylus that can be used to tap things, take notes or draw and sketch. The great thing about the Slim Pen is that Microsoft integrated it into the Surface design, offering a nice place to put it when you don't need it. It magnetically flips around so it can inductively charge itself while being stored inside the keyboard, an impressive party trick.

![The Slim Pen is always ready, charged, within reach, above the function row of keys](https://willem.com/global/images/01723afa1da7.webp)

![The Surface Slim Pen is about the same size as a conventional pen, slightly smaller then Apple Pencil](https://willem.com/global/images/882dc1ee024a.webp)

The Surface Slim Pen is similar in size compared to a conventional (for paper) pen. It is slightly smaller then Apple's latest Pencil.

![Handling the Suface Slim Pen](https://willem.com/global/images/7c1f48262c77.webp)

When you hold the Surface Slim Pen you'll immediately notice that it is much lighter than other pens. This makes the Slim Pen feels a little "flimsy", it lacks the "balanced heft" that Apple Pencil has.

![Pen responsiveness is great](https://willem.com/global/images/2b648bc8e209.webp)

Despite being a little lightweight, it functions perfectly as pen responsiveness is simply great. Microsoft offers different apps for note taking and sketching, like Microsoft OneNote and Whiteboard. I like the latter, but it is not without its flaws as annoying bugs like an imprecise ruler hamper the Surface Pen's super powers.

![Imprecise ruler in Microsoft Whiteboard hampers the experience](https://willem.com/global/images/d02a7ae2c540.webp)

## Working on with Surface Pro X

When you work with Surface Pro X for a few weeks you'll notice that the device is super capable. Its versatility makes it suitable in many different work situations, like:

- **video conferencing**: the camera is on the right place above the screen (something iPad Pro can't say), improving 'eye contact' when you're in a virtual Microsoft Teams meeting.

- **reading**: its (near) edge to edge screen combined with the Surface Pro X low weight makes it possible to comfortably read documents and webpages in portrait mode. 

- **drawing/designing**: use the pen to jot ideas, explore designs by sketching and drawing, tilt the screen using the integrated kick stand for improved ergonomics.

- **coding/programming**: The superb typing experience and spacious screen makes Surface Pro X a great development computer. It's great for web development as it runs the full desktop versions of Firefox and Chrome (with their integrated dev tools).

- **image manipulation**: I had no trouble running GIMP (https://www.gimp.org) to edit images, working with high resolution web graphics and multiple layers.

- **server administration**: It is now possible to use SSH natively on Windows, enabling you to login to your favourite cloud VPS.

![Manipulating high resolution images using GIMP, working with multiple layers - works great on Surface Pro X](https://willem.com/global/images/b57789096e71.webp)

!["Look ma, no Putty" - SSH into anything, natively on Windows](https://willem.com/global/images/73ac97a4d461.webp)

![Coding on Surface Pro X is a dream thanks to the spacious screen and gorgeous keyboard - I do this over SSH with tmux on a dedicated, powerful development VPS ](https://willem.com/global/images/2c1e49862532.webp)

![Use the pen to draw, write and design](https://willem.com/global/images/7f8d436238e1.webp)

## What makes a great tablet?

This brings me back to the main question, what makes a tablet *great*? Over the years I have worked extensively with different tablets. I even built_my_own_tablet_OS (https://willem.com/en/2020-03-09_making-my-own-tablet-os/). This has given me the opportunity to learn about the things that really set the 'tablet category' apart from conventional desktop or laptop computers.

![Different tablets, different software: iPadOS, Windows and "WillemOS"](https://willem.com/global/images/92e2a4f3dc6e.webp)

### Versatile, mobile hardware

The main takeaway from a tablet computer is the versatile, mobile nature of the form factor. There are no wires, it fits in most bags, you can use it in different angles and orientations. It is precisely this that lets the tablet computer transient into the 'background', enabling you to just do what you want it to do.

It doesn't require a certain physical position, like sitting behind a desk, to use the device. The battery and mobile connectivity enable you to use it wherever you are. Although I appreciate the power of a big screen desktop computer, I don't like its requirement to use it in a (dull) office *all the time*. A tablet computer gives you a certain degree of freedom thanks to its versatility and mobility.

### Software

A great tablet experience depends on seamless integration of hardware and software. Tablet computers are very much defined by the large touch screen that acts as a canvas for anything the tablet can do. Great tablet software takes advantage of the direct manipulation that is possible with your fingers.

![Directly manipulating the interface with your fingers is a perfect example of integrating hardware with software](https://willem.com/global/images/1bae27da9f00.webp)

If designed well, software is able to enable an intuitive understanding of its workings. Quite literally one can use a tablet by simply touching it, you should not need a manual or a degree in computer science.

![Intuitive interfaces don't require a manual](https://willem.com/global/images/fdab8789c4ed.webp)

For this reason my one year old son can use a tablet computer, but not a PlayStation which requires a physical controller. The mere lack of the abstraction of the distinct controller (with buttons) removes friction from the interaction with software.

## Conclusion

If you haven't tried working with a tablet computer, you should really consider it. The Surface Pro X is a perfect machine to introduce you to novel ways to get things done, while providing you with access to familiar apps and files.

Its versatile, mobile hardware combined with software that is designed to take advantage of the large touch screen, enables you to get things done in many ways, pretty much anywhere!

![Surface Pro X does many things very well - it makes the perfect case to be your only computer](https://willem.com/global/images/e4480c704f71.webp)

---

## Traffic shaping using iptables and tc

*Limiting outbound network bandwidth per client IP-address* · 2020-04-01 · https://willem.com/en/2020-04-01_traffic-shaping-using-iptables-and-tc/

Last month I received an automated alert indicating excessive bandwidth usage, usually a sign of trouble. When this happens, you should follow a standard incident procedure, trying to isolate the source of the traffic before shutting it down. The cause of this incident was not what I expected however... requiring a different kind of mitigation than a simple blockade.

## Excessive bandwidth alert

When you manage servers you'll notice that internet traffic usually occurs in predictable patterns. Just like real traffic on roads, there are regular times when it is busy and quite.

![Bandwidth graph of AMS-IX shows a predictable pattern - notice the wave-like pattern](https://willem.com/global/images/cbef76c36df8.webp)

The predictable pattern makes it possible to detect anomalies automatically. Just like a traffic jam on a highway at an unusual time can be the result of an accident, unexpected swings in internet traffic can be an indicator for an incident in cyberspace.

![Bandwidth graph with unusual spike indicating that something is wrong - you don't need to be Sherlock Holmes to find it](https://willem.com/global/images/f7c2d76b6a59.webp)

## Isolating the source

The first thing you should do is to find the source of the problem. Do this by analysing the anomaly by:

- Determine if the extra traffic is inbound or outbound (up or download?)

- Determine the associated source and target IP addresses (what server is affected? Where is the traffic going to or coming from?)

- Determine the kind of traffic (email, web or something else?)

To do this you should inspect traffic charts, they usually indicate distinct input/output. Then you should try to find the affected IP addresses. This might involve looking at more (individual server) charts and statistics inside switches, routers and servers. Then look at CPU usage and log files to determine what application is affected, like mail or web. The larger the anomaly is, the easier it is to find.

You may be tempted to kill the anomaly once you have found it, immediately stopping the associated traffic. But you should really keep it alive (at least a little longer) to learn as much as you can from it.

![Using the iftop tool to see bandwidth usage per connected IP-address](https://willem.com/global/images/2143a4110498.webp)

Use a tool like iftop (https://linux.die.net/man/8/iftop) to see a realtime overview of bandwidth usage per connected IP-address. It is very useful to get a grasp of what's going on, especially in combination with log files (linking IP-address to individual accounts).

## Unusual cause

The server that produced the excessive bandwidth usage was a mail server. Often they are targeted by hackers to turn them into a spam relay server. This can happen in various ways, usually by the spammers capturing a valid login. This results in lots of outbound traffic as the spammers will push out many emails. If a spam run happens on your sever, you probably see this in the logs as spam messages frequently bounce, causing the mail queues to fill up quickly. It gets messy quickly, but on this server there was no such mess - just a lot of unusual bandwidth usage.

Mail (and spam) is sent using the SMTP protocol, but traffic on this server's SMTP port was very normal. This was very unusual as it meant that the excessive traffic came from something else. But what? After analysing various logfiles on the mail server I determined that the offending protocol was IMAP. Somehow a client connected to the mail server using IMAP was causing excessive amounts of network traffic. IMAP is a protocol that is used to *read* email, not to send it, making IMAP related anomalies very rare.

By analysing the mail server's log, I found the specific user that caused the traffic. I contacted the customer to ask if he noticed anything weird on his end. Not surprisingly, he noticed that his computer felt a little sluggish lately.

### Microsoft Outlook synchronisation loop

After some trial and error by phone, we determined that something caused Microsoft Outlook to keep synchronising IMAP folders in a loop. This caused his computer to download the entire contents of his mailbox over and over again! As his mailbox was over 40 gigabyte in size, this caused the substantial traffic. Apparently this is caused by a bug_in_Microsoft_Outlook (https://answers.microsoft.com/en-us/msoffice/forum/all/outlook-2016-hangs-forever-synchronizing/320ad809-4174-4989-9f4c-a0d4c7d616bc), unfortunately there is no easy fix for it.

![Bugs in Microsoft Outlook cause it to keep synchronising IMAP folders, a problem experienced by many people (see the number of views!)](https://willem.com/global/images/aee8f43379f0.webp)

## Mitigating by traffic shaping

I faced the difficult decision to either block the (normal, legitimate, paying) customer or to allow the excessive traffic to continue (incurring serious costs to the network provider). Blocking legitimate users that operate their business using email is a very bad idea, but allowing excessive traffic to continue is bad too. Luckily I found an alternative way to reduce the excessive traffic while still allowing the customer access to his mail (using his trusted, but flawed Outlook app).

### Traffic Shaping

As a bandwidth management technique you can use traffic shaping to delay some (or all) data packets to bring them into compliance with a desired traffic profile. If applied, you are - quite literally - shaping the traffic graphs, hence the name.

This technique is not without controversy as it is quite the opposite of the often hailed "net_neutrality" (https://en.wikipedia.org/wiki/Net_neutrality) principle. With traffic shaping you can intentionally block or slow down (or charge extra money) for specific types of traffic. By principle I am against anything that hurts net neutrality, but for this particular situation I had no feasible alternative. I needed to seriously slow down email traffic for this particular customer, reducing the amount of bandwidth while continuing to provide access to his account.

### Implementing traffic shaping

To shape traffic you need to do two things:

- **mark traffic**: You only want to affect particular network traffic, in this case IMAP access for a given client. Other traffic should be unaffected. This is done by marking packets that match particular characteristics, such as client IP or port numbers

- **enforce shape policy**: Using traffic control tools like 'tc' you then enforce the shaping policy on the marked traffic. There are different ways to do this, but a common one is to work with so-called "Hierarchy Token Buckets" or HTB's.

### Hierarchy Token Buckets (HTB's)

In principle a token bucket is similar to the principle of limiting the amount of passengers in a train ride by only distributing a fixed number of available tokens. When passengers (or data packets) enter the train (or network) they take a token. When they disembark (or reach their destination) the token is returned. Using the token bucket principle you can control the amount of concurrent traffic in a system.

![Using tokens to control traffic - only passengers (or data packets) with a valid token are allowed. Tokens are returned as traffic reaches its destination.](https://willem.com/global/images/62fa4ef3cf7a.webp)

![Traffic must wait for tokens to become available when the maximum number of tokens is given away, enforcing the maximum concurrent traffic](https://willem.com/global/images/d64adfb34510.webp)

You can implement this principle using the network tools "tc" (for traffic control) in combination with "iptables". You can use a script to set the rules for marking and enforcing. You can find various samples online, I used this_one (https://serverfault.com/a/191605) by_Julien_Vehent (https://jve.linuxwall.info/).

![Sample traffic shaping script](https://willem.com/global/images/8cd95b55b130.webp)

## Conclusion

Sometimes network anomalies are not what you expect them to be, therefore you should always take the time to investigate them! Blindly blocking traffic is blunt, sometimes you need to refine your methods to mitigate problems.

Applying unorthodox filtering techniques is not something that I like, but sometimes they are the only means to an end. Know what you're doing and why you're doing it is very important!

---

## Designing and implementing a (micro) payment system

*Monetising my blog with coffee, Apple Pay and Mollie* · 2020-03-25 · https://willem.com/en/2020-03-25_designing-and-implementing-a-micro-payment-system/

Online payments are now more important than ever as businesses are disrupted by the COVID-19 virus. It drives my customers to seek new ways to make money online. I designed and implemented a (micro)payment system. This post is about achieving simplicity by solving complex challenges.

## Understanding new technology

When developing new technology and apps I always try to imagine how it would work best. The easiests way to find out, is to design the product for yourself. Just like Steve Jobs had Apple develop their presentation app, Keynote, for himself. It is one of his famous jokes about him_being_an_underpaid_beta_tester (https://www.youtube.com/watch?v=ViWnJDomhsM)

![Steve Jobs announcing the Keynote app at MacWorld 2003, joking that it was build for himself, him being an underpaid beta tester](https://willem.com/global/images/0027da9ce9fa.webp)

If you design the product for yourself, think about what you would really, *really*, want. For me, this means the most utterly simple user interaction model possible: I want my software to be simple, easy.

## Use case: buy me coffee

For the purpose of developing the payment technology, I came up with the use case of adding a "buy me coffee" button to my website. If it works well, people can use it to show their appreciation for this blog by buying me a coffee. I think this use case is a perfect challenge to design (and build) a (micro) payment system.

## Sketching ideas

Before programming a single line of code, I often design software by sketching ideas by hand. I find the creative process of drawing helpful in exploring ideas, layouts, processes. It is one of the reasons why I like working on a tablet so much, digitally sketching ideas allows me to quickly explore multiple ideas by copying/pasting them into multiple iterations.

![Interface concept sketches, exploring different options to leave a message and buying multiple cups of coffee](https://willem.com/global/images/b5830cd60667.webp)

## Prototyping

Once you have explored ideas for your user interface, it is time to develop a prototype. When you build a prototype you can test the user interface on different devices, see how it looks and feels.

![Translating the design sketch (left) into a prototype (right) on iPad](https://willem.com/global/images/2d289b8f000c.webp)

During prototyping I often look at the design sketch while programming the first version. On iPad you can do this using split screen, where I place the design sketch right next to my code, using VIM (https://www.vim.org) in tmux (https://github.com/tmux/tmux/wiki) over Mosh (https://mosh.org) with the brilliant Blink (https://blink.sh) app_for_iPadOS (https://apps.apple.com/en/app/blink-shell-mosh-ssh-client/id1156707581). I created the coffee cup using Picta_Graphic_for_iPad (https://apps.apple.com/en/app/graphic-for-ipad/id363317633), a beautiful drawing app that exports to vector images (SVG).

![Designing the coffee cup using Picta Graphic for iPad](https://willem.com/global/images/e35470bb82d5.webp)

## Frontend development

The next step is to develop a fully working user interface, making the buttons work. During development you often need to figure out what is going on, track bugs and finetune mechanisms. I use the Inspect_Browser (https://apps.pdyn.net/inspect/) for iPadOS to have a working miniature touch screen interface right next to my code. It allows me to rapidly test and perfect the working user interface.

![Developing the user interface using Blink and Inspect Browser on iPad](https://willem.com/global/images/cddef4803d92.webp)

## Backend development

Another crucial step is to develop the backend technology to prepare and track online payments. This is server side technology that will handle the communication between the frontend user interface (website) and payment provider (banks, credit cards, Apple Pay, etc).

Designing the backend server is usually a little more abstract compared to designing a (visible) frontend user interface. I find sketching UML sequence diagrams very useful when figuring out what API calls should happen in what order. Sequence_diagrams (https://en.wikipedia.org/wiki/Sequence_diagram) visualise program interactions in time sequence.

![Sketched sequence diagram of payment process](https://willem.com/global/images/a24f596e619d.webp)

You see three columns in the payment process sequence diagram: frontend, backend and payment provider. Each column represents a different computer that communicates with the others. The frontend runs on the user's device, the backend server runs on a VPS managed by me and the payment provider is an external server. The user interacts with the website by clicking the "buy (me coffee) button", this triggers a chain of API calls that flow from right to left.

The "backend server" is responsible for calculating the amount that the user needs to pay. It is calculated on the server, not in the client, to prevent malicious users to manipulate the price calculation (as frontend technology can be manipulated through the web browser).

A payment session is prepared by informing the payment provider that the user will make a payment for a given amount. This process uses a secret API key that allows the payment provider to know to which bank account payments should go. The payment provider returns a payment URL, that is used to redirect the user to the actual payment page.

![Mollie is a payment provider that supports many different payment methods, including credit cards, PayPal, iDEAL, Sofort, Giropay, SEPA, various bank apps and Apple Pay](https://willem.com/global/images/a04e328d248f.webp)

The payment provider I use is Mollie (https://mollie.com), an Amsterdam_based (https://jobs.mollie.com) company with a fantastic payment platform. Their API's are well_documented (https://docs.mollie.com/) and they provide packages (https://www.mollie.com/en/developers/packages) to easily implement their payment system into your backend server.

![Calling Mollie from NodeJS using promise based JavaScript](https://willem.com/global/images/d214aa5c60ef.webp)

In harmony with my other backend servers, I choose to implement the backend server in NodeJS (https://nodejs.org/en/). It runs on practically anything (from a tiny Raspberry PI, to large computing clouds). Alternatively you can use PHP (https://github.com/mollie/mollie-api-php), Ruby (https://github.com/mollie/mollie-api-ruby), Python (https://github.com/mollie/mollie-api-python) or any of the other available packages (https://www.mollie.com/en/developers/packages). The Mollie_API_reference (https://docs.mollie.com/reference/v2/payments-api/create-payment) offers detailed information on the values you can expect.

### Asynchronous payment status updates

Few people realise that retrieving the payment status is an asynchronous process that can have different statuses. In a perfect world you instantly know whether a payment succeeds or fails. But due to the distributed nature of online payments where backends communicate with different servers (banks, credit cards, etc.) you never know precisely when a payment will complete.

Think of situations where a user closes the payment page, leaves his or her device unattended, or when a bank has an interruption with their online banking system. It happens, and it is your task to design the backend server to handle payment status updates separately from the primary user interaction process.

![Handling payment status updates ](https://willem.com/global/images/79791152064c.webp)

The payment provider calls a webhook on our backend server. It delivers a message like "Look, something changed on payment XYZ". This message only says that *something* was changed, it does not tell us *what* the new status is. This is for security reasons: otherwise malicious users might be able to mimic the call to our webhook. Instead, our backend server requests the actual payment status through a secure channel using our secret API key. The payment provider returns the payment status which is then handled by our backend server. Depending on the payment status, appropriate actions are taken, like sending out email notifications, starting the delivery of goods.

## Fullstack: Combining frontend and backend

The last step is to connect the frontend with the backend technology, making the entire process work. This is what people call "fullstack development" as you're working on the entire system. Fullstack development is a different kind of art that few developers truly master, it requires you to work (debug and develop) on multiple ends simultaneously; often in different programming languages at once!

In practice this means that you'll be monitoring different parts of the programming, see if they work well together. Watching server logs while you try to perform a payment using the newly created frontend technology. It's hard, but it is also very rewarding as it results in a working product!

![Connecting frontend with backend technology, simple as 1-2-3](https://willem.com/global/images/acc0ecf42914.webp)

The resulting "buy me a coffee" button is a deceptively simple 3 step process for the user:

- **step 1**: click a simple "buy me a coffee"-button, no complex order form, no irritating captcha code: just a single button

- **step 2**: the interface expands in place, preserving context and offering the option to leave a message or buy me multiple cups of coffee. In addition, other interface elements such as the social media buttons are automatically hidden to enhance focus on the coffee interface

- **step 3**: the payment provider screen allows the user to perform the payment using any available payment method, such as Apple Pay. When the payment succeeds, it's time to drink coffee!

![Time to drink coffee](https://willem.com/global/images/487f0979a7e9.webp)

## Conclusion

Designing and implementing a payment system is not that hard once you know what you need to do. Yet, it involves many steps to achieve that understanding. While my "buy-me-a-coffee"-button appears simple, it required solving many different design and programming challenges.

It's hard to overstate the importance of simplicity, yet it is often very hard to achieve because it requires an understanding of all aspects of the challenge. To quote Einstein: *"The definition of genius is taking the complex and making it simple."* Now, please feel free to try the button yourself: it's right here ⬇️

---

## Making my own tablet OS

*Installing and modifying Debian GNU/Linux on Surface Go* · 2020-03-09 · https://willem.com/en/2020-03-09_making-my-own-tablet-os/

For some years now I use a tablet as main computer, I like its versatility. But, most tablets come with a locked down operating system, like iPadOS, Windows 10S or Android. As I like things my own (weird) way, I wondered if I could escape these "software jails" by installing a free operating system on a tablet. It's possible, read along to find out how I escaped!

## Hardware: Surface Go

If you're considering installing another operating system on a tablet, you should definitely do some research on tablet hardware. Not all tablet computers can be reinstalled with a custom operating system, some have locked bootloaders, proprietary chips or other hurdles.

![Microsoft Surface Go - an ultra portable 10" touch screen tablet computer (with type cover, pen and USB-C to ethernet and USB 3.0 adapter)](https://willem.com/global/images/ab9c8e745c92.webp)

Meet Surface Go, it's a relatively small tablet (10" screen size). It has a "normal" 64-bit Intel processor, it has a bootloader that can be unlocked and its hardware is well known as it is similar to the older "Surface Pro 6". Older hardware is *a good thing* if you're thinking about free operating systems. The older hardware becomes, the greater the chance that people have found ways to make it work with free software, such as Debian GNU/Linux.

## Update first!

Before you erase the proprietary operating system from the tablet, you should use it to update the firmware. Updating firmware from anything other than Windows is virtually impossible. The new firmware for the Surface fixed many bugs and improved the tablet's performance - you don't want to miss out on this!

![Check for updates manually using Windows Update](https://willem.com/global/images/382661906f53.webp)

![Note the many firmware updates, you can only install them from Windows](https://willem.com/global/images/c9eda8928a1e.webp)

![It might take some time, be patient or take photos :-)](https://willem.com/global/images/af71b0cde6d9.webp)

## Choosing an operating system

Once you have selected the tablet hardware, you should choose an operating system. For various reasons, I recommend that you consider choosing_a_free_operating_system (https://willem.com/en/2018-07-20_helping-people-with-free-software/). With free software you are - quite literally - free to make it work as you  like. I like Debian (https://debian.org), a GNU/Linux distribution.

![Debian GNU/Linux - The universal operating system](https://willem.com/global/images/61767ebbcabc.webp)

The Debian GNU/Linux distribution is among the oldest distributions available. It is special because its maintainers have ratified a social contract, a document providing guarantees that Debian is open and free. It can be installed on almost any hardware, hence their slogan "the universal operating system".

## Creating a bootable USB stick

Installation of Debian is done using a bootable USB stick. I used another computer to download the installation files from https://debian.org. You must create an installation medium to get these installation files to the tablet computer.

![You can use another computer to create a bootable USB stick, I used my ThinkPad X1](https://willem.com/global/images/96a301b9ec66.webp)

On another laptop I used some terminal commands to create the bootable USB drive. If you're on Windows or Mac you can use other tools to get this job done, like Disk Utilities, Rufus (https://rufus.ie) or unetbootin (http://unetbootin.github.io).

## Starting the installer

Connect the bootable USB drive to the Surface tablet, I used a USB-C to ethernet and USB 3.0 adapter. The wired network connection comes in handy during installation because Debian often cannot load firmware/drivers for the proprietary WiFi chips.

![Connecting the bootable USB drive to the Surface tablet using the USB-C to USB 3.0 and ethernet dongle](https://willem.com/global/images/8646d08e6a22.webp)

The easiest way to boot the Surface tablet from the USB drive is through "Advanced Startup Options" in Windows Settings, it will restart your computer offering you different boot and recovery options.

!["Advanced Startup Options" from Windows Settings allows you to use a USB drive as boot medium ](https://willem.com/global/images/1aba81e0731b.webp)

![Choose "Linpus Lite" to boot the installer](https://willem.com/global/images/9021f73fd09d.webp)

Choose "Use a device" and then select "Linpus lite". With a bit of luck you'll be greeted with the Debian GNU/Linux installer menu.

![Debian GNU/Linux Installer Menu on Surface Go - happy me](https://willem.com/global/images/da801a0461f7.webp)

Proceed with the installation by answering questions like what language you wish to use and what keyboard layout you have. The installer will attempt to recognise your network hardware. Unfortunately many vendors keep their device drivers (firmware) closed, making it impossible for Debian to include them with their standard collection of software (which is required to be free software).

![Missing firmware renders hardware unusable during installation](https://willem.com/global/images/ab59c48e114c.webp)

Although it is possible to load these non-free device drivers from (another) USB drive, it's my experience that it is difficult to exactly preload those device drivers that you'll need. My strategy is to connect the computer to a wired network connection during installation and worry about missing drivers afterwards. It's easier to add them later if your system is online.

![Installation in progress - note the connected network cable](https://willem.com/global/images/d917bfda53e6.webp)

## Graphical user interface

Many apps (web browsing, photo editing, drawing) only work well through a graphical user interface. You can choose from many different options if you use free software. The first choice you need to make is whether you want a full "desktop environment" or just a "window manager".

### Desktop Environment

A desktop environment gives you an overall user experience, including panels, system menu's and status applets. It comes with its own set of (system) applications and look+feel. While most desktop environments offer a complete standard configuration, many of them offer advanced options for customisation. Check out their websites, read about their design principles, and choose something you like. Common desktop environments for Debian are:

- **GNOME**: https://www.gnome.org and https://wiki.debian.org/Gnome

- **Plasma** by KDE: https://kde.org/plasma-desktop and https://wiki.debian.org/KDE

- **XFCE**: https://xfce.org and https://wiki.debian.org/Xfce

- **LXDE**: https://lxde.org and https://wiki.debian.org/LXDE

- **MATE**: https://mate-desktop.org and https://wiki.debian.org/MATE

### Window Manager

Unlike a full blown desktop environment, a window manager only provides a way to manage application windows. Window managers are chosen because they are extremely minimal, requiring all extras to be manually added by the user. If you like to make your own decisions, choosing a window manager might be a good starting point for your graphical user interface. Common ones are:

- **awesome**: https://awesomewm.org

- **Openbox**: http://openbox.org/

- **i3wm**: https://i3wm.org

- **dwm**: https://dwm.suckless.org

- **xmonad**: https://xmonad.org

You should really take your time to make your own decision, as choosing the foundation for the graphical user interface greatly impacts the overal experience. It's a personal choice, driven by preferences and your willingness to manually adjust it. My choice, because I have years of experience with it, is to use the Openbox window manager in combination some extra tools that optimise *my* experience.

## Optimising the experience

This is an essential step when you're installing a free operating system on a computer. After installation, the default settings are often not tailored to your specific hardware, preferences and use cases.

These where some of things I did on top of the Openbox window manager:

- Upgrade the standard 'stable' release of Debian to its more cutting edge 'unstable (https://wiki.debian.org/DebianUnstable)' branch. This means you'll get new software versions faster, but things might sometimes break. I like new software (as I am a developer), you might reconsider this. 

- Install various non-free device drivers (firmware) to make all hardware components work, Debian has a detailed page on this: https://wiki.debian.org/Firmware. It might requires a little research, log file analyses, to figure out which firmware your computer requires. 

- Use gnome-network-manager (https://wiki.gnome.org/Projects/NetworkManager/) and its applet to see the status of the WiFi and to allow me to quickly connect to different wireless networks

- Install Sound_on_Debian (https://wiki.debian.org/Sound) to make the tablet's speaker work. Make sure to check the volume/mute options before you consider your audio system to be broken (by default, it is muted!)

- Install Blueman (https://packages.debian.org/sid/blueman) to enable me to connect to various Bluetooth devices

- Use tint2 (https://gitlab.com/o9000/tint2/) as status bar, task bar and quick launch bar (offering shortcuts to frequently used apps)

- Create_a_script_that_auto_rotates_the_screen (https://linuxappfinder.com/blog/auto_screen_rotation_in_ubuntu) contents if I rotate the tablet

- Install tlp (https://linrunner.de/en/tlp/tlp.html) to dramatically improve battery life

- Install Compton (https://github.com/chjj/compton) to greatly reduce 'jarring' (improving smoothness) when scrolling with the tablet display in portrait mode

- Install my favourite apps on Debian GNU/Linux: Firefox (https://www.mozilla.org/en/firefox) and Chromium (https://www.chromium.org/Home) web browsers, Evolution (https://wiki.gnome.org/Apps/Evolution/) mail/calendar/contacts app, Thunar (https://docs.xfce.org/xfce/thunar/start) file browser, XFCE-terminal (https://docs.xfce.org/apps/terminal/start) terminal emulator, GIMP (https://gimp.org) image manipulation, Inkscape (https://inkscape.org) vector graphics editing, Filezilla (https://filezilla-project.org) SFTP client, Libre_Office (https://www.libreoffice.org), Xournal (http://xournal.sourceforge.net) pen/notes

- Install onboard (https://packages.debian.org/sid/gnome/onboard), a virtual keyboard to allow text input when the hardware keyboard is disconnected. 

- Manually applying_a_linux_kernel_fix (https://bugzilla.kernel.org/show_bug.cgi?id=206259) to make the Surface Pen work with the newest Linux kernel, requiring my to compile my own patched kernel.

- Disable_Secure_Boot (https://surfacetip.com/configuring-surface-go-uefi-bios-settings/) to make my custom Linux kernel bootable

![Compiling my customised Linux kernel](https://willem.com/global/images/8631db9f2712.webp)

![Compiling the Linux kernel on a Surface Go takes some hours](https://willem.com/global/images/416d53ff1e62.webp)

![The 'onboard' virtual keyboard](https://willem.com/global/images/5a77b988dded.webp)

![Pen input works using my custom linux kernel and the Xournal app](https://willem.com/global/images/126e903aa197.webp)

![Using the customised operating system on tablet to create content for this blog](https://willem.com/global/images/adba635a29f9.webp)

![Reading an article on my tablet in portrait mode](https://willem.com/global/images/947d3ad6683a.webp)

![Using the customised Surface Go (right) for programming, similar to how I work using an iPad Pro (left)](https://willem.com/global/images/df660a485a36.webp)

## Conclusion

After many hours of experimenting and finetuning I created a tablet operating system experience that works. I can use it to read, draw, program and design.

The sense of understanding you'll develop during the whole "build your own OS"-thing is incredible, both from a technical and user interaction perspective. It's a great opportunity to learn and hone your skills!

### Update:

Read my follow up posts on:

- How_to_migrate_and_manage_your_photo_library_using_free_software (https://willem.com/en/2020-08-31_free-from-the-icloud-escaping-apple-photos/), I now use my "WillemOS" tablet to do this! 

- Setting_up_seamless_file_synchronisation_between_your_tablet_and_smartphone_using_open_protocols_and_free_software (https://willem.com/en/2020-09-16_syncing-files-seamlessly-between-smartphone-and-tablet/). 

- Refining_my_tablet_OS_with_Surface_Go_2_i3wm_and_4G/LTE (https://willem.com/en/2020-09-28_refining-my-tablet-os-experience/)

---

## Monolithic vs Microservices software architecture

*Choosing the right design for your app development* · 2020-03-03 · https://willem.com/en/2020-03-03_monolithic-vs-microservices-software-architecture/

This week I flew to Gothenburg to meet people from a large international shipping company, talking about the development of enterprise level software. During the meeting there were various experts in the room, one of them asked me on choosing the right software architecture (for big, complex, enterprise level apps). A very good question, well worthy for a blog post.

![Visiting a large international shipping company to talk about enterprise software](https://willem.com/global/images/189c28c69d02.webp)

## Software architecture

When you design apps you should not only think about the mere look and feel, good design encompasses how everything works together, too. Software architecture refers to the fundamental structures of a software system, each structure comprises elements, relations among them, and properties of both elements and their relations.

It is analogous to the architecture of a building. Once an architecture is defined and implemented, it becomes costly to change it afterwards. It is therefore a good idea to choose the right software architecture *before* you start building.

![Simple software architecture example - different structures composing a system with different relations between them](https://willem.com/global/images/b73d8bf569bc.webp)

For simple apps the software architecture could be obvious, but as your application grows in size and functionality, the number of structures in a system can grow rapidly. This can happen over time, as your customer’s needs grows. The more structures, the more relations between them, the complexer it gets.

![Increased complexity as the number of structures (and their relations) grows](https://willem.com/global/images/df6c62e25d7d.webp)

## Dealing with complex software design

If you expect your software to handle a lot of different things, chances are you’re going to deal with complexity. From an architectural point of view there are different approaches in dealing with this software complexity.

### Monolithic Architecture

Best described as ‘one big block’ is the monolithic architecture. Here, everything your app does, is part of the same code base.

![Monolithic software architecture](https://willem.com/global/images/875d62aa72f8.webp)

In a “monolithic architecture” the software is often layered, where each layer consists of different types of components:

- **presentation layer**: responsible for the user and/or application programming interface (UI / API). 

- **business logic**: this is where actual business rules are defined. It is the core of the application that is very closely matched to the actual business processes.

- **data object access layer**: providing a common interface between the running application and persistent backend stores.

- **database and filesystem**: this is where all the data and static assets (files, images, etc), are stored. 

The bigger the application becomes, the larger each layer becomes. This makes it harder to scale a monolithic architecture, at a certain point things become simply too big and complex.

Every time you make a change to the application, the entire code base is affected. For (very) large applications this makes it harder to maintain the software, as it requires a full understanding of the entire application.

As the entire application is interdependent, problems in one part of the application often significantly affect the entire system. Communication between different parts of the system is done internally, at code level. This means that the different parts must be programmed in the same (or compatible) programming language. This is a barrier to adopt new technologies (in the future) as you cannot easily change the programming language of one part of the system.

### Microservices architecture

Instead of building one big monolithic application you can split up your application in smaller interconnected services. Each microservice is a small application of its own, complete with its own (but smaller + simpler) architecture, business logic and data layers.

The different services communicate with each other using API’s that are defined independently of the used technology, often in a common “API structure” such as REST, JSON, Redis and XML. This allows the combination of microservices to function as “one system”.

![Microservices Software Architecture](https://willem.com/global/images/2705ce2c332c.webp)

By decomposing the ‘big block’ application into smaller services, it becomes easier to understand different parts of the system. This makes it easier to maintain the system as it allows each microservice to be developed independently. It also reduces the barrier to adopt new technologies as you are free to choose whatever technology is best suited for a given service. One part of the system can be programmed in a different language than other parts. This makes it possible for different teams (with different expertise) to work together.

The art and skill of getting the microservices architecture right, come from the ability to correctly define a microservice. Too broad or too granular can destroy the architecture. You can use business processes, hierarchical or domain separation to define each microservice.

The challenge with the microservice architecture is that it adds complexity to the entire system by the fact that it requires a distributed communication mechanism. The different API’s that connect to each other can be tricky to test and debug. It becomes more difficult to implement changes that span multiple services.

Defining, designing and implementing the different interservice API’s require an agreement on the exchanged data, this can be hard to achieve when you intend to share extended and non-universal data structures.

Monitoring and deploying a microservice architecture can be complex when services grow in number. There is simply more to manage, requiring more planning and coordination for each of the services.

## Choosing the right architecture

My late dad once told me that you can “earn the most by the things you don’t do”. Building complex applications is inherently difficult, the best thing you can do is to try to make things simpler by simply not doing everything. Focus on the things that truly matter, do those things right.

If your application is simple, lightweight, a monolithic architecture is the way to go. Development, deployment, maintenance, everything is easier when things are small.

If you cannot escape complexity, then you should definitely consider the microservice architecture. Ask yourself the following questions:

- Are you able to define a “common language” between your microservices? 

- Are there clearly distinct business processes? 

- How significantly are these business processes interdependent? 

- How do you expect your application to evolve over time, do you expect it to grow or shrink?

- How many different programming technologies do you plan to use? Do you expect this to change in the future?

- Who’s going to build and maintain the software, do they have experience managing such an architecture?

## Conclusion

There is no “silver bullet” answer to the question what software architecture is right. Both approaches have their pros and cons.

The best thing you can do is to make a conscious - well considered - decision and double down on it!

![“The sky is the limit” if you master the architecture you have chosen (just don’t change it during flight!)](https://willem.com/global/images/e50e134c3fb7.webp)

---

## Your own addressbook and calendar cloud

*Share contacts, agendas and tasks with CardDAV/CalDAV* · 2020-02-28 · https://willem.com/en/2020-02-28_your-own-addressbook-and-calendar-cloud/

If you use different devices and computers to get things done, you might want to synchronise contacts, agendas and tasks. You can use any of the 'big cloud' services for this, like Apple iCloud, Microsoft Office 365 and Google Gmail. But, if you prefer not to share your addressbook and calendar with big American companies, you can do it yourself.

## Why do it yourself?

Although it is very convenient to use a big cloud service for addressbook and calendar syncing, there are good reasons why you might want to do it yourself:

- **control**: if you run the Addressbook/Calendar cloud, you control how it works, how much it costs, who has access to it, etc.

- **privacy**: although the big companies claim they 'value your privacy', they offer no garanties that nobody will look at your data. I like my addressbook (with appointments, project details, etc) and contacts (names, numbers, birthdays) to be private.

- **freedom**: if you use open protocols to run your Addressbook/Calendar cloud, you can use it on all your devices. 

## How to do it: CardDAV/CalDAV

For maximum freedom and flexibility in the choosing the devices you use, you need to select a common denominator when looking for solutions that allow the sharing of addressbooks and calendars. Luckily such a solution exists in the CardDAV and CalDAV open standards.

Both CardDAV and CalDAV are extensions on the WebDAV standard. Web Distributed Authoring and Versioning (WebDAV) itself is an extension of the standard HTTP protocol. It's a protocol that allows multiple clients (devices/computers/apps) to share a resource (file/addressbook/calendar/etc).

### CardDAV

The CardDAV protocol is an addressbook sharing protocol. It was originally proposed as standard by Apple in 2007, RFC_6352 (https://tools.ietf.org/html/rfc6352). The protocol uses WebDAV to share contact data in the "vCard" file format. You can best think of a vCard (https://en.wikipedia.org/wiki/VCard) as a virtual business card. CardDAV allows you to share your collection of virtual business cards between your devices.

### CalDAV

The CalDAV protocol is a calendar sharing protocol. Just like CardDAV it was originally proposed as standard by Apple, RFC_6638 (https://tools.ietf.org/html/rfc6638). It uses WebDAV to share appointment data in the iCalendar-format (https://en.wikipedia.org/wiki/ICalendar). The *"Internet Calendaring and Scheduling Core Object Specification"* is an open standard itself, RFC_5545 (https://tools.ietf.org/html/rfc5545), that is widely supported. CalDAV allows multiple devices and apps to access your calendar, allowing cooperative planning and information sharing.

## CardDAV/CalDAV requires a server

To work with CardDAV/CalDAV you need a server that acts as central repository of your addressbook/calendar data. Unlike 'peer-to-peer' connections (where you would link your phone to your computer), the CardDAV/CalDAV protocol is designed to work using the internet. The central server allows devices and apps to independently connect and synchronise data.

![CardDAV/CalDAV server connecting with devices and apps](https://willem.com/global/images/a53513d7f1e8.webp)

As the protocol is based on (efficient) web technology, the requirements for the server are minimal. You don't need powerful processors or huge amounts of storage memory. Some people run their CardDAV/CalDAV_from_a_cheap_Raspberry_Pi_computer (https://pimylifeup.com/raspberry-pi-owncloud/). Alternatively you could use a small VPS, a NAS or an old computer.

## CardDAV/CalDAV server software

The CardDAV/CalDAV server software consists of two parts: the server operating system and the actual CardDAV/CalDAV server. Because of its open standard definition, you are free to choose the operating system yourself. GNU/Linux is a common choice as server operating system. Different distributions often come with a ready-to-go 'app store'-like software repository, allowing you to install server apps with ease.

### Operating system

In harmony with my other cloud services, I often choose Debian_GNU/Linux (https://willem.com/en/self-hosting-running-your-own-infrastructure-on-linux/). It is an operating system that is free from commercial pressure, prioritising freedom over business interests. Because of this, it is an excellent and stable basis for any server endeavour.

### CardDAV/CalDAV server implementations

On the server operating system you'll need to install server software that implements the CardDAV/CalDAV standards. You should check out the different servers yourself: CardDAV_servers (https://en.wikipedia.org/wiki/CardDAV#Server-side) and CalDAV_servers (https://en.wikipedia.org/wiki/CalDAV#Server).

After analysing the different CardDAV/CalDAV server options, I distilled the following three options:

- **Apple Calendar-Server**: As the original CardDAV/CalDAV specification was written by Apple, they developed a_complete_server (https://www.calendarserver.org) and made it open source. Although this sounds great, the development of Calendar Server is stopped (in lieu of Apple iCloud). There is a "Notice of Archival" on the Calendar_Server_github_page (https://github.com/apple/ccs-calendarserver). It still works, but its future is uncertain.

- **ownCloud**: A popular 'do it all' solution that implements CardDAV/CalDAV is ownCloud (https://owncloud.org). It's aptly named, as it allows you to 'own your entire cloud'. Its main downside is that it tries to do *everything*, including email and file sharing - maybe too much, depending on your needs. 

- **Radicale server**: Designed as a small but powerful free and open source CardDAV/CalDAV server, Radicale (https://radicale.org) does just that: calendar and addressbook sharing. Its development (https://github.com/Kozea/Radicale) is alive, propelled by the French company Kozea (https://kozea.fr) that does a lot of work for public healthcare. In my opinion, this CardDAV/CalDAV server is both lean and healthy, making it an excellent choice.

## Install Radicale on Debian/GNU Linux

Installing Radicale on Debian is as easy as 'apt-get install radicale'. You should check out the detailed installation instructions on the Debian Wiki: install_radicale_on_debian (https://wiki.debian.org/Radicale).

The basic Radicale installation works well with simple usernames and password (from a file on the server). But, being free and open source software, there are options to integrate Radicale with different forms of authentication and security:

- **authenticating Radicale usernames and passwords against an IMAP server**: If you already manage a mail server, you might want to take advantage of its existing username and password management. You can 'piggyback' the CardDAV/CalDAV user management on top of you existing infrastructure through authentication_plugins (https://radicale.org/plugins/). There are (good) working plugins for using Radicale_with_IMAP (https://github.com/comzeradd/radicale-imap), available with source code.

- **running Radicale behind a NGINX proxy**: You can harden Radicale, from a cyber_security_perspective (https://willem.com/en/self-hosting-running-your-own-infrastructure-on-linux/), by running it behind a battle proof NGINX reverse proxy server. You'll get all the advantages NGINX offers, including automated TLS/SSL certificates through Let's_Encrypt (https://duckduckgo.com/?q=nginx+lets+encrypt). Instructions to get you started with this are available in the Radicale_Documentation (https://radicale.org/proxy/) for both Apache as NGINX. 

## Connecting to your CardDAV/CalDAV server: clients

Once you have your CardDAV/CalDAV server running, you need to configure your devices to connect to it. You can do this in different ways, depending on the type of device you use.

- **Apple macOS**: Setting up your Mac to connect to a CardDAV/CalDAV server is easy. Just add it as an account to macOS, see  instructions for CardDAV (https://support.apple.com/guide/contacts/add-contacts-from-icloud-google-and-more-adrb7e5aaa2a/mac) and CalDAV (https://support.apple.com/guide/calendar/add-or-delete-calendar-accounts-icl4308d6701/mac)

- **Apple iOS/iPadOS**: Just like the mac, setting up your iPhone or iPad to connect to a CardDAV/CalDAV server is easy. Just add it as an account, under "Settings". Instructions for CardDAV (https://support.apple.com/guide/ipad/use-other-contact-accounts-ipad99df07d1/ipados) and CalDAV (https://support.apple.com/guide/ipad/use-multiple-calendars-ipad1b02bf5b/ipados). 

- **Android**: For best integration you should use a synchronisation app that connects the Android calendar and contact databases to the CardDAV/CalDAV server. I have good experiences with CardDAV-Sync (https://play.google.com/store/apps/details?id=org.dmfs.carddav.Sync) and CalDAV-Sync (https://play.google.com/store/apps/details?id=org.dmfs.caldav.lib)

- **Windows**: Although Microsoft has built-in support for CardDAV/CalDAV in Windows 10, it does not allow you to configure it use any other service than iCloud, unless you perform funky_hacks (https://www.ctrl.blog/entry/windows-pim-sync-partnersonly.html). If you use Outlook you can use an open source Caldavsynchronizer.org (https://caldavsynchronizer.org) plugin to connect to your server. 

- **GNU/Linux**: If you're using free software on PC you have plenty of options to configure it to connect to the CardDAV/CalDAV server. If you run GNOME as desktop environment you should check out these_instructions (https://www.ctrl.blog/entry/gnome-caldav.html). 

## Conclusion

Convenience is a beautiful thing, until it stings you in the back. The "big cloud services" operated by the American tech giants provide easy (and free) ways to synchronise your personal agenda and address books. If you like to take control over your own personal (or work) data, you should consider setting up your own addressbook and calendar server.

It's not really that hard to do it yourself, and if you need help you can always ask someone (https://willem.com) to assist you. Once you have it up and running, you'll have more control of your data, better privacy and freedom in choosing your devices and apps. Not bad, right?

---

## The day I sold my car

*Looking back at my years with Smart Roadster* · 2020-02-13 · https://willem.com/en/2020-02-13_the-day-i-sold-my-car/

This week I sold my car, I now no longer own one. For me, this is something of a change as over the years I owned various sports cars that were like a hobby to me. My discovery of cycling and the birth of my son changed this. But if you're looking for a reason to buy a sports car, read along!

## Smart Roadster

It all began in 2010 when I got my first Smart Roadster. The Smart Roadster (model W452) is a two-door, two-seater sports car that was introduced in 2003 by Smart. It's a fun little car, based on a stretched platform of the Smart_Fortwo_city_coupe (https://willem.com/en/2018-11-16_around-town-in-an-electric-car/).

![Smart Roadster - spice red](https://willem.com/global/images/5dbac19e5804.webp)

The Smart Roadster is powered by the Mercedes-Benz turbocharged 3-cylinder Suprex engine (60kW, 80HP), located in the rear of the car. It's a tiny engine, but so is the car, weighing around 800KG. Combined with the rear wheel drive, grippy tires and a F1 flappy pedal  gearbox, this is an ideal mix for driving fun!

![Mercedes-Benz 3-cylinder Suprex engine](https://willem.com/global/images/2b45635c0546.webp)

![Grippy tires provide plenty of contact with the tarmac](https://willem.com/global/images/7629e5cd07ba.webp)

![Smart Roadster steer - notice the F1-style gear flaps](https://willem.com/global/images/31b4d84c4282.webp)

Although it's a tiny sports car, the interior is quite allright,  even if you're a bit longer (like me ± 1,93M). On the dashboard there are extra gauges that add to the sports car vibe.

![Extra sporty gauges on the dashboard: turbo pressure and engine temperature](https://willem.com/global/images/7baaa9aa60d0.webp)

![The car's interior is quite spacious - even if you're tall](https://willem.com/global/images/84a817bc8d14.webp)

## Driving fun

The best thing you can do with a Smart Roadster is to hit the road, drive! Its driving characteristics are similar to that of a cart. You feel very close to the tarmac, this enhances the perception of speed.

![Driving my Smart Roadster in the Pyrenees mountains (France)](https://willem.com/global/images/39d6fa3e3682.webp)

If you find a twisty road somewhere (in southern) Europe, you'll enjoy the Smart Roadster at its best. Think of a street legal roller coaster that will keep you smiling for hours!

![Twisty mountain roads - pure fun in a Roadster! (near the French/Spanish border)](https://willem.com/global/images/57d63ec5270c.webp)

![Enjoying a little 'up and down' in the hilly countryside](https://willem.com/global/images/bc96638df389.webp)

![Make sure to skip the highway, take the country roads (in Spain, near Alicante) ](https://willem.com/global/images/c9dfbac70ee7.webp)

![Open the cabrio roof and enjoy the weather, it's like playing outside for grown-ups (admit it: there is a child in all of us!)](https://willem.com/global/images/96aa6df75e5d.webp)

## Smart Roadsters are very practical

Contrary to popular believe, the Smart Roadster is in fact a very practical car. Over the years I have transported many different items, computers, televisions, paintings, canoes... and I even picked up a wife!

![The spacious trunk is big enough for a laptop or two](https://willem.com/global/images/71a549d87bf7.webp)

![With three straps and some cardboard, you can easily transport paintings of all sizes](https://willem.com/global/images/33f39066bed9.webp)

![Leave your girlfriend at home when you need to transport larger, more important stuff, like this HP DL380 Gen8 server](https://willem.com/global/images/cbc07fb8d7d2.webp)

![Who needs a boat trailer anyway? ](https://willem.com/global/images/65705d28053e.webp)

![If you use the appropriate flowers, you might even find yourself a nice bride!](https://willem.com/global/images/90add49d7777.webp)

![The open roof doubles as an ergonomic cargo hatch](https://willem.com/global/images/b91aba99d229.webp)

![Parking garage full? Think again!](https://willem.com/global/images/f53b98176786.webp)

![The Smart Roadster fits in a shoe box, keep it under your bed or next to your lawn mower](https://willem.com/global/images/7aa1efc6f986.webp)

## Saying goodbye

Times change and so do I. My discovery of cycling provides me with the feeling of freedom that is beyond that of a car. Unlike the open and twisty countryside roads in southern Europe, the busy streets in The Netherlands are much less fun to drive these days. Traffic, speed bumps, speed limits and distracted drivers demand your constant attention, taking the fun away.

![The arrival of the family car...](https://willem.com/global/images/11a4c1c14c9c.webp)

My wife's family car, a Dacia Duster, is surprisingly practical.   I hate to admit it, but it might even be more practical than my beloved Smart Roadster. It has more doors, more seats and more place for things I didn't know one would need (with kids). It can even carry my bike!

## No longer owning a car

This brought me to the point where I asked myself, do I really need to own a car? In our Western culture a car serves multiple purposes as it's both a means of transport and a status symbol.

For getting from A-to-B I can use my bike, bus, metro, train or a shared car (either from my wife, a rental car or friends). Especially in a dense urban area like the Amsterdam city region, you really don't need to own a car to get somewhere.

## Status symbol

This leaves the car_as_a_status_symbol (https://www.google.com/search?q=car+as+status+symbol). Having owned different cars over the years, I experienced firsthand what difference it makes if you own a cheap car or an expensive one.

Consider these cars I owned; imagine a person driving it. What would you think of him or her?

![Opel Kadett Cabrio 1.6i Bertone](https://willem.com/global/images/80aa1a727aed.webp)

![Smart Roadster - all black](https://willem.com/global/images/3dd0dce7b886.webp)

![Mercedes-Benz SLK55 AMG V8 5.5L ](https://willem.com/global/images/d3cad6b5303e.webp)

Chances are that you come up with different answers for these different cars. That's the point: the car communicates. Even if you don't care about your car's performance as status symbol, other people will. It's therefore something to consider when you buy one.

Maybe it's me getting older, but I no longer care that much about cars and status. I think it's way more valuable to be healthy (http://willem.com/en/wearable-sensors-measuring-the-body-questioning-the-data/) and to be able to spend time in freedom with friends and family (https://willem.com/en/fatherhood-the-personal-thread-behind-the-technology/).

## Conclusion

If you're looking for some real genuine driving pleasure, then the Smart Roadster is an absolute fun car! Take it for a ride out in the open, enjoy the sunshine, smell the trees, hear its little engine work.

Although it's surprisingly practical, you should only get one if you really enjoy driving. There are more ways to get from A to B these days. Challenge yourself to look beyond the common thought that you should own a car!

---

## Measuring cholesterol levels in blood

*Know your LDL, HDL and Triglyceride numbers* · 2020-01-28 · https://willem.com/en/2020-01-28_measuring-cholesterol-levels-in-blood/

This week I went to my doctor to have my blood examined, to determine my cholesterol levels. Over the past years I have been paying more and more attention to my health. After improving my lifestyle considerably, I wondered what my numbers were.

## What is cholesterol?

Cholesterol is a fat-like, waxy substance in your blood. Your body makes cholesterol in the liver. If you eat food from animals, like meat or dairy products, you'll receive more cholesterol than your body needs.

![Chemical structure of Cholesterol](https://willem.com/global/images/d8a2df2af954.webp)

If you have too much cholesterol in your body, it can build up in the walls of your arteries. This is called 'plaque' and it can eventually harden, a process called atherosclerosis. This causes your arteries to become narrower, making it harder for blood to flow through your vessels.

The problem with too much cholesterol is that you won't notice it until you run into (serious) problems, like severe chest pain and heart attacks. Obviously, it's better not to wait for this and to take notion now!

## Cholesterol Test

Testing your cholesterol levels is best done through your doctor's office. They'll provide a standardised blood test (called a "lipid panel") that measures:

- **Low-density lipoproteins (LDL)**: This is considered the 'bad cholesterol' as it causes the plaque build-up. 

- **High-density lipoproteins (HDL)**: This is considered to be the 'good cholesterol' as it transports bad cholesterol from the blood to the liver where it is sifted out.

- **Triglycerides**: These are the end product of digesting and breaking down fats in food. They are used to give energy to your body. They are stored in different places in case they are needed later. 

Before having your blood drawn, you'll need to fast for 9 to 12 hours. This reduces the direct influence of food on the contents of your blood stream, providing a cleaner and easier to compare measurement.

![Patch after having my blood drawn for the cholesterol test](https://willem.com/global/images/b2354c1b45f3.webp)

## Results

After taking the blood test, the sample is send to the laboratory for analyses. This will result in a lipid profile that includes your levels of HDL, LDL, triglycerides and total cholesterol.

In addition, my doctor's office also included blood sugar in my test. It is another indicator for cardiovascular risk, linked to diabetes.

### Reference values

According to the Dutch Heart Foundation (Hartstichting) the following values are considered_good (https://www.hartstichting.nl/risicofactoren/gids-cholesterol/cholesterolwaarden?tab=1):

- **total cholesterol**: preferably lower than 5.0 mmol/l

- **LDL cholesterol**: preferably lower than 3.0 mmol/l

- **HDL cholesterol**: should be higher than 1.0 mmol/l for men, 1.2 mmol/l for women

- **Triglycerides**: preferably lower than 1.7 mmol/l

According to the Dutch Diabetes Foundation (Diabetesfonds), the following_glucose_levels (https://www.diabetesfonds.nl/over-diabetes/heb-ik-diabetes/wat-zijn-normale-bloedsuikerwaarden), measured after fasting, are considered reference points:

- Lower than 6.1 mmol/l: no diabetes

- Between 6.1 and 6.9 mmol/l: pre diabetes

- More than 6.9 mmol/l: diabetes

### My Results

About two weeks after drawing blood my results where available. I called the doctors's office and received the following values:

![Results from my cholesterol blood test](https://willem.com/global/images/684c1dcd97b1.webp)

As you can see, my total cholesterol and LDL cholesterol (the bad one) are considered to be too high. The other values are (very) good. Without feeling something, my cholesterol is too high.

## Conclusion

Have your blood tested, know your numbers. It's the only way to know where you are. Whatever the results may be, it should rarely be a reason for panic - especially when you are younger. Although my cholesterol is still slightly too high, I know that it must have been much worse considering my old habits.

![Before and after changing my lifestyle  - two different Willem's](https://willem.com/global/images/2870d5b91cf1.webp)

Over the past few years I changed my lifestyle considerably, taking much more care for my body. I feel better than before. I lost over 25KG and my physical condition continues to improve. Treat your body well, don't wait until it's too late!

---

## Improve your sleep by blocking light

*On the benefits of wearing a sleep mask in bed* · 2020-01-24 · https://willem.com/en/2020-01-24_improve-your-sleep-by-blocking-light/

Over the past few weeks I have been experimenting with wearing a sleep mask in bed, blocking all light. Our bodies produce the sleep hormone, melatonin, in darkness. Living in an environment awash in artificial light, is therefore exactly the sort of thing that disrupts one's circadian rhythm. Can a simple mask help?

## Why good sleep is important

A good night's sleep is incredibly important for your health, it's just as important as eating healthy and exercising:

- Poor sleep affects hormones that regulate appetite. Those who get adequate sleep tend to eat fewer calories than those who don't. 

- Good sleep maximises problem-solving skills and enhances memory. 

- Recovery from exercising happens mostly during sleep, therefore a good sleep enhances athletic performance. 

- Good and regular sleep allows your body's immune system to function at its best, limiting the chance to get ill.

## Sleep hormone melatonin and darkness

Melatonin, a hormone produced in the brain's pineal gland, is responsible for regulating your body's clock, or 'circadian rhythm'. The release of this hormone is largely controlled by exposure to natural light, or lack thereof (darkness). Production is triggered in the evening and melatonin continues to be released throughout the hours of darkness that follow. When the day breaks, melatonin levels drop until the next evening. Darkness is therefore very important for your body to sleep.

## Artificial light disrupting your rhythm

We live in environments awash with artificial light, this light disrupts our rhythm. The natural distinction between day and night is no longer warranted. Consider light sources that might interrupt your circadian rhythm: A street light? Your partner's iPhone? A hallway light?

In a 2010 study, researchers in China found that when exposed to a noisy, bright environment, test_subjects_wearing_eye_masks_and_earplugs_experienced_better_sleep (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2887188/) than those who went without.

## The Mindfold: total darkness with your eyes open

One way to ensure total darkness when you're in bed, is to wear a sleep mask. While reading about the daily routines of successful business people and professional athletes, I stumbled upon a billionaire advising to invest in a $20 sleep mask, the Mindfold (http://www.mindfold.com).

![The Mindfold sleep mask: total darkness with your eyes open](https://willem.com/global/images/da1a9b27b20c.webp)

Not been discouraged by the 80's vibe of the mask's branding and website, I decided to take a chance and order a few. Few weeks (!) later, I received the package from Colorado.

![Maybe it's the font, maybe it's her haircut, but somehow I get a 80s vibe from the Mindfold's packaging :-)](https://willem.com/global/images/dc34cd04b108.webp)

Don't let the branding fool you: the Mindfold is a seriously effective thing to eliminate all light from passing through. You quite literally experience complete darkness with your eyes open (in brightly lit environments). It's quite amazing not to be able to see a difference between having your eye lids open or closed.

![The sleep mask has open spaces covering your eyes, allowing your eyes to open freely (while maintaining darkness): this is a mayor difference with many other masks that sit right on your eye lids ](https://willem.com/global/images/ff2ac3ebd562.webp)

![The soft foam conforms to your face for maximum comfort and darkness](https://willem.com/global/images/cf1cdf4de4d5.webp)

The mask has a soft foam cushion that ensures a perfect fit in combination with the simple but effective Velcro straps. The mask is flexible, allowing it to conform to your face. After wearing it for a few weeks I don't even notice it anymore!

![The mask is flexible, enabling a comfortable fit](https://willem.com/global/images/c410a9215f76.webp)

## Wearing the mask

Admittedly, it took some time for me to get used to wearing a mask at night. At first it feels weird, alien and uncomfortable.  But almost immediately I sensed the effect of total darkness: it's so much easier to fall a sleep.

![Wearing a sleep mask, you can see the mask takes the shape of my head](https://willem.com/global/images/ddaa508b14ab.webp)

## Benefits of the sleep mask

You really have to give the mask a chance to reach its full potential. After some time getting used to it, I really started to appreciate it's effects. I fall asleep quicker, stay asleep longer and feel better rested.

Sometimes I feel a little disorientated when my alarm wakes me up while wearing the mask. Like the feeling you have when you're sleeping really deep. It's a testament of the effectiveness of the darkness, I guess.

Another funny effect is that when you wear the mask regularly, it elicits a sort of Pavlovian response. The mere act of putting my mask on, induces a near-immediate state of drowsiness.

![Pavlovian response: my body knows it's time to sleep when I put my mask on - zzzzz](https://willem.com/global/images/6997b8ca0a3e.webp)

## Measuring sleep effectiveness

I wondered if the sleep mask's effectiveness could be measured so I collected data using different sensors and trackers. I looked at heart rate, the number of disturbances, and heart rate variability (HRV).

![Heart rate graph shows a near flat line, very close to my minimum rate (collected with Biostrap)](https://willem.com/global/images/c581a81470d9.webp)

Using Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/), I measured my heart rate while sleeping with the mask. As you can see in the graph, my rate is very constant and near my known minimum rate (±50BPM). You can see that I experienced a "dull" night, in the sense that I was "busy" sleeping and not much else. (Good!)

![Average heart rate variability (HRV) during the same night shows a steady increase (and recovery)](https://willem.com/global/images/8607e6e434b5.webp)

During the same night my HRV went up, indicating a decent recovery. When you have a high HRV, it means that your body is responsive to both the parasympathetic and sympathetic nervous system. The higher the variability between these two branches, the better your body is capable of adapting to its environment and performing at its best.

Be aware that HRV is personal and you should be looking at your personal data only, identifying trends in your own data. If you know your minimum and maximum values, you can say something about how well you have recovered. As you can see in the personalised Biostrap data, there was a steady recovery rate during this night: I slept well!

## The power of naps

While sleep experts out there would agree that consolidated sleep is ideal, there are times when getting all the sleep you need might not be possible. This is when a (power) nap can help you.

Napping mid day is considered to be the best time as it limits interference with your circadian rhythm. While a short nap can have positive (muscle memory) effects, real benefits are measurable when you sleep for at least 90 minutes. This is because typically (https://www.whoop.com/the-locker/podcast-57-naps-improve-recovery/) you’re not going to get into REM sleep unless your nap is at least 90 minutes. REM sleep is the time when new learnings are committed to memory. In many ways it's like a reset for your brain, allowing it to take on new cognitive challenges afterwards.

The mask makes it easy to do a daytime nap, the total darkness allows you to sleep quickly - even when there is daylight outside. I don't even close the curtains anymore when I do daytime naps, it's not necessary when you have the mask.

![Effects of a nap during the day: around 2pm you'll notice a steady decline in heart rate](https://willem.com/global/images/5ac339f455b7.webp)

Heart rate data from my WHOOP_strap (http://willem.comhttps://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/) clearly show the restorative effect of a nap during the day. This data is from the same day as the graphs shown ealier. It allowed my heart rate to return to normal values after an cycling session earlier that day. As I like to wakeup early in the morning (around 4.15 am), I regularly nap to stay energised and focused.

## Conclusion

A sleep mask was not something that I thought I needed, until I started wearing one. Its effects are tangible and measurable. Considering there are only 24 hours in a day, you might want to optimise your time in bed.

Investing in a good night's sleep will provide you with benefits throughout the entire day. Wearing a sleep mask is a simple and cheap thing you can do to sleep better. I found it to be an incredible tip, you should give it a try, too!

---

## Whoop strap review: 24/7 wearable sensor

*Beyond fitness tracking and smartwatches* · 2019-12-31 · https://willem.com/en/2019-12-31_whoop-strap-review-24-7-wearable-sensor/

The past months I have been wearing the WHOOP Strap 3.0, a wearable sensor that collects health and fitness data. It's different compared to most other fitness bands as it was designed with professional athletes in mind. It is focussed on daily strain, recovery and sleep. Read along to find out how this works.

## Pure, minimalistic design

The WHOOP strap is designed to be a sensor, not a smartwatch or notification device. The device is therefore unobtrusive, not making any sounds or buzzes. There are no buttons and there is no display.

![WHOOP Strap 3.0 on the wrist, no buttons, no display  ](https://willem.com/global/images/e47f3970ca50.webp)

The device has an array of advanced sensors, measuring heart rate, heart rate variability, resting heart rate, respiratory rate, movement, temperature and skin conductivity.

![WHOOP Strap 3.0 sensors](https://willem.com/global/images/ad894c314f02.webp)

On an average day it collects more than 100MB of data. Most of the data is processed on the device itself, allowing for efficient synchronisation with the WHOOP cloud service, where all data is collected, analysed and presented.

![WHOOP is about the same size as a regular watch (Tudor Black Bay 36MM)](https://willem.com/global/images/a21adad727ee.webp)

## Strap

The "ProKnit" strap is made from a stretchy yet sturdy material with an anti-slip pattern underneath. It allows your skin to breathe, which is impossible with typical rubber sports bands. Straps are available in different styles and lengths.

![The ProKnit strap is made of fabric, it is comfortable, stretchy yet sturdy and dries quickly](https://willem.com/global/images/d3d5c9e75eef.webp)

![Different strap styles and lengths](https://willem.com/global/images/fd530d320a3c.webp)

It is possible to wear the WHOOP strap on the wrist, or higher up your arm on the biceps. This allows the sensor to be hidden under your clothing.

![Wearing the sensor higher up the arm allows it to be hidden under your clothing](https://willem.com/global/images/c85c98950ecd.webp)

If you wear a mechanical watch, you can combine the strap with your watch if you want to. This way you sort of smarten-up your 'dumb' watch. It may be a solution to the populair question of "smartwatch_vs_regular_watch" (https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/).

![Seiko 5 mechanical watch with WHOOP strap 3.0 sensor attached](https://willem.com/global/images/df2be157c1de.webp)

![You can attach the WHOOP strap to your watch in a similar fashion that NATO-straps are folded through the lugs](https://willem.com/global/images/1e8881c74988.webp)

## Wearing it 24/7 (and charging)

The WHOOP Strap is designed to measure your biometric data 24 hours a day, never to take it off. The idea behind this continuous data collection is that there is important progress to be measured when you're *not* working out. The device does a tremendous job tracking you during recovery, sleep *and* activities. The continuous data collection provides a much richer picture of your physical condition.

This is useful when you (like a professional athlete) want to unlock all the potential that your body has. By matching activity (expressed as 'daily strain') with recovery, you keep your body in balance. This balance is important to prevent over training and to structurally improve your fitness.

![The "trick" is to balance recovery with strain - if you do this well, you'll gain fitness](https://willem.com/global/images/604386727626.webp)

The device is highly personal, its algorithms adjust to your bodies values. This allows it to track relative progress. This approach enables the WHOOP Strap to detect when you will become ill, even before you feel it yourself!

![Recovery declined when I became ill, WHOOP data detected the decline earlier than I felt ill!](https://willem.com/global/images/9fdc59bd9bd5.webp)

The main challenge with a 24/7 device is battery power. In the past I have worn multiple other sensors, like Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) and Apple_Watch (https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/). While these other devices have their own strengths, they are limited by the requirement to take it off for charging. Even though this may only be for a few hours, it requires annoying 'manual management': taking the strap/watch off and putting it back on.

![The WHOOP Strap is charged using a slide-on battery pack, allowing you to wear it continuously](https://willem.com/global/images/40413612662b.webp)

In contrast, the WHOOP strap can be charged while wearing it using a relatively small external battery pack that slides on the WHOOP sensor unit. Charging is quick, ± 30-60 minutes to fully charge it. While charging, it continues to work.

![Battery pack attached to the WHOOP strap](https://willem.com/global/images/1438d56ef946.webp)

Once fully charged, the WHOOP strap has an actual battery life of about 4 days (they claim 5 days, in practice it's close to 4.5).

## Measuring activities, workouts and sport

The WHOOP Strap measures your biometrics continuously, this means that if you decide to workout you don't have to start any app or activity tracking. You just "do your thing" and the device will measure the intensity of your workout. It automatically detects common workout types using machine learning and by analysing the type of movement the gyroscope sensor detects. You can (very) easily adjust this recognition in retrospect, adding different workout types that the device may not detect initially.

It is important to understand that defining a workout is not necessary for the WHOOP strap to work: it measures *everything*. That means that everything you do adds to your daily strain. You'll be surprised how much energy you spent on things like common household tasks and work.

![WHOOP data on a day when I went out I went out for a ride on my bike](https://willem.com/global/images/f4f3547b88ae.webp)

The continuous data collection allows you to clearly see the workouts you do relative to the rest of your day. If you look at the graph shown above, you'll see that it takes many more hours for my heart rate to return to normal after working out. A simple/stupid fitness tracker would not see this "post workout" data.

### Heart rate broadcast

Another cool, useful, feature is heart rate broadcasting. The WHOOP Strap 3.0 allows you to broadcast your heart rate on devices that are compatible with the "Bluetooth Low Energy Heart Rate Profile". This enables the WHOOP to work with bike computers, fitness machines and external apps. I use this feature to connect to my favourite bike_computer_app (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/), making it unnecessary to wear a separate HR chest strap while cycling (like the Wahoo TICKR).

![WHOOP Strap 3.0 can broadcast your heart rate to any Bluetooth device](https://willem.com/global/images/5bd4a89b0e5c.webp)

## Matching strain with recovery (through sleep)

Ultimately the WHOOP strap distills all the collected data into three simple pillars:

- **Recovery:** this is how ready your body is to take on strain, it is determined by analysing HRV values during your sleep. The recovery score is highly personalised, based on your body's usual metrics. 

- **Strain:** this is a numeric value (0-21) indicating how 'hard' your day was. The value is determined on the popular Borg Scale of perceived exertion. This is a scientific scale developed by Gunnar A.V. Borg in 1970 to objectively measure exertion. Strain values are personal as they are determined by the average heart rate during a workout: a well trained person will have a lower heart rate during the same workout. 

- **Sleep:** as rest is important for recovery, sleep is meticulously analysed by tracking movement, heart rate, respiratory rate and heart rate variability. WHOOP will analyse your sleep pattern (time in bed vs time asleep) and suggest the optimal time to go to bed. 

![Beyond individual metrics: WHOOP provides a complete insight, including recovery, strain and sleep](https://willem.com/global/images/df10f73b4fad.webp)

## Whoop community and teams

In addition to the WHOOP Strap and its data, there is a lively WHOOP community on Facebook. Other users share their experiences with the strap and data. This is useful as it enables you to learn from others, like how they improve their sleep and how to promote recovery.

![Connecting with other WHOOP users through Facebook and Teams](https://willem.com/global/images/275ef2e4582d.webp)

In addition to Facebook there is the "Teams feature" inside the WHOOP app. It allows you to compare your stats with other people. This can help you motivate to go the extra mile when doing your workout.

## Conclusion

The WHOOP strap is a designed to perform advanced continuous analyses of your biometric data in order to provide you with easy to understand, actionable insights.

The WHOOP strap is easy to wear on a daily basis, sitting comfortable on different positions on your body. In many ways it is exactly how I would design a minimal (yet very functional) biometric sensor. I highly recommend it to anybody who's interested in unlocking the potential of the human body!

### Get a free WHOOP strap + one free month!

Thinking about getting yourself a WHOOP? Get a free WHOOP strap and your first month free when you join with this link: https://join.whoop.com/willem

---

## Realtime human pose recognition through computer vision

*Using TensorFlow and PoseNet on a video feed* · 2019-12-01 · https://willem.com/en/2019-12-01_realtime-human-pose-recognition-through-computer-vision/

For an exciting new project I have been experimenting with computer vision using TensorFlow. I wanted to achieve realtime human pose detection to drive interactive video projections and games. Time to dive into the world of machine learning, tensors and computer vision!

## Computer vision

Really exciting is the interdisciplinary scientific field of computer vision, dealing with how computers can be made to gain an high-level understanding from digital images and video feeds. It includes challenges to acquire, process and analyse digital images. Ultimately you'll want the computer to take decisions based on its understanding of the (complex) world around it.

## TensorFlow

TensorFlow is an end-to-end open source platform for machine learning, originally developed by Google. It is based on scientific work from various scholars and has since become a stable and robust ecosystem of tools, libraries and community resources.

The name "TensorFlow" is derived from the concept of a "flow of tensors". A tensor is best described as a "thing", like something that the computer recognised - or tries to analyse. Technically, a tensor is a multi-dimensional array with numeric values. This allows the computer to compare different "things", see how their characteristics are alike (or different).

The main challenge in realtime image processing is to reduce the complexity of the image into processable chunks that can be expressed as tensors. Usually this involves many steps comprising the computer vision's algorithm. Steps like, recognising a shape, cropping into that particular shape, resizing it, removing its colour, comparing the contours, etc. Tensors flow through these steps, from 'unanalysed' into 'recognised', henche the name TensorFlow.

## Processing Power

The great thing about modern machine learning using TensorFlow is that you generally do not need (very) expensive hardware to achieve results. This is because the "heavy lifting" is done when training machine learning models, which you can sort of imagine as "reference tables". These models are created by analysing known datasets, where the computer is given the 'answer' and it determines the characteristics of the subject. Training models requires time, processing power and training data.

## Training data

Google did something truly clever, it distributed the training of its machine learning models to all of us. Yes, that includes you!

### Recaptcha

Chances are that you have encountered "reCAPTCHA" or "Recaptcha". A visual challenge you have to complete when you order something online or try to register somewhere. This challenge provides a protection against (spam)bots for webshop and website owners. Its aim is to distinguish humans from bots. It does that by providing (complex) images to humans, asking them to identify objects in these images. Like traffic signs, crossings, cars, etc. Google_uses_this_human_feedback (https://www.techradar.com/news/captcha-if-you-can-how-youve-been-training-ai-for-years-without-realising-it) to train its models.

![ReCaptcha: you've been training Google's AI for years!](https://willem.com/global/images/50568e89a5e8.webp)

The great thing is that many of Google's findings are made available publicly, there are many interesting open source projects that allow us - simple developers - to do amazing things with machine learning.

## Human pose recognition using: PoseNet

One of these available machine learning models is PoseNet (https://www.tensorflow.org/lite/models/pose_estimation/overview). It's a vision model that can be used to estimate the pose of a person in an image or video. This is done by determining where the key body joints are, like your elbows, hands, hips, knees ankles, etc.

![Me and mini-me being recognised by the PoseNet model](https://willem.com/global/images/7953a7232386.webp)

### Single Shot MultiBox Detector (SSD) algorithm

The Single Shot MultiBox Detector is a popular algorithm to detect objects in images and video feeds. It is popular because of its speed. The principle is relatively simple to understand: the algorithm tries to reduce the image complexity as quickly as possible, only doing deep analyses on shrunken, simplified feature maps.

This approach works best if you want to detect large objects, as they stand out quickly: generating enough high level features to do predictions early on in the algorithm. This is great for body detection, which is one of the first steps when you want to determine human poses (first look *where* a person is, then *what* his/her pose is).

![MobileNet-SSD algorithm (image: hey-yahei.cn)](https://willem.com/global/images/567b618c7f65.webp)

Image and person recognition is something where the people from China (https://hey-yahei.cn/2018/08/08/MobileNets-SSD/index.html) are pretty good at, for various reasons. Their algorithms perform well on relatively weak hardware. This enables computer vision on all kinds of devices to work well, in realtime!

## Cool use cases

Being able to detect poses in realtime enables all kinds of cool stuff. You - quite literally - can become the game controller or  input for an interactive art installation!

### PomPom mirror

With 928 spherical faux fur puffs this art_installation_by_Daniel_Rozin (https://vimeo.com/128375543) is amazing. The sculpture is controlled by hundreds of motors that build silhouettes of viewers using computer vision.

![PomPom faux puff mirror by Daniel Rozin](https://willem.com/global/images/34fceca59e7a.webp)

### Turning you in a bird: The Treachery of Sanctuary

Enabling people to loose themselves for a moment was only possible by bringing different disciplines together. This amazing interactive_art_installation_directed_by_Chris_Milk (https://www.youtube.com/watch?v=I5__9hq-yas&feature=youtu.be) is a giant triptych that takes viewers through various stages of flight using computer vision.

![Turning people into birds using computer vision](https://willem.com/global/images/e4956ea74e75.webp)

## Conclusion

Working on creative and experimental projects is an incredible privilege, it is what makes my work so exciting.

With ever increasing heaps of data, digital and autonomous sense-making is a major challenge for the future: one I am keen to work on!

---

## Supernova E3 Pro 2 dynamo powered headlight

*Replacing my bike's headlight* · 2019-11-26 · https://willem.com/en/2019-11-26_supernova-e3-pro-2-dynamo-powered-headlight/

Earlier this month my dynamo powered headlight on my commuter bike needed replacing. One of the electrical connectors broke of, likely caused by intense daily use. I searched for the best possible light, one that would be extremely durable and bright. I found the Supernova E3 PRO 2 and decided to install it on my bike.

## Supernova E3 PRO 2

The E3 PRO 2 is very much a top model of the Supernova brand, a German company with an extra focus on longevity, performance and environmental impact. They are proud on their Deutsche_Ingenieurskunst (https://supernova-lights.com/supernova/). Their quality doesn't come cheap: the Supernova E3 PRO 2 costs as much as some people spend on their entire bike... is it worth it?

![Supernova E3 Pro 2](https://willem.com/global/images/ae708621eb4d.webp)

### Quality

The light is highly regarded by many different retailers and authorities that have thoroughly tested it. It received numerous awards, including the German "VSF all-ride" seal of quality.  The headlight stands out because of the functionality, usability, lifespan and the quality of the material. It won't break down, but the company does offers 5 years of warranty.

### Specifications

The E3 PRO 2 is the top model of the dynamo lights produced by Supernova, it has the following specifications:

- **Brightness:** 205lm

- **Input voltage:** 6V AC dynamo

- **Stand light:** 5 minutes

- **Light Type:** Power LED

- **Dimensions LxWxH:** 69 x 40 x 40 MM

- **Material: ** 6061 Aluminium 

- **Weight: ** 110g (without bracket)

- **Colour(s): ** Available in 8 different colours

## Unboxing

The light comes in a cardboard and metal box, with barely any plastic. It is well packed and the metal box can be re-used to put other (bike)stuff in. Because of it's price, I ordered anti-theft bolts too.

![Supernova E3 PRO 2 Box, no plastic - just recyclable cardboard](https://willem.com/global/images/eccb5c40992a.webp)

![Supernova E3 Pro: bright, reliable, for years](https://willem.com/global/images/0bc147c49be4.webp)

![The light comes in a metal box that you can reuse for something else afterwards. The anti-theft bolts came in a separate bag](https://willem.com/global/images/6fa6e275094a.webp)

## Installing the light

You can order different kinds of pre-fitted cable configurations  attached to the headlight from Supernova. I ordered one with two simple, long cables. This allowed me to solder the light onto my bike: eliminating vulnerable micro connectors.

![The Supernova E3 PRO comes with cables attached to it](https://willem.com/global/images/9cb33529c8c4.webp)

It's a little bit more work, but in the long run this means the light will always have a solid electrical connection. You'll connect the head light to the dynamo *and* to your rear light. This enables the mechanical button to switch to both lights on and off.

![Connector used by my Shimano hub dynamo](https://willem.com/global/images/d385483d4706.webp)

The only exception to my direct-soldering approach is the connector located at my Shimano hub dynamo. There will be (unfortunate) situations where I will need to remove my front wheel, like in case of tire punctures. Luckily this connector is sturdy and easy to (re)attach to the light cable.

![Soldering the existing cables on my bike required a little creativity using clamps](https://willem.com/global/images/7a00ea5512ca.webp)

My bike has internal cables going through the frame. This is great to keep the cable from harms way, but when you need to replace the cable it means fiddling through tiny holes. To minimise the fiddling I decided to solder the new cable on to the old one, using it as 'pulling cable' through the bike frame.

![New cable soldered to the old one, allowing it to pull the new one through the bike frame](https://willem.com/global/images/3748b8611aac.webp)

![Voila! Pulling the cable worked like charm](https://willem.com/global/images/48ae0d1c0bdf.webp)

After pulling the old cable out, I undid the soldering and prepared the connection to the rear light. It's a good idea to put shrink wraps on the cable joints where they are exposed to the elements (and dirt). On my bike this joint is located below the bottom bracket.

![Connecting the rear light to the head light, protecting the joint with shrink wraps](https://willem.com/global/images/907ebab6f91c.webp)

![After heating the shrink wraps, they'll provide a protective layer against the elements](https://willem.com/global/images/4d1ad6ed7f1a.webp)

As I don't like any cables exposed (more than necessary), I decided to tie-wrap it closely to the sturdier shifting cable. This way it is better protected against accidentally pulling it out (by another bike, in the city, etc).

![Tie wrapping the electric wire to the sturdier shifter cable](https://willem.com/global/images/8f3106d1501d.webp)

## Conclusion

The light fits nicely on my bike, it is very sturdy and well built. The brightness is amazing! It is really good when you use this on your daily commute.

![Supernova E3 PRO2 fitted to my bike](https://willem.com/global/images/f69dab781b32.webp)

I'll need more time with the light to judge its proclaimed longevity, but already I have a feeling that it will prove excellent in the long run. As a good light is essential for your personal safety on the bike, I think investing in quality like this Supernova E3 PRO2 makes perfect sense!

---

## Building a professional 72TB NAS

*Configuration and installation of an HPE ProLiant DL380 server* · 2019-11-22 · https://willem.com/en/2019-11-22_building-a-professional-72tb-nas/

Over the past few years I have been moving my data and work from local computers (mostly laptops) into the cloud. Cloud computing is done by servers in a datacenter, powerful computers that do the hard work. As my company grew, I needed more capacity. It was time to add some power to my cloud!

## Cloud Computing

Over the past few years "The Cloud" has been marketed as a magical phenomenon solving many business problems. From a technical perspective however, it is nothing more than concentrating computer power in datacenters instead of on your desk.

The main advantages are that you can access (extremely) powerful computing resources that scale as your work load grows. Imagine your desk: there is only so much space for a computer. In contrast, a datacenter is physically much larger and allows many different server computers to be working in concert, offering more capacity.

![Servers in a datacenter: the black racks are like closets for the grey server computers, each rack fits multiple servers (photo: HPE). ](https://willem.com/global/images/133e09c069cd.webp)

In addition to scalability, the datacenter is a much better environment for computers than your office. Think of simple thinks like dust, spilling coffee, power outages and differences in temperature and humidity. And if you're like me, commuting_by_bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/), it's a good thing that your data is safely stored in a datacenter instead of on a laptop in your backpack (exposed to shocks, weather, etc).

## HPE DL380 Server

My company uses HPE (https://www.hpe.com) servers as they have a proven track record for reliability and offer many smart design features that allow easy maintenance. In many ways they are designed to make a system engineer's life easier.

![Inside a HPE ProLiant DL380p Gen8 server (LFF)](https://willem.com/global/images/909896d1cd90.webp)

On the picture above you'll see the HPE DL380 server on the inside. Let me explain it's innards from **left to right**:

- **Drive bay**: the grey metal enclosure is where the harddisks or SSD's live. They are on the front of the server when it's mounted inside a rack, allowing easy access to add/replace drives; usually without requiring any tools. 

- **Fan assembly**: the 6 black boxes are fans, sucking cool air from the left and pushing it to the right. Each fan is individually monitored. If a fan fails, others will take over it's load by blowing faster. Each fan is very easy to replace, again without any tools.

- **Processors and memory**: In the center, behind the transparent plastic (cooling tunnel) are the two processors and 16 memory banks. You can recognise the processors by their metal heat sink. They are surrounded with (many) memory banks, physically positioning them very close to the processors allows for very high bandwidths. They are right next to the fan assembly, maximising the thermal envelope.

- **Power Supply Units**: On the top right there are the two power supply inits. They work in concert, dividing the electric load between them. If one fails, the other is capable of supplying the entire server. This provides redundancy as it allows you to connect the server from multiple (different) power sources in de datacenter. 

- **System board**: the green chips you'll see on the center right comprise the main system or logic board. It contains various components that make up the server. You'll notice thinks like the (clock) battery, SD-card reader, and iLO-chip. The latter is HPE's integrated 'lights out' system, a computer inside a computer, allowing engineers to remotely check the server's innards. 

- **RAID Controller**: On the lower right is the RAID controller, where RAID stands for "redundant array of independent disks". It connects and organises the physical drives in the drive bay. It is capable of dividing data over different disks, allowing for some redundancy in case of drive failure.

## Installing an operating system on the server

Just like your desktop or laptop computer, the server needs an operating system too. For servers it is common to use a special kind of operating system that allows for other operating systems to be installed remotely. The main operating system allows you to divide the capacity into multiple virtual servers, this is called an hypervisor OS.

The advantage of using multiple virtual servers is that you can more easily transfer work loads between physical machines without the need to reinstall software. The virtual servers are generic and capable of running on different types of hardware. This enables scalability and redundancy if you use multiple physical servers in combination with multiple virtual servers.

![HPE ProLiant DL380p server powered on, green lights indicate the drives are working, monitor is connected and showing the boot process](https://willem.com/global/images/30d395d32ef6.webp)

![Server (top left) connected to the computers on my desk (lower right) during installation inside my office](https://willem.com/global/images/c51ff21e2823.webp)

Installing the operating system works a little different than your average office computer. The server has no CD / DVD drive to allow installation from physical media. Instead I use a local network to serve the installation files to the server. This is done using my ThinkPad X1 laptop running a webserver. I configured the HP server to connect to this laptop as boot option.

![Computers on my desk powering the installation from left to right: ThinkPad X1, iPad Pro and MacBook](https://willem.com/global/images/c8a597878d8b.webp)

![MacBook acting as monitor and keyboard of the server](https://willem.com/global/images/8a15db91132f.webp)

The MacBook is connected to the server through HPE's iLO. It allows it to act as monitor and keyboard. This makes it possible to control the installation from my desk (instead of standing next to the noisy server).

![iLO: "sea of sensors" enabling an extensive remote insight in the server](https://willem.com/global/images/a08146defef2.webp)

Through iLO it is possible to see all the individual components of the server. It allows engineers to check upon the physical status of the server, see how it's doing.

## Bringing it to the datacenter

After the main operating system is installed, the server needs to be placed in the datacenter. In Amsterdam there are many different datacenters. My company has multiple servers in different locations, limiting the risk of data loss in case of local fire and disaster. Bringing the server to the datacenter is as simple as making an appointment with the network operation center, signing some contracts and jumping in your car.

![Driving to the internet: visiting XS4ALL / KPN in Amsterdam](https://willem.com/global/images/50f6353b57ec.webp)

![Never underestimate the bandwidth of a car with 72TB in its trunk (72TB in my Smart Roadster)](https://willem.com/global/images/7975165f7c9c.webp)

To allow for an easy installation in the datacenter I preconfigured the network settings to match that of the datacenter. If everything works well, this enables "plug and play" of the server. It did, hooray!

![Server connected and online inside the datacenter](https://willem.com/global/images/0ecba21deb2a.webp)

Once the server is up and running you can connect to it remotely. This allows you to use it as a real part of "the cloud", tapping into it's computing power from a distance.

![MacBook connected to the server in the datacenter through VMWare ESXi - installing GRUB boot loader on a virtual Debian GNU/Linux server](https://willem.com/global/images/9ceff50b570c.webp)

## Conclusion

Powering the cloud are the many server computers inside datacenters. Depending on your needs, you can either rent some capacity from others or install physical machines yourself.

For various reasons I choose to operate my own physical machines, maximising performance and control. Managing servers (both physical and virtual) has become somewhat of a lost art, albeit a critical one for today's cloud powered internet.

---

## Flying in a C47-A (DC-3) classic plane

*Aboard the 75-year old royal PH-PBA dakota* · 2019-10-19 · https://willem.com/en/2019-10-19_flying-in-a-c47-a-dc-3-classic-plane/

As a wonderful birthday gift I was honoured to fly in a DC-3 classic plane. It was the 75-year old PH-PBA, a C-47A Skytrain or Dakota, formerly owned by H.R.H. Prince Bernhard from The Netherlands. It's a very special plane operated by the enthusiastic people from the Dutch Dakota Association (DDA Classic Airlines). Read along for some aviation history!

## C-47A Skytrain

The C-47 is a military version of the civilian Douglas DC-3. Built by the wonderful ladies known as "Rosie the Riveters", this C-47A Skytrain was built in the Douglas factory in Long Beach, California in 1943. Many women worked on the planes as most men were enlisted to war.

![Rosie the Riverters work on the C-47 at the Douglas Plant in Oklahoma City (1944, Tinker Air Force Base History Office)](https://willem.com/global/images/a966e4f9eff1.webp)

During World War II the C-47 was used by many countries to transport troops, cargo and wounded. More then 10.000 aircraft were produced. In Europe the C-47 was used during D-Day (https://en.wikipedia.org/wiki/Invasion_of_Normandy) to drop more than 50,000 paratroops.

![U.S. Army Pathfinders and USAAF flight crew prior to D-Day (June, 1944, RAF North Witham, public domain)](https://willem.com/global/images/aeb92149fe89.webp)

![Paratroop C-47, 12th Air Force Troop Carrier Wing, during the invasion of southern France (August, 1944)](https://willem.com/global/images/ac2e76bfe452.webp)

## PH-PBA

The C-47 operated by the Dutch Dakota Association (DDA Classic Airlines) was built in 1943. It was part of the 316th Troop Carrier Group during D-Day where it flew in formation with 35 other C-47's to drop more than 600 paratroopers in dropzone 'O', near St. Mère Église, Normandy, France. During this mission the plane was shot, taking damage but remaining able to return to England. After repairs the plane was involved in many more missions, including operation Market_Garden (https://en.wikipedia.org/wiki/Operation_Market_Garden), the Allied attempt to liberate The Netherlands.

In 1946 H.R.H. Prince Bernhard bought the aircraft from General Eisenhower for US $ 50,000. A bargain, he thought, as the aircraft had locked up only 300 flying hours. The aircraft with military markings "42-100971" is registered in the Dutch aviation register as PH-PBA, where PH- being the country code for The Netherlands and PBA is short for "Prince Bernhard Alpha". It became the first Dutch government aircraft.

![The PH-PBA taking Queen Juliana and Prince Bernhard to Belgium, May 1960 (Ministerie van Infrastructuur en Waterstaat)](https://willem.com/global/images/3f8f6ca0ee9a.webp)

The plane remained in service until 1975 when it was donated to the Aviodrome museum at Schiphol Airport. For long H.R.H. Prince Bernhard kept a strong wish to restore the airplane to flying conditions. After years of restoration, the plane was ready to fly again in 1998 when the Dutch Dakota Association was granted the right to operate and maintain the PH-PBA.

![PH-PBA "Prinses Amalia" being prepared for takeoff by DDA volunteers at Lelystad Airport (October 2019)](https://willem.com/global/images/bf74d1766ce6.webp)

## Flying a classic plane

It's one thing to read about and walk around a piece of aero history, to fly it is sensational! Lucky me, as I got a ticket from my pilot buddy Tim to fly along over the Frisian lakes (Friese Meren) in this special piece of aircraft history.

![DDA Classic Airlines ticket boarding pass ](https://willem.com/global/images/d30c0dc0619d.webp)

![Lelystad Airport terminal building near the hangar where the PH-PBA is stationed](https://willem.com/global/images/f0b79035de53.webp)

![Volunteers preparing the Pratt & Whitney R-1830 Twin Wasp aircraft engines for ignition](https://willem.com/global/images/5a128d169cbf.webp)

The PH-PBA is equipped with two Pratt & Whitney R-1830 Twin Wasp aircraft engines. They are two-row, 14-cylinder, air cooled engines producing about 1200 HP. Each engine weighs about 567KG and displaces 30 liters. It requires regular servicing, which is done by the volunteers from the DDA. They are piston engines and that is something special these days: easily distinguishable by their sound!

![Pratt & Whitney R-1830 Twin Wasp radial aero engine on display at the Imperial War Museum Duxford (photo: Nimbus227)](https://willem.com/global/images/bd999f70526f.webp)

Although the C47-A is capable of starting its own engines, the PH-PBA is usually started using a generator. As history is full of sweet irony, it's a German built, Deutz diesel powered electrical generator. It's really cool to see this old tech still working fine; it's a welcome contrast to many of the modern_day_planned_obsolescence (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/).

![Electrical generator, powered by a German built Deutz diesel engine, used to start the R-1830 engines](https://willem.com/global/images/8118f1056219.webp)

![Electrical generator control panel inside the platform car](https://willem.com/global/images/db4fa33a15dc.webp)

![Riveted by the Rosies, the C-47-A PH-PBA "Prinses Amalia" remains a beauty at her 75th year anniversary](https://willem.com/global/images/65eee3571d8b.webp)

Unlike modern commercial passenger planes, the DC-3 stands tall on the platform with it's tail near the ground and cockpit up in the sky. It's quite the view when you stand near the aircraft. Entering the plane is done from the rear, where you sort of 'climb' into the cabin.

![The tail wheel of the C-47-A PH-PBA is quite close to the ground when parked on the platform](https://willem.com/global/images/fd3f3816c165.webp)

![Inside the cabin you have a clear view into the cockpit as there is no door separating the pilots from the passengers](https://willem.com/global/images/c30918bc8bac.webp)

Inside the cabin you realise how far modern aircraft design (and comfort) has come. It's really sensational to take your seat inside this flying museum. The cabin offers a clear view into the cockpit where you'll see the pilots.

![The R-1830 Twin Wasp piston engine at work - it feels alive!](https://willem.com/global/images/12565a5d817b.webp)

Once the engines are started you'll feel the plane become alive.  Fumes, vibrations, sounds, it's all magnificent! The aura of 75-years of history suddenly feels very tangible, it is really something special!

![KLM Captain flying the C47-A PH-PBA over the Markermeer](https://willem.com/global/images/af4733b8eba2.webp)

During the DDA flight you're free to walk inside the cabin and have a look in the cockpit. The flights are usually flown by (former) KLM pilots, who'll passionately talk about the 'Grand Old Lady'.

![PH-PBA wing over Friesland, the Markermeer on the horizon](https://willem.com/global/images/73be6e490c5c.webp)

![Flying over the village of Heeg with IJlst en Sneek visible on the horizon](https://willem.com/global/images/da1f914e4df2.webp)

![Frisian lakes visible from the C47-A PH-PBA cockpit](https://willem.com/global/images/3aa8cd38feb7.webp)

![Terherne visible at the "Snitser Mar", Friesland](https://willem.com/global/images/90cf44ff69e7.webp)

![Flying over the Zuidermeerdijk near Urk, with the Ketelbrug visible crossing the water](https://willem.com/global/images/9e8ba6197fe4.webp)

## Conclusion

I can highly recommend that you book_a_flight (https://www.dutchdakota.nl) with the amazing people from the Dutch Dakota Association to experience aviation history unlike anything else.

It's been a privilege to fly along with the PH-PBA over Frisian Lakes on a beautiful autumn day. Thanks to my buddy Tim for this amazing birthday gift!

---

## Multi-Window support in your iPad app

*Native development for iPadOS* · 2019-10-07 · https://willem.com/en/2019-10-07_multi-window-support-in-your-ipad-app/

Last month Apple released iPadOS, the first dedicated operating system for iPad. It differs from iOS with its support for the larger iPad screen, including multi / split screen windows. I develop apps and it was time to take advantage of these new possibilities that iPadOS offers.

Ever since 2016 I have been using_iPad_as_my_main_computer (https://willem.com/en/inside-and-outside-apple-using-questioning-and-escaping-the-ecosystem/), it's a great mobile computer. The operating system is however, unlike that of most computers. iPadOS is based on iOS that runs on Apple's popular mobile phone, the iPhone. This makes the iPad a little different in daily use because of how it run apps.

![iPad Pro as my main computer connected to a terminal using Blink](https://willem.com/global/images/590ada94c4e1.webp)

Because of the smartphone roots of iPadOS, the operating system handles apps like an iPhone does: apps run full screen focused on a single task. People love iPad for this as it's a great way to keep your mind concentrated on a single thing.

## Multiple Windows support for iPad

There are situations where running multiple windows simultaneously can be very useful, and this is where Apple improved iPadOS when it introduced support to run apps side-by-side.

![Multiple window support on iPad, running two instances of the same app at once](https://willem.com/global/images/d4097d9a5811.webp)

Even if you're working on a single task, having support for multiple windows is very useful as it allows you to run multiple instances of the same app at once. This enables different use-cases where you can look and edit content from different angles. Like comparing two different months in your agenda, editing a long document or looking at the map at different scales simultaneously.

![Comparing different months in the calendar app](https://willem.com/global/images/b0fd605efa8d.webp)

![Looking at the map at different scales simultaneously](https://willem.com/global/images/62fc3c1ace78.webp)

## Design Intent

When Apple_introduced_the_support_for_multiple_windows_on_iPad (https://developer.apple.com/videos/play/wwdc2019/212) they designed this with respect to the mobile roots of iPadOS. Unlike traditional PC apps, where complex software can run through multiple *different* windows (and panels) by default, iPadOS maintains the requirement that an app must be able to do everything from a single window.

It's a design requirement on iPad that all app windows are of the same kind, and each one can do everything in the application. The user could do anything from one window if they want to. They should be able to create multiple windows only if they think it's useful, but the app should never require that. This facilitates the simple way apps run oniPadOS, you can continue to use apps full screen like on a smartphone.

![Ken Ferry explaining the design of multiple window support for iOS during WWDC 2019](https://willem.com/global/images/64d2bc5a822d.webp)

## App Lifecycle (and code changes)

From a technical_perspective_Apple_introduced (https://developer.apple.com/documentation/uikit/app_and_environment/scenes/supporting_multiple_windows_on_ipad) UIWindowScene with a corresponding UISceneSession abstraction in the UI structure. It sits between the UIScreen and UIWindow.

![Conceptual overview UI structure iPadOS as explained by Steve Holt during WWDC 2019](https://willem.com/global/images/7b7e0e6a8f2a.webp)

![Conceptual overview of UISceneSession, providing the persistent interface state between app representations (WWDC 2019, Steve Holt, Apple)](https://willem.com/global/images/3d8992b418c8.webp)

When iPadOS (and iOS) run multiple apps, it is possible that the operating systems closes an app from the background to safe memory and power. This is by design: it keeps the operating system fast and kind to the battery.

From an app lifecycle perspective, this means that you need to check if your app was running before when it is  started. When there is an existing UISceneSession the app should reconnect to it, to provide a persistent interface state to the user. When done right, the user will not notice that the app was interrupted while in the background.

![Functional roles in the lifecycle of an iPadOS app (WWDC 2019, Steve Holt, Apple)](https://willem.com/global/images/0cc957f952fe.webp)

If you adopt the new UIWindowScene (and UISceneSession) concepts in your app, you'll be able to take advantage of the new multi-window capabilities of iPad. But there is one more thing: Apple is planning to bring iOS and iPadOS apps to the Mac. With the new UI concepts your app will run great on macOS, too!

![The same app on iOS/iPadOS and macOS](https://willem.com/global/images/8a48b3cb9b2d.webp)

## In practice

As developer I had little trouble implementing the new UI concepts in my apps. With relatively little effort you can enable many different use cases where the same app provides more power to the user.

![Using my "Lemmid (content) Manager" app to edit a blog post while looking at the results side-by-side](https://willem.com/global/images/5d22d4b5df00.webp)

![Editing a DNS record using my "Lemmid Domain" app while preserving context of the entire DNS zone](https://willem.com/global/images/a825ee524dfd.webp)

![Using my "Lemmid Count" app to analyse views and traffic an article on willem.com](https://willem.com/global/images/7f6a0e735536.webp)

![Web development on iPad using Inspect and Blink side-by-side](https://willem.com/global/images/be682d70074e.webp)

## Conclusion

Apple did not rush the support for multiple windows on iPad, but took its time to design it well. If you adopt  the new concepts your app will be more powerful to the users.

It's always a good idea to take your time to understand underlying interface concepts before you start developing. Do it right (and good) instead of fast (and stupid)!

---

## Visiting an international hackers conference

*OWASP Global AppSec Amsterdam* · 2019-09-27 · https://willem.com/en/2019-09-27_visiting-an-international-hackers-conference/

This month I was lucky enough to attend Global AppSec Amsterdam, an international conference for hackers and security specialists. There were presentations from former intelligence agents, bounty hunters, academics and software vendors. I learned about some of the newest hacking techniques, met with interesting people and played some cool retro games. Read along for more.

## OWASP Foundation and Global AppSec Amsterdam

The OWASP Foundation is a not-for-profit organisation dedicated to create tools, documentation, forums and conferences around software security. OWASP is special because it's free from commercial pressure, it is not affiliated with any technology company. They advocate approaching application security as a people, process and technology problem because the most effective approaches to application security include improvements in all of these areas. More about OWASP can be found on https://www.owasp.org.

The Global AppSec events are organised all over the world. This September there was such an event in my hometown Amsterdam. Check their_schedule (https://www.owasp.org/index.php/OWASP_Events/upcoming_events) to find out if OWASP is coming to your town.

![Global AppSec-Amsterdam](https://willem.com/global/images/403811a3464b.webp)

## When cyber security gets real: Squashing Terrorists

One of the most impressive stories was told by Chris_Kubecka (https://en.wikipedia.org/wiki/Chris_Kubecka), a woman wo has worked for the US Air Force and United States Space Command. She is a computer security researcher, and cyberwarfare specialist.

![Keynote presentation by cyberwarfare specialist, Chris Kubecka](https://willem.com/global/images/8d317a6e37bb.webp)

She talks about her work at the Royal Saudi Arabian Embassy in The Hague. It's very interesting to learn about how the local police, the Diplomatic Corps and special agents were involved to ultimately prevent a bomb attack on the Kurhaus_in_Scheveningen (https://en.wikipedia.org/wiki/Kurhaus_(Scheveningen). It's when you hear these stories that you realise that not everything that happens gets featured on the news!

![Lessons learned from dealing with terrorists](https://willem.com/global/images/ad3f0bba8321.webp)

## Coffee and games

After the keynote about terrorists, cyberwarfare and bomb attacks it was time for some coffee and games. Playing retro games is a fun way to meet other hackers on the conference as you'll have an obvious shared thing to talk about. That's useful as most IT-experts need a little help breaking the ice when it comes to socialising...

![Coffee and PONG on the video-sports console with CRT monitor](https://willem.com/global/images/86cc76d31a28.webp)

![DuckHunt with an original Nintendo zapper](https://willem.com/global/images/3ebd793dd0c1.webp)

![Remember the days that this was your average computer - note: the IBM model M keyboard... oh boy!](https://willem.com/global/images/5ac85970a721.webp)

## Hacking techniques

After coffee there were several sessions that you could attend. I selected a few based on my personal interests and my work.

### Persistent Client-Side XSS

One of the talks I attended involved attacking websites using Local Storage or cookies. Aptly named "Don't trust the locals", the presentation from Marius_Steffens (https://cispa.saarland/people/marius.steffens/) and Ben_Stock (https://cispa.saarland/people/ben.stock/) was very interesting. Their academic research revealed that many websites are vulnerable for threats gaining a permanent foothold!

![Persistent Client-Side XSS is a real threat - by Marius Steffens and Ben Stock](https://willem.com/global/images/f7a3c90be9d0.webp)

### Hacking PayPal using HTTP desync attack

In his brilliant talk James_Kettle (https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn) describes his research on possibly one of the most dangerous hacking techniques on the modern web: HTTP_Request_Smuggling_by_desyncing_HTTP_requests (https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn). This technique uses vulnerabilities when a website uses a content delivery network (CDN), a web cache or a web application firewall (WAF). It's amazing to learn about this, to understand the underlying principle and to learn how to defend against this kind of attack.

![James Kettle on hacking PayPal - gaining $38,900 in bounties](https://willem.com/global/images/aa04e0114bcd.webp)

### Hacking economics: what's an hacked account worth?

In another interesting talk Jarrod_Overson (https://jarrodoverson.com) explains the state of credential_stuffing_attacks (https://jarrodoverson.com/post/no-2fa-does-not-stop-credential-stuffing-attacks-79de7476a80a/). This type of attack involves using leaked account names and passwords on different websites, which is surprisingly successful as a lot of people use the same password on different sites. He explains how_to_bypass_CAPTCHAS (https://jarrodoverson.com/post/bypassing-captchas-with-headless-chrome-93f294518337/) and how hackers make their malware mimic human behaviour for fraud. He concludes that fraud is a human problem, not a technical one - driven by simple economics: it's worth hacking!

![Hacking return rates on investment between 100% on the low end and 150,000% on the high end! (By Jarrod Overson)](https://willem.com/global/images/3c11c554de6f.webp)

### Hacker's mindset

In his talk, Gergö_Turcsányi (https://twitter.com/gergoturcsanyi?lang=en) talks about how he became a bounty hunter. He explains that you don't need to be an incredibly skilled mathematician to do this, all you need is a little creativity and some time to time to poke around. Eventually, this led him to successfully hack Google!

![Hacking Google - How I could have stolen your photos from Google (Gergö Turcsányi)](https://willem.com/global/images/d039827bdd65.webp)

## Conclusion

Visiting Global AppSec was fantastic! It's a privilege to meet other hackers, learn from them and hear about the things you normally won't see on the news.

Whatever you take away from a conference, there will always be something that you didn't expect to learn. It's this unexpected learning that makes visiting conferences very much worth the effort!

![Global AppSec Amsterdam](https://willem.com/global/images/1053cb217048.webp)

---

## Fighting backscatter spam at server level

*Configure Postfix to block spam before it enters the server* · 2019-09-10 · https://willem.com/en/2019-09-10_fighting-backscatter-spam-at-server-level/

This month I had to deal with backscatter spam, affecting one of the mail servers I manage. As server engineer I make sure that servers don't send spam and that incoming email gets filtered. Despite all good efforts, this server kept being blacklisted for sending spam to iCloud, Office 365 and Google Gmail for Business (G Suite). Read along to find out how what caused this and how to fix this.

## The problem

The server is a Postfix mailserver on Debian GNU/Linux running all the latest updates and security patches. The server is used by legitimate customers that can only use it with proper authentication.

### Prevent begin an open relay

Individual user authentication on a mail server is an important measure against abusing the mail server. If spam gets sent, you can see what user is causing the problem by looking at the mail server logs. In technical terms this means you prevent the server to become 'an open relay'. Postfix offers many settings to limit_SMTP_relay_using_access_control (http://www.postfix.org/SMTPD_ACCESS_README.html).

### Rate limiting (hacked) mail accounts

Server abuse by individual users happens when their computer gets a virus or when their password gets sniffed. That can happen when you access your mail over an insecure WiFi without encryption (TLS/SSL). For situations like this, it's a good idea to rate limit the amount of emails that individual users are allowed to send. You can use individual Postfix_configuration_parameters (http://www.postfix.org/postconf.5.html) (such as *smtpd_client_message_rate_limit, smtpd_client_connection_rate_limit* and *smtpd_client_recipient_rate_limit*) or use a Postfix firewall like Postwfd (https://postfwd.org).

### The server gets listed on 'backscatterer.org' black list

Despite all the measures against spam abuse, the server still got listed on http://backscatter.org for sending spam. If a server gets listed on a black list, other servers will no longer trust it and consider all messages to be suspicious. This can cause your (legitimate) messages to be seen by other servers as spam (false positives). To understand why this happened, you first have to understand what backscatter spam is.

## What is Backscatter spam?

Backscatter spam is incorrectly automated bounce messages sent by the mail server, usually as a side effect of incoming spam.

Backscatter occurs when spammers forge the sender address. They send a mail message that they expect to be bounced using somebody else's address as sender. When the mail message bounces, the mail server returns the message to the falsified sender... causing the server to effectively deliver spam to the sender address.

![Simple backscatter scenario, mail server bounces message to a falsified sender address](https://willem.com/global/images/ce079c524f46.webp)

The simple backscatter scenario is where a message gets bounced to the wrong sender. It's a scenario that's simple to solve by configuring the server not to send bounce messages, but to respond with an SMTP error code instead.

![Prevent backscatter bounce messages by responding with SMTP error codes instead](https://willem.com/global/images/ecab1d4c0125.webp)

Unfortunately there is another (harder) scenario causing your mail server to send backscatter spam. This happens when somebody on your server configures his or her mail account to forward email to another address. The second server might have a more stringent spam filter that causes messages to be blocked upon forward. Your mail server will then inform the original sender that forwarding failed, causing backscatter spam.

![Causing backscatter spam when the first mail server forwards email to another server that blocks message](https://willem.com/global/images/b76507d467ad.webp)

The forwarding scenario is much harder to solve as you possibly don't control the other mail server or its spam filter settings. What's worse is that there is often a some delay between accepting the message and forwarding it, making it impossible to wait for a response of the other mail server.

### Prevent backscatter spam

The only way you can fully prevent backscatter spam is to be very stringent at the first mail server, at the initial SMTP connection stage. This solves the challenging 'forwarding scenario' by being very selective what messages get forwarded.

![Prevent backscatter spam by checking all messages before forwarding them to another server](https://willem.com/global/images/75d348304794.webp)

### How to block spam before it enters the server

The best way to prevent backscatter spam is to block it before it enters the (chain of) server(s).

Traditionally, servers use advanced spam filter such as SpamAssasin to analyse messages one by one. This causes additional load on the mail server.

It's much easier to look at the sender (e.g. if he wears a red hat) for initial filtering. Is the sender on a black list? Does he use a 'normal' mail app, or are messages being send by a virus or malware? You can determine many things by looking at the 'language' the sender speaks.

![Implementing stringent SMTP restrictions in Postfix - annotated screenshot from main.cf](https://willem.com/global/images/39ef96cae1a9.webp)

In Postfix you can specify SMTP restrictions in the *main.cf* configuration file. There are checks that can be used to block messages. It's a good idea to work from 'easy to hard' in filter logic, starting with things that can be checked without consulting external servers. This reduces network traffic and load. Only if a message passes all checks, it gets permitted for delivery (or forwarding).

Upon delivery you can implement additional complex (and user specific) spam filtering using tools like SpamAssasin (https://spamassassin.apache.org) or Bayes_filtering (https://en.wikipedia.org/wiki/Recursive_Bayesian_estimation). By reducing the influx of obvious spam messages, these resource intensive filters can do their work much more efficiently.

## Conclusion

Fighting spam at server level is a challenging game as spammers get more creative in abusing mechanisms of mail servers. If your server gets blacklisted for backscatter spam, you need to be wary of forwarding scenarios. Keep an eye on blacklists to see if your server is causing trouble.

Block messages with error codes instead of returning them to the sender (bouncing). Configure the server with a stringent delivery policy. The best way to prevent backscatter spam is to block messages before they enter the mail server, now you know how.

---

## Riding with a power meter on your bike

*Installing and using the 4iiii Precision Powermeter* · 2019-08-28 · https://willem.com/en/2019-08-28_riding-with-a-power-meter-on-your-bike/

After I created a minimal road bike, I decided to install a power meter to find out what's it like to measure the power output of my legs. What can you learn from a power meter? Is it difficult to install? Is it worth it? Read along to find out.

## Power Meters

Most power meters use strain gauges that deflect slightly when force is applied. By measuring this torque and combining it with angular velocity, power (measured in Watts) can be calculated. In addition to speed, cadence and heart rate sensors, power meters are a perfect tool to quantify your (training) performance.

There are different types of power meters available, differing in accuracy, ease of installation, maintenance requirements and bike portability. Power meter types:

- **Rear wheel hub**: measuring the power applied to the rear wheel is considered the most accurate location to measure power. It is however, 'further from your legs' as both the chain and sprockets are 'in between' your legs and the power meter, causing measurements to be slightly lower.

- **Pedals**: measuring the power applied to the pedal is done using special pedals that are relatively easy to swap between bikes. Each pedal can be equipped with its own power meter, allowing idependent measurements of the right and left leg. 

- **Chain ring**: measuring the power applied to the (front)sprocket is another very accurate way to measure power. They're not easy to swap between different bikes and its difficult to accurately differentiate between left/right legs. 

- **Bottom bracket**: measuring power from the bottom bracket can be accurate and low maintenance. Installing such a power meter can be difficult and your bike (or groupset) may not be compatible.

- **Crank arm**: measuring power from the crank arm is very popular because of its flexibility, accuracy and ease of installation. The power meter I installed on my bike, a 4iiii Precision Powermeter, is of this type. 

![4iiii Precision Powermeter - used by the professional cycling team Quick-Step / Bora Hansgrohe](https://willem.com/global/images/716721c9ea80.webp)

## 4iiii Precision Power meter

A very popular pedal power meter is the 4iiii precision powermeter. Like the popular Stages power meters, the 4iiii power meter replaces your existing crank. Selecting the right power meter model is as easy as looking at your existing crank, you'll find the model and crank arm length near the pedal bolt

![The crank arm has it's model and length written on it, on my bike that's: FC-5800, 172.5MM](https://willem.com/global/images/0dc3eb4a6b8c.webp)

## Installing the power meter

The 4iiii Precision Powermeter comes in a small box with a clear 5-step instruction printed on it.

![Quick start guide installing and using the power meter](https://willem.com/global/images/24519cf71ad2.webp)

Use a crank tool to remove the exising crank from your bike. I have a Shimano groupset and used the TL-FC16/FC-M960 crank tool. It's a (cheap) piece of plastic that allows you to remove the bearing cap from the crank. Use an alley key to loosen the two bolts, there is a small plate between the crank ends that you should popout to remove the crank.

![Use a crank tool to remove the crank (Shimano TL-FC16 / FC-M960)](https://willem.com/global/images/9ab899bb97f0.webp)

![You should be able to loosen the plastic cap with just your fingers/hand, no extreme torque is required](https://willem.com/global/images/ac636f5c8a5c.webp)

When installing the power meter crank, you should pay attention to the instruction indicating the right amount of torque. Tighten the bolts evenly and equally using a torque wrench.

![Tightening the crank arm using a torque wrench](https://willem.com/global/images/e198a98a1225.webp)

![Make sure the battery is installed and the covering door is locked](https://willem.com/global/images/8f487d0db8ee.webp)

![4iii Precision Power meter installed on my bike](https://willem.com/global/images/abd4c691be41.webp)

To use the power meter you should pair it with a compatible bike computer or your smartphone. I use_an_app_as_bike_computer (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/) and therefore pair the power meter to my phone. Download the 4iiii app and follow the instructions to start a Bluetooth scan.

![Bluetooth scan from the 4iiii app](https://willem.com/global/images/9c43854daea6.webp)

Once you have paired with the power meter, you should check for firmware updates. I had to install a few that improve the power meter's battery life, reliablility and accuracy. This can take a few minutes to complete.

![Zero offset calibration is very important for accurate measurements](https://willem.com/global/images/fb2acc59f195.webp)

Once you have connected and updated the power meter, you should calibrate it. This will allow it to detect its 'zero value' by performing a measurement in vertical position. The app will guide you through this, calibration will take a few moments. Once calibrated you can use the power meter in any of your favourite apps, including Strava (https://willem.com/en/2016-12-31_one-year-of-cycling/) and Cyclemeter(https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/).

![Connecting the 4iiii Precision Powermeter to the Cyclemeter app](https://willem.com/global/images/9478e36027b6.webp)

## Riding with a power meter

Using a power meter you can see how much energy your legs are applying to the pedal(s). It's a direct quantification of your efforts on the bike. It will take some time for you to get a feeling with the Watts measured by the power meter.

![Wahoo RFLKT+ showing realtime data from my bike computer app - obviously I was standing still here... all the zero's (except my heart rate)](https://willem.com/global/images/f1a22322fa3b.webp)

I use a Wahoo_RFLKT+_in_combination_with_the_Cyclemeter_app (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/). It shows me the realtime power output, measured from my crank arm. This realtime feedback is interesting while riding your bike as you'll be able to see the (huge) differences in Watts measured.

Situations like going through a corner with the angle of the wind changing, can clearly have significant effects on the measured power output (when you maintain a certain speed / cadence). Or, when you change your position on the bike, like holding the handle bar from the top or bottom. Or, how much harder it actually is when you go faster (hint: that's not a linear relation!)

Compare the power meter to the heart rate sensor and you'll note that it's much more direct. It goes up and down instantly as you change the intensity of your pedalling. The combination of power meter and heart rate data is interesting. It allows you to find out what your maximum sustainable power is. Everybody can go (very) fast, but speed depends on external factors like wind. By looking at power data you'll be able to more accurately compare different rides, track your training progress and compare your efforts to other cyclists.

![Data from the power meter, compared with speed, cadence and heart rate data](https://willem.com/global/images/7d8494e84304.webp)

Look at the data above, it's from one of my rides with the power meter. Here you can see my heart rate, cadence, speed and power meter data in combined graphs. I cycled 23 KM's that can be divided in four segments:

- **A** and **D**: Both the beginning and end of my ride were in urban areas where I encounter other traffic. You'll note a lot of spikes in the graphs: this is because of the frequent braking and accelerating. Cycling through town is actually very energy consuming (just like your milage in a car is usually worse in town compared to highways). Low speed, high power - not very efficient.

- **B**: this segment of my route is follows the Amstel river, with few intersections and interruptions. Here it's possible to cycle a steady pace, visible in the graphs. You'll note a variance in the power data, this is due to the wind that affects the ride, differing when I pass houses, bushes and various corners. 

- between **B** and **C**: around 13KM, just between the B and C segment is where you clearly see a drop in all graphs. This is the town of Ouderkerk aan de Amstel where construction work is done to the Amstel bridge. It clearly affects my ride, with peaks in power as I charge to pass the bridge (a slight elevation that I like to take standing on my pedals). 

- **C**: riding on the other side of the Amstel river I experienced more wind, you'll see my power (and heart rate) rising. Round 17-18KM you'll note a spike in speed. This is where I encountered another cyclist... for a little implicit racing. You can clearly see that pushing myself over 250 Watts caused my heart rate to rise significantly, while around 200 watts it remains perfectly steady around 130BPM. 

## Conclusion

Fitting a power meter on your bike is not difficult using the right tools. Connecting and calibrating the sensor is easy using your smartphone and the right app. Once connected and calibrated you can use the power meter with various apps.

Riding with a power meter offers you extra insights in your performance. You'll be able to quantify the intensity of your ride by looking at actual delivered energy. Training with power data is well worthy of another blog post that I might write in the future.

Do you need a power meter? Unless you're a pro athlete, I think you don't really need one. But if you're interested in performance data beyond metrics such as heart rate, speed and cadence - you might find a power meter useful. Just remember to enjoy your ride, whether with or without a power meter!

![With or without a power meter: don't forget to enjoy your ride!](https://willem.com/global/images/0c8143e51c04.webp)

---

## Creating a minimal road bike

*Recombining and refinishing old parts into a new bike* · 2019-08-18 · https://willem.com/en/2019-08-18_creating-a-minimal-road-bike/

Over the past months I have worked on different bikes, leading to an accumulation of spare parts in my garage. I wondered how hard it would be to make a new bike using these spare parts. I decided to take advantage of this moment to refinish some parts, removing excessive decals in order to create a minimal looking road bike.

## Make a plan

Before you start working on building your (new) bike you should make a plan. Create a list of parts you have and what parts are missing. For me this meant I had a nearly complete group set, but I missed brake/shifter cables a saddle and rubber.

### Cleaning is half the work

If you work with old parts, make sure to clean them thoroughly. If bike parts are used they collect dirt that affect performance over time. You'll be_surprised_how_beautiful_old_bikes_and_parts_are_when_you_clean_them (https://willem.com/en/2016-09-03_batavus-champion-bike-from-1978/).

![Dirty rear derailleur](https://willem.com/global/images/92c3d430876b.webp)

Most bike parts, like a rear derailleur, can be taken apart using standard tools like a torx wrench or allen key. You can (and should) replace bearings when you're at it. It's easy to do and will make the bike feel like new; most bearings have their exact specification written on them.

![Replace old bearings with fresh ones while you're at it](https://willem.com/global/images/7374910a16b5.webp)

## Refinishing parts with paint

After you've cleaned all the parts you plan on using, you can consider refinishing them with a fresh layer of paint. Earlier I_removed_all_paint_from_a_bike_frame (https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/), but this time I wanted the new bike to have a fresh, minimalistic paint job.

Some of the parts had signs of wear on them, while others had (excessive) decals. I selected a black/white colour scheme in order to create an uniform clean look. The risk with putting all kinds of parts together is that you'll end up with a Frankenstein-ish creation.

![Spray painting different parts into a uniform appearance](https://willem.com/global/images/b06b79a398cd.webp)

I spray painted the various smaller parts after I've fixed them on a piece of wood. The piece of wood allowed me easily take them outside to apply (thin) layers of paint. Once painted I simply put the entire piece of wood back into the garage to let it dry. I repeated this proces about three times.

![Spray painting the bike bike frame](https://willem.com/global/images/0673ddc45033.webp)

To safe yourself from a painful back, you should consider getting yourself a work stand for your bike. It makes servicing bikes a lot easier as you can adjust the angle and height of your bike (parts). I used my bike stand to paint both the frame and fork. I fixed the frame to the stand using a piece of copper pipe - allowing me full access to all parts in need of a fresh layer of paint.

![Parts look like new with a fresh layer of paint](https://willem.com/global/images/76c4bcebc1f7.webp)

For best spray paint results, you should really (really!) take your time. It's better to apply multiple thin layers of paint rather than one single, thick and drippy one. I applied about four or five layers of white paint and finished it off using two layers of transparent lacquer.

## Putting it together

Once you have collected, cleaned and refinished all the parts nescesary, it's time to put them together. It's a fun job to put your own (new) bike together as you'll gain an understanding of all the different parts that is impossible to equal when buying a bike from a shop.

![Ready to put all parts together, creating a bike!](https://willem.com/global/images/d1f85924ed40.webp)

It's a good idea to install the seat post first, allowing you to fix the bike frame in the work stand. The seat post tube is often (by far) the strongest tube on the bike, much stronger than the top tube which often is the weakest!

![The seat post tube is a good place to fix your bike in the work stand](https://willem.com/global/images/6049ee3723e3.webp)

Make sure to apply fresh grease because you probably removed existing grease when you cleaned the bike. The main function of grease is to keep water away from bearings, in addition to prevent squeaky and ticking noises.

![Apply grease to bearings like the ones in the front fork + headset](https://willem.com/global/images/8ff61ea98e4e.webp)

Another very important thing to keep in mind is that you can easily apply too much pressure on bolts. You should really invest in a (good) torque wrench to prevent excessive powers on bolts, junctions, bearings and tubes.

![Always use a good torque wrench to prevent excessive power on bolts](https://willem.com/global/images/21c695eb4413.webp)

Many bike parts have a maximum torque value written on them in Newton Meter (Nm). If you cannot find a value on your bike part, you should look it up online. Don't guess or pick a random value: your life depends on your bike staying together when you're cycling on it!

![Most parts have torque values written on them in Newton Meter (Nm)](https://willem.com/global/images/ce95f6d56c50.webp)

![Installing the crank using a torque wrench and crank tool - note the written instructions on the crank](https://willem.com/global/images/0964518f750c.webp)

![Crank and pedals installed on the bike frame - make sure to check if it can move freely](https://willem.com/global/images/5dfa532828cc.webp)

Installing the cassette is easy with the right tools. Use a cassette tool and chain sweep to install or remove a cassette. Make sure to align the individual sprockets as they have specific teeth that enable smooth shifting. This is easy because the axle has a specific pattern allowing just one way for the sprockets to be installed.

![Installing the cassette is easy if you align it to match the rear axle's pattern](https://willem.com/global/images/583bfecd743b.webp)

![Use a cassette tool and/or chain sweep to install or uninstall the cassette](https://willem.com/global/images/68f5f4624d06.webp)

Once the cassette is installed, you can put the wheels in the bike frame. This is the moment when you realise you've created a bike (and it's no longer just a bunch of parts).

![With the wheels installed, the bunch of parts start to look like a bike!](https://willem.com/global/images/52d598aae359.webp)

One of the last tasks is to install the cables and connect them to the derailleurs. Depending on the frame it can be difficult to get the cables through (internal) guides and holes. Take your time to do this, as the alignment and length of the cables greatly affect the shifting and braking smoothness.

![Installing cables on the handle bar and handles](https://willem.com/global/images/aac25d03b82b.webp)

![Connecting the cables to the derailleurs](https://willem.com/global/images/fefa3e92a375.webp)

![Front derailleur connected with the shifter cable](https://willem.com/global/images/ad7daca27354.webp)

Aligning the derailleurs is not very hard to do, but it is a good idea to watch some YouTube instruction videos on how_to_index_your_gears (https://m.youtube.com/watch?v=Bbk5RcH0bbQ). Once again it's easier to do this if you have fixed your bike in a work stand, allowing you to pedal and shift freely while finetuning the gears.

![Indexing the gears is easier when you're able to peddle freely, allowing you to precisely set the cable tightness ](https://willem.com/global/images/3fa39375c753.webp)

## Conclusion

Many hours later the spare parts have become a modern and minimalistic road bike! You will feel proud of your creation as it is more than the sum of its parts.

![Minimal road bike - made using spare parts and many hours!](https://willem.com/global/images/d5b80c1be59d.webp)

Building your own bike will give you an incredible understanding of its parts. It is very satisfactory to ride it!

---

## Limitations of sleep tracking using a wearable

*Comparison with a chest strap HR-monitor* · 2019-07-16 · https://willem.com/en/2019-07-16_limitations-of-sleep-tracking-using-a-wearable/

Sleep monitoring is a popular feature of many smartwatches and wearables. Devices like Fitbit, Withings, Apple Watch and Biostrap analyse biometrics during your sleep. These wearables are worn on the wrist and use optical sensors to capture your heart rate. I wondered how the optical sensors would compare to a high resolution chest strap HR-monitor.

## Optical HR-monitoring requires power

Most smartwatches and wearables use optical heart rate sensors to measure your heart rate. These need a light emitter (usually green or (infra)red LED's) and a photo sensor to analyse light refracting off your flowing blood. This data is analysed and processed into metrics such as heart rate. Because this sensor type requires processing and multiple components, it typically uses more power. Check out my detailed post about different HR-monitor types (https://willem.com/en/2019-07-15_optical-vs-chest-strap-heart-rate-monitors/)

![Apple Watch uses an optical sensor to perform its automated heart rate monitoring](https://willem.com/global/images/adf4d1369cd7.webp)

## Limited by battery power

As batteries in wearables are usually limited because of their physical size, heart rate monitoring cannot be done continuously during sleep. It's common to only take heart rate measurements with intervals as low as just once every 5 or even 10 minutes!

![Heart rates measured by Apple Watch reveal that measurement is only done once every 5 minutes](https://willem.com/global/images/64efd1eff213.webp)

That means you'll get just 6 or 12 measurements per hour. That is very limited when you consider that your heart will beat 3600 times an hour at a common 60BPM.

## High resolution HR-monitor: chest strap

Contrary to the optical sensor used in most wearables, a chest strap HR-monitor can easily capture your heart rate in realtime: providing multiple (accurate) measurements per second! This is why this sensor type is popular by professional athletes during their workouts. Like I explained before, it_can_do_this_because_of_its_conductive_connection_to_your_body_allowing_it_to_capture_your_heart's_electric_activity_directly (https://willem.com/en/2019-07-15_optical-vs-chest-strap-heart-rate-monitors/).

![Wahoo TICKR uses conductive pads in its strap to capture your heart's electric activity directly](https://willem.com/global/images/3313b7c381f9.webp)

Although the chest strap is power efficient and reliable, it's not very comfortable to wear for any other than working out. That's why all the sleep tracking is usually done using optical sensors in wrist worn wearables.

## Experiment: wearing a chest strap at night

What difference would it make if sleep analyses was done using multiple data points per second instead of just a few measurements per hour? I decided to wear a chest strap heart rate monitor during my sleep to find out.

![Wahoo TIKR (left) captures more data per minute than Apple Watch (right) per hour!](https://willem.com/global/images/e6c5bf4cdf4a.webp)

To compare data from the chest strap I decided to wear another (optical) heart rate monitor on my wrist: Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/). Like most smartwatches, it uses an optical sensor to capture metrics. I configured it to capture data every 5 minutes (a common interval, just like Apple Watch).

## Findings

My experiment went well, a night without interruptions other than my regular nightly "daddy_duties" (https://willem.com/en/2019-06-24_six-months-with-mcadd/). The next morning I reviewed the data captured by both sensors.

![Heart rate during my experiment night as captured with the optical HR sensor (top) and chest strap (bottom)](https://willem.com/global/images/d152323f0e6c.webp)

You can clearly see the difference in data collected by both sensors. They more or less agree on the average and minimum heart rates. But the data from the chest strap clearly shows more and higher spikes. The chest strap detected a maximum of 111 BPM versus the 69 BPM maximum measured by the optical sensor.

I wonder where these spikes come from, I think they may be the result of me dreaming, turning around or (slightly) waking up in response to an external sound. Because of their short duration these spikes are missed by the optical sensor which only does one heart rate measurement every 5 minutes.

![Combining heart rate measurements with movement data from a gyroscope sensor](https://willem.com/global/images/321af3169856.webp)

This is why most wearables use a gyroscope sensor in addition to the heart rate sensor. Some smartwatches use the microphone to detect external sounds, too.

## Conclusion

Wearing a chest strap HR monitor during sleep revealed that data captured by the commonly used optical heart rate sensor is incomplete. Short disturbances (causing spikes in heart rate) are easily missed.

In a way, the optical heart rate sensor feels like a speedometer that only works a few times per hour. Additional data from gyroscope and microphone can't fully make up for the missing data. You would consider your speedometer broken!

Therefore you should consider if sleep tracking using a wrist worn sensor is worth all the effort. You might be better off spending your time and energy doing something else, like sleeping! Sweet dreams!

---

## Optical vs chest strap heart rate monitors

*Measuring beats per minute using different sensors* · 2019-07-15 · https://willem.com/en/2019-07-15_optical-vs-chest-strap-heart-rate-monitors/

With modern wearables, smartwatches and fitness bands, it has become easy and common to measure your heart rate. There are however fundamental differences in sensor types. Some sensors capture the electrical signal from your heart while others use light to analyse the blood flowing through your vessels. If you're interested in measuring heart rate, it's good to understand these differences.

## Measuring your heart rate

If you want to measure your heart rate (HR), you basically have three options:

- **manually**: use your finger and place it on one of your body's larger blood vessels. When you feel your pulse, count it for a period of 10 seconds and multiply the count by six to get a 'beats per minute' (BPM) value.

- **using an electrode HR sensor**: using two or more electrode pads on your body, this sensor type captures the electric activity of your heart. This is how heart rate monitors in hospitals work to create an electrocardiogram (or ECG). Most chest strap HR-monitors work this way, too.

- **using an optical HR sensor**: these sensors have small LEDs on their underside to shine green or red light into your wrist. The different wavelengths of light from these emitters interact differently with the blood flowing through your wrist. The sensor analyses the light refracted off the flowing blood to take measurements or to create a photoplethysmogram (or PPG). Most wearables such as smartwatches and fitness trackers work like this.

## Optical vs Electrode HR sensors

Both optical and electrode HR sensors use different different signal types to measure the same thing: heart rate. This is a fundamental difference between the sensor types as it greatly affects the sensor's convenience, accuracy and power efficiency.

### Electrode HR sensor

In order to be able to capture the heart's electric activity, this sensor needs direct contact with your body, typically through two or more electrode pads. In a hospital they connect up to twelve pads, whereas a typical chest HR-monitor uses two pads placed on your body using a strap. Once it has a signal it works accurately and power efficiently.

![Heart rate monitor in hospital uses electrode pads to capture the heart's electric activity](https://willem.com/global/images/daad3bd9fd73.webp)

![Conductive pads in the chest strap work in a similar way as the heart rate monitor in hospitals](https://willem.com/global/images/3313b7c381f9.webp)

### Optical HR sensor

An optical HR-monitor needs a light emitter (usually green or red LED's) and a photo sensor to analyse light refracting off your flowing blood. This data is analysed and processed into metrics such as heart rate. Because this sensor type requires processing and multiple components, it typically uses more power than a electrode HR-monitor. External light (such as bright sunlight) can interfere with the sensor's accuracy if the sensor is not perfectly snug on your wrist.

![Biostrap features an optical sensor, located at the center, right between two LED's](https://willem.com/global/images/df2636cbc686.webp)

![Apple Watch has an optical heart rate sensor, cleary visible in the middle of the underside](https://willem.com/global/images/adf4d1369cd7.webp)

## Conclusion

Because of its accuracy the electrode based sensor is commonly used in hospitals and by professional athletes. Its direct electrical connection to your body allows realtime monitoring in a power efficient manner.

The optical sensor type does not require electrical pads or straps to capture your heart's activity. It can operate from a wearable or smartwatch, right from your wrist. This allows it to comfortably take heart rate measurements periodically, useful for long term heart rate monitoring.

![Heart rate data using different sensors, the workout was captured (in detail, bottom graph) with a chest strap while the hours afterwards with an optical sensor ](https://willem.com/global/images/50b47bedbb47.webp)

If you combine the two different sensor types, you can get interesting and detailed insights into your heart's activity. Use a directly connected chest strap to capture a workout in detail, while use an optical heart rate monitor (in a wearable or smartwatch) to capture your recovery during the hours after the workout. I did_this_during_an_intense_ride_around_the_Markermeer_earlier_this_year (https://willem.com/en/2019-05-29_solo-around-the-markermeer-211km/).

Both optical and electrical heart rate sensors measure your heart's activity. Yet they differ fundamentally because of the different signal they use to count your beats per minute. If you combine them, you'll be able to take advantage of both of them!

---

## Assembling a cargo bike

*Setting up the Babboe Big cargo bike* · 2019-06-25 · https://willem.com/en/2019-06-25_assembling-a-cargo-bike/

This month our Babboe Big cargo bike arrived, in boxes. The engineer in me thought it was a good idea to assemble the bike by hand. This way I would know exactly about all its parts and fittings, handy knowledge for maintenance. Read along for my experience and some practical tips.

## Babboe Big

The Babboe Big is the original cargo bike from when the Babboe company launched in 2006. This Dutch company set out to create an affordable, high quality cargo bike, suitable for transporting children. The Big is their own version of the traditional three-wheeled Dutch cargo bike, proving to themselves that they could manufacture quality at scale for affordable prices. It's incredibly popular in The Netherlands ever since.

![Babboe Big](https://willem.com/global/images/3f54446cfbd3.webp)

## Assembling the cargo bike

The frames are made and flat-packed in Asia. If you order your bike online, you're offered the to assemble the bike yourself. Compared to the 'ready-to-ride' delivery option, assembling the bike yourself is €300 cheaper. That seemed like an easy win for me... because how hard can it be to assemble a bike, right?

![The Babboe Big, in boxes](https://willem.com/global/images/f94b848a6233.webp)

The bike arrives in many different boxes, containing wheels, parts of the frame, parts of the wooden cargo box and the semi-assembled rear end of the bike. It's a very good idea to think about *where* you're going to have your build fest. Assembling the bike can take hours and you really don't want to move all the parts, nuts and bolts around.

![Front wheels and fender](https://willem.com/global/images/c008e5a6ac0a.webp)

![Front frame and wooden box (still packed)](https://willem.com/global/images/48e799582b1c.webp)

![Rear end of the bike, semi assembled](https://willem.com/global/images/c4f8ba278585.webp)

![Bazillion screws, nuts, rings and bolts...](https://willem.com/global/images/a97e2e90da51.webp)

![Construction manual... 67 pages!](https://willem.com/global/images/c57b3fe10e7d.webp)

Once you have unpacked all the boxes, you'll get a good feeling on how much work assembling the bike actually is. Unlike a modern road bike, this cargo bike has in incredible lot of individual nuts and bolts. What's more, each individual nut+bolt connection will require two, three or even four rings. Picking the right combination, every time, is time consuming (and worth paying attention to!).

![Step by step instructions](https://willem.com/global/images/01c1a2dabfa2.webp)

Make sure not to remove the screws from their bag as each of them is marked with a letter, used as reference in the manual. Really pay attention to the drawings in the manual as not all parts are symmetrical (and have only very small visual differences, like a nut hole). Even the great magnificent author  made a few mistakes.., requiring me to disassemble parts of the bike in later steps. Not handy.

![The assembling kit comes with some tools](https://willem.com/global/images/e0e6dc096c9f.webp)

![It helps to have your own (bike) tools](https://willem.com/global/images/4f91f20ed80e.webp)

You'll need some wrenches, hex keys and a screw driver to assemble the bike. The relatively uncommon 15MM wrench is included. But if you're into_bikes_like_me (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/), you'll probably have such a wrench as it's common for fitting bike pedals.

![Attaching the front wheels to the frame](https://willem.com/global/images/44d7e0090770.webp)

## Chinese precision

At a certain stage you are to join the rear and front frames. This is done using a central connection, right underneath the cargo compartment of the bike. This is where the Chinese precision is really apparent (and appalling).

![Using filler plates to make up for Chinese Precision](https://willem.com/global/images/ac379b781be2.webp)

The assembling kit comes with purpose built filler plates that you're supposed to squeeze in to make up for errors in precision. To ensure a tight fit you should try to use both of the filler plates. It will take some balancing around (as the front and rear frames aren't exactly light), but it's possible to squeeze everything into place.

![Squeezing in the filler plates while joining the rear and front frames](https://willem.com/global/images/a8da4d2de6af.webp)

Don't use a (metal) hammer to precisely position the filler plate in front of the holes as it will damage the frame's paint.  Instead consider using a piece of wood and a hex key to make the nesscecary adjustments before bolting things together.

![Using a piece of wood as 'paint safe' hammer](https://willem.com/global/images/987e0d1194fa.webp)

![Using a hex key to nudge the filler plate into position, freeing up the bolt hole](https://willem.com/global/images/7ebe67903d41.webp)

## Cable management (or lack thereof)

Once the front and rear parts are connected, you are to connect the brake cables to the front wheels. There is no designated cable management, you are to figure this out yourself - instructed to use some (non-included) tie wraps to fix things up...

![Clean cable management: I repurposed the fenders bolt to fixate the brake cable](https://willem.com/global/images/362ea9f637aa.webp)

In a time when modern bikes have internal cable management, I think this is hopelessly old fashioned. Whatever you do to arrange the cables, make sure to test if any of them obstruct the swinging of the cargo box. You don't want any cables to get stuck causing damage or an accident.

![Make sure to test the swinging of the cargo box once you have fixed your cables](https://willem.com/global/images/b4e26309952f.webp)

## Building the box

Once the frame (and cables) are done, it's a relatively simple matter of building the (wooden) box. The box itself provides some structural integrity to the (front)frame. For this reason it's a good idea to make sure you have fixed all the bolts, but only after (final) assembly as some of the bolts need a little space to 'wiggle in' other parts.

![Flat bed cargo bike - of sorts :-)](https://willem.com/global/images/92d053214232.webp)

![Assembling the cargo box](https://willem.com/global/images/016a4d1cddb8.webp)

Once the cargo box is done you are to choose the "inner furniture" of the cargo bike. This is where the flexibility of the design really shines. You'll get two flippable benches as standard, but you can choose to omit them, replace them or augment them with optional baby/infant seats.

![Inside the cargo box are two flippable benches](https://willem.com/global/images/0b35f6ee193a.webp)

![You can install optional baby and infant seats](https://willem.com/global/images/56b504485e17.webp)

## Conclusion

After hours of assembling the cargo bike I now have the feeling that I know it through and through. From an engineering perspective, that's great. But, if you're a parent with not an infinite amount of time... you might consider the fully assembled delivery option.

![Babboe Big, fully assembled](https://willem.com/global/images/a80195290ca9.webp)

Whatever you choose, I can clearly understand why the Babboe Big is such a popular cargo bike. Its big box is very versatile and spacious. In addition to your kid(s), it can easily carry a lot more, an incredible lot!

![One happy passenger in the Babboe Big](https://willem.com/global/images/b06db8f74637.webp)

![The 'big' in Babboe Big ](https://willem.com/global/images/25b16e256a4a.webp)

---

## Six months with MCADD

*Thoughts and tips on the daily life as parents* · 2019-06-24 · https://willem.com/en/2019-06-24_six-months-with-mcadd/

Tomorrow it's six months since our son was born, a good moment to reflect upon the experience of being a parent of a kid with MCADD. This metabolic condition demands special attention on the feeding schedule and preparation for situations when things go different. It's good to share that this has quickly become normal for us, here are some thoughts and tips.

## Born with MCADD

Six months ago our son was born_with_a_rare_genetic_metabolic_disorder_called_"medium_chain_acyl-CoA_dehydrogenase_deficiency"_or_MCADD (https://willem.com/en/2019-01-29_born-with-mcadd/). During the first few weeks this was nothing but an emotional rollercoaster ride. In addition to the life changing event of becoming a parent, we had to learn and deal with MCADD. Toss in some sleepless nights, and you're in for some serious test of character.

Just like I noticed after my_first_few_weeks_as_dad (https://willem.com/en/2019-01-24_my-first-weeks-as-dad/), you and your body will quickly adapt to the new situation. With some creativity and flexibility, you'll find new (and fun) ways to do things. I guess this is true for being a parent in general, but when your kid has a special medical condition, finding a nice routine actually feels like an accomplishment.

## Spilling milk (reflux) and baby cramps

During the first two months we had some practical problems with spilling milk and baby cramps. This prevented our son to fall asleep easily. This is challenging in combination with the tight feeding schedule. With MCADD you have to respect the schedule, meaning you'll have to wake up your baby. It's annoying to wake up a perfectly sleeping baby when you know it will be a challenge to have him fall asleep again.

![Fighting cramps with Infacol and reflux with Nutriton ](https://willem.com/global/images/86709ad4cb5f.webp)

The spillage of milk was easily solved by making the milk a little thicker using Nutricia Nutriton, containing *Johannesbroodpitmeel*. Annoying baby cramps were alleviated using Infacol. We consulted our doctor before doing this.

## Eat, sleep, play, repeat

With the practical problems under control, we were able to establish a nice routine. This is a natural process where you simply embrace the pace and figure out what works, and what doesn't. We do all kinds of things, like walking, shopping, swimming, going to a restaurant, going with public transport, visiting family, long car rides, etc.

![Boink boink, hello daddy! Playing around!](https://willem.com/global/images/16d9ef0fb567.webp)

![Hot drinks for father and son on the go](https://willem.com/global/images/5295f3b91622.webp)

You'll learn along the way, becoming more proficient with caring and feeding on the go. I expect this to be very much like any parent's experience, but with a special medical condition gaining this confidence is actually very important.

## Dealing with MCADD

Dealing with MCADD has become part of our routine, we don't really think about it anymore as something special. Thanks to our attention to his feeding schedule, we didn't run into any problems because of insufficient food.

There were a few occasions when we were on 'extra alert', notably when our son got his first cold and when he was vaccinated. With MCADD, fever can lead to dangerous situations because of the body burning more energy. We are prepared for such situations with high energy food, medicine, information and emergency procedures.

![Dealing with MCADD, the L-Carnitine medicine and Fantomalt energy powder (photo by Ellen Middelkoop)](https://willem.com/global/images/15b2737b36aa.webp)

## Feeding at night

Regular feeding at night is part of the MCADD baby feeding schedule. Exact times shift as the kid grows older, but feeding at night remains for now. I pretty much do all the night time feeding sessions, allowing myself to get used to this.

![Feeding at night (photo by Ellen Middelkoop)](https://willem.com/global/images/b4cf502a81a8.webp)

If you look at the sleep data from the first six months, you can see the feeding sessions as it marks either the beginning, the end or interruption of my sleep (interruptions are purple in the chart).

![Sleep data during the first six months](https://willem.com/global/images/d3934cf2ec82.webp)

You can see the feeding time shift from 2.30 during the first month, up to 5.00 in May and June. If you have very sharp eyes, you'll notice that the interruptions get shorter, too. This is because the sessions become more efficient and routine driven.

Eventually I began experimenting with staying awake after the last nightly feeding session, using the early morning hours to be productive for work. You can also see that I regulary go to bed early or do a daytime nap to make sure I have enough sleep hours on average.

![Time to wake up (photo by Ellen Middelkoop)](https://willem.com/global/images/bcd0455a1bf6.webp)

## Conclusion

After the intense initial weeks, the first six months have been very good for all of us. We learned a lot and experienced a great deal of "normalness". This allowed us to develop a routine in dealing with MCADD, without thinking about it all the time.

There is always the chance that we will run into MCADD problems later on, but this doesn't hold us from doing all the things other kids and parents do! That's the key thing to take away from this post!

---

## Solo around the Markermeer (211KM)

*Tips to prepare, to endure and to enjoy long distance cycling* · 2019-05-29 · https://willem.com/en/2019-05-29_solo-around-the-markermeer-211km/

This week I took my bike for a long distance (211KM) ride around the Dutch Markermeer, solo! Unlike participating in an organised event with service, support and company along the way, going solo requires a different preparation, mindset and planning. Read along for some practical tips for long distance cycling.

## Preparation

When you're planning to go for a long distance bike ride you better prepare yourself. Start with smaller rides, get used to your bike and sitting on the saddle for increasingly longer times. You and your bike need to be best friends before you set off for the long journey.

### Bike

I know my bike very well as it's my_commuter_bike (https://willem.com/en/2019-02-27_one-year-on-the-ultimate-commuter-bike/). For this long distance ride I have prepared my bike with some extra items:

![My bike prepared for long distance cycling](https://willem.com/global/images/79a24aa34b54.webp)

- **Tools + Tire**: In my saddle bag, I have one spare tire and all the tools needed to take my entire bike apart and put it back together!

- **Extra tire**: Just as an extra precaution I like to bring an extra spare tire along. Stores will be closed in the early morning and there is always a chance of running a flat tire when you go through towns and cities. 

- **Pump**: A mobile, but powerful pump with two modes: high volume and high pressure. Pro tip: try pumping your tires with your mobile pump at least once before departure!

- **Lock**: When you're cycling solo you'll might want to take advantage of shops along the way to get additional food and drinks. You don't want your bike get stolen during a long distance ride...

- **Lights**: Make sure you're visible when departing in the early morning, riding through foggy conditions or returning at night. Be prepared for the situation that your ride takes longer than planned (due to mechanical failure, challenging conditions or other reasons). 

- **Screen**: Either know yourself very well or use an heart rate monitor to balance your efforts during the ride. Worst thing you can do is to go too fast in the beginning. Read about my_bike_computer_in_this_blog_post (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/).

- **Bell**: When riding alone you can't rely on others to 'clear the road' for you. Using a bike bell will yield friendlier responses rather than shouting aloud...

- **Energy drink**: One of my drink bottles is filled with isotonic sports drink. This contains a lot of sugar *and* salt. This is to compensate for the things you'll sweat out. 

- **Water**: The other drink bottle simply contains water. Hydrating yourself along the way is essential. Make sure to drink enough and be prepared to replenish your supply (in stores, restaurants, public toilets, public water taps, friendly villagers, etc).

- **Mud guards**: Even when it's not raining, the roads can be wet and dirty. You must not get cold along the way because of an unfortunate wet suit. 

- **Efficient road tires**: For sure you'll want your tires to be as efficient as possible in terms of rolling resistance. You should try different tires and pressure levels. Make sure you'll practice to replace a flat tire, too!

### Food and drinks

When you're long distance cycling you need to bring along enough food and drinks. I usually bring along "Snelle Jelle", a sugary bread-like snack with high energy levels. I also like fruit biscuits as they have a crispier bite.

![My food and drink supply for this ride](https://willem.com/global/images/8c92328c7eed.webp)

It's very important that you choose foods that you like. Other common options are fruit and energy gels. Whatever you choose, know that your body can process sugar more efficiently than fats during endurance workouts.

![Bring food that has a high energy level due to sugar, not fat!](https://willem.com/global/images/4de291d20f67.webp)

You should not eat too much before departure. I usually drink 1.5 liters of water and eat some fruit before I leave. But know that whatever works for me, might be different for you. Try different things to find out what suits you best.

### Route planning

To know where you're going is just as important as preparing your bike and your food+drink supply! Plan your route based on distance, available (day)time, environmental characteristics (mountains, hills, open windy areas) and points of interest.

Memorise the route, use a navigation system or bring a map. In The Netherlands there are plenty of indicated (bike) routes that are helpful to find your way. I have a (weird) personal preference to find my way without any means of navigation as it adds to the adventure, but you should not follow my craziness to this extend...

![Around the Markermeer, through the former Dutch "Zuider Zee"](https://willem.com/global/images/bdf1326b067d.webp)

This time I planned to go around the Dutch Markermeer. Today it's a large lake, but it used to be much larger and it was called the "Zuider Zee". Following floods, it was decided to be enclosed with dams and to be pumped dry. Quite literally, it's a Dutch landmark in terms of water works. If you're unfamiliar, you should definitely check out the history of Flevoland (https://en.m.wikipedia.org/wiki/Flevoland) and the Zuiderzee_Works (https://en.m.wikipedia.org/wiki/Zuiderzee_Works), it's seriously amazing!

The fascinating thing about the Markermeer route is that you'll be cycling through very different environments. On the West there is "old Holland", with various famous villages and cities (like Hoorn, Edam, Volendam and Monickendam). In the North you'll be cycling through the former sea on the Houtribdijk (https://en.m.wikipedia.org/wiki/Houtribdijk), a 30KM man made dam enclosing the lake. It's quite the thing to have water left *and* right of you, for as far as you can see! The Eastern part of the route is the new (Flevo)land, characterised by (very) long straight lines, many open spaces and the Oostvaarders_Plassen_nature_reserve (https://en.m.wikipedia.org/wiki/Oostvaardersplassen). The Southern part is old land again, with the Muiderslot_castle (https://www.muiderslot.nl/) and Amsterdam.

## Endurance

Well prepared, I departed in the early morning for my ride around the Markermeer. It's a good idea to (last minute) check the weather forecast for the day. The Dutch weather service predicted strong winds on the Markermeer. I planned to take it easy in the beginning to be ready for the (strong) winds during the second half of my ride.

![Speed (blue) en effort (red, heart rates) around the Markermeer through strong winds (6 beaufort, 39-49KM/h) ](https://willem.com/global/images/5c06929f6fa2.webp)

I decided to cycle the route clockwise as I liked the challenge of facing the strong winds on the open dykes in Flevoland (between Lelystad and Almere). You can see that I started with minimal effort, indicated by the lower heart rates. The graphs clearly marks the turning point, about half way, from where you'll see increased rates and lower speeds.

![Heart rates during the day and night of my long distance ride](https://willem.com/global/images/dc7ebf70404f.webp)

Looking at my heart rates throughout the day and night, you can clearly see my ride standing out. I used an Apple_Watch (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/) and a Biostrap_sensor (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) to capture my heart rates before *and* after my ride. Combined with the data from my bike_computer_app (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/), this provides an interesting insight in the time it takes to recover from my intense long distance ride!

## Enjoy

Long distance cycling is big fun because you'll experience the ride very intensely and detailed.

### Picturesque villages

By bike you're welcome where cars, trains, busses and planes can't come. Effortlessly traverse through villages and city centres.

![Harbour in Marken ](https://willem.com/global/images/d6452a337ab9.webp)

![Sluice at Schardam](https://willem.com/global/images/d1790dad25d5.webp)

### Stunning views

With your bike you can stop (almost) anywhere to enjoy beautiful views. There is plenty to see if you take your time to look around.

![Beautiful sky on the Houtribdijk](https://willem.com/global/images/677bca9bbd36.webp)

### Fresh air

Smell the flowers, the trees and the sea. Rediscover your nose when you help it escape the many air conditioned environments you might normally be in.

![Looking over the Markermeer at the (former) island of Marken](https://willem.com/global/images/80826f81eed0.webp)

### Heath of the sun

Although it's about 149 million kilometres away, you'll feel the sun, even if it's cloudy! For the better or the worse, it's an intense sensation! Create Vitamine_D (https://en.m.wikipedia.org/wiki/Vitamin_D) while you'll make the tanning studio obsolete.

![Oostvaardersplassen near Lelystad](https://willem.com/global/images/52290408de6e.webp)

### Strength of the wind

Forget spinning classes in your local gym, there is nothing like the wind out in the open! It's a mighty ally or a fierce-full foe... depending on its direction and speed.

![Wind blowing strongly over the water with Amsterdam on the horizon, as seen from Almere](https://willem.com/global/images/62a77483b7fb.webp)

### Sound of silence

If you're cycling solo you'll have plenty of time alone. Nature can be very calming when you're out in the early morning, way before other people have woken up. Relieve stress as you're pedalling along with lots of time to think about things. It's hard to overestimate the meditative effects of a long distance ride!

![Just you and the road ahead (Zeedijk near Marken)](https://willem.com/global/images/f573ec0cc146.webp)

### Embrace the surprise

You never quite know what you'll encounter on your way. I never expected to cycle underneath a tall ship! Or to sit inside a little bus with a very friendly driver!

![Cycling underneath a tall ship!](https://willem.com/global/images/4924f9228be8.webp)

![Encountering an unexpected road block, about half way on the Houtribdijk](https://willem.com/global/images/7d37b4b6c948.webp)

![Me and my bike on the Houtribdijk! Not in the way I imagined!](https://willem.com/global/images/72f685db8461.webp)

## Conclusion

With the proper preparation a long distance cycle ride is something incredibly awesome! It's intense, challenging, rewarding and fun!

![Smiling at the Markermeer](https://willem.com/global/images/a0d298de554d.webp)

Don't doubt yourself, anybody can do it! I am not a particularly good athlete, just a guy with a crazy idea and a little preparation. Sometimes that's enough!

![Home sweet home! 211 incredible kilometres!](https://willem.com/global/images/ba2710e0fa2f.webp)

---

## Dig for dummies

*Explaining an highly useful network tool* · 2019-05-24 · https://willem.com/en/2019-05-24_dig-for-dummies/

When you're building websites, apps or email services you may run into domain names and their configurations. When everything is working as it should, most of this is invisible. But when troubleshooting a domain name configuration, it may be necessary to dig a little deeper... read along to learn how!

## Domain Name System (DNS)

The internet works using numerical internet protocol (IP) addresses as means to locate and to identify online computers, (cloud)services and devices. Instead of memorising all these IP-addresses, the domain name system has become the essential world wide directory service, linking names to numbers.

You're reading this on **willem.com**, but in reality this domain name is simply a pointer for a physical machine, connected to the internet (with wires, really!). One of those wires is linked to IP-address **87.253.135.162**. It's the responsibility of the DNS server to keep the correct (IP-address) numbers matching to the (domain) names.

![The Domain Name System (DNS) links domain names to IP-addresses, which in turn are routed through cables. You're reading this - seriously! - through the cable connected to the server shown on this photo!](https://willem.com/global/images/b02bcfa4dfab.webp)

## Distributed and decentralised

When the Americans designed their ARPANET in the early seventies, one of their military design requirements was that the network would survive attacks (by enemies). They accomplished this by implementing packet switching, a way to share and reuse network cables by multiple people in multiple ways. If one part of the network gets damaged, packets of information are rerouted over other parts of the network.

![A map of the ARPANET in 1973... imaging mapping the internet today!  (Public domain)](https://willem.com/global/images/0ecb8ad41dca.webp)

To achieve maximum survivability, there is no single root DNS server. Instead, the domain name system delegates responsibility of assigning domain names and mappings to those names by designating an authoritative name server for each domain name.

This is why there are many different DNS-servers and configurations. With so many ways and places that things can go wrong, you need a tool to dig around.

## dig (domain information groper)

The 'dig'-command is a tool for questioning DNS nameservers for information about IP-addresses, hostnames, mail servers and other kinds of network settings. The dig-command is available on Unix, macOS, GNU/Linux and Windows.

### Using dig to query domain name servers

You can use dig to get information about a given domain name by simply typing: 'dig willem.com'. See the following screenshot with explanation:

![Using dig to get information about a domain name, willem.com](https://willem.com/global/images/35dfaed28848.webp)

- 1) **dig willem.com** will return all information about the question, answer, authority (the one that answered the question) and statistics of the actual query (like how long it took to get an answer). 

- 2) **dig +short willem.com** omits all the extra information and only returns the answer. Here you can see that **willem.com** points to IP-address **87.253.135.162**.

- 3) **dig +short willem.com MX** will show you the mailer exchange (MX) records. MX-records are crucial for email to arrive at the right server. Basically it's the designation of the post office responsible for email linked to the domain name. For **willem.com** this is a mail services called **online.lemmid.com**. Other popular mail services are Office365 and Google Gmail. Using dig you can find out what mail service somebody is using.

- 4) **dig +short willem.com NS** will show you the name servers that are responsible for handling queries for this domain name. Usually these are the servers operated by the domain name registry, your domain name provider. Using dig you can find what kind of domain name provider somebody is using (in the case of **willem.com**, that's **Lemmid**). 

- 5) **dig +short willem.com TXT** will return the text record linked to the domain name, this is where you'll find the so called SPF-record. The SPF-record is another crucial part of email, its useful to dig a little deeper into SPF. 

## Sender Policy Framework (SPF)

To detected forged sender addresses in emails (so called email spoofing), the SPF standard was defined in 2004. Originally called "Sender Permitted From", SPF is a way to check if somebody is allowed to send email on behalf of a given domain name. SPF allows the owner of a domain name to specify which computers are authorised to send email with FROM addresses of that domain.

If a domain name owner publishes a SPF-record, spammers and phishers are less likely to (ab)use the domain name to send forged emails, pretending to be from that domain. An SPF-protected domain is therefore less likely to be blacklisted by spam filters, making it more likely to allow legitimate email from the domain to get through. A misconfigured SPF-record can however disrupt email delivery.

### Using dig to query SPF-records

Using the dig-command you can query a SPF-record and see what the exact sender policy is. See the following screenshot with explanation:

![Using dig to get information about the SPF-records for a domain name, google.com](https://willem.com/global/images/a865a4e8afcd.webp)

- 1) **dig +short TXT google.com** will show us the TXT-record linked configured for google.com, the place where you can find the SPF-record (among other things). The SPF-record for **google.com** is **"v=spf1 include:_spf.google.com ~all"**. The **include:**-part means that for this domain name external SPF values should be loaded, too. 

- 2) **dig +short TXT _spf.google.com** shows what those external SPF values for **google.com** actually are. In this case it reveals another three includes: "_netblocks.google.com", "_netblocks2.google.com" and (how original..) "_netblocks3.google.com". 

- 3) **dig +short TXT _netblocks.google.com** (and the 2 + 3 variants) specify the actual IP-addresses that are allowed to send email on behalf of **google.com**. As Google is a big internet company there are many IP-addresses in these lists. If you look carefully, you'll notice that some of these addresses have a "/"-suffix, like "/24". This is the way to notate an entire block (e.g. street) of IP-addresses. 

## IP blocks explained

The easiest way to understand IP-address block notation is by the following examples:

- **/8 = 255.0.0.0**

- **/16 = 255.255.0.0**

- **/24 = 255.255.255.0**

- **/32 = 255.255.255.255**

Where you'll see '0' in the addresses above, other values are included. So, for instance, the 173.194.0.0/16 actually means "all the addresses starting with '173.194' ". Given 255 possible positions on each octet, that is 255x255=65025 different addresses!

## Conclusion

To solve problems you need to know where the problem is. Using the dig-command you can learn about a given network and domain configuration.

Answers from one command to another, enable you to dig deep into the innards of the amazing interwebs. Good luck!

---

## The best bike computer app: Cyclemeter

*Get advanced ride data with a flexible setup* · 2019-04-30 · https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/

This month I have intensified my training to become fit for this year's Fietselfstedentocht, a 235KM bicycle ride through Friesland. Over the years I have tested different kinds of bike computer setups: from dedicated (and expensive) Garmin Edge bike computers to no data at all. Eventually I came up with a flexible setup to gather advanced ride data using my smartphone,  let me explain how this works.

## Data on your bike

If you collect data on your bike you can gain insights into your physical performance. If you track your ride data over time this will allow you to improve your condition. This can be helpful if you're preparing for a long_grand_fondo (https://willem.com/en/2017-06-30_fietselfstedentocht-2017/), a race, or if you simply try to loose weight and feel fitter. With modern technology you can collect cycle data like:

- Distance

- Height meters (using barometer and/or GPS)

- Riding time

- Speed (current/average/maximum)

- Heart rate (current/average/maximum)

- Cadence (revolutions per minute of your legs)

- Temperature

- GPS location (and traveled route)

- Power (muscle power, measured in WATT)

## Bike computers: hardware to collect ride data

If you're planning on collecting bike ride data, you have many hardware options. Over the years I have used different bike computer setups to collect ride data. From dedicated_Garmin_EDGE_bike_computers (https://willem.com/en/2016-12-31_one-year-of-cycling/), to just_an_Apple_Watch (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/) to no_data_at_all (https://willem.com/en/2018-05-17_listen-to-your-body/).

![Garmin EDGE 1030 performance bundle (from evancycles.com)](https://willem.com/global/images/6165a6aeebd7.webp)

If you consider a dedicated bike computer you can choose to use very advanced systems like the Garmin EDGE 1030. This is what professional athletes use. They are very advanced and therefore expensive (more than €500). This might be overkill, especially if you're planning on collecting ride data on smaller rides (to the grocery store...).

Alternatively, you can opt for a more minimal approach. The Omata_One_analogue_bike_computer (https://willem.com/en/2020-09-29_riding-with-omata-one/) is designed to "de-computerise" the ride itself. It still collects ride data for post ride analysis. This mindful design doesn't come cheap either ($550).

![Omata One (omata.com) minimal analogue bike computer](https://willem.com/global/images/c3071edff9d2.webp)

## Using your smartphone as bike computer

I always prefer simple solutions to advanced problems, therefore buying an expensive dedicated bike computer felt wrong to me, knowing that I already carry an advanced (and expensive (https://willem.com/en/2018-10-09_using-a-budget-android-as-main-smartphone/) ) mobile computer: my smartphone!

### Cyclemeter bike computer app

Available for iOS (https://itunes.apple.com/us/app/cyclemeter-gps-cycling-running-mountain-biking/id330595774?mt=8) and Android (https://play.google.com/store/apps/details?id=com.abvio.meter.cycle) Cyclemeter is probably the most advanced bike computer app you can find.

![Using Cyclemeter as my bike computer to collect advanced ride data](https://willem.com/global/images/19acd3932dd0.webp)

The app has an incredible amount of features and options that can easily overwhelm you in the beginning. You should really take the time to configure the app to your liking (and needs). The great thing about Cyclemeter is that you can greatly control what data it collects and what data it shows.

## Sensors and displays

To get the best out of the Cyclemeter app you can connect it to external sensors. It's compatible with many different Bluetooth speed, cadence, power and heart rate sensors. If you like realtime data you can even connect it to external displays like Apple Watch or a Wahoo RFLKT display on your steer.

![My 'bike area network': sensors (red) and displays (green) connected to the smartphone](https://willem.com/global/images/c0d0468f99c7.webp)

What's great about the Cyclemeter setup is that it's very flexible. You can connect everything or leave things out. I use this flexibility to scale my data collection up or down, depending on the kind of bike ride. Like sometimes I use the heart rate sensor in my Apple Watch and sometimes I use a dedicated (and power efficient) waist worn heart rate sensor.

![The combined speed and cadence sensor mounted on my bike](https://willem.com/global/images/b72bfc77d4e4.webp)

The Wahoo RFLKT+ display is a very cheap (±€50) device that connects to the smartphone to display data. It isn't a computer: it can only display data. Its battery life is fantastic, measured in months! Using Cyclemeter you can configure it to show different things.

![Wahoo RFLKT+ display showing a lot of things](https://willem.com/global/images/572f2f970266.webp)

Depending on your preference, you can setup multiple pages with different layouts and font sizes. In addition to the advanced screen (shown above), I like to use a simple default screen showing my current speed and heart rate.

![Wahoo RFLKT+ display showing current speed and heart rate](https://willem.com/global/images/53f00e45b084.webp)

Usually I put my smartphone_in_a_bag (https://willem.com/en/2018-12-22_business-in-a-bag/) to protect it from bad weather. It's safely tucked away and using my Apple Watch I control the Cyclemeter app. You can use Apple Watch to start/pause/stop rides, show ride data and to collect heart rate data. It works great with Cyclemeter.

![Apple Watch works great with Cyclemeter](https://willem.com/global/images/504937b129d9.webp)

If you feel adventurous, you can mount your expensive iPhone on your bike's steer using a rubber strap or a more professional (and reliable) mounting system like Quad Lock.

![Feeling adventurous mounting a €1659 iPhone on my steer with a rubber strap](https://willem.com/global/images/195fbce1b3a7.webp)

![Quad Lock smartphone mounting system](https://willem.com/global/images/455f4d2401ab.webp)

## Conclusion

Take your time to figure out what kind of ride data is important to you. Your smartphone is a perfect mobile computer that can be a bike computer using the right software.

Connect your smartphone with sensors and displays to collect all the advanced ride data you want. I think that dedicated bike computers are like dedicated cameras or navigation systems: great for some professionals, but do *you* really need one? I don't. Happy riding!

---

## Search like a pro: Google search operators

*Comprehensive list of advanced search operators* · 2019-04-25 · https://willem.com/en/2019-04-25_search-like-a-pro-google-search-operators/

You probably use the world's most famous search engine to find things everyday, but you might not know about some of its advanced search operators. You can use these special search phrases to find things that are otherwise burried in the search results. Read along for a comprehensive list of advanced Google search operators.

## Why use advanced search operators?

You may wonder why you might need the advanced search operators? Well, you can use them to narrow your search to very specific pages. This can be useful for things like:

- **subject research**: If you know about a specific product, company, club, competitor or subject and want to find pages that are related to it - but not necessarily featuring the same keyword. Like_pages_related_to_Ajax (https://www.google.com/search?q=related%3Aajax.nl), the Amsterdam soccer club. 

- **cyber-security reconaissance**: If you're a cyber-security (https://willem.com/en/self-hosting-running-your-own-infrastructure-on-linux/) specialist and you need to find a specific page on a given domain name. For instance to specifically find the login_page_of_a_certain_website (https://www.google.com/search?q=allintitle%3Alogin+site%3Aajax.nl). 

- **keyword analysis for search engine optimisation**: If you have your own website or blog, it can be very useful to learn about the popularity of a certain keyword. Sometimes choosing the right keyword can make all the difference in web traffic (and commercial success). 

- **find specific images**: If you're looking for a specific screenshot, photo or illustration you can use narrow your search to get what you want quicker. Like, for instance, to find_a_swimming_certificate_of_a_certain_person (https://www.google.com/search?q=site:willem.com+zwemdiploma&tbm=isch&tbs=isz:l&prmd=inv&biw=592&bih=663). 

### "search phrase"

Perform an exact-match search by encapsulating the search phrase in quotes. You can use this to refine search results, or to exclude partial matches.

*example: "Willem_Laurentz_Middelkoop"(https://www.google.com/search?q=%22Willem+Laurentz+Middelkoop%22)*

### AND

Search for both X and Y, the results will include pages that match both keywords.

*example: Ronaldo_AND_Juventus (https://www.google.com/search?q=Ronaldo+AND+Juventus)*

### OR

Search for X or Y, the results will include pages matching either or both keywords. You can use the pipe (|) operator instead of "OR".

*example: Apple_|_Samsung (https://www.google.com/search?q=Apple+%7C+Samsung)*

### Excluding/Minus: -

Exclude search results that match a given term or phrase preceded by the minus. This is useful when you are specifically looking for something that is not X or Y.

*example: Jackson_-Michael (https://www.google.com/search?q=jackson+-michael)*

### define:

Use Google's built-in dictionary to display the meaning of a word.

*example: define:hacker (http://google.com/search?q=define%3Ahacker)*

### cache:

Display the most recently crawled version of a given website. This can be useful when the actual website is offline or recently changed. This only works if the page is indexed by Google (most pages are).

*example: cache:formula1.com (https://www.google.com/search?q=cache%3Aformula1.com)*

### site:

Search within a given website (or partial website address).

*example: watch_band_site:www.apple.com (https://www.google.com/search?q=watch+band+site%3Awww.apple.com)*

### related:

Find website that are somehow related to a given website.

*example: related:ajax.nl (https://www.google.com/search?q=related%3Aajax.nl)*

### filetype:

Only show results that are a given file type, like PDF,   XLSX, TXT or DOCX.

*example: ascii_art_filetype:txt (https://www.google.com/search?q=ascii+art+filetype%3Atxt)*

### intitle:

Only show pages with a certain search phrase in the title.

*example: intitle:privacy (https://www.google.com/search?q=intitle%3Aprivacy)*

### allintitle:

Like 'intitle', but only shows pages with *all* of the specified words in the title tag.

*example: allintitle:privacy_statement (https://www.google.com/search?q=allintitle%3Aprivacy%20statement)*

### intext:

Shows pages containing a certain word somewhere in the content.

*example: intext:abacadabra (https://www.google.com/search?q=intext%3aabacadabra)*

### allintext

Like the *intext* filter, this filter only shows pages that contain all words on the page.

*example: allintext:open_sesame (https://www.google.com/search?q=allintext%3aopen%20sesame)*

### inurl:

Find pages that contain a given word in their URL. This is handy when you're looking for a specific kind of page on a website (like an upload or login page).

*example: inurl:upload (https://www.google.com/search?q=inurl%3Aupload)*

### allinurl:

Similar to 'inurl' the 'allinurl' filter only shows pages that contain all given words in their URL.

*example: allinurl:running_shoes_overview (https://www.google.com/search?q=allinurl%3Arunning%20shoes%20overview)*

## Conclusion

With these advanced search filters you can tune your search queries to deliver you more targeted results. This allows you to find things quicker, or find things that otherwise would remain burried in the numerous results.

When you combine these advanced search filters you can become a true 'search ninja'. Try these queries for good fun:

- allinurl:orwell_1984_filetype:pdf (https://www.google.com/search?q=allinurl%3Aorwell+1984+filetype%3Apdf) to find PDF versions of the classic book 1984 by George Orwell

- intitle:webcam_7_inurl:8080_-intext:8080 (https://www.google.com/search?q=intitle%3Awebcam+7+inurl%3A8080+-intext%3A8080) to find random online webcams from all over the world

- allintitle:snake_97 (https://www.google.com/search?q=allintitle%3Asnake+97) to find everyting written about a certain_retro_phone_game (https://snake97.com)

---

## WordPress: 10 tips to secure your website

*Keep hackers out of the world's most popular content management system* · 2019-03-31 · https://willem.com/en/2019-03-31_wordpress-10-tips-to-secure-your-website/

A lot of people use WordPress to manage their website, therefore it's no surprise people ask me to have a look at their site's security. As ethical hacker, I encounter WordPress in different shapes, sizes and states. Some of them are really badly protected against hacks. Prevent your site from being hacked using these 10 practical tips.

## 1) Update WordPress (and plugins + themes)

The majority of WordPress hacks is the result from a lackluster update policy. Hackers use automated bots to find outdated software versions containing known security problems. Once they have found your website to be vulnerable, hacking it is often a piece of cake.

These days updating WordPress can be done automatically, so you won't have to do it yourself. Check out the instructions_on_how_to_update_WordPress (https://codex.wordpress.org/Updating_WordPress).

![Update WordPress from the wp-admin dashboard](https://willem.com/global/images/79572e4a515e.webp)

## 2) Plugins and Themes

The bad security reputation WordPress has earned is mostly due to the platform's extensible parts, specifically plugins and themes. These are the primary attack vectors exploited by cyber criminals to hack and abuse your WordPress website. Their security vulnerabilities are usually the result of mistakes and oversights during development.

Be very reluctant and cautious to install plugins on your WordPress website. You should check who's the developer of the plugin or theme, determine if they have a good reputation when it comes to writing safe code. Plugins and themes with lots of downloads are often actively being maintained, a good indicator for security. Update all plugins and themes and keep an eye on the security track record using a website like wpvulndb.com (https://www.wpvulndb.com/plugins/).

![Check the reputation of a WordPress plugin by looking at the number of downloads and its rating](https://willem.com/global/images/db2e086fcde8.webp)

## 3) Use encryption (TLS/SSL)

WordPress websites without TLS/SSL encryption pose a security risk because whenever you login to administer the website, your password is sent in clear text. This means that anybody that is listening to your network traffic can easily get your password. With a valid password hackers can simply login, you don't want to make it that_easy (https://blog.wpscans.com/sniff-wordpress-login-credentials-wireshark-http-connection/) for them, right?

Use TLS/SSL to encrypt all communication between the webserver and your browser. That means nobody can decipher what you type into the password field by looking at the network traffic. TLS/SSL certificates that you need to enable HTTPS encryption are very cheap these days, ask your hosting provider to get one on your site.

![Sniff WordPress password using WireShark packet capturing (via blog.wpscans.com)](https://willem.com/global/images/7ed5f0ee69b4.webp)

## 4) Use strong passwords

No matter if you follow all the other tips to secure your website, weak passwords are another common source for WordPress security breaches. Because most WordPress installations have an "admin" user, hackers can use password_dictionaries (https://duckduckgo.com/?q=password+dictionairy) to automatically guess your password.

Think of a strong password as of something that nobody has used before. This usually means longer, with more different characters, not comprising known words or phrases. You can use a password generator to get something really hard to guess (and easy to forget...). Prevent using the same password on multiple sites and consider enabling_two_step_authentication_for_maximum_access_control (https://codex.wordpress.org/Two_Step_Authentication).

![Password dictionary attacks use lists of known (leaked) passwords, you can find them on shady parts of the internet](https://willem.com/global/images/7e3624540722.webp)

## 5) Use a trusted computer and network

Just like you should not flaunt your cash and gadgets in shady streets, you should be careful where (and when) you login to your website. A computer with spyware, malware or a virus can record key strokes (and your password) and send it to criminals. Or even in a non-digital way: an adversary can literally look over your shoulder (in the bus, train or coffee shop) while you enter your password.

Be careful where and when you work on your website. Don't work on a shared or public computer when you don't need to. If you work using a public WiFi hotspot you must use encryption to prevent anyone from sneaking along. You can do this using TLS/SSL or by using a VPN (like buffered.com). Make sure your computer, tablet or smartphone is updated.

![Do you trust the free wifi you're using? (Image via buffered.com)](https://willem.com/global/images/94b8eedd02ca.webp)

## 6) Disable WordPress REST API

The WordPress_REST_API (https://developer.wordpress.org/rest-api/) provides access to all data that is available on your website in machine readable JSON format. Posts, pages, categories, tags, comments, media, users, settings and more can be easily accessed. For instance, try adding this part to your website address: **/wp-json/wp/v2/users** to get a list of all the valid usernames of your website, do you *want* to share that with hackers?

Disable the REST-API to prevent content scraping (plagiarism) and to prevent leaking user data. User data is personal and should no be shared publicly if you value privacy and security - think GDPR (https://en.m.wikipedia.org/wiki/General_Data_Protection_Regulation). You can disable the REST API using a plugins like Disable_REST_API (https://wordpress.org/plugins/disable-wp-rest-api/) or REST_API_Toolbox (https://wordpress.org/plugins/rest-api-toolbox/). Check out the detailed_blog_post_by_Jeff_Star_for_more_about_securing_the_WP_REST_API (https://digwp.com/2018/08/secure-wp-rest-api/).

![Leaking personal user information from the WordPress REST API](https://willem.com/global/images/b4bed4a35679.webp)

## 7) Disable XML-RPC access

The XML-RPC is a feature of WordPress that enables remote control of your website using XML (RPC stands for "remote procedure call"). This mechanism allows you to manage your website without logging into WP-Admin, for instance using external services or apps. Unfortunately, the XML-RPC feature is a security weakness since it basically is a backdoor that hackers can try to break using brute_force (https://blog.sucuri.net/2015/10/brute-force-amplification-attacks-against-wordpress-xmlrpc.html) or special_commands (https://medium.com/@the.bilal.rizwan/wordpress-xmlrpc-php-common-vulnerabilites-how-to-exploit-them-d8d3c8600b32).

Prevent xml-rpc.php problems by disabling this WordPress feature entirely. You can do this using the Disable_XML-RPC_plugin (https://wordpress.org/plugins/disable-xml-rpc/) or by manually configuring the webserver using_a_htaccess_file (https://graspingtech.com/disable-xml-rpc-wordpress/).

![Limit access by IP basis to XML-RPC using a .htaccess file](https://willem.com/global/images/e8fa9fcb7c0e.webp)

## 8) Hide or protect the login page (wp-admin)

Everybody knows that to login to WordPress, you simply add '/wp-admin' to your website address. Any hacker can easily get started with brute forcing your website because of this. It's much harder to break a lock if you cannot find it.

Consider hiding or replacing the wp-admin page. Experts call this "security_through_obscurity" (https://en.m.wikipedia.org/wiki/Security_through_obscurity), relying on secrecy for security. You can use a plugin for this, or configure the webserver to limit access to wp-admin by IP address filtering. Check out this blog_post_for_ways_to_hide_and_protect_the_wp-admin_page (https://www.3nions.com/hide-wp-admin-page-wordpress-login/). Be warned though, relying on secrecy alone is not enough - you should implement the other tips, too.

![It's pretty hard hacking into my WP-Admin page because you cannot find it (hint: it's not at /wp-admin)](https://willem.com/global/images/a21ba24bbd4e.webp)

## 9) Reliable hosting

Even if you implement all these security tips to secure your WordPress website, it might not be enough if your hosting is insecure. Hosting is the service that allows your website to be made available on the internet. This is done using special computers called servers. Just like the website itself, the web server publishing it must be secure, too. Think of a hosting as a ship, if it sinks it will take all passengers (websites) with it...

Invest in reliable hosting by selecting a hosting company with a good reputation. Pick one that fits your company well, consider hosting using a dedicated (managed) VPS. Be aware that cheap hosting options are often cheap because the server is shared with (many) other (possibly insecure) websites. Read along to  understand_the_security_concerns_in_shared_hosting (https://willem.com/en/2019-02-28_understanding-the-security-concerns-in-shared-hosting/).

![Somewhere in a datacenter there is a machine like this hosting your website](https://willem.com/global/images/b8c695c798fe.webp)

## 10) Backup and checkup

Although your website may be up and running smoothly now, things may change for the worse in the future. Security is never an absolute thing, it's always possible you'll run into bad weather. Prepare yourself for trouble and don't let security problems go unnoticed.

Check your own website regularly - or hire somebody (https://digidef.nl) to do this for you. With a plugin like WP_Security_Audit_Log (https://wordpress.org/plugins/wp-security-audit-log/) you can spot attacks and suspicious behaviour early on. Make backups of your website, so you're ready to recover from cyber disaster. Accidents happens to the best of us, make a backup of your website to prevent loosing your work completely. Check this blog_post_to_learn_about_different_ways_to_backup_your_WordPress_website (https://websitesetup.org/wordpress-backup/).

![Use WP Security Audit Log to keep an eye on what's happening with your WordPress website (wpsecurityauditlog.com)](https://willem.com/global/images/ba045569ad2d.webp)

## Conclusion

The security of your website is just like the security of your office or house. When you leave it, you close the windows and lock the doors, right? Don't neglect the security of your website, it's just as important as its design and content.

If you implement these security tips, your website will be much harder to hack by cyber criminals. Do it yourself (https://codex.wordpress.org/Hardening_WordPress) or ask somebody (https://willem.com) to help you.

---

## Servicing a robot vacuum cleaner

*My iRobot Roomba is now running for 8 years and counting!* · 2019-03-20 · https://willem.com/en/2019-03-20_servicing-a-robot-vacuum-cleaner/

Back in 2011 I got myself an iRobot Roomba 555 robot vacuum cleaner to automatically clean my apartment. It's a little circle shaped robot that drives around sucking up dust bunnies. Over the years it has bravely fought the dangers of my apartment... shoes, cables, carpet and belts. It survived and it is still working perfectly! This week it was time for some maintenance.

## iRobot

In 2002, iRobot (www.irobot.com) launched the Roomba vacuum cleaner robot. The Roomba is able to change direction when it encounters an obstacle, detect dirty spots on the floor and prevents crashing down from stairs. The iRobot company was founded in 1990 by three roboticists named Colin Angle, Helen Greiner and Rodney Brooks. The company was originally dedicated to making robots for military use.

![Weaponised iRobot 710 - not your average vacuum cleaner...](https://willem.com/global/images/ada267387179.webp)

These days iRobot is fully dedicated_to_consumer_robots (https://arstechnica.com/gadgets/2016/02/irobot-sells-off-military-unit-will-stick-to-friendlier-consumer-robots/). But I still love the idea that there is some military precision and resilience in my vacuum cleaner.

![iRobot Roomba 555 (from 2011)](https://willem.com/global/images/4e17f21fda2c.webp)

Tired of vacuum cleaning myself, I was looking for some robotised with dust bunnies help in 2011. I was lucky to find a store in Amsterdam that sold one of the first robot vacuum cleaners available in The Netherlands: the iRobot Roomba 555.

## Sucking (dust) since 2011

Unlike some_other_consumer_products (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/), the iRobot Roomba is a resilient piece of technology, provided you take care of it. I regularly service it since it started its job in 2011.

![My iRobot Roomba 555 in need of maintenance](https://willem.com/global/images/e63513fc59a6.webp)

![Operational since 2011, the iRobot Roomba has earned its battle scars - I wonder what it does when I'm not in the apartment...](https://willem.com/global/images/6873ccc3deb8.webp)

## Servicing the iRobot Roomba

To keep the robot operational you'll need to make sure it doesn't get stuck. A periodic maintenance and cleanup is recommended. I'll show you to do this using step by step instructions. You'll need:

- a plus (+) screw driver

- a minus (-) screw driver (or a tiny knife)

- another vacuum cleaner

- some time and patience

*Disclaimer: I am not responsible for damage inflicted on your robot friend, if your maintenance attempt fails. You may void warranties while doing it...*

![Flip the robot vacuum cleaner upside down - note the dust everywhere](https://willem.com/global/images/c421985b10af.webp)

![Remove the dust can and brushes](https://willem.com/global/images/aed3b4f20563.webp)

![Remove dust using the other vacuum cleaner](https://willem.com/global/images/1a27071b8d6a.webp)

This should be your standard maintenance, remove dust from the bottom of your robot using the other vacuum cleaner. We'll get to the dust container/filter and brushes later.

![Clean "the eyes" of the Robot, the the sensor windows near the edge](https://willem.com/global/images/84d0b28c4f8a.webp)

The robot navigates using infrared sensors. They are located behind transparent 'windows' near the edge of the robot. You should thouroughly clean them in order for them to function at peak efficiency.

![Front wheel with black and white pattern](https://willem.com/global/images/358e41089410.webp)

The front wheel of the robot features a black and white pattern. What you might not know is that there is a sensor located underneath the wheel to scan for this 'brightness/darkness'-pattern to detect movement.

![Remove dust from the sensor underneath the wheel base](https://willem.com/global/images/c769e88eb9f3.webp)

After many hours of vacuum cleaning there is usually some dust on it. Clean it by pulling out the wheel base. If you want to you can remove the wheel and clean its bearings.

![Front wheel cleaning the bearings](https://willem.com/global/images/8b545501494f.webp)

After the first few years of service my Roomba started losing its original front wheel on bumps... Its axle was worn loose. I replaced it with one I found on Ebay (https://www.ebay.com/sch/i.html?_nkw=roomba+front+wheel) that uses a screw for fixture.

![Front wheel replacement with a screw fixture ](https://willem.com/global/images/3841691d62fb.webp)

The next step is to remove hairs and dirt from the brushes. Have a close look at both ends of each brush. Remove caps and check underneath them. Use a screw driver (or a small knife) to cut hairs loose.

![Hairy brushes... but not the way you want them.](https://willem.com/global/images/62df7ea9e06c.webp)

![Check underneath the caps of the brushes](https://willem.com/global/images/af1935b9bb41.webp)

![Use a screw driver to cut hairs loose](https://willem.com/global/images/dee70a182091.webp)

![Voila, clean!](https://willem.com/global/images/0678008a1089.webp)

The other spinning brush requires loosening a screw to be removed. Use the small screw driver to wiggle it loose from its center axle. You'll be surprised how much dirt can hide underneath it...

![Unscrew the spinning brush](https://willem.com/global/images/4e0eedf7a8e8.webp)

![Wiggle the brush loose from its center axle](https://willem.com/global/images/0f543acd918f.webp)

![Remove dirt from the axle](https://willem.com/global/images/a60482120fa4.webp)

During vacuum cleaning the robot collects fine grained dust on the inside. Every now and then I remove bottom cover to have the inside thoroughly cleaned. The Roomba is a maintenance friendly robot, the screws required to remove the bottom cover are clearly marked with a triangle.

![Remove the bottom cover to access the inside of the Roomba](https://willem.com/global/images/88d41de8c9e0.webp)

![Screws are clearly marked with a triangle](https://willem.com/global/images/1391104689c7.webp)

![Remove all of them, make sure not to lose them (or suck them up during vacuum cleaning...)](https://willem.com/global/images/7794d167fd03.webp)

![iRobot Roomba bottom cover removed](https://willem.com/global/images/47f24c076302.webp)

Once you have removed the bottom cover you'll find more dust and dirt. Depending how long your Roomba has been in service this can be quite the amount! Check around corners and near the wheel bases.

![Looks like a carpet, but this is dust collected on the inside of Roomba](https://willem.com/global/images/501b8c5e72dc.webp)

![Remove dust around corners and edges](https://willem.com/global/images/42364c9e126a.webp)

![Make sure to check the wheel bases for dust bunnies](https://willem.com/global/images/81f71257b21a.webp)

After many years of faithful service, you can expect the battery to loose its capacity. Eventually this causes the robot to run out of juice very quickly. It's absolutely worth it to get a replacement battery. I got an original_iRobot_XLife_Extended_Life_Battery (https://store.irobot.com/default/parts-and-accessories/roomba-accessories/700-series/irobot-xlife-extended-life-battery/4636434.html).

![iRobot XLife extended capacity battery](https://willem.com/global/images/468d98dc8664.webp)

Another part that needs incidental servicing is the cleaning head. You can access it by removing the entire case containing the brushes. Dust can collect near the motor causing possible heat problems. Once removed, flip it around and fight the dust bunnies you'll encounter!

![Removing the cleaning head](https://willem.com/global/images/40fbda3ca91e.webp)

![Flip it around to access the motor](https://willem.com/global/images/1906eae66895.webp)

![Note how much dust is around the motor - it's like a warm winter jacket...](https://willem.com/global/images/1e3ccf6616ab.webp)

Last but not least is the dust bin and filter. Being Dutch (and kinda cheap-ish a.k.a. 'ons bent zuunig') I don't replace the filter but rather clean it. You won't believe it, but this is the original filter - in service since 2011. Alternatively, iRobot will_happily_sell_you_replacement_filters (https://store.irobot.com/default/parts-and-accessories/roomba-accessories/professional-and-500-series/500-and-professional-series-replenishment-kit-for-red-and-green-cleaning-heads/82401.html) for $40.

![Remove dust from the container by sliding out the filter](https://willem.com/global/images/8fa89d85b370.webp)

![You can clean the filter with another vacuum cleaner](https://willem.com/global/images/4815d84e2e5e.webp)

![Like new, but 8 years old... ](https://willem.com/global/images/2cb89b65fd9e.webp)

Put everything back together and check if the wheels and brushes are not obstructed. Flip it around, your Roomba is ready for action again!

![All parts back cleaned and back together. ](https://willem.com/global/images/34fbbb7d06eb.webp)

![Roomba ready for duty!](https://willem.com/global/images/6df1954b55f0.webp)

## Conclusion

While it may take some time and energy, it's not all that hard to service your vacuum cleaning robot. Once you've done it for the first time, its very easy to do it again. Your robotic friend will be grateful!

---

## Understanding the security concerns in shared hosting

*Considering open ports and unused network facing services* · 2019-02-28 · https://willem.com/en/2019-02-28_understanding-the-security-concerns-in-shared-hosting/

People pay me to hack them, provided I'll explain how it was done, so future hacks can be prevented. As security consultant, I scan for weaknesses in my clients' apps, webshops and websites. Very often a hack starts by exploiting a security hole that is visible remotely. Read along to learn how hackers find security holes and what you can do to secure them.

To hack an app, webshop or website, hackers often target the servers that host it. To explain why hackers do this, you first have to understand what hosting is and what kinds of hosting there are.

## What is hosting?

Hosting is a service that allows you to have your app, webshop or website be made available on the internet. Hosting is done using special computers called servers. When somebody types your website address in their browser, their device will connect to your server.

If hackers are able to take control over a server, they can access and manipulate all information that is on it. In addition, they can abuse the server's network and computational capacity to do bad things. You really don't want this...

![A typical server in the datacenter, a physical machine that can host apps, webshops and websites](https://willem.com/global/images/cafc9709255f.webp)

## Different kinds of hosting

Your app, webshop or website can be hosted in different ways.  Each kind of hosting has different concerns for security, but its relatively easy to understand as it all comes down to how the physical server (in the datacenter) is shared among the websites.

Web hosting companies usually operate multiple servers and divide their capacity among the number of websites that need hosting. One big server can easily host multiple websites, all depending on the amount of traffic the app, webshop or website has.

![Different kinds of hosting: Shared hosting, VPS hosting and dedicated hosting visualised (a circle representing a physical server)](https://willem.com/global/images/0158845e7a25.webp)

There are three different types of hosting:

- **shared hosting**: The server runs multiple websites by sharing the operating system, memory, processor cores and hard disk storage. There are no hard divisions between the websites.

- **VPS hosting**: The physical server runs multiple virtual private servers (VPS) that all have their own operating system and their own share of memory, processor capacity and storage. A single VPS can be configured to run one or a couple of (related) websites. Because of the hard division between the VPS instances, it is very difficult for hackers to get from one VPS to another.

- **dedicated hosting**: The physical server runs only one website. Nothing is shared, all resources are dedicated to one  app, webshop or website. Because of this physical division, you are not affected by hacks of any other website.

### Warning: "Cloud Hosting" is often rebranded shared hosting

It's important to understand that most modern "Cloud Hosting" is actually *shared hosting* with a fancy name. Web design bureaus often configure their dedicated or virtual private server to sell shared hosting to their clients. So, unless you operate your own VPS or dedicated server, chances are you're on shared hosting.

## Security concerns for shared hosting

The security risks of shared hosting come from its sharing basis. When one of the websites in the same server as yours is hacked, there is a high probability that your website will be affected as well. In this situation, security measures applied to your own website might not be enough to protect it against hackers.

![Contagious effect of an hacked website (red indicating trouble)](https://willem.com/global/images/bfbc8fc6e058.webp)

### Shared IP address

Furthermore, with shared hosting it usually means that all websites share the same IP address. You'll run into problems if any other website is involved in bad practice such as sending spam mails or hosting illegal content. This could cause your website to be blacklisted, blocked or downgraded in search engine rankings.

### Performance

If you consider that hosting companies usually put hundredths - sometimes even thousands (!) - of websites on the same shared server, you'll understand why this increases the chance of being hacked. In addition to security issues, a shared hosting service also affects your website's performance as it has to compete with other websites over the same limited amount of server resources. If one of the other websites experiences some extreme traffic, it could slow down your app, webshop or website too!

### Shared network facing services

Another problem with shared hosting is that usually the server has a lot of network facing services enabled, like a web, mail, FTP and database service. These services are available through open ports. It's bad form to have all ports open to everywhere because it exposes those services that are listening on those ports to exploits. Firewalls can limit what is allowed to connect a certain port, but in a shared hosting environment these restrictions are often not very tight (because of the many different things that are hosted on the same server).

## Hacking an app, webshop or website

To hack your app, webshop or website a hacker can scan your hosting server for open ports, identifying the different services that run on the server. The unix program *nmap* is often used to do this. The hacker connects to the service listening on open ports to find out what program it is.

![Using nmap to scan a hosting server, identifying network facing services and open ports](https://willem.com/global/images/950d6bfeda3c.webp)

This information can be used to check if running network services have any known security weaknesses. There are online libraries (https://www.cvedetails.com) where these weaknesses can be looked up by software name and version. Finding a known weakness is as easy as a Google_query (https://www.google.com/search?q=php+5.5.9+exploit). If an existing weakness is found, the hacker can use this to gain access to the server.

By checking the IP address of the hosting server, the hacker can determine if the server is shared with other apps, webshops or websites. It's possible (using reverse DNS lookups) to list all the websites hosted on the same server. While yours may be up to date and secure, others on the same server might run outdated software (with security weaknesses). Common website software is well documented, older versions of PHP (https://www.cvedetails.com/vulnerability-list/vendor_id-74/product_id-128/PHP-PHP.html) and WordPress (https://www.cvedetails.com/vulnerability-list.php?vendor_id=2337&product_id=4096&order=3) are known to have serious security problems.

![Once a hacker knows what software your website uses, its easy to lookup known security holes using databases like cvedetails.com](https://willem.com/global/images/c3d8458c889e.webp)

## Conclusion

The best way to secure your app, webshop or website is to limit its exposure to exploits as much as possible. Keeping your website software up to date is critical, but it might not be enough if your hosting is shared.

To prevent other hacks from affecting your app, webshop or website, you should consider hosting it on a dedicated physical or virtual server with its own IP address. You can then tighten security by filtering open ports and shutting down unused network facing services.

This way you reduce what cyber security experts call the "attack surface". The smaller it is, the easier it becomes to defend it - good luck and keep in mind that help_is_available (https://digidef.nl)!

![Keep in mind that help is available - I know my way around servers and cyber security](https://willem.com/global/images/e37a7be2befb.webp)

---

## One year on the ultimate commuter bike

*6000KM in 12 months with Gates CDN/CDX and Shimano Alfine* · 2019-02-27 · https://willem.com/en/2019-02-27_one-year-on-the-ultimate-commuter-bike/

A year ago I tried to create the ultimate commuter bike, a modified Sensa Cintura with the Gates CDN/CDX carbon belt drive. I received lots of messages from cyclists and commuters from all over the world. From the Swiss alps, France, Italy, Germany, United States and even "down under", Australia! You all wanted to know: how does the upgraded bike hold up?

![My commuter bike, a modified Sensa Cintura with Gates Carbon Drive CDN/CDX, Shimano Alfine and a Schindelhauer steer](https://willem.com/global/images/60a5bd3deed3.webp)

## My commuter bike

Last winter I got myself a Sensa Cintura bike with the Gates CDN Carbon Drive to get through the Dutch weather. It was time for some upgrades after just 1800KM in eight weeks. I_had_to_upgrade_the_Gates_CDN_carbon_drive,_read_about_it_in_my_post_from_last_year. (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/) Later I decided to remove_the_paint_from_my_bike_to_create_a_minimalistic,_raw_aluminium_look (https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/).

## One year on my bike (±6000KM)

Over the past twelve months I have used this bike extensively. Originally I planned to use this bike only during winter time, but I liked it so much that I continued to use it for the entire year. From snowy conditions during winter all the way through the summer heat.

![My bike in Summer](https://willem.com/global/images/b51d94d95c44.webp)

![My bike in Winter](https://willem.com/global/images/94f75ad777d2.webp)

## Tires

During the year I enjoyed the Schwalbe Durano tires, but I did got numerous punctures (mostly because of the many kilometers). You'll get handy at changing tires, but it remains annoying.

![Road side servicing the bike: swapping a punctured tire](https://willem.com/global/images/fdfdb63f1e3d.webp)

![That nail should not be there... puncture!](https://willem.com/global/images/00911867b186.webp)

Because of the extra slippery conditions, I changed my tires at the beginning of this winter. I swapped the fast, racy Schwalbe Durano tires for puncture proof, grippy Schwalbe Marathon Plus Tour rubber.

![Differences in tire profile between Schwalbe Marathon Plus Tour (left) and Schwalbe Durano (right)](https://willem.com/global/images/6237f8869e5a.webp)

![Schwalbe Marathon Plus Tour - designed to be unplattable (so far, its holding up!)](https://willem.com/global/images/96679cb6a6b2.webp)

The Schwalbe Marathon Plus Tour tires are real beasts. I haven't got a single puncture for the past 3000KM and I really, really like that. In fact, I like that so much, that I consider keeping them on my bike (and getting rid of the spare tire bag / pump). Check out this_video (https://m.youtube.com/watch?feature=youtu.be&v=Sl4XZT_mYVc) if you doubt their robustness. They are heavier than the Durano's, but not all that bad in terms of handling and acceleration.

![Brutal, resilient tires: Schwalbe Marathon Plus Tour](https://willem.com/global/images/ca7b2702ee2e.webp)

## Gates Carbon CDN/CDX Drive

So, last_year_after_just_1800KM_the_original_Gates_Carbon_CDN_rear_sprocket_was_showing_signs_of_serious_wear (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/). I was greatly disappointed by this lacklustre quality and Sensa's poor choice for the CDN-line of the Gates Carbon Drive.

![Faulty Gates Carbon Drive CDN rear sprocket left, shiny and stronger CDX sprocket right.](https://willem.com/global/images/7af502966145.webp)

I replaced the rear sprocket for a better quality CDX-model and was very anxious to find out if this would be any better in the long run. It turns out to be so, the CDX rear sprocket is fine after 6000KM. Hooray!

![Gates Carbon Drive CDX rear sprocket after 6000KM / 12 months, a little dusty but still fine!](https://willem.com/global/images/cef1d281abe2.webp)

The drive is consistently performing fine, the weakest part of the original CDN system is the rear sprocket. In contrast, the CDN belt and front sprocket are very durable.

![Gates CDN front sprocket and CDN belt are in good shape after 7800KM (they are original to my bike, which is about 14 months old) ](https://willem.com/global/images/ee41a3fe1404.webp)

It's amazing how resilient the Gates Carbon Drive system is, during the snowy winter months it resisted conditions that would have easily damaged a traditional chain / derailleur group set. Combined with the Shimano Alfine gear hub it's ready for many more kilometres.

![Hard conditions for the Gates Carbon Drive](https://willem.com/global/images/2dfc9fef4f6e.webp)

![Make sure to wear a helmet when you try to master the slippery roads during winter!](https://willem.com/global/images/1b8f9954fc9d.webp)

## Other things that broke

During my 12 months on the bike my rear light stopped working because of an electrical failure in the LED-array. My Busch und Müller rear light is mounted inside the rear fender. It's right in the spray of dirt and water from the tire. I think this is a recipy for failure, the electrical components should be better protected from the dirty water.

![Busch und Müller rear light mounted inside the rear fender, showing signs of wear caused by the spray of dirty water from the rear tire](https://willem.com/global/images/c329ac7d91ab.webp)

If you're like me (±85KG in weight) and cycling with a fast pace (>25KM/h) you'll be pushing the limits of the structural integrity of all the parts and pieces of your bike. This means that things can break down when the going gets a little rough. I snapped one of the rear spokes when I hit a hole in the road!

![Broken spoke on my rear tire after a sudden encounter with a hole...](https://willem.com/global/images/c674a647369a.webp)

## Beyond commuting

The natural habitat of my commuter bike is the road between my home and office. But, during the year I did use the bike in different contexts, just because I liked it so much.

![Downtown Amsterdam, don't forget a lock!](https://willem.com/global/images/60b22d27dc7a.webp)

With a good lock you can use the bike in downtown Amsterdam, it reminds you how versatile a commuter bike is. This is of course a great advantage over a full blood racing bike (you don't want to leave that unattended in the city...)

Just like_last_year (https://willem.com/en/2017-06-30_fietselfstedentocht-2017/), I cycled the 235KM Fietselfstedentocht. I figured it to be the ultimate endurance test if I could complete the Frisian tour of heroes on my trustworthy commuter bike. It did and it was awesome!

![Fietselfstedentocht 2018 - the ultimate endurance test for any bike - 235KM in one day](https://willem.com/global/images/f2fe0c0d84b1.webp)

## Conclusion

I love cycling and my commuter bike is probably the most versatile, robust bike I ever had. Its great to know that it works reliably under all conditions.

But in the end, it doesn't really matter what bike you ride. What matters most, is the ride itself! To be out there cycling gives you a sense of freedom and tranquility that is hard to match!

### Update

Ever wondered what's it like to have a road racing bike with a Gates Carbon drive? Then check out my_story_on_Siegfried_Road (https://willem.com/en/2020-04-30_minimalistic-road-bike-with-gates-carbon-drive/).

After 21.000KM I wrote another update on the bike: read_it_here (https://willem.com/en/2021-01-10_commuter-bike-checkup/).

![What matters most is the ride itself, don't forget that!](https://willem.com/global/images/ac71cbb15142.webp)

---

## Born with MCADD

*Medium chain acyl-CoA dehydrogenase deficiency* · 2019-01-29 · https://willem.com/en/2019-01-29_born-with-mcadd/

Just days after our son was born, we ran into trouble when our little man didn't want to eat anymore. Repeated attempts to feed him failed as he appeared to be too tired to drink from his mother. When we measured his body temperature we were shocked, only 33º Celsius! What followed was nothing less than an incredible emotional rollercoaster!

## Hospitalised

We wasted no time and decided to take our son to the hospital, PRONTO! Because my wife was still recovering from giving birth (and therefore she was less mobile), we decided that I should go alone with our boy to be as quickly as possible. This was one very convenient time to have experience with_driving_a_car_as_fast_as_possible! (https://willem.com/en/2017-05-31_beast-of-the-green-hell/)

Once in the hospital, the doctors knew of our arrival but couldn't believe the baby's temperature. They thought the measurement was an error, but their own reading confirmed the dangerously low body temperature. Before doing anything else, he was put in an incubator and was given some food via a syringe.

![Saving the life of our son - note the heart rate monitor being unable to detect heart activity (the green question mark)...](https://willem.com/global/images/3d96decd77d1.webp)

Critical moments passed when the monitor had trouble detecting the kid's heart activity. He was still breathing, but his low temperature and weak appearance caused serious concern. It's a rather shocking experience to see your newborn boy like this.

## Rapid recovery

The loving care of the nurses, the heath inside the incubator and the energy from the food did wonders for the little man. Within mere hours, his body temperature rose and he regained his appetite. I felt intensely happy to be able to feed him again!

![It felt like victory to see him drinking again!](https://willem.com/global/images/0d060fa398d3.webp)

Although his vital signs returned to normal, nobody (including the doctors) had any idea what caused the boy's crisis. The doctors followed standard procedure, taking tests to look for an infection or any sign of (internal) trauma that might have gone unnoticed since his birth. They found none, by all their standard readings and measurements the boy was completely healthy.

Unsatisfied with the lack of a clear cause, the doctors advised to keep our son under close monitoring for some more time. We were welcome to join him spending some nights in the hospital. Three nights later, we were allowed to go home as he continued to appear completely healthy. We remained uncertain about what caused his critical condition, but not for long as the answer would present itself (rather literally) at our doorstep...

## Newborn screening

While I was happily delivering birth announcement cards, I received a call from my wife: the doctor is here, please come home now!

Once home, the doctor started what seemed like a textbook procedure for a 'bad news delivery'. He told us that the newborn screening revealed an anomalous reading, indicating a rare genetic metabolic disorder called *"medium chain acyl-CoA dehydrogenase deficiency"* or MCADD.

We were asked to go to the hospital immediately and present ourselves at the emergency room where a specialised doctor would await us.

![VU Amsterdam emergency room](https://willem.com/global/images/dbd919f49899.webp)

## MCADD diagnosis

The specialised doctor welcomed us in a friendly manner, she explained that they needed to confirm the MCADD indication before jumping to any conclusions. This was done by taking additional blood and urine samples from our little man.

As this was a different hospital (and doctor), we were asked how we experienced the days after our son's birth. Our story of his sudden hospitalisation did not seem to surprise the specialised doctor at all. Shedding new light on the crazy first days of his live, the doctor explained us what MCADD is.

## What is MCADD?

MCADD is a rare genetic metabolic disorder affecting the body's ability to use fat as energy. The human body needs three primary nutrients in order to function:

- carbohydrates: are broken down into glucose

- proteins: are broken down into amino acids

- fats: are broken down into fatty acids

As we eat a meal, carbohydrates are broken down into glucose causing our blood sugar to rise. This causes insulin to be released into the bloodstream, enabling the glucose to enter our cells, distributing the meal's energy through our body.

If there is more glucose than the body needs, the excess is stored in a "glucose store" (glycogen) inside the liver and in fat cells. In between meals, the body can use the glucose store for energy. When the glycogen is depleted, the body turns to fat stores for energy.

Unfortunately, those individuals with the MCADD disorder lack (or have an insufficient amount of) an enzyme necessary to break down the fat to produce energy. The *medium chain acyl-CoA dehydrogenase* is an enzyme that is needed for the oxidation of medium chain fatty acids found in fats. The inability to oxidise these fatty acids, prevents the body from utilising fat as a source of energy. This can lead to an accumulation of unused fatty acids causing damage to liver and brain, leading to a metabolic crisis.

Simply put, with MCADD you run into trouble once all the energy from food is used. This leads to sleepiness, lethargy, coma and ultimately death.

![At least he got a cool Garfield adhesive band aid](https://willem.com/global/images/e9131def68f3.webp)

## Living with MCADD

The additional blood and urine tests confirmed the MCADD diagnoses and marked the beginning of our son's life with MCADD, as there is no cure available (yet).

During additional visits to the hospital we learned that living with MCADD is perfectly possible by:

- **Eating often**: to prevent running out of energy, causing a metabolic crisis

- **Eating wisely**: to avoid the types of fats the body cannot break down, plan a high-carbohydrate, low-fat diet.

- **Taking medicine**: an additional supplement of L-carnitine might be prescribed to help the body remove harmful substances. 

- **Being prepared**: for situations when appetite is low, such as illness or when one vomits, or when extra energy is needed (e.g. during intense and prolonged workouts)

## Conclusion

Thanks to the newborn screening results we now know about our son's MCADD disorder. This helps us prevent future life threatening situations like the one we experienced just days after his birth.

This is one hell of a way to start our parenthood, but it could easily have been much_worse (http://minutesmatter-mcadd.org/?page_id=1222). I'll use this blog to share our (future) lessons in dealing with MCADD as it may help others. With proper care, there's no reason why someone with MCADD cannot live a normal, healthy and active life!

### Links

- http://minutesmatter-mcadd.org

- http://www.mcadd.be

- https://ghr.nlm.nih.gov/condition/medium-chain-acyl-coa-dehydrogenase-deficiency

- https://www.nhs.uk/conditions/mcadd/

- https://www.stofwisselingsziekten.nl (Dutch)

Feel free to contact me if you want to share a website or your experience with MCADD with me.

---

## My first weeks as dad

*On the challenges and rewards of being a father* · 2019-01-24 · https://willem.com/en/2019-01-24_my-first-weeks-as-dad/

Last Christmas my wife gave birth to our son, a little boy that would change everything! It's an incredible experience to become a parent, especially if it is your first kid. It introduces a whole new way of living, having to deal with regular feeding, caring and sleepless nights. Read along for my (biometric) findings and some practical tips!

![Our son](https://willem.com/global/images/0df65d930178.webp)

## Birth

During the middle of the night on December 24st my wife noticed that things were happening in her belly. She was due to give birth around Christmas, so we immediately suspected *IT* has begun... That's one really crazy way to wake up, I ensure you!

Having prepared myself as much as possible, I knew I had to time the contractions. The more frequent and regularly the contractions occur, the further the "birth process" is. With my IT-engineer's eyes I tried to make sense of the situation, having funny thoughts of progress indicators along the way: "Unzipping baby... 34% complete... please stand by". I was wise enough to keep these thoughts for myself as my wife was undergoing some serious pains.

![Suitcase and Maxi Cosi where ready](https://willem.com/global/images/768a3c8230aa.webp)

Some hours later the contractions were rapid and intense enough to contact the midwife's office. We went to the hospital for the actual birth. We planned to do this and had a suitcase with Maxi Cosi on standby. Make sure you'll practice setting up the Maxi Cosi *before* you'll need it... I did!

Once in the hospital, my wife had to work even harder and longer. Witnessing all the hard work from up close, it occurred to me that being a man has its advantages and that we (as men) should have intense respect for our wifes, mothers and grandmothers. At last, almost 25 hours later our son was born, hooray!

## Everything changes

Hearing and seeing your son for the very first time is something truly special. It must be one of nature's tricks, but I felt immediately attached to the little man. It's a beautiful moment, but it also marks the beginning of the crazy period you'll endure after birth.

![Holding my son for the very first time - trying to make sense what the little man wants... (a recurring theme as I would find out)](https://willem.com/global/images/806102325b97.webp)

The truth is, that the period after birth is hard, very hard. You'll have to learn and do a lot of new things while you're deprived of sleep. Your life will be in chaos. I visualised my life as a LEGO building set taken apart: everywhere are familiar pieces but you have to figure out how to put them back together.

I decided to organise my rebuilding effort around three important themes:

- Health: personal fitness, sleep, food etc.

- Family: care for the mama and kid, household

- Work: to make sure there will be money

## Health

The first and foremost priority is personal health. This sounds selfish, but you need to be fit in order to help others. By far the biggest challenger during the first weeks of parenthood is sleep deprivation.

Soon after birth you'll desire sleep above anything else. Even a small nap during the day will feel like luxury. I used Biostrap to analyse my sleep pattern and effectiveness based on heart rate variance (HRV), an indicator of how well you're rested.

![Left: a full week of sleep data - right: one night in detail](https://willem.com/global/images/5da38e17d71a.webp)

During my nights as newfound dad I change nappies and feed the baby using a bottle. This is done at a fixed schedule at 3 hour intervals, including two or three sessions during the night. This is the main cause for fragmentation of night rest. It takes time to adjust to this new pattern. During my first nights I barely recovered any HRV, effectively waking up sleepy.

![Data from a mediocre night (with minimal HRV recovery)](https://willem.com/global/images/b6a761400d05.webp)

I compensated for the mediocre nights using small naps during the day. Nap data is shown above in purple. This can really give you an energy boost to keep going. After a few days my body started to adjust to the broken nights. My HRV would recover again, despite the interruptions - alleviating the need for naps during the day.

![Data from a good sleep (causing my HRV to recover) ](https://willem.com/global/images/7af65785c679.webp)

It's good to know that your body can adjust to the new daddy patterns. In addition to sleep you should keep moving too, possibly even do some exercise. Both family and work offer opportunities for this, read along.

## Family

Especially during the first few days after birth, both your wife and kid need all the love and attention you can give. In The Netherlands you'll get some help from the maternity service, but after the first week you're on your own. This is the moment to shine as newfound dad.

One way of doing this is cooking! Before our son was born I learned to cook, especially for moments like this. Cooking serves two purposes, feeding and a little "baby off-time". After hours of caring for the baby, you'll welcome a little cooking as it requires a different kind of attention from your mind.

![Room service by daddy: smoked salmon as starter](https://willem.com/global/images/740df7e764bf.webp)

Feeding your son provides an unique opportunity to build a relationship with your kid. As you're concentrating on how he's drinking his milk, you'll have plenty of 1-on-1 time. I try to make the most out of this by explicitly banning my smartphone from the scene. It's seriously rewarding to do this as a dad.

![Happy boys - giving and taking a bottle of milk](https://willem.com/global/images/f0a07acf87f7.webp)

In addition to cooking, you'll find common household tasks highly rewarding as they provide both an opportunity to do something useful, to move a little and to do something with you kid! Grocery shopping, dish washing, cooking, vacuum cleaning are all opportunities worth embracing. I use a baby-carrier to free my hands during common household tasks, it's fun and useful.

![Carrying a baby during household tasks is fun and useful](https://willem.com/global/images/6f466d480779.webp)

## Work

In the Netherlands, employees with employment contracts are entitled to statutory paternity pay, but if you're self-employed like me, there is no such thing. You'll have to plan ahead and save money before the baby is born - because you can expect productivity to be at a deep low during the first weeks.

The upside of being self-employed is that you decide how long, when and where you'll work. This flexibility comes in handy! I found working in the morning quite allright, right after the 7.00hrs feeding session as the little one will easily resume his sleep after finishing his milk.

![My desk, daddy style ](https://willem.com/global/images/75adda00e570.webp)

As newborn babies love to have body contact (as it relaxes them because they hear your heart and breathing), you can try to provide a place to sleep for the baby while you get some work done using a baby carrier.

![Baby asleep, daddy at work](https://willem.com/global/images/a4831b946c7d.webp)

## Conclusion

Becoming a parent is something special. Take the time to enjoy it, as it will be over before you know it. Your time will revolve around your baby, this is something you should embrace instead of fight.

Focus on your health, the family and put the rest of your energy in your work. The first weeks are most difficult, after that things become easier because you'll adapt and gain experience. The easier it becomes, the more fun your newfound fatherhood gets!

![Don't forget to have fun!](https://willem.com/global/images/c14d47fd7068.webp)

---

## Business in a bag

*Using a waterproof backpack to fit my gear* · 2018-12-22 · https://willem.com/en/2018-12-22_business-in-a-bag/

Over the past few months I have been testing different bags and cases to fit everything I need to run my business. As I commute by bike, the bag needs to be waterproof. The problem with waterproof gear is that it is usually very bulky. I need my gear to be both portable and representative, a challenge worth a blog post!

## My gear

If you've been reading my blog, you know I have been minimising the gear I use to get things done. Earlier I_got_rid_of_paper (https://willem.com/en/2017-01-30_ipad-pro-next-to-my-primary-machine/), I now do my business 100% paperless by digitising every possible document. I got rid of my entire LAN-network when I went 'mobile_only (https://willem.com/en/2017-07-31_the-day-i-killed-my-lan/)', I no longer rely on local network infrastructure to be productive. After experimenting years_ago (https://willem.com/en/2016-08-15_ipad-pro-as-primary-computer/), I now use a tablet_as_main_computer (https://willem.com/en/2018-03-07_tablet-as-main-computer/). Having a minimal selection of gear allows me to fit my entire business in a bag!

![All I need to do my business - really!](https://willem.com/global/images/3170fb197609.webp)

To run my business I use:

- **iPhone (XS Max):** this is my most important device as it is the main communication gateway with my customers and business services. It's portable, but capable enough to comfortably read and write emails and messages. 

- **iPad Pro (11" with cellular):** this is my main work computer, I use it for programming, designing, drawing, research and managing everything that needs my attention. Its phenomenal battery life and build-in internet (using 4G/LTE) makes this the ultimate mobile computer. 

- **Apple Keyboard Folio:** this keyboard may take some time getting used to (because of its slightly smaller size and key travel), but once you do it is great! It's spill proof, super thin and wraps around iPad without cables, connectors of Bluetooth connections. It works very well.

- **Apple AirPods:** These wireless earbuds are simply amazing because of the ease of use. Just plug them in your ear and the iPhone (or iPad) automatically starts using them. I use them to listen music, but moreover to do teleconference calls. As the AirPod-case also acts as charger, the buds are always ready to use.  

- **18 watt charger and USB-C cables:** I use a single charger to for all my devices. Unfortunately that means I need two cables as iPhone and AirPod still use the lightning connector (and iPad USB-C). Room for improvement on Apple's end: they should embrace USB-C for all devices. 

## Transport requirements

I want to be able to bring my entire business everywhere. Not because I want to work all the time, but because I don't want to be limited to just one physical location to get my work done. To make things more challenging, I like to have just one bag, suitable for multiple situations:

- **Riding my bike:** I_love_to_ride_my_bike (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/) and I do this through all kinds of weather, including heavy rain and wind. My gear should be safe from harm. 

- **Walking through urban areas:** Because of my_work_as_volunteer_in_Amsterdam-Zuidoost (https://willem.com/blog/volunteer/), I need to be able to carry my stuff through areas of the city that are known to be dangerous. Any obvious flashiness or fanciness is an invitation to unwanted attention...

- **Visiting customers:** Although much of my contact with customers happens digitally these days, there are times when I meet people to discuss business. My gear should be representative, not overly sporty or bulky.

- **Durable:** I hate things to become_obsolete (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/), my bag and gear should be as durable as possible. Strong and lasting, useable in the future.

## Backpack: Ortlieb Urban daypack 15L

Ortlieb is a German specialist in waterproof bags, the "waterproof"-text is even part of their logo! Their bags are designed to withstand even the worst type of weather.

![Me wearing the hardcore Ortlieb Velocity bag through bad weather, fantastic but a little bit bulky...](https://willem.com/global/images/2574ae6bd62b.webp)

I have used the Ortlieb Velocity bag for years and it is simply amazing. Even through_the_worst_type_of_Dutch_weather (https://willem.com/en/2017-12-02_commuting-by-bike/), bags made by Ortlieb stay true to their name: waterproof! If you carry expensive electronic gear this is something important.

![Ortlieb Urban daypack 15L ](https://willem.com/global/images/ba002caae503.webp)

The new Urban line from Ortlieb (https://www.ortlieb.com) is designed to appear a little less hardcore, and a little more "urban chique". Its made of a special blend of cotton and Cordura fabrics, the bag has a textile appearance that is a perfect match for both casual and business attire. Thanks to a supple plastic inner coating (polyurethane), it is nonetheless absolutely waterproof.

![Ortlieb Urban: Textile appearance on the outside, polyurethane waterproofness on the inside](https://willem.com/global/images/908dfbc31974.webp)

For my gear I have chosen the smaller 15L version (there is a bigger 20L available). The bag has a nice strap system that is adjustable without any loose ends (the straps end in a loop).

![Adjustable straps without loose ends. ](https://willem.com/global/images/d8e8f37ce732.webp)

## Hardgraft iPhone cash card walled

Years ago I_got_rid_of_a_separate_wallet(https://willem.com/en/2016-07-15_cash-is-king-or-is-it/). I prefer electronic payments wherever I go. It has advantages to combine the essential cards with your smartphone, resulting in just one 'always with you' package.

![Hardgraft iPhone cash card wallet](https://willem.com/global/images/0da508a44d56.webp)

For my smartphone I selected the "Hardgraft_iPhone_cash_card_wallet (https://www.hardgraft.com/products/phonecashcard-classic)". It is an iPhone sleeve combined with a thin wallet, designed for a few cards and some cash.

![The wallet allows quick (and naked) access to the phone](https://willem.com/global/images/3fdbacb60ab2.webp)

One thing I like about the Hardgraft wallet is that it protects the screen, while it still allows quick access to the (naked) phone. This way you can use the smartphone without any cases, flaps or wallet-things attached - while safely tucking it away when you don't. The case even features a small hole that can be used to charge the phone.

![Charging the iPhone while inside the wallet](https://willem.com/global/images/62f718b4e3a3.webp)

## Hardgraft iPad Pro case

Matching the iPhone's wallet, I have selected a case_for_iPad (https://www.hardgraft.com/products/togetheripadcase-classic) that allows quick and complete access when I use the device. When I transport the iPad it is nicely (and stylishly) protected.

![Hardgraft iPad Pro case with the keyboard folio and Apple Pencil](https://willem.com/global/images/005a4d5ced5a.webp)

The great thing about this Hardgraft iPad Pro case is that it fits the entire iPad with the keyboard folio and pencil attached. Just like the iPhone wallet, there is a clever hole in the sleeve that allows charging.

![The iPad can be charged while tucked away in its case](https://willem.com/global/images/c8fda032e24f.webp)

Perfectly matching any business attire is the finishing of the case. The stitching, the materials, the colour and the details all communicate quality. This is something that I really appreciate.

![The case has a high-end feeling because of its high quality finish and details](https://willem.com/global/images/a262b283c865.webp)

## Peripherals case

To complete my set, I found a suitable "thing" (https://www.hardgraft.com/products/passportthing-classic) that would fit the charger, cables and AirPods. Combining the peripherals into a single package seemed to be the perfect way to organise my 'business in a bag' package.

![Peripheral case "thing"](https://willem.com/global/images/2e0d35ccc68c.webp)

The nice thing about this "thing" is that it allows access from both sides. This allows my accessories to be organised while still be within quick reach.

![Access to accesoires from both sides of the "thing"](https://willem.com/global/images/3da3250a9523.webp)

## Putting it together

Organising my gear in three smaller packages allows quick and independent access. Each item is high quality, yet mundane enough to stay under the flashiness radar.

![Awesome threesome... of sorts](https://willem.com/global/images/6e8b4a9950ac.webp)

The lack of obvious branding adds to the serious business like character of the set. The saddle brown leather colour is a nice match with the Ortlieb's "ink" blue.

![Packing it together, Hardgraft and Ortlieb](https://willem.com/global/images/de9b4cb07332.webp)

The inside of the backpack is spacious and features a sleeve that allows the devices to stay in position (while you move around with the backpack). There is enough space left for lunch, a spare set of clothing or something else.

![Inside the Ortlieb Urban Daypack - comfortably spacious](https://willem.com/global/images/b2d9b7fbd964.webp)

## Conclusion

Finding the right gear takes time and effort. This 'business in a bag' is the result of different efforts in minimising and optimisation.

It all starts with being selective about what things you  *really* need to bring along. Then think about where and how you'll be going. For me this meant: waterproof, urbanproof and businessproof.

Finally you should realise that the quality of the bag and cases are just as important as the items you carry. It's silly to safe a penny on a bag while spending pounds on its contents!

---

## Do amazing things with a focused mind

*Taking an ice bath and swimming in the Amstel river* · 2018-12-06 · https://willem.com/en/2018-12-06_do-amazing-things-with-a-focused-mind/

Just when the temperature was a low 2° Celsius, I jumped in the Amstel river! While it was nearly freezing outside I went for a swim, just moments after I've taken an ice bath! This post is about the incredible birthday present I got, a workshop involving the Wim Hof Method.

## Wim Hof Method

He amazed doctors when Wim Hof demonstrated he was able to sustain an healthy body temperature while sitting in an ice bath.

![Wim Hof in ice blocks wearing sensors](https://willem.com/global/images/42b580c332c6.webp)

Ever since, he's been on numerous TV-shows, documentaries and talks explaining his method. The Wim Hof Method (WHM) consists of three pillars: cold therapy, breathing and commitment.

![Wim Hof Method (source: wimhofmethod.com)](https://willem.com/global/images/681a502a418b.webp)

### Cold therapy

In our modern society we tend to control our environment, like turning up the heat when we feel cold or powering on the air-conditioning when we're hot. Living in continuous comfort makes our bodies lazy. By regularly exposing yourself to cold, you train your body to deal with uncomfortable conditions - reactivating its natural capability to warm and sustain itself.

You can do this by taking cold showers or swimming in cold water. Exposure to cold brings down your heart rate and increases your circulation, minimizing inflammation and helping you recover faster from exercising. In addition, you harden your body to the natural stimulus induced by cold, resulting in an increased tolerance to stress and/or disease.

### Breathing

With the breathing excercise of the Wim Hof Method you optimise your breathing, lower your heart rate, deacidify your body, activate your autonomous nervous system, improve your immune system and attain a deep meditative calmness.

This is done by concentrating on repetitive deep breaths, in and out. After a few minutes of deep breathing, you let go and pause breathing. Once your body clearly wants to breathe again, you take in one deep breath and hold it for about 20-30 seconds. The sudden intake of oxygen causes an intense full body sensation that some describe as a mind trip - you'll experience your body like never before.

### Commitment

Both the breathing exercise and the cold therapy require dedication, they're no quick fix to a problem. Just like any kind of training, initial progress is often hard. Your commitment is required to become a master of your body.

You can fuel your commitment with the meditative calmness and focus you'll get when you're exercising and training, it's highly rewarding. Although it takes time to become a master, you'll be able to experience benefits quite quickly.

## Experiencing the Wim Hof Method

As a gift for my birthday I received a Wim Hof Method workshop in Amsterdam. Together with my buddy Tim we visited Bart Biermans, both a doctor and certified WHM trainer. He gives workshops in Amsterdam on his fantastic houseboat in the Amstel river.

![Bart Biermans' ice man training in Amsterdam (source: icemantrainingen.nl)](https://willem.com/global/images/2f81c403f769.webp)

The workshop consists of two parts, first Bart Biermans explains the theory and science underpinning the Wim Hof Method. You'll learn about the excersises, Wim Hof, research and experiments. As these workshops are held in (small) groups, you'll also meet other people. You'll be able to discuss backgrounds, intentions and experiences during the day. This makes it much more than just a personal experience - you'll learn from and be inspired by others.

I experienced the Wim Hof Method workshop as something incredible. Although I_devote_quite_some_time_and_energy_to_my_health (https://willem.com/en/wearable-sensors-measuring-the-body-questioning-the-data/), I never experienced my body like this before. The breathing exercise helped me to gain a level of mediative calmness that - for me - was unprecedented. It may seem silly, but it felt as if I could distinctively feel my blood flowing through my vessels, my heart pumping, my body living; amazing!

Then it was time for the ice bath. The temperature outside was around 2° Celsius, one after one we were guided into the bath filled with ice cubes. The anticipation that you'll sit in a tub full of ice felt like a challenge. But once I entered the bath, I felt calmness.

![Not your typical hot tub... taking an ice bath!](https://willem.com/global/images/3e53126d785b.webp)

With some guidance from Bart Biermans, I was able to focus on my inner temperature, this enabled me to feel quite comfortable - despite being submerged in ice cold water! It's a very strange sensation to feel warm inside an ice tub. Once you get out of the ice bath you'll notice that your sense of temperature has shifted, the cold weather outside suddenly feels warm. To complete this temperature roller coaster ride, we jumped in the Amstel river for a quick swim!

## Conclusion

What an experience it is to learn new things about your own body, that you can do amazing things without drugs or special equipment.

It has been an inspiring workshop that left a lasting impression on me. Big thanks to Bart_Biermans (https://www.icemantrainingen.nl/) for his expertise and my buddy Tim for this amazing birthday present!

---

## Around town in an electric car

*Driving the Smart Electric Drive (EQ fortwo)* · 2018-11-16 · https://willem.com/en/2018-11-16_around-town-in-an-electric-car/

Earlier this month I drove around town for a week in an electric vehicle, a brand new Smart Electric Drive (EQ fortwo). I used it to commute, for my daily groceries and to visit family, friends and customers. What's it like to drive a fully electric car on a daily basis?

## Swatch Mercedes Art

Smart is more than a little car, it is the result of a partnership between Mercedes-Benz and the Swiss watch brand Swatch. Back in 1982 (!) the visionary Swatch CEO, Nicholas Hayek had an idea for a small electric city car.

![Nicolas G. Hayek, 1999 at his desk in Biel (photo: swissinfo.ch)](https://willem.com/global/images/dda315d2ed4d.webp)

Nicholas Hayek was not just a CEO, he is often credited with saving the entire Swiss watch industry because of his forward thinking as leader of the Swatch Group, that includes well-known brands like Omega, Breguet, Hamilton, Tissot and Longines. He believed that the automotive industry had ignored a sector of potential customers who wanted a small and stylish city car.

![Micro Compact Car (MCC) from 1994](https://willem.com/global/images/e4960b2bbf42.webp)

Swatch and Mercedes announced the Micro Compact Car (MCC) company in 1994. One of the first challenges at MCC was the name of the car. Nicolas Hayek insisted it retained Swatch in some way: "Swatchmobile", or "Swatch Car". Mercedes refused and pushed for a neutral name. They settled for Smart, an acronym that had been previously used internally by MCC for Swatch Mercedes Art.

## Smart EQ fortwo

Today Smart is a Mercedes-Benz brand, yet it retains much of the original city car concept. With modern electric vehicle developments, a fully electric version of the city car is now available: Smart EQ fortwo.

![Smart EQ fortwo (with full electric drive)](https://willem.com/global/images/cd17033abd62.webp)

The Smart EQ fortwo is an electric car for two persons, designed to be agile in and around cities. It's a compact car with just 2.6M in length, 1.6M in width and 1.5M in height. Packed with a 96-cell, 17.6 kWh lithium-ion battery it weighs just over 1085KG.

![Two persons can sit comfortably in the Smart EQ fortwo](https://willem.com/global/images/d1dbcaa3fc16.webp)

Even though the car isn't big, there is plenty of room for the two passengers. The car has two comfortably large doors and a practical trunk.

![Quick access to the trunk is possible through the window, in addition to the flip-down hatch](https://willem.com/global/images/5cbb55df1b98.webp)

The trunk can be accessed through the rear window, which can be opened quickly. This is ideal for taking out (and putting in) small items. For larger items you can flip down the hatch.

![Styling on the car is mature and full of customisation options, you can have the Smart look anyway you'd like](https://willem.com/global/images/816c0b5f2cba.webp)

The Smart is anything but dull! You have numerous styling options and can have the car look pretty much anyway you wish. Just like the popular Swatch watches, the Smart is available in many different poppy colours.

![Smart fortwo cabrio in red/pink-ish](https://willem.com/global/images/ba11f4291285.webp)

![Smart fortwo cabrio in green](https://willem.com/global/images/c26832adfc61.webp)

![Smart fortwo cabrio featuring the special "nightsky" style](https://willem.com/global/images/985581badc5e.webp)

The car I drove had a matte grey finish with black accents - a bold appearance! But whatever colour you choose, the car's modern design works well with it.

![Matte grey finish with black accents - young, serious, but still a lot of fun!](https://willem.com/global/images/82040a791e0a.webp)

## Interior

Like many Dutch men, I am not exactly small with 1.93M in length... yet inside the Smart fortwo I feel very comfortable. The interior is designed to accommodate the two passengers in a big way.

![Inside the smart fortwo - plenty of room for a tall guy (1.93M)](https://willem.com/global/images/9dfb15ef8779.webp)

The roof window is a nice extra, it gives you a spacious feeling. Pretty much like driving a cabrio, but without the danger of ruining your haircut.... (if you have any...)

![The smart cockpit - with lots of buttons](https://willem.com/global/images/d5d954d4cadc.webp)

The (heated) steering wheel has numerous buttons for controlling music and cruise control. You can use the buttons to have the contents of the various displays change. The displays can show anything from speed, distance to electric power data.

![Electric power gauge inside the Smart EQ](https://willem.com/global/images/d19176715fcb.webp)

Leave it up to the Smart designers to come up with a fun little electric power gauge. It shows you the current power level and battery charge. The power gauge goes two ways: going to the left, it indicates regeneration (by magnetic braking), to the right it shows power usage (by accelerating). Its fun and useful if you're new to electric cars.

![Central touch screen - like an integrated iPad](https://willem.com/global/images/9a894a12f44b.webp)

In the middle of the dashboard there is the central screen. You can use it to navigate, play music and connect to your smartphone. Alternative to the integrated media system is the smartphone cradle that allows you to use your phone as central screen.

![The smartphone cradle is an interesting alternative to the integrated media screen](https://willem.com/global/images/965ec4cd5908.webp)

If you use the car on a daily basis you don't only see the interior, you feel it. The steering wheel, the handles, the buttons: it's Mercedes-Benz quality. That's a good thing. While the Smart is a fun little car on the outside, on the inside it feels like a serious luxury car.

![Automatic rain wiper](https://willem.com/global/images/fbec64d86242.webp)

![Heated car seats, with luxurious stitching](https://willem.com/global/images/fabd4344ef2e.webp)

![Automatic lights](https://willem.com/global/images/400912ec43ea.webp)

The interior designers really show that they understand how the car (and passenger seat) is used in practice. They included handy things like a baggage belt on the passenger seat. Its top notch, in thinking and finish.

![iPads rejoice - perfectly snug on the passenger seat](https://willem.com/global/images/b054ce135422.webp)

## Handling

Driving a fully electric car is something genuinely different than a traditional petrol car. Using petrol, the internal combustion engine only has a limited range where it delivers power efficiently. Therefore you need a gear box to shift up and down to get moving. Electric engines deliver power at all speeds and do not need gearboxes.

This makes accelerating an electric car much more like a roller coaster: it goes! There is no lag, no shifting, just power! The relatively light Smart (1085KG) may have a small electric engine (±60kW / 80HP), but it delivers speed in a continuous and joyful way. It gets you from 0-60KM/h in 4.9 seconds, good for a big smile at traffic lights in the city.

![Electric drive train inside the Smart EQ](https://willem.com/global/images/b440aad8cadd.webp)

The gearbox isn't the only thing that's missing in an electric car: no oil/fuel tank, pumps, filters, no cooling liquid, radiators and no start engine. An electric car can be much simpler in terms of parts than any petrol car.

The lack of traditional car parts enabled the designers to optimise weight distribution by putting the heavy batteries as low as possible. The engine is very close to the rear wheels, freeing up the front axles, allowing them to steer very sharply. Combined with the short wheel basis this gives the Smart an incredibly small turning cycle of just 6.95M.

![Make very - unbelievably! - sharp corners (with a turning cycle of just 6.95M)](https://willem.com/global/images/a0407c921f10.webp)

The perfect manoeuvrability is very handy in urban areas. You can squeeze the car in almost any (tiny) parking place. The look on my neighbour's face was priceless!

![Creatively parking the car](https://willem.com/global/images/972c7ac058a7.webp)

![Typical Dutch street... atypical parking style :-)](https://willem.com/global/images/acf67e07a442.webp)

## Range and charging

During my time with the electric Smart I easily got 100KM range from a single charge. If you use the ECO-mode, adapt your driving style and take it easy, you'll be able to get a range of about 130KM.

Initially I thought that this would be a problem, a petrol car can easily have a "range" of hundredths of KM's. But, there something an electric car can do that your petrol car can't: charge overnight.

![Smart in my garage, I can fit two of them... ](https://willem.com/global/images/74b4a6b13286.webp)

I found that whenever I parked the car in my own garage, it was a very small effort to connect the charging cable. This way the car will always be charged when you wake up in the morning. Suddenly I realised how badly I hate tanking petrol!

![Charging using an ordinary power outlet](https://willem.com/global/images/fed7827c01a9.webp)

It will take a maximum of 6 hours to charge the car up to 80% using a normal, 230V power outlet. If you install the optional wall box you can increase charging speeds dramatically.

![Charging the car on a public parking place](https://willem.com/global/images/cfef0eb0632e.webp)

In addition to charging at home, you can use any public charging station to fill the batteries. This is ideal in cities, where its often hard to find a parking place. Using a smartphone app you'll find free charging places everywhere. While you're visiting friends, family or customers - the car is filling itself with fresh power.

## The beer test

There are lots of important things in life, being able to transport a box of beer is one of them. Luckily the Smart is designed by Germans, and they love beer. I wondered how many boxes of beer I could fit in the car...

![Boxes of Heineken 0.0% in the Smart ](https://willem.com/global/images/5d23a5e0f900.webp)

![Two boxes of beer fit comfortably in the luggage compartment of the Smart](https://willem.com/global/images/e7d0dc4e7891.webp)

The rear trunk easily fits two boxes of beer. If you're really having a serious party, you can use the passenger seat to go crazy... I stopped at 96 bottles of beer, but if you're any good with games like Tetris, I imagine you'll be able to fit much more!

![96 bottles of beer inside the Smart... check!](https://willem.com/global/images/7aa8b90e66b5.webp)

## Conclusion

One week and many kilometres further, it was hard for me to return my new electric buddy back to the Smart dealer in Amsterdam, Stern_Auto (https://www.sternauto.nl/2010/Home.html). Its simply so much fun, zipping around town in an electric smart.

Even more than the forward thinking in terms of design and drive train, its this fun that sticks! It makes you smile, when you drive, when you park, when you charge. Fun!

---

## Is the Apple Watch the modern tool watch?

*Testing the Apple Watch's usefulness in real life* · 2018-11-02 · https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/

This week I went to Frankfurt for business. I had to perform maintenance to servers in a data centre. This seemed like a great opportunity to test the Apple Watch's usefulness in real life (other than health and fitness). I wondered, is the Apple Watch the modern tool watch?

## What is a tool watch?

A tool watch is a watch that is primarily designed for a particular purpose (like diving, flying, racing) instead of just being a piece of jewellery. Modern day classics like the Rolex Submariner, GMT-Master and Daytona were originally designed like this.

![Classic Rolex advertisement - highlighting the functionality first](https://willem.com/global/images/c3e97e1c70b4.webp)

Many of these classic models have their roots trace back into military purposes. Their accuracy and reliability quite literally made the difference between life and death.

## Times have changed

These days we don't really need a dedicated time piece anymore, as you can easily check time on your smartphone or computer. What other uses could a modern tool watch have?

![Digital technology and social change (by Martin Hilbert, University of California)](https://willem.com/global/images/c347b22b860a.webp)

Following the industrial revolution last century, we now live in a time that people describe as "the information age". Economies have shifted from traditional industry to an economy based on information technology. Instead of traditional labour, modern money is created by efficiently allocating resources, connecting supply and demand with high degrees of personalisation. Information is embedded in how we work and live today.

Therefore it is no wonder that internet connected devices are showing up everywhere. Your smartphone, tablet, refrigerator, TV and car are all connected (or will be soon). It only seems logical that a modern watch should be online, too.

![Apple Watch - a modern tool watch?](https://willem.com/global/images/46a03b85751d.webp)

## The modern tool watch

The Apple Watch has evolved into a well connected, wearable micro computer. Thanks to the WiFi/4G/LTE options it can function independently. It is a modern watch, native to our information intensive age, designed  to deal with information - but, how does this work?

![The Apple Watch is a tiny wearable computer](https://willem.com/global/images/ea2b17467ee5.webp)

### Handling incoming information

The Watch enables you to process information. Incoming messages, calls and emails can be dealt with straight from the wrist. It works together with your phone, computer and tablet thanks to its internet connectivity.

Dealing with information from your wrist can be quite useful from time to time. If you set it up properly, the Apple Watch can act as a filter, only allowing important things to ask for your attention. You don't even have to look at the watch, you can have it vibrate in different patterns depending on app, sender, and notification type.

![Apple Watch showing an estimated delivery time of a parcel (from the Dutch PostNL service)](https://willem.com/global/images/01397ceb3728.webp)

If an important message arrives, you can respond using your voice (e.g. calling/dictating) or by choosing a pre-defined reply or action. Alternatively, you can choose to deal with it from your iPhone, iPad or Mac as these devices are all working in concert. You can leave your phone in your bag, only to take it out when it is really necessary.

### Accessing information

Because of its position on the wrist, it is very convenient to use the watch to access information. Naturally, you can use it to check the time, but thanks to its digital display (instead of a mechanical dial), it can show much more.

![Time and date can be checked easily using Apple Watch](https://willem.com/global/images/df19f171c664.webp)

You can access information, such as sports scores, the weather, navigation instructions and pretty much anything else that you could normally find on the internet. You can literally ask things to your watch with your voice, in plain language, like: "do I need a rain coat this afternoon?"

It uses advanced technologies to understand the spoken question, to determine your location and to check the local weather. It then answers in spoken or written words. This is a natural fit in our time where we are used to have all the information of the world within arms length - literally!

![Despite its small size, the Apple Watch's screen is very capable of displaying lots of information](https://willem.com/global/images/1f54f0571730.webp)

### Creating information

In addition to accessing information, the Watch can be used to collect and create information. The Watch is equipped with multiple gyro-sensors, a microphone, a GPS-chip, a touch screen and a heart rate monitor. You can use this to create reminders, messages, appointments and even complete emails.

This is especially useful to deal with impromptu reminders, things you know you might forget. You can set reminders to trigger on a given time or location. Like to remind you to do something when you arrive home, or to remind you to bring something with you when you leave.

![The Apple Watch has numerous sensors to collect data](https://willem.com/global/images/d2cd7926dd6d.webp)

Sensors like the heart rate monitor are used to monitor your well-being throughout the day. The Watch collects health and fitness data automatically. This data is stored on your smartphone where you can use it to analyse and improve your fitness. I have written another blog_post_about_swimming_and_cycling_with_Apple_Watch (https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/).

## Real life test

What better way to test capabilities of the Apple Watch than a real day of work? This week I went to Frankfurt to service an internet server in an highly secured data centre.

![Data Centre in Frankfurt](https://willem.com/global/images/f96d172e4a00.webp)

A data centre is where the cloud or internet lives. It is like a bunker with many computer rooms inside. These computer rooms are equipped with extra reliable power and cooling. Usually these data centres are highly secured with guards, access ports, biometric verification systems , cameras and fences. The "gold" of our information age is stored inside these bunkers.

![German warning signs inside the data centre (somehow they feel slightly more serious...)](https://willem.com/global/images/29ea8d2866aa.webp)

To access the data centre I need to clear different levels of security. For that I need several codes, identification and a tight schedule (as some of these codes expire automatically). In addition to clearing security, I also need to find my way - as these buildings have many floors with alleys, rooms and racks.

![Accessing information while keeping my hands free](https://willem.com/global/images/ef460ec8159d.webp)

The Apple Watch enabled me to quickly access information while I went inside the data centre. I needed my hands to carry a toolbox and server parts. Therefore it was quite convenient that I could simply glance at my wrist to check the route and access information.

This enabled me to locate the malfunctioning server and to access the rack containing the computer hardware.

![Server hardware inside a rack in the data centre](https://willem.com/global/images/997dcf89cdca.webp)

It was necessary to access the server because somehow it lost its connection to the internet. Usually this is an indication of some serious (hardware) failure. To determine the cause you simply start checking all the parts of the machine, see if there are any signs of life.

Inside the data centre there are carts with monitors and keyboards that you can use to connect to your server. This way you can digg even deeper inside the computer, to find problems that aren't visible from the outside.

![Console connected to server](https://willem.com/global/images/335417f119a3.webp)

Using the Apple Watch I could monitor the status of the defective server. I set up a monitoring service that would inform me as soon as the broken server would come online again. Because I whitelisted the monitoring service to push notifications to my wrist, I received this message instantly. This way I did not need an additional laptop or monitoring system on site.

![Happy engineer with Apple Watch inside the data centre!](https://willem.com/global/images/15b777edd022.webp)

Once I found my way outside the job was done. With some time to spare I decided to go downtown Frankfurt to do some sightseeing - and get myself a nice cup of coffee, before hitting the Autobahn again to get back to Amsterdam.

![The world on your wrist - using Apple Maps in downtown Frankfurt](https://willem.com/global/images/2ad44de93d3b.webp)

## Conclusion

During my work in Frankfurt I used the Apple Watch as tool to get things done. It delivered and made my day a little easier.

I would have survived without it, for sure, but being able to deal with information straight from your wrist does feel like a boon. It gives you a sense of control unlike a traditional watch.

![Apple Watch and Rolex Milgauss 116400GV](https://willem.com/global/images/c6c14ae03947.webp)

The Apple Watch is not without its shortcomings, it is a tool that requires extra attention setting up and keeping charged. If traditional tool watch history is any indication, we can expect it to become better over time.

Whether Apple Watch is useful enough to replace a traditional watch remains a personal question. But whatever you think of it right now, know that the technology keeps developing in a very fast pace. Soon, you might find it the right time to give it a try!

---

## Rescuing files from a broken harddisk

*Make backups to be safe rather than sorry!* · 2018-10-16 · https://willem.com/en/2018-10-16_rescuing-files-from-a-broken-harddisk/

Yesterday a young woman brought me her laptop, it didn't start anymore and it only showed an error message. It turned out to be a broken harddisk. It startled her when I told her that all data on the disk was lost. She told me it contained precious photos of her pregnancy and young child. What could I do?

Every Monday I help people in the local community centre in Amsterdam-Zuidoost. I_do_this_work_as_volunteer (https://willem.com/en/2016-11-21_being-a-volunteer-in-amsterdam-zuidoost/) for some years now and it is always great if you can help_people (https://willem.com/en/2018-07-20_helping-people-with-free-software/). But this time, I wasn't sure if I could help the young woman with rescuing her photos...

![The broken laptop containing precious photos](https://willem.com/global/images/d34bbf9c5a6e.webp)

## Broken harddisk

When you use your computer, your files (and photos) are often saved inside the computer, on the harddisk or solid state drive (SSD). This is a tiny machine inside your computer that can break down. If that happens, you lose everything on it.

There are different kinds of harddisk failures:

- **Software failure**: this can happen when the computer is interrupted while writing information to the disk (e.g. a power failure). This may lead to corrupted files or installations, which sometimes can be restored (by the operating system or application you where using). 

- **Read / write errors**: when this happens, the harddisk still runs (you can hear it), but it has (serious) trouble reading and writing data. You can no longer rely on your data being safe, this is a serious risk of permanent failure. 

- **Total failure**: this happens when the disk doesn't power on anymore (no noise) and the computer loses signal to the disk. Only (very expensive) specialised tools can possibly retrieve (partial) data from the disk. Unless you want to spend a fortune, your files are lost.

Whatever happens to your disk, the best thing to do is stop using the computer immediately and consult an expert about what to do. Continuing to use your computer while you have a defective disk increases the chance of corrupting your files.

![Defective harddisk ](https://willem.com/global/images/52eb619083a3.webp)

## Make backups!

The best thing you can do to prevent data loss, is to make backups on a regular basis. It's not hard, you can make backups in different ways:

- **cloud based backups**: you can use Dropbox, iCloud, Google Drive or Microsoft OneDrive to make a backups automatically. Your files are uploaded to the internet. If anything happens to your device, restoring your data is often very simple by downloading the data from the cloud. 

- **USB-drive or SD-card**: you can copy your files to an USB-drive or SD-card, which you can keep at another place (in a safe or at work, friends or family). You can use multiple USB-drives and SD-cards for extra safety.  

- **NAS**: using a network attached storage device (NAS) you effectively build your own (small) cloud backup system, like_I_did (https://willem.com/en/2017-08-31_clouds-below-my-floor/). You can backup your files to the NAS witouth fiddling with USB-disks or SD-cards. But be careful as a NAS inside your house does not protect you against fire or burglars. 

Whatever backup method you choose, make sure to do it regularly. Check your backups, see if they contain all the files you expect. Disk failure happens to everybody, its just a matter of time.

## Rescuing files

The young woman didn't make a backup, her laptop contained the only copy of her precious photos. I really wanted to help her. I offered to open her laptop to see if I could remove the disk and connect it to another computer.

![Opening the laptop to remove the disk](https://willem.com/global/images/edb0c031bb1c.webp)

![The disk is usually fixed using some tiny screws](https://willem.com/global/images/7553d00b6d5c.webp)

Once the disk is removed you can use another computer to attempt reading data from it. Depending on the kind of harddisk failure, you may still be able to retrieve some data. You can use an external USB-harddisk enclosure to connect the disk to another computer.

![Connect any harddisk to a computer using the chip and cables from a USB-harddisk enclosure](https://willem.com/global/images/8218090a255a.webp)

Your mileage may vary, if you're lucky the disk may still have enough life in it. I connected the disk to my Debian GNU/Linux computer and after a few moments the computer detected the harddisk! It was not entirely dead yet!

![Detecting the "USB Mass Storage device", a sign of life from the disk!](https://willem.com/global/images/45b9b0c73d41.webp)

Using Linux or Mac you can instruct your computer to connect to the disk in a "read only" manner. This way you prevent writing data, reducing stress to the disk (as sometimes the operating system automatically starts to index the files, creating lots of tiny new files...).

![Using terminal commands to mount a disk under Debian GNU/Linux](https://willem.com/global/images/6bcb215a0916.webp)

If you look at the screenshot above you'll see that I used **fdisk -l** to list the contents of the connected disk (1). Then I checked the list to see what partition number has the largest size (2), effectively answering the question: where are the files? Finally, using the **mount** command (3) I instructed my computer to connect to this partition. It worked and I could list the contents of the disk (you can see by the folder names, it contains a Windows installation).

From there, I was able to navigate to the Documents folder that contained the young woman's photos. Unsure how long the faulty harddisk would live on, I didn't waste a second and started copying the photos first. Be sure to go after the "gold" first, before you attempt to copy the entire disk.

![A lease on life: the faulty harddisk connected to my laptop ](https://willem.com/global/images/66f456d1da3b.webp)

Really bad sounds came out of the disk during my attempt to rescue the photos. The disk was really giving everything it had. My computer reported numerous errors as it attempted to read data from the harddisk.

![Error messages while reading data from the harddisk](https://willem.com/global/images/e1d7b2c6a796.webp)

Hours later, I was relieved to have my computer report that most of the files had been copied successfully! It worked, hooray!!

## Conclusion

This time I was lucky to be able to safe the precious photos from the disk. But next time, it may be different... You should not count on luck: make backups!

![Returning the precious photos on an USB-drive ](https://willem.com/global/images/2a10c1f497f9.webp)

After rescuing the photos, I used a simple USB-drive to return the photos to the young woman. Needless to say, she was very happy!

---

## Using a budget Android as main smartphone

*Comparing a Nokia (€99) with an iPhone (€1329)* · 2018-10-09 · https://willem.com/en/2018-10-09_using-a-budget-android-as-main-smartphone/

Every now and then, I switch phones to keep track of mobile developments. As professional app and web developer, I need to know how different devices work in real life. This time I used a budget Android smartphone, making me curious how it would compare to an expensive iPhone.

## Switching phones

Although you may think that modern smartphones are all alike, there are some important differences that define the 'feel' of an mobile operating system. Things like navigation: on Android you have the widely used back-button, while on iOS you have the home button and gesture. If you develop apps, you need to make sure that your app behaves like someone would expect. Meaning you need to adhere to the operating system's way of doing things.

Badly ported apps feel out of place because they lack this refinement - they feel illogical. This is why I regularly switch phones, to keep a fresh understanding on how things work on both Android and iOS.

![iPhone running iOS and Nokia running Android](https://willem.com/global/images/fa923079c93a.webp)

You may not realise it, but if you use the same phone for a longer period of time you'll develop muscle memory to quickly open common apps. Make switching easier by arranging the icons in similar fashion on both devices.

## Budget Android: Nokia 2

The Nokia 2 is a basic Android smartphone that doesn't cost a lot (€99). It is the entry level smartphone that Nokia offers. It has a surprisingly nice feel to it because of the aluminium bezel. The screen is vivid and crisp and the phone has a gigantic (4100mAh) battery.

![Nokia 2 with duckduckgo.com](https://willem.com/global/images/20e8e3a2f1ce.webp)

![Nokia 2 build quality is good](https://willem.com/global/images/a807ea52936c.webp)

Compared to the expensive iPhone, the budget Nokia feels lighter and its metal bezel is brushed instead of the iPhone's polished "surgical stainless steel" (pfff). With the Nokia I feel perfectly comfortable not using a case, while on iPhone I feel like I need one (and insurance, second mortgage...).

![The Nokia 2 feels nice - even compared to an expensive iPhone](https://willem.com/global/images/1f7d5eb394c3.webp)

![Compared to iPhone the Nokia 2 is about the same size](https://willem.com/global/images/d16cf5a95829.webp)

## Android One on Nokia

Contrary to many other Android phone manufactures, Nokia is very quick with providing updates. Although this budget phone is much cheaper than offerings from - let's say - Samsung, it gets updates faster and for a longer period of time. With the new 'Android One' experience, Nokia and Google guarantee updates for at least two years.

![Android One is - indeed - amazing](https://willem.com/global/images/e4b3e373dd4b.webp)

## Setting up Android

Switching operating systems means that you'll need to find different apps to get things done, as not all iOS apps are available on Android (and vice versa). I do a lot of different things with my smartphone. For some common tasks I have selected a few apps that are worthwhile:

- Email: **K-9 mail**, an independent email program made available as free software, sharing its source code. It may take some time setting up this app to your liking, but it works reliable. Free of ads, spyware and commercialisation. 

- SSH: **JuiceSSH**, one of the best apps to connect to your server or VPS. It works reliable and is free of ads. In addition to SSH it supports MOSH, which is a SSH-like protocol optimised for mobile connections with support for roaming connections and connection resuming.

- SFTP: **Turbo Client**, is an FTP/SFTP client that you can use to access files on a remote server. This app is free of ads and has an intuitive, modern interface.

- Writing: **iA Writer**, is an app for writing articles that has a minimal interface that gets out of your way, allowing you to fully focus on your content.

- Windows: **RD Client** from Microsoft can be used to connect to a Windows computer. You can then have access to all the Windows desktop apps from your phone. I use this to respond to problems reported by my customers that use Windows.

- Contacts: **CardDAV-Sync**, my addressbook is stored on a Radical CardDAV server. It is like running your own Google or iCloud. I like it because I can fully control my data and use CardDAV on both iOS, Android, Mac, Windows and Linux. Once synced, the contacts appear in the default contacts app provided by Android. 

- Calendar: **CalDAV-Sync**, my calendar is stored on a CalDAV server, just like my addressbook. Once synced, my appointments appear in the default Calendar app. 

![With the right apps and paired with a keyboard, the budget smartphone can do some serious work](https://willem.com/global/images/31b5e292819d.webp)

## Performance

The budget Android smartphone is limited in its processor power and memory. This is something you'll notice: the Nokia is much slower than a high end smartphone. Opening apps takes a little longer (some seconds), and when switching apps it often has to reload because it cannot keep many apps active at the same time. But, once you've opened an app it works very well. I could do all the things I wanted, albeit taking a bit longer.

The Nokia 2 has just 8GB of build-in storage. While that may seem enough, you must realise that you cannot use the full 8GB of memory yourself. Android comes with a ton of Google apps that you cannot remove, and these apps take precious storage capacity away from you. Luckily you can use a Micro-SD card to expand the memory. It remains a challenge however, because not all Android apps can run from a SD-card.

![Limited storage is taken up by... Google.](https://willem.com/global/images/f440014d9b66.webp)

## Google is watching you

If you use Android you need a Google account to download any apps. Google uses this account to create a profile of your online and offline behaviour. Using this detailed profile it can make recommendations, show relevant ads and inform you of things they think you may be interested in (like traffic on your daily commute, your favourite sports team etc).

![Google Privacy Policy - telling you what personal information is collected](https://willem.com/global/images/9b97e592ee7d.webp)

Although you can tune it back, you can never really escape it. You should check out the Google_Privacy_Policy (https://policies.google.com/privacy), which is written in easy to understand language - explaining what exactly is collected.

Using the Android phone I was confronted with Google's data mining multiple times. When I visited my moms (who happens to live near a Polish supermarket), the phone prompted me to leave a review for this store.

![Google is watching you when you use Android](https://willem.com/global/images/176c7d5d5fbc.webp)

Another example is Google Chrome, the browser is actively making recommendations what I should read. If you know my blog, you'll notice from the screenshot that Google does a pretty good job describing my interests. You can hide these *"articles for you"*, but you cannot completely disable them. I prefer to think by myself, I really don't want others to tell me what to read.

## Screen and reading

The Nokia comes with a surprisingly good screen. It is sharp and its colours are vivid. Compared to the expensive iPhone, the budget Android phone has thicker bezels around the display. Although both smartphones are about the same physical size, the iPhone's edge-to-edge screen can fit more content.

![Opening the same page on iPhone and Android](https://willem.com/global/images/c8a4fd61f6d0.webp)

What's more is that iPhone offers the so-called 'reader mode'. This is an option offered automatically by iOS to most websites. You can remove all distractions from a page with a single tap, allowing full focus on the article you're reading. It removes ads too, which is probably the reason why this feature is not on Android (which is controlled by Google, you know, the company that makes money through advertising).

![This is a web page in "reader mode" on iOS, full focus on web content without distractions](https://willem.com/global/images/0e43f1176df0.webp)

## Camera quality

The best camera is the one you always have with you. If you're using the Nokia 2 as your main phone, then you might consider taking another camera with you as its picture quality lacks details and depth. Under good lighting conditions it gets the job done, but don't expect any miracles.

![Landscape photo taken at the Amsterdamse Waterleidingduinen with the Nokia 2](https://willem.com/global/images/c0d2aef381eb.webp)

The landscape of the "Amsterdamse Waterleidingduinen"  seems a bit fuzzy, lacking detail. Quality gets a little better if the subject of your photo is nearer.

![Sign pole, taken with Nokia 2](https://willem.com/global/images/668e707cb7a3.webp)

The difference in camera quality becomes very clear when you take the same photo with both phones. The photo taken with iPhone has more detail. But bear in mind, that that camera is 13 times as expensive! Do you think iPhone's photo quality is 13 times better?

![Side by side photo comparison: left Nokia, right iPhone](https://willem.com/global/images/4e8051d16e7b.webp)

## Battery life

This is where the budget Nokia 2 blows the competition out of the water! The battery life is simply fantastic, it is measured in days! I used the smartphone extensively and the battery performed consistently great. This is really something that should make expensive iPhone owners jealous.

![Battery life is measured in days - fantastic!](https://willem.com/global/images/3f1e10135de9.webp)

## Conclusion

For just €99 you get a phone that can do an incredible lot. I managed to do anything I wanted - at just a fraction of the price of the iPhone (which peaks at €1659 for the 512GB XS Max model). In fact, the Nokia costs about as much as just one iPhone earpiece... crazy!

![The entire budget Android smartphone costs about as much as just one iPhone earpiece!](https://willem.com/global/images/c61e71f84a2a.webp)

The really interesting thing about this budget Android is that it makes you realise that smartphone hardware is getting cheaper and cheaper. It's being commoditised. If today's budget phones can already do everything I want, it makes me wonder what a budget phone can do in a few years. They'll probably be so good that you won't need an expensive smartphone anymore. The cheap phones are getting better and better, something to keep in mind when you think about upgrading your phone!

---

## Swimming and cycling with Apple Watch

*Different activities in the workout app in watchOS* · 2018-09-27 · https://willem.com/en/2018-09-27_swimming-and-cycling-with-apple-watch/

This month Apple launched a new Apple Watch series and released an update to watchOS. The focus of the smartwatch is more and more gearing towards health and fitness. This made me curious, how well does Apple Watch work for different activities?

## Cycling and Swimming

For this test I used a Apple Watch + Nike, it's the most sporty style available. But, all Apple Watches are identical in their health and fitness functionality. Because I am a bit of a data nerd, I strapped another tracker on my wrist to be able to compare data.

![Double strapping in the name of Science: Biostrap and Apple Watch on my wrist](https://willem.com/global/images/fa8288fb68f1.webp)

Instead of using third party apps, I decided to stick with the build-in Apple Workout app. When I tested earlier models of Apple Watch, I found it to be lacking features. But ever since Apple updated watchOS, it has matured into a very capable activity tracker. As I like swimming and cycling, I decided to take the watch for a plunge and ride.

## Cycling with Apple Watch

Riding your bike with Apple Watch is easy. Just wear the watch, tap 'start cycling' in the workout app and get moving! You don't need any external sensors (like speed, cadence, heart rate), the Watch provides everything needed to perform the activity analyses.

![Riding my bike with Apple Watch](https://willem.com/global/images/b51d94d95c44.webp)

The Watch feels nice on the wrist, the silicone sports band is very comfortable. Especially the aluminium Apple Watch models are very light on the wrist - which is nice when you're working out. While riding you keep your eyes on the road - the watch performs its analyses in the background. If you glance at your watch during workout it will show you a summary of the current progress.

### Ride data

After you've completed your ride you stop the workout session in the app. Data is automatically synced to your iPhone where you can analyse your performance in detail.

![Cycling with Apple Watch using the Workout app](https://willem.com/global/images/1e44a007cb1a.webp)

You can see your average speed, distance, ride duration, calories and heart rate. I like the heart rate graph as it clearly reflects the intensity variance during my ride. It also offers you to see your route on a map. A (very) nice detail is the colour of my path, green indicates fast cycling, red slow cycling. If you're trying to improve your average speed this enables you to quickly see where you're slow.

## Swimming with Apple Watch

Working out in the swimming pool with Apple Watch is easy too. Before you jump in the water, you start a swimming workout session. This automatically enables the water resistant mode, disabling touch screen interaction (since that is somewhat troublesome with wet fingers). You can enter the swimming pool length, which helps the watch analyse your stroke.

![Swimming with Apple Watch (shot with iPhone)](https://willem.com/global/images/00617ffe84f6.webp)

After you've completed your swimming, you rotate the Watch's digital crown to disengage the water resistant mode. The Watch will make a sound, expelling excess water from its speakers. This is really an inventive way to make this work, cheers to the Apple engineers.

![Apple Watch summary screen after swimming](https://willem.com/global/images/4a612b67c628.webp)

On your Apple Watch you're presented a summary after swimming. You can see the amount of times you've swum across the pool, including the total distance.

![Swimming with Apple Watch using the Workout app](https://willem.com/global/images/5b0c4c054dbc.webp)

Using your iPhone you can analyse the swimming session in detail. The Apple Watch automatically syncs the swim data once it is back in range of your phone. There is no need to bring your phone near (or in) the pool. It's amazing that the Watch is able to perform heart rate analyses while in the water. Using the gyro sensors it is able to accurately identify my stroke type and duration, including the small rests I had between swimming sessions.

## Conclusion

Apple Watch is just one tiny device on your wrist, yet it packs so much computer and analyses power. Combined with iPhone it is a fantastic sports companion.

What amazes me is the versatility, I used the same Apple Watch to swim and cycle. You don't need dedicated bike computers anymore for decent ride data. I am really impressed by the Watch's ability to track my movement under water.

Measuring your own performance can be a motivational factor when working out. It enables you to track progress and motivate you to go the extra mile. It's good, now get moving!

### Update on cycling with Apple Watch:

Check out my other post about using_Apple_Watch_as_cycling_computer_on_your_bike (https://willem.com/en/2019-04-30_the-best-bike-computer-app-cyclemeter/).

---

## Optimising images for the web and performance

*Reduce filesize with jpegoptim, optipng, pngcrush and pngquant* · 2018-09-26 · https://willem.com/en/2018-09-26_optimising-images-for-the-web-and-performance/

One way to make your website faster is to make it smaller. Not with tiny fonts, but with less bytes! More than half the weight of an average website is because of images. Yet very few people optimise their images for the web and performance, time to find out how much bytes you can safe!

## Optimise your website

If you optimise your website it will load faster. Because many people prefer fast websites, search engines like Google began measuring page speed to determine the ranking of your website in the search results.

### Average page size

Although many web builders focus on HTML and scripts first, the majority of the weight of an average website is comprised of images (Source HttpArchive (https://httparchive.org/reports/page-weight) page weight September 2018).

![Average web page weight, divided by asset type (HttpArchive, September 2018)](https://willem.com/global/images/ec02ee9672ec.webp)

An effective image optimisation can therefore have incredible effects on the speed of your website.

## What is image optimisation?

A digital image is like a chessboard, a rectangle with 8x8 black and white squares. If you would save the chessboard uncompressed, you would write down the colour of each square individually ("square one is white, square two is black, square three is white, square five is black, etc"). It would take 64 lines to describe the entire board, although accurate this is not very efficient.

![Bitmap images are like chessboards, where the pixels are squares](https://willem.com/global/images/e94033e684f1.webp)

Image optimisation is finding more efficient ways to describe the colours of an image. You could describe the entire chessboard in one line of text: "alternate between black and white, start with white", or even more efficient: "repeat white, black". With digital images this is called compression, the algorithm tries to identify sequences of reoccurring colours.

There are different algorithms that all have their strengths and weaknesses. Some perform better on photos (with millions of colours), while others perform better with images with fever different colours (like a PowerPoint slide). Choosing the right algorithm is your first performance boost.

## Common image formats

- **JPG** is a very common image file type with effective compression for images with lots of different colours, like photos. This image format has been around since 1992 is is supported on almost any device.

- **GIF** is another old image file type that was developed in 1987. It's popular because it supports animation. Technically it is very limited to just 256 different colours per image. 

- **PNG** was developed in 1994 as replacement for GIF because of controversy about the GIF's compression algorithm. It is popular because almost any device supports it and PNG has support for millions of colours including transparency. It allows for lossless compression, guaranteeing sharp text and lines, making this format perfectly suitable for graphs and logo's.  

Recently new image formats where introduced by Google (webP) and Apple (HEIF), that offer even better compression compared to JPG, GIF and PNG. But these formats have yet to be widely adopted.

## Choosing the right image format

What format is best for your image depends on the actual contents of your image. There is no universal rule that determines the best format for a given image. You could best try it yourself, see what happens to file size if you save your image in different formats. Many desktop programs offer the option to choose a format when you select "Save as".

You could start with JPG for photos and PNG for images that have fewer colours, like a logo, graphic or PowerPoint slide. Formats like JPG offer different compression quality settings that effects image quality and file size. A lower quality setting will decrease image quality in favour of a smaller file, you should try to find a sweet balance between quality and size.

### Lossy and Lossless compression

Compression algorithms that trade quality for file size are called **lossy compression** algorithms. Alternatively, algorithms that preserve the original image quality are called **lossless compression** algorithms.

## How to optimise images

Once you have your JPG or PNG image, you can optimise it by selecting the right settings for the compression algorithm. Don't worry, you don't need to do this manually: you can use automated optimisation software to find the optimal compression settings for a given image.

### Optimising JPG images

If you use Photoshop you could use its build-in feature **Save for the web** to have a reasonably optimised JPG image.

Alternatively, you can use a command line utility like **jpegoptim**. This tool shrinks JPG files by optimising the internal Huffman tables - effectively improving the compression algorithm's performance. On average you can expect an improvement of 10-15% without the loss of image quality.

Another way to optimise JPG images is to use an online optimiser, like TinyJPG (https://tinyjpg.com) or ImageOptim (https://imageoptim.com/api).

If you use WordPress you could consider using a plugin to do image optimisation for you, like **Imagify** from xtremerain (https://www.xtremerain.com/imagify-advanced-optimization/).

### Optimising PNG images

PNG files can be optimised with Photoshop using the **Save for the web** feature. To optimise your PNG files even better, you can use a specialised app, like ImageAlpha (https://pngmini.com) for Mac or PNGGauntlet (https://pnggauntlet.com) for Windows.

There are online optimisers available for PNG files, like TinyPNG (https://tinypng.com) and Compressor.io (https://compressor.io).

Alternatively you can use command line programs like **optipng**, **pngcrush** or **pngquant**. It's worthwhile to dig into these PNG tools a little deeper.

## Testing optipng vs pngcrush vs pngquant

For my work as web developer I integrate image optimisation in content management systems, making it easier for my customers to have their images optimised automatically. As the number of customers have grown significantly I ran into performance problems.

In order to find more performance I decided to test **optipng**, **pngcrush** and **pngquant**. I hoped to find good image optimisation with less processing power from the server. This would improve performance for my customers.

### PACE-CME

One such customer is PACE-CME, a website (https://pace-cme.org) with resources for cardiovasculair education for physicians. This website contains thousands of PowerPoint slides saved as PNG files.

![Typical slide on pace-cme.org](https://willem.com/global/images/3640b9482061.webp)

To test performance I used a special test image that is bigger and heavier than a typical PowerPoint slide. This test image is a high resolution image with mixed content, consisting partially of photo's, text and solid colours.

![Test image, containing solid colours, photographic and textual content](https://willem.com/global/images/4c08bf11faa4.webp)

### Method

I ran tests on a Quad-core Intel XEON server with 8GB of ram. Per PNG-optimisation tool I used both the most **extreme** settings (to see what it could do to file size), and its **default** setting (to see how much faster the default settings are, and how their output compare to the best compression settings).

### Results

- **original** test image 2897KB

- **optipng** extreme (-o7): 2510KB in 2 minutes 36 seconds / default: 2536KB in 4.9 seconds

- **pngcrush** extreme (-brute): 2510KB in 1 minute 42 seconds / default: 2531KB in 9.2 seconds

- **pngquant** extreme (-s 1): 744KB in 5.2 seconds / default: 746KB in 4.2 seconds

The performance of pngquant is amazing, it is much faster while also delivering much smaller file size. This is no magic however, as it uses a different, lossy compression algorithm. This means that images optimised through pngquant lose a little image quality. I compared them closely and could not notice the difference.

![Inspecting quality: left original, right pngquant](https://willem.com/global/images/19c8b9866186.webp)

## Conclusion

Optimising images for web and performance is really important. As my tests have shown, choosing the right algorithm can make all the difference.

For me this meant choosing pngquant, but your decision may be different depending on the type of images you want to optimise.

The key then to take away from this blog post is to care about images. Your website will be much faster - and who doesn't love a fast website?

---

## Space travelling from El Teide

*Visiting Tenerife's volcano at the Canary Islands* · 2018-08-21 · https://willem.com/en/2018-08-21_space-travelling-from-el-teide/

This summer holiday brought me to Tenerife, part of the Canary Islands, Spain. It's a popular destination because of the climate, but it's also the home of Teide, the world's second highest volcano (7500 m, measured from the sea floor). The incredible views reach way beyond earth, into outer space, the Milky Way and other distant galaxies.

## Tenerife

The Canary Island of Tenerife is known internationally as the "Island of Eternal Spring" (Isla de la Eterna Primavera). At about the same latitude as the Sahara Desert, it enjoys a warm tropical climate with an average around 24 °C. The climate is controlled by tradewinds on the Atlantic Ocean, whose humidity condenses over the northern part of the island, creating clouds. The weather on the island is different on the North and South because of the enormous volcano in the centre.

![Radar image from NASA showing the Teide volcano on the island of Tenerife, Canary Islands, Spain (Wikimedia Commons)](https://willem.com/global/images/5b0460cf6f3a.webp)

The radar image shows the Teide volcano on the island of Tenerife in the Canary islands. The image was created using the Spaceborn Imaging Radar-C/X-Band Synthetic Aperture Radar (SIR-C/X-SAR) onboard the space shuttle Endavour in 1994. The colour indicates differences in terrain, where shades of green and brown indicate lava flows of various ages and roughnesses.

## El Teide

The volcano on the island of Tenerife, El Teide, is the highest in the world next to the Hawaiian Islands. Measured from the ocean floor, its top (Pico del Teide) reaches 7500 meters. Its summit is 3718 meters above sea level. Because of its history of destructive eruptions, the volcano is closely monitored by the United Nations Committee for Disaster Mitigation. Its last eruption was in 1909.

![This detailed astronaut photograph features two stratovolcanoes, Pico de Teide and Pico Viejo (taken from the International Space Station, public domain)](https://willem.com/global/images/e76d65f1a64f.webp)

![The Las Cañadas caldera on top of Teide, as seen from the International Space Station (public domain)](https://willem.com/global/images/17a1a12095c9.webp)

If you look closely, you'll notice that it appears as if the volcano has collapsed: its summit seems to be pushed downwards, surrounded by a "ring" of mountain tops. This is called a "caldera", a large collapse depression usually formed when a large eruption completely empties the magma chambers inside the volcano.

![Teide seen from my iPhone](https://willem.com/global/images/8649c75b21a8.webp)

The volcano and its surroundings comprise the Teide National Park, a World Heritage Site by UNESCO. Its environmental conditions and geological formations are similar to those on Mars.

![My space mobile, a Citroën C1 rental car... ](https://willem.com/global/images/3f298ca1e260.webp)

The Teide national park is open for public and accessible by road. Along the way you're in for some fantastic views.

![Twisty roads to the top of Teide, with remarkable geological formations visible](https://willem.com/global/images/a6dd1f618352.webp)

![Landscape inside the Las Cañadas caldera is similar to Mars](https://willem.com/global/images/6016357e2181.webp)

The landscape is unlike anything I have seen before. Because of the similarities with Mars, Las Cañadas is used by space agencies to test planetary rovers.

![ESA's fast-moving Heavy Duty Planetary Rover (HDPR) at Teide (credit: ESA)](https://willem.com/global/images/a87b2b140d48.webp)

![Shadow of a Martian... of sorts :-)](https://willem.com/global/images/2520d636df37.webp)

![Some rocks are unbelievable in size and shape](https://willem.com/global/images/4aafbda36361.webp)

![Pico del Teide as seen from the south of the caldera](https://willem.com/global/images/8dda8fbe04f4.webp)

![The El Chinyero vent on the Santiago Ridge, still black from the 1909 eruption](https://willem.com/global/images/be21b9bf796b.webp)

![Panorama in the Las Cañadas caldera](https://willem.com/global/images/3349da68ef9b.webp)

There are four main roads to and from the caldera, each one offering different scenes. From dense woods to bare rocks, from heavy fog to clear skies. You should explore them all!

![On top of the Los Gigantes massive, with the La Gomera island on the horizon](https://willem.com/global/images/ea423501807b.webp)

![The Los Gigantes are really unbelievable in their dimensions, you'll feel like a tiny human on the twisty roads.](https://willem.com/global/images/e143d3cd4b00.webp)

![Driving above the clouds](https://willem.com/global/images/051ec2969047.webp)

If the extra terrestial landscape isn't enough, driving above the clouds really makes you realise this ain't your typical commute. The contrast with the top of Teide is amazing when you go under the clouds. There the landscape is green, full of life and vegetation.

![Under the clouds the landscape is green, full of life](https://willem.com/global/images/288afd9ef72f.webp)

![El Palmar in the valley between Monte del Agua and the Teno mountains](https://willem.com/global/images/7c55d105d1fe.webp)

If you follow the Masca hiking trail - which is a dangerous walk - you'll be able to go down, all the way to sea level. If you don't feel like mountaineering,  you can reach this phenomenal swimming place by boat, spotting whales along the way.

![Swimming in the Atlantic Ocean, down at Los Gigantes](https://willem.com/global/images/79b715597a23.webp)

But, be careful where you decide to take a plunge into the ocean! At the north side of the island there are strong currents, highly dangerous for swimmers.

![Rescue helicopter lifting persons out of the ocean, notice the volcanic black beach](https://willem.com/global/images/837fd42b8ba9.webp)

## Space

Because of the good astronomical seeing conditions on the top of the volcano, Teide is used to look at the stars. Ever since 1964, it's home to the Teide Observatory (Observatorio del Teide). It became one of the first major international observatories with telescopes from different countries. Its quite the view, this "telescope street".

![Teide Observatory with telescopes from different countries at 2390 meters altitude](https://willem.com/global/images/c61d626935e1.webp)

Astronomical observatories are generally situated on top of mountains, as the ground air is usually more convective (turbulent because of the temperature). Stable air from high above the clouds and oceans generally provides the best seeing conditions. It's also very dark during the nights at Teide, because it's located in the middle of the ocean (limiting light pollution from big cities).

You should really try it yourself, visit Teide at night. The sky is really unbelievable: I have never seen so many stars! You don't need a telescope or special glasses, just look with your bare eyes. Most stars and galaxies can be seen before the moon rises.  Take your time and you'll notice even more detail.

![Me and the Milky Way (photo by Ellen Middelkoop)](https://willem.com/global/images/679e223ac695.webp)

This stunning photo was taken by wife Ellen (http://elll.nl) using a professional camera. It very much reflects how the sky actually is during the night at Teide - this is no Photoshop!  See the Milky Way light up the sky like a subtle cloud. Billions of stars in one view. Never ever have I seen something like this before, it is truly magnificent.

## Conclusion

You don't have to wait for Elon Musk to complete his Mars rocket to see outer space. Visit Tenerife and be amazed by the extra terrestrial views.

![Relaxing in the pool](https://willem.com/global/images/9c4031f45acd.webp)

After all your stargazing and space travelling, you should relax and enjoy the sunny weather from the swimming pool. Happy holidays, everybody!

---

## Google Analytics vs AWStats

*Understanding web traffic statistics software* · 2018-08-20 · https://willem.com/en/2018-08-20_google-analytics-vs-awstats/

This month I have been working on website statistics, tracking traffic using different technologies. Some of my customers use Google Analytics, others use AWStats, and some use both. Which is better is often debated, but few people really understand the differences. Time to shed some light on the magic of web statistics.

## Comparing AWStats with Google Analytics

You might expect that both web analytics programs would report the same amount of website traffic, but this is not the case. I'll try to explain why reports from Analytics and AWStats differ (and why I think it doesn't really matter).

![Google Analytics and AWStats - web traffic statistics software](https://willem.com/global/images/5395a5372a16.webp)

## Google Analytics

As part of the Google Marketing Platform, Google Analytics is one of the most widely used web traffic analytics programs available. Google launched the service in 2005 after acquiring multiple software companies specialised in analytics, most notably Urchin and Adaptive Path.

### How Google Analytics works

Google Analytics works by placing a small piece of programming code on your website (or inside your app). This initiates the tracking and profiling used by Google to generate web statistics. The code makes your internet device connect to the servers from Google - which then count all these connections to generate usage statistics.

### Google Analytics availability

Google offers Analytics without charge: when you use Google Analytics you agree to share your traffic data with Google. This allows Google to combine Analytics data from different websites to create accurate profiles of people surfing the web. While these profiles are great to deliver personalised ads, they are also reason for privacy concern. Google Analytics is used on websites, inside apps and games.

## AWStats

Originally created by Frenchman, Laurent_Destailleur (https://www.destailleur.fr) in 2000, AWStats is a widely used server program that analyses web server log files. The name AWStats is an abbreviation for "Advanced Web Statistics".

### How AWStats works

The web server log contains the complete record of website traffic. Inside the log file, individual connections between the web server and the internet device (phone, computer, tablet) are registered. After analysing this activity record, AWStats provides detailed insights in web traffic.

### AWStats availability

Everybody can use AWStats as it is available as free software, including its source code. Earlier, I wrote about helping_people_with_free_software (https://willem.com/en/2018-07-20_helping-people-with-free-software/), explaining the benefits of free software (it's not just money). AWStats must have access to the server log files, which is often done by installing AWStats on the server itself. Because of this, AWStats has a limited scope. It is not able to track individual users across different websites. AWStats is used for web, mail, streaming and file servers.

## Difference: unit of measurement

Probably the most important difference between the systems is the unit of measurement. Google Analytics mainly works with "Sessions" while AWStats uses (unique)visits:

- **Google Analytics session**: a series of page views from the same browser on a website with no longer than 30 minutes between clicks, except at midnight. See explanation_from_Google (https://support.google.com/analytics/answer/2731565). 

- **AWStats (unique)visit**: a (unique) IP-address accessing a series of pages on a web server within one hour. If the series spans beyond the hour, the visit is counted as two. See explanation_in_the_AWStats_docs (https://www.awstats.org/docs/awstats_glossary.html).

## Difference: where data is collected

In addition to the unit of measurement, the place where data is collected is different, too. AWStats uses the web server as place to measure. Quite literally the software tallies how often the server receives a request to deliver a specific page. The server responds to human visitors, but also to automated requests.

### Bots

These automated requests are done by bots, computer programs that automatically surf the web. Often these bots have a specific task, like indexing a website for search engine listing. Most bots are identified by their originating IP-address or so-called UserAgent (a sort of identification text which states the origin of the bot; like "GoogleBot"). Most bots are not included in AWStats visits, but are specified in a separate listing.

![Robots surfing the web: bot traffic listed by AWStats](https://willem.com/global/images/7689fca9d1b9.webp)

### Bad bots

Unfortunately not all bots behave nicely. Some of them are working for hackers to find potential security weaknesses. Others, like some search engine indexation robots, behave like humans to test if the website shows the same page to both humans and bots. Serving different content based on user agent is a bad practice used by stupid websites to manipulate search engine ranking.

### Recognising bots

AWStats tries to recognise bot behaviour by taking into account the sequence and speed of page requests (like a normal, healthy human, should not be able to read more than two pages per second). But, this cannot prevent some bots to successfully disguise themselves as human, causing AWStats to count them along.

![Part of a web server log file, each line corresponds with a page request - do you see the bot?](https://willem.com/global/images/d6ce3879461c.webp)

### JavaScript

Instead of running software on the server like AWStats, Google Analytics works by executing code (JavaScript) on the device of the visitor. Depending on how the Analtyics JavaScript is integrated, the measurement is often delayed because it takes some time to load JavaScript. Sometimes it only starts after the entire page (including images and fonts) has completely finished loading. People that leave the page before it is entirely loaded, or people that have JavaScript disabled, are therefore not measured. Because Google Analytics requires JavaScript, most bots are not measured because it is hard for bots to simulate a JavaScript enabled browser.

![Typical piece of Google Analtyics JavaScript code - you can clearly see it referring to Google's servers ](https://willem.com/global/images/9fe21c623fcc.webp)

### Blocking Google Analytics

Because of the privacy concerns with regard to Google Analytics, some people actively block the JavaScript used by Google Analytics. There are browser plugins and ad blockers that do this automatically, without requiring any technical knowledge of the user. Another clever web developer used a purpose built server setup to find out how many people block Google Analytics. In his experiment, Jason_Packer (https://www.quantable.com/analytics/how-many-users-block-google-analytics/) found that about 8-11% of the users are blocking Google Analytics.

![Percentage of people blocking Google Analytics (2016), quantable.com - Jason Packer](https://willem.com/global/images/a28ca2b50443.webp)

## Conclusion

Both the unit of measurement and the place where the measurement is performed cause the differences in statistics by Google Analytics and AWStats. Bots included, AWStats counts too much, while Google Analytics counts to little because of problems with JavaScript loading and blocking.

But in the end it doesn't really matter as you should use these statistic programs mainly to analyse relative performance. Consistent inaccuracies in absolute numbers do not really influence answers to questions like these:

- Is my website doing better than yesterday, last month or last year?

- What page, blog post or webshop product is most popular? 

- Is average traffic increasing? Is my advertising campaign having any effect?

If you really want to know *who* is visiting your website, you should really consider asking the visitor to identify him or herself. That is way more accurate (and polite!) than relying on Google Analytics or AWStats to identify unique persons. That way you don't have to worry about people having multiple devices and accessing your website from different locations like work, home or on the go (train, bus).

Use statistics software to track relative performance, but consider getting to know your visitor by connecting to them instead of collecting data from them. Build relationships instead of data profiles. That's where the value is.

---

## Helping people with free software

*Installing Debian GNU/Linux on an old laptop* · 2018-07-20 · https://willem.com/en/2018-07-20_helping-people-with-free-software/

This week a man brought his laptop to the community centre where I help people with computer problems as volunteer. The old laptop wouldn't start anymore and had to be reinstalled. Instead of Windows, I installed a free operating system. I think it is important to tell you how and why I did it.

Every Monday I help people in the local community centre in Amsterdam-Zuidoost. I_do_this_work_as_volunteer (https://willem.com/en/2016-11-21_being-a-volunteer-in-amsterdam-zuidoost/) for some years now and you never quite know what and who will show up. This week turned out to be a surprise...

![Laptop as it arrived at the community center ](https://willem.com/global/images/62905284bcaf.webp)

A man brought his computer hoping that I would be able to make it work again. The HP Mini laptop prompted an error message when it was powered on: "boot device not found".

![Boot device not found - that's not good](https://willem.com/global/images/fb23e6aea1ef.webp)

Usually this error message is an indicator of either hardware failure (broken part) or data corruption (virus, damaged filesystem, etc). But as I would find out... not quite this time!

The man told me that he visited a professional computer repair shop when he experienced trouble with his machine. They told him that the broken computer could best be replaced by a new one as repairing was impractical. They just happened to have a suitable replacement in stock, which they conveniently offered. He declined and kept his broken computer until he learned about me, offering help with computer problems in the local community centre.

## The missing boot drive

After a quick inspection where I tried to boot the computer, run some diagnostics (through the BIOS), I was unable to get any signal from the harddisk. I joked that maybe some evil leprechaun stole the drive...

![The error message was right, quite literally: the boot device is missing!](https://willem.com/global/images/6d8226136f31.webp)

Imagine my surprise when I saw that the disk was indeed gone, removed from the computer! The man now understood why his computer wouldn't start anymore.

The man assured me that either he had not removed it himself and the repair shop had not given him his disk separately. Somebody took it, for sure, and frustratingly I can only suspect who (there is no proof).

## Repairing the laptop

To fix the laptop, I had to install a new harddisk. Although this computer isn't new anymore, I deemed it still worthy of an attempt as I hate it when things get replaced_for_stupid_reasons (https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/).

![Replacement disk](https://willem.com/global/images/654cf1d89414.webp)

Fortunately I had a spare disk lying around. It has been collecting dust-bunnies in storage ever since I upgraded to a larger disk. If figured this 160GB 7200RPM SATA drive was exactly the right part for the unfortunate laptop. I was happy to offer him this disk without charge.

Fitting a harddisk is usually not too difficult, but hardware makers tend to cut costs on everything these days: hindering repairability. Needless to say, I am not a huge fan of the "modern means" of construction... glue and sticky tape!

![Installing the disk in the laptop](https://willem.com/global/images/df5c3cfc5c8a.webp)

After carefully re-applying the tape, the replacement harddisk was installed without any more difficulty. The computer was ready to be reinstalled as the original operating Windows 7 Starter, had disappeared with the original disk.

![Replacement disk tucked way inside the laptop](https://willem.com/global/images/3c2501280fb6.webp)

## Choosing free software

For the man's laptop I wanted an operating system that would work well. But most of all, I wanted an operating system that would not try to sell this man anything.

During my years as volunteer, I have seen software do this. Like anti virus software urging you to upgrade your subscription, scaring you with the prospects of doom and disaster in case you don't. I had to comfort people more than once, ensuring them their computer was fine (despite these messages!). Or, a perfectly fine computer, urging you to upgrade the operating system to Windows 10.

People get confused between critical security updates (that are important) and commercial upgrades (that mostly serve the software manufacturer). For the laptop I choose an operating system that serves the man - not a company seeking profit. This type of software is called "free software".

Free software does not try to control, commercialise or manipulate the user. Often it is free as in "free beer", but more principally the "free" in "free software" refers to the freedom the user experiences in working with his or her computer.

## Choosing a free operating system

Most folks buy their computer with an operating system already installed. For many PC's that is Windows and for Apple computers it's macOS. Few people realise that there are alternative operating systems available, including those that are free.

### What is an operating system?

An operating system is the crucial software for starting to use a computer. With an operating system, one can do many things, without one, the computer cannot run at all. An operating system consists of many programs, including applications, libraries, developer tools and games.

### GNU operating system

Back in 1984 the development of a free operating system started, GNU.  It was designed to run Unix programs (a widely used operating system at that time), but because of its focus on software freedom it was not the same as Unix. Following hacker tradition the name "GNU" is a recursive acronym for "GNU's not Unix". By 1990 the GNU system was almost complete; the only major missing component was the kernel.

### What is a kernel?

The kernel is a computer program that controls the computers resources, like memory, storage and other hardware. It makes these resources available to other programs that you run. Because of this, the kernel is an essential part of the operating system.

### Linux kernel

In early nineties the Linux kernel was developed and not much later it was made available as free software. With the availability of a free kernel, people could now make a complete free system: a GNU operating system with a Linux kernel.

### Distributions

Today there are many different variants of the GNU/Linux system, often called a distribution. Popular distributions are Ubuntu, Fedora, Redhat, Suse and Debian. A common mistake is to call the entire system "Linux", as the complete system is much more than just the kernel. It's better to specify the name, like "Debian GNU/Linux", meaning its the Debian version of GNU with a Linux kernel.

![GNU/Linux distributions](https://willem.com/global/images/739e2cc6f10a.webp)

### Differences between distributions

Mostly these distributions differ in the way they are organised and prioritised. Sometimes a distribution is maintained by a company (like Redhat, or Ubuntu's Canonical), and sometimes it's a group of people working together sharing a common value. These values can be anything from extreme software customisability (like Gentoo) to more principal things, like who owns and controls the software?

### Debian GNU/Linux

The Debian GNU/Linux distribution is among the oldest distributions available. It is special because its maintainers have ratified a social contract, a document providing guarantees that Debian is open and free.

In theory this would be great and fantastic. But then, why doesn't everybody use free software? That is because software has to work on hardware, and very often, hardware vendors keep the inner workings of their chips to themselves. This makes it hard to develop free software that drives the hardware.

These troubles with hardware drivers can make it difficult to get free software working on your computer.

## Installing Debian GNU/Linux

I decided to install Debian on the man's laptop. I used another computer to download the installation files from https://debian.org. You must create an installation medium, like a bootable USB-drive, to get these installation files to the target computer.

![Downloading Debian](https://willem.com/global/images/2e2c4b0d73bd.webp)

On another laptop I used some terminal commands to create the bootable USB-drive. If you're on Windows or Mac you can use other tools to get this job done (like Disk Utilities or unetbootin).

![Creating bootable USB-drive for installation](https://willem.com/global/images/7835cc6a90ea.webp)

Then you plug the USB-drive in the computer and power it on. You may need to access the BIOS to enable booting the computer from the USB-drive. In the case of this laptop I had to press F9 to select the USB-drive as boot disk.

The Debian installation procedure is best described as a series of steps that involve answering questions with regard to the installation. Like choosing the language, timezone and preferred internet connection.

![Installing Debian involves answering questions like the desired language](https://willem.com/global/images/f8e252e8203a.webp)

This is where trouble started: the laptop has a WiFi chip that has no free software driver. This caused the Debian installer to prompt for me supplying a non-free software driver. Installation could not complete as it needs to download additional installation files.

These non-free software drivers are sometimes provided by the hardware vendors. Debian has a "non-free" repository where they keep track of software drivers that do work (but are not considered "free" as in ultimate freedom). It's a tradeoff that is sometimes hard to escape if you need to get a certain piece of hardware working.

Instead of fiddling with non-free drivers during installation, I used a piece of hardware that has perfectly working free software drivers. This "Alfa One" USB WiFi adapter is not the fastest wireless internet adapter, but it does pretty much always work. Alternatively you could try a wired ethernet connection or try to include the correct non-free drivers on the installation medium.

![Alfa One 802.11b WiFi adapter is recognised by the Debian installer](https://willem.com/global/images/f377dfeda300.webp)

This will enable you to perform the installation. After installing the operating system you can start it. From there, I installed the missing WiFi drivers using some terminal commands. You can find lots of information and instructions on the Debian_wiki (https://wiki.debian.org/WiFi).

## Conclusion

It took some effort but the laptop works again, this time using free software. It may take some time for the man to get used to the new software, but I am sure that he'll find his way. He is always welcome for assistance in the local community centre. This ain't first the person I helped with free software. Others preceded this man and now regularly drop by. Funny thing is that once you've got them working, these "free software laptops" appear to be more trouble free then their Windows counterparts!

![The laptop is working again, this time thanks to (mostly) free software](https://willem.com/global/images/c9ba52061281.webp)

It's my experience that people can really enjoy free software on their computer. It is especially nice that this software does not try to trick the user into buying unnecessary updates, upgrades and subscriptions. As a software developer myself, I am not against spending money on software. Programmers need to be paid as they have families to support. But for me, this can never justify tricking or scaring users. That means that whenever I work on non-free software, there is this one thing that I keep in mind: **have some respect for the user!**

## Need help, too?

If you want to give free software a try, I can help you with installing and using it. You're welcome at the local community centers in Amsterdam:

- Buurtwerkkamer Samen Sterk, Bijlmer Oost (Gravestein 3, Amsterdam) on Monday from 10:00-12:00hrs

- Buurtwerkkamer Multibron (Albert Camuslaan 103A, Amsterdam) on Monday from 13:00-15:00hrs

---

## Enjoy a festival without alcohol

*Alcohol-free beer at Rock Werchter* · 2018-07-10 · https://willem.com/en/2018-07-10_enjoy-a-festival-without-alcohol/

Last weekend me and my brother went to Rock Werchter, a multi-day, music festival in Belgium. Over 140 thousand visitors enjoy world famous artists like Pearl Jam, Nick Cave, Artic Monkeys, Noel Gallagher, The Killers and the Queens of the Stone Age. This year I didn't drink alcohol during the festival, leading to some interesting observations...

## Rock Werchter

Since its start in 1974, the Rock Werchter music festival has evolved into one of the largest, award winning, European music festivals. Thousands of people visit the Belgian festival and many of them stay for the weekend on one of the many nearby campings.

![Rock Werchter, main stage](https://willem.com/global/images/d8746f334670.webp)

## Alcohol-Free

After analysing my health and fitness using Apple_Watch (https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/) and Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/), I learned what effects alcohol has on your body. As little as a few drinks have effect on your heart rate, heart rate variability (HRV, an indicator of your fitness), respiratory rate and quality of sleep. Because of this, I have stopped drinking entirely and I now feel_incredibly_fit (https://willem.com/en/2018-05-17_listen-to-your-body/).

Alcohol on festivals is very common, many people get (seriously) drunk. If you don't use alcohol, your drinking options are often limited to water, soda drinks, coffee and tea.

Since swapping to an alcohol-free version of my usual tipple, I have come to appreciate different kinds of 0.0% beer, I really hoped that it would be available at the festival. So, I sent the organisation an email, asking them for alcohol-free beer...

![Message from Rock Werchter about alcohol-free beer](https://willem.com/global/images/8af0b6f39456.webp)

To my great surprise, I received word from Rock Werchter, informing me that alcohol-free beer would be available at most bars during the festival. Awesome!

![Freshly drafted Jupiler 0.0% beer on Rock Werchter](https://willem.com/global/images/617a44289daa.webp)

Once I arrived at the festival, I learned that the alcohol-free beer was on draft. It's been more than six months ago since I had my last (alcoholic) draft beer. Preferring it over any bottled beer, I was very pleased. Belgians and their beer.. it's almost a religion - and I am very glad so!

During the festival they organised tasting contests in the crowd. Judging by the surprised faces of the "drinking experts", many could not identify the alcohol-free beer from the regular one in a blind test. It's really good, especially if you give it a real chance.

## What's it like, an alcohol-free festival?

With years of festival experience, with alcohol, I was anxious about going alcohol-free. Would I enjoy Rock Werchter without alcohol? Would it still be fun? Wouldn't it be boring?

It's different, totally different. You experience it much more consciously - and remember it better. It's a music festival, and if you like music you'll notice much more details during the live performances. Especially the headliners later on the evening, where you would normally be intoxicated after a day of drinking.

![Queens of the Stone Age at Rock Werchter 2018](https://willem.com/global/images/59fb97488ff9.webp)

It feels like switching to an "HD" version of the festival, after years of (what now seems) lousy analog signal. Instead of loosing out due to a lack of alcohol, I felt much more into it.

![You can look just as crazy as before - without alcohol](https://willem.com/global/images/202f071a75a1.webp)

There are more benefits, like being able to sleep better during the night, remembering more, waking up fresh and ready for more music on the next day. Or maintaining sharp vision, allowing you to pick up (many!) consumption tokens that intoxicated people loose from their pockets near the bars.

![A guy with a lot of trash, spontaneous art in the crowd](https://willem.com/global/images/1cb457b6572c.webp)

You'll notice plenty of entertainment besides the music... intoxicated people do crazy, creative and comical things. It's fun, real fun.

![The Brewery at Rock Werchter, home of Jupiler 0.0%](https://willem.com/global/images/9c5af6ee3509.webp)

## Conclusion

More than ever, I enjoyed the music festival at Werchter this year. Fantastic performances, lovely weather, friendly people and - thanks to no alcohol - lasting memories.

I hope that alcohol-free beer will find a permanent home at festivals. It's a great addition to the bar and it fuels an alternative way to enjoy music. Alcohol-free awesomeness, delivered by Rock Werchter.

![See you next time, Werchter.](https://willem.com/global/images/373823664f04.webp)

---

## Removing paint from a bike frame

*Uncover the aluminium with chemicals and sanding paper* · 2018-06-09 · https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/

There is beauty in raw, unfinished material that is often hidden with superfluous layers of paint. I like things to be true to the nature of the material. My bike was painted black - not bad - but I wondered what it really looked like from a material point of view.

![Bike painted black before the treatment](https://willem.com/global/images/bb4b446ef48a.webp)

My bike is made from aluminium. That's a lightweight alloy that is resistant to corrosion. Well, technically it still corrodes; but during corrosion it forms a tiny layer of aluminium oxide that protects the material from corroding further (unlike iron that can rust away completely).

## Warning

Obviously you'll void any warranty if you attempt anything like what I have done to my bike. It's irreversible, and you have a real chance to permanently damage your bike. Some of the chemicals I used are highly dangerous. Take all the necessary safety precautions. If you like the pure aluminium look, it's much safer and easier to buy an unpainted bike rather than to remove paint yourself.

![Safety label on the bottle of dichloromethane: danger, danger, danger!](https://willem.com/global/images/b66ff8ea8a20.webp)

## Testing the chemical

Before going in "all the way", I tested if the paint could be removed on a small spot on my bike. I used dichloromethane which is no longer allowed to be sold in regular shops - but using "the amazing internets", you'll probably be able to find it.

![Testing the chemical solution to remove paint from my front fork - it works!](https://willem.com/global/images/193060b8f2d7.webp)

## Keeping it wet

The problem with the paint removing chemical is that it evaporates quickly. To extend its working time you can "catch it" with some paper and a plastic bag. The painted surface will stay wet for a longer period of time, reducing the amount of chemical fluid you need to use.

![Front fork wrapped in plastic bag](https://willem.com/global/images/5116ed7d38ca.webp)

After about 15 minutes you can uncover the material to check if the paint is letting go. You can clearly see flocks of paint literally falling of the frame:

![Flocks of paint falling of my bike frame, uncovering the raw aluminium](https://willem.com/global/images/93fa591e6967.webp)

One thing I noticed directly is how badly the frame was sanded before painting. Uncovering the paint revealed the original finish of the material - including numerous scratches and rough finishing. I guess the frame builder never expected anybody to see...

![One part of the front fork uncovered, the other still painted black](https://willem.com/global/images/08f011476a22.webp)

## Testing the look

I first completed the front fork before moving on to the rest of the frame. This way I could still decide to go back to the original black look - I would only have to replace or restore the front fork.

![Front wheel fitted to the raw aluminium fork](https://willem.com/global/images/eb38f7a42b08.webp)

## The frame

Being satisfied with the new looks, I moved on to the frame. That is a lot of work, moving piece by piece at a time.

![You know something is going on when chemical crystals are forming on your bike frame... ](https://willem.com/global/images/bc8c02a1fc0c.webp)

![Working my way through the entire bike frame](https://willem.com/global/images/b901f15978b8.webp)

## Finishing touch

Once you have removed most of the paint from the frame, you'll end up with parts of paint that keep stuck to the frame. I noticed this around aluminium welds.

Upon closer inspection, I noticed that the frame builder used some kind of filler to smoothen the welds. I used sanding paper to remove the filler.

![Sanding my way through layers of unwanted paint and filler](https://willem.com/global/images/7c925728a8d9.webp)

You can achieve different kind of aluminium finishes by using different kinds of sanding paper and brushes. I experimented with different kinds of paper and settled with a matte, raw, aluminium finish. Although you can perfectly polish the frame to become very shiny - I simply prefer the "Apple MacBook" kind of finish. It's a personal choice that you can perfectly make (and change) during the process.

## Conclusion

After uncovering the raw aluminium I ended up with a different kind of bike. While it's still the same machine, it - quite literally - feels different.

![Aluminium bike](https://willem.com/global/images/0ad611cae6d0.webp)

The frame feels colder due to the direct contact with the metal. As a bonus you'll learn to disassemble and reassemble all the parts of your bike.

![Schindelhauer steer mounted on my aluminium bike](https://willem.com/global/images/84f1a1206998.webp)

I am very happy with the results, but next time I definitely would consider buying an unpainted bike instead, like the ones from Schindelhauer (https://www.schindelhauerbikes.com/). Happy riding!

---

## Creating a minimal iPhone stand

*Routing oak wood for a custom fit* · 2018-06-02 · https://willem.com/en/2018-06-02_creating-a-minimal-iphone-stand/

Today I created a minimal iPhone stand from oak wood. While it's much faster to buy one online, I wanted one to fit my phone horizontally, with its case on. I like minimal design, so I opted to machine a single piece of wood to get it done.

![Workmate with wood router ready for action](https://willem.com/global/images/b735cbf230a7.webp)

## Need for an horizontal stand

I use my smartphone in combination with a bluetooth keyboard to get serious work done  using just my phone (writing, server management over SSH, even programming using VIM). The keyboard is really great, but the combination keyboard+smartphone is even better with a decent stand (for a better angle).

I use most apps in horizontal or landscape mode. The stand must allow the phone to be picked up easily (to change display orientation, take photos or walk away). Although I use a very common iPhone X, I do use a case that is slightly thicker than most: it doubles_as_wallet (https://willem.com/en/2016-07-15_cash-is-king-or-is-it/).

Preferably I wanted a minimal stand, made from one single piece, with no moving parts - but as compact as possible for easy transport (on my bike, the train, plane, etc). I like "raw materials", preferably without paint or lacquer.

## Prototyping

The software engineer in me decided it was a good idea to develop a prototype using spruce wood. This is a very light type of wood that is easy to machine. I picked up some leftover wood from the local do-it-yourself store and determined the right size and profile for my phone to fit.

![Prototype from spruce wood to determine the routing profile](https://willem.com/global/images/f67f48225198.webp)

Because my smartphone with its case is slightly thicker, I needed a wider profile to arrange a secure fit. The "stair like" side in the profile allows the phone to fit with a nice angle. Finding the right profile was a matter of trial and error, making minor adjustments to improve fit and angle.

## Final version from oak

Once I was satisfied with the prototype, it was time for the final version. For this I selected a different kind of wood: oak. This is much harder, heavier and therefore durable. Its more difficult to machine, but having learned from my prototype I could skip testing and go straight to the right fit.

![Raw piece of oak wood - right before machining](https://willem.com/global/images/5a2a6495bfdb.webp)

To give the stand a friendly and high-end feel, I used a special router piece for rounding the edges.

![Rounding edges of the piece of wood](https://willem.com/global/images/b08b37e5d025.webp)

Just like the outer edges, I machined the inner ridge with an inverted round routing piece for better looks (and softer feel to the fingers).

![Aligning the wood router](https://willem.com/global/images/52659631e1d4.webp)

During my work on the final version I regularly checked the prototype to ensure a proper fit.

![Comparing routing profile of prototype with final version](https://willem.com/global/images/c9b8be47b949.webp)

After completing the wood routing I tested the final version. Although both versions where functionally the same, they feel different. It's amazing how much of a difference the kind of wood makes in feel; the oak feels like it will outlast the phone like a thousand times.

![The smartphone case fits perfectly](https://willem.com/global/images/e3e653e62c16.webp)

## Finishing touch

Using fine grained sanding paper I finished the surface of the wood. I went from paper 80 all the way up to grain size 400. Its really surprising how silky smooth the wood becomes.

![Silky smooth surface after sanding](https://willem.com/global/images/193b1c1d97c0.webp)

![The wood nerves provide a natural pattern on the stand](https://willem.com/global/images/fafb4fcf0ac2.webp)

## Conclusion

After some hours of wood working fun, I got myself a perfect fitting wooden iPhone stand.

![The stand is very stable](https://willem.com/global/images/5ee83381e7ef.webp)

![The angle is right for easy touch screen access](https://willem.com/global/images/f214bf8d532f.webp)

![The touch screen is fully accessible, the front ridge is slightly recessed to allow "swipe up" gestures  ](https://willem.com/global/images/16164cb891ec.webp)

Although its much faster to buy a stand, there is something strangely rewarding in doing it yourself. You learn to machine and to handle raw materials. You never know when these skills become handy in the future!

---

## Listen to your body

*Why I stopped using health and fitness sensors* · 2018-05-17 · https://willem.com/en/2018-05-17_listen-to-your-body/

A good customer of mine was once a physiotherapist, he told me about people asking him to "feel their muscles" to tell them how they where doing. "Crazy!" he told me: "I can never feel better than the people themselves, if they only would listen to their body". This caused me to question the health and fitness sensors I use.

## Why the data?

Three years ago I was shocked by the news of another customer of mine that nearly died because of something suddenly going wrong inside his body. I don't know exactly what happened, but it struck me: health is a feeble thing and this father of three triggered me to consider my own health.

Back then, my car and moped were my best friends. I didn't do sport and consumed anything as I pleased. Living the good life, so I thought.

![Explosive little Vespa - the moped that made me start cycling](https://willem.com/global/images/2065af7aa361.webp)

Then - in a weird coincidence - the engine of my moped blew up. This big_bang_caused_me_to_use_a_bike_for_commuting_to_work (https://willem.com/en/2016-09-03_batavus-champion-bike-from-1978/). In the beginning the 16 kilometres to work felt like cycling the "Tour de France": my body was in bad shape.

Weeks went by and I felt better. I used Strava_and_Garmin_to_keep_track_of_my_performance (https://willem.com/en/2016-12-31_one-year-of-cycling/). Out of my curiosity_for_watches (https://willem.com/en/watches-and-time-a-decade-of-horology-technology-and-craft/) I got an Apple Watch that made me aware of my heart rate during the day and sleep patterns at night.

Add a smart scale, blood pressure meter, thermometer and before you know it, you've got a big data thing going on :-)

![My collection of health and fitness sensors ](https://willem.com/global/images/aef67106a5da.webp)

## Learning from the data

Using Apple Healthkit and Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) I combined all the data. Visualising progress and finding correlations between measurements. I learned what effect my behaviour has with regard to:

- **weight: ** within 12 months after I started cycling I lost as much as 15 kilos. When I stopped using alcohol entirely, just six months ago, I lost another 10 kilos. The result is dramatic: from 110KG in 2015, to 85KG today. 

- **heart: ** exercising regularly on my bike caused my heart rates to be much lower. When I push for maximum performance it follows the intensity level much more closely: returning to normal quickly after workout. Resting rates at night down from an average of 70BPM in January 2016, to ± 50BPM last night! 

- **sleep: ** I am now able to wake up without an alarm clock because I understand when (and why) it's time to go to bed. I also found out that the occasional nap during the day can have incredible positive effects. 7 hours of sleep a day seems to be perfect for me. 

- **alcohol: ** drinking beer was one of my greatest hobbies until I saw the data!  After a good night out, my heart rate went up as much as 40%! Sometimes it took days for measurements to return to normal. 

- **blood pressure: ** When I started measuring blood pressure about six months ago, it was pretty high: 141/92mmHg. I stopped using alcohol and I no longer add (additional) salt to my food. In just six months my blood pressure went down, I now regularly measure as low as 115/75mmHg!

![Resting heart rate no longer has any red spikes - relatively stable since I stopped drinking beer](https://willem.com/global/images/ca85055247e0.webp)

![Nocturnal HRV trend, an indicator how fit you are, has stabilised, too](https://willem.com/global/images/3e905eab9ea7.webp)

My measurements are stable and predictable now. Funny thing is that I can now accurately guess my heart rate based on how I feel within ±5 BPM. This brings me back to what my physiotherapist customer told me: "People are born with all the sensors they need"

## Nervous system

The nervous system derives its name from nerves, which are cylindrical bundles of fibers that go from the brain and spinal cord, branching into every part of the body.

![The nervous system (image from Wikimedia)](https://willem.com/global/images/993c55672fa3.webp)

Your nervous system is a vast network inside your body that allows signals be send from one part of your body to others. It's fast (100 meters per second!) and precise (up to individual cell level). It allows you to feel how your body is doing, much more detailed than a bunch of bluetooth sensors can capture.

## Conclusion

If you understand how you feel, then you don't need biometric sensors or fitness wearables. But, to gain that understanding they can be incredibly helpful.

I used data as quantifiable proof of progress. Measuring improvements in fitness and well being. They are means to an end.

Now I feel better then ever, I stopped using the health and fitness sensors and simply trust my feeling. I may pick them up one day to "calibrate my feeling", but for now I have disconnected them. I learned to listen to my body!

![For sure I will need some time to get used to not wearing sensors... note the white stripe on my wrist :-)](https://willem.com/global/images/7862fafde873.webp)

---

## Lunch by plane

*Flying from Hilversum to Texel in a Tecnam P2002JF* · 2018-05-09 · https://willem.com/en/2018-05-09_lunch-by-plane/

This week I was invited to fly along over the Netherlands in a small aircraft, from Hilversum to Texel. A good buddy of mine is a pilot and planned to fly to the Texel island for lunch (and good fun!). The weather was excellent, so packed with my photo camera, I didn't hesitate for a moment to join him for lunch!

## Private Pilot and Vliegschool Hilversum

My buddy Tim learned to fly and is the holder of a private pilot license (PPL). He is allowed to fly aeroplanes and knows his way around radio communication, navigation and landing and takeoff procedures.

![Willem and Tim](https://willem.com/global/images/c945de91c7cf.webp)

He joined private pilot school "Vliegschool_Hilversum" (https://www.vliegschool-hilversum.nl) to maintain his pilot skills and to share his passion for flying with like minded people. These men and women are genuinely very friendly (and funny) while also being very serious about safety, conditions, procedures and aircraft maintenance. Through them we where able to get a plane for our lunch trip over Holland.

![Vliegschool Hilversum](https://willem.com/global/images/c3107c3d0895.webp)

## Tecnam P2002JF

It's a small plane with two seats, one for the pilot and one for a passenger. It's build from aluminium and it's powered by a single engine that's directly connected to a propellor.

![Tecnam P2002JF - PH-TCM](https://willem.com/global/images/49705055d856.webp)

## Tecnam P2002JF Specifications

- length 6,6 meters (21 feet)

- wingspan 9 meters (29 feet)

- height 2,3 meters (7 feet, 6 inch)

- wing area 11,5 m² (124 feet ²)

- empty weight 331KG

- maximum takeoff weight 600KG 

- engine 1x Rotax 912 S2 engine with 100 HP (75KW) at 5800RPM 

- propellor diameter 1,6 meters (5 feet, 3 inch)

- costs ± € 150K

- made in Italy

- max cruise speed (KTAS) 225KM/H (122kts, 180mph)

- fuel consumption about 18,5l per hour

- range 1050KM (±560 nautical miles)

- practical ceiling 14.000 feet (altitude of 4,2KM) 

![Tecnam P2002JF dimensions (source: Tecnam)](https://willem.com/global/images/072d335afa85.webp)

![Rotax 912S2 engine with 100HP ](https://willem.com/global/images/e5b64be7cba3.webp)

The plane is powered by a Rotax 912S2 engine with 100HP. It's a four-cylinder, four-stroke liquid / air-cooled engine that weighs about 60KG. It's fueled with normal car fuel, quite practical.

## The flight

Using an iPad the flight plan was plotted from Hilversum (EHHV) to Texel (EHTX) over Noord-Holland and back to Hilversum over the Afsluitdijk, Friesland, Flevoland and Gelderland.

![Flight route indicated in purple](https://willem.com/global/images/d1bd75db2bc1.webp)

During the flight I used my camera to shoot some photos out of the canopy of the plane.

![Loosdrechtse Plassen](https://willem.com/global/images/69a54a974871.webp)

![The Hollandse Brug (A6 near Almere)](https://willem.com/global/images/3eec5284abf9.webp)

![Marken, former Island in the Zuiderzee](https://willem.com/global/images/5e41e5d8def9.webp)

![Marken from the west](https://willem.com/global/images/30bd9962bf66.webp)

![Middelie, with some colourful flower fields](https://willem.com/global/images/ee5c7d460b49.webp)

![Fields with flowers can easily be seen from above!](https://willem.com/global/images/8dae13850689.webp)

![From above you can clearly spot buildings with solar panels, Smak Tulips near the N240, south of Medemblik](https://willem.com/global/images/347e880a61bb.webp)

![De Vlietlanden near Medemblik](https://willem.com/global/images/3f300b3eb4f8.webp)

![Medemblik (with the regattacenter in the top left)](https://willem.com/global/images/20f9fbcdf785.webp)

![Flying to Texel (the Medemblik Kaapstander towers clearly in sight)](https://willem.com/global/images/013c3dd31526.webp)

Once landed at Texel (EHTX) we borrowed a Renault Twizzy to get our lunch. Its a weird sensation being on Texel - which is a relaxed island in the Waddenzee - after leaving Hilversum, seemingly just minutes ago.

![Renault Twizzy from Texel Airport](https://willem.com/global/images/063dc6efe053.webp)

It's really weird to be able to travel so quickly by plane, no customs, no security check, no waiting lines. It's really unlike commercial flights. It's really feels like hopping in, taking off. After lunch we took off again for our return flight.

![Texel from above, near Plassendaal / Westerkolk](https://willem.com/global/images/cc33d39dc1dc.webp)

![Chalets seen from above at Jachtlust Recreatie, Slufterweg 380, Texel](https://willem.com/global/images/999a974cb714.webp)

![Westerkolk reflecting the sun light at Texel](https://willem.com/global/images/f7b78cd9d439.webp)

![Passengership in de Waddenzee (near Texel)](https://willem.com/global/images/a8195f78aa0a.webp)

![Stevinssluizen near Den Oever, part of de Afsluitdijk](https://willem.com/global/images/de941e65aaea.webp)

![Den Oever](https://willem.com/global/images/dc757f7e77fe.webp)

![Den Oever with the soccer field from VV Wiron](https://willem.com/global/images/f9eb57692641.webp)

![Flying over De Afsluitdijk from Den Oever to Friesland](https://willem.com/global/images/6b351df3d638.webp)

![Lorentzsluizen at Kornwernderzand, Friesland](https://willem.com/global/images/628b5e82aa20.webp)

![Makkumerdiep and Makkum beach, you can clearly see the differences in water depth from the sky](https://willem.com/global/images/58001bef1fac.webp)

![Beach Resort Makkum](https://willem.com/global/images/b7aace9ff498.webp)

![Windpark Noordoostpolder, near Lemmer ](https://willem.com/global/images/3b528a82362c.webp)

![Urk, the former Island in de Zuiderzee](https://willem.com/global/images/917b541efef1.webp)

![Industrieterrein Elburg, with the Flevomeer (top left) and Drontermeer (bottom right)](https://willem.com/global/images/f29ac17fc18f.webp)

![Dolfinarium Hardewijk (the blue dome in the center)](https://willem.com/global/images/bac70a3ad47c.webp)

![Zeewolde Strand](https://willem.com/global/images/292f89fa9655.webp)

![Bonshaven Zeewolde](https://willem.com/global/images/aa02b9738689.webp)

![Bridge over Valleikanaal, near junction Holkerweg / Ringweg Koppel in Amertsfoort](https://willem.com/global/images/7b3cf5c6ff9c.webp)

![Stichting Dierenzorg Eemland doing major ground works near Soest](https://willem.com/global/images/39cf1b1dd064.webp)

![De Korte Duinen, Soest, seen from above ](https://willem.com/global/images/68e46c4f1016.webp)

![Egelshoek, near Hilversum](https://willem.com/global/images/5b40b9aef2f3.webp)

![House seen from above near Hollandse Rading](https://willem.com/global/images/7b01a82687ee.webp)

![Ecoduct "Natuurbrug Zwaluwenberg" over the A27 near Hilversum](https://willem.com/global/images/f71be5cebb25.webp)

![A27 construction works near Hilversum where the unused connection to the never finished A80 is removed](https://willem.com/global/images/70eaaff542b7.webp)

![Hilversum - with the radio/TV tower clearly visible](https://willem.com/global/images/136d57053365.webp)

## Conclusion

We landed safely at Hilversum Airport and parked the plane near its hanger. In a way this is pretty much like parking your car.

![Inside the Hiversum Airport control tower.](https://willem.com/global/images/a94398681219.webp)

Going out for lunch like this is awesome. My flight over The Netherlands also reminded me on how diverse this country is. It's connected and embedded in water like no other country is. It's beautiful and I feel privileged to have seen it from above.

The freedom of flying a plane where you define your own course is fantastic. I am already wondering what the next destination will be!

![The sky is limit - or is it?](https://willem.com/global/images/3dfc8268cd64.webp)

---

## Off the grid: Working on 100% renewable energy

*Collecting, storing and using solar electricity to power my phone, computer and wearables* · 2018-04-30 · https://willem.com/en/2018-04-30_off-the-grid-working-on-100-renewable-energy/

For the past 10 days I have powered my personal electronic devices (phone, computer, wearables) using nothing but energy collected using a small solar panel. I disconnected all grid-connected chargers. I hoped that by going off the grid, even in such a small way, I would gain insights that enable me to save energy (and money).

## Solar Panel

Few weeks ago I dramatically decluttered my office by getting rid of many things I did not use anymore. While going through my stuff, I found a small solar panel, a Gomadic Solar Charger. It fits in a bag so that you can use it on the go, like on your boat, camping, etc.

![Gomadic portable Solar Charger - 15W - 330 x 305 x 38 mm](https://willem.com/global/images/07792197e4e3.webp)

I got this panel from Kickstarter and used it a few times while camping on a festival and during a rare power outage in Amsterdam. It felt like a missed opportunity that I used it so infrequently. I wondered if I could use this panel to generate enough energy to power my electronic devices.

## Personal electronic devices

For this experiment, I expected that I would learn the best if I would put my mostly used devices in the experiment:

- **iPhone**: My smartphone is probably the most important device I use regularly. It's my main communication device (phone, messaging, email) and I use it as camera, music player, ebook reader, navigation system, bike computer and internet browser.

- **iPad + Pencil**: My tablet_is_my_primary_computer (http://willem.comhttps://willem.com/en/2018-03-07_tablet-as-main-computer/) and together with the Apple Pencil I use it to work, write, read, design and get things done. It's my main work computer. 

- **Biostrap**: On my wrist I wear an  health_and_fitness_tracker_that_collects_biometric_data (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) like my heart rate, HRV, oxygen saturation, respiratory rate and sleep patterns. 

- **AirPods**: Used in combination with either the iPhone or iPad, the AirPods have replaced my stereo system and double as handsfree headset during conference calls. 

## The experiment: going off the grid

By taking my electronic devices off the grid I hoped find an answer to the following questions:

- How much power can I collect with one small (330x305x38MM) solar panel in Amsterdam, where the sun is not always shining?

- How hard is it to store energy collected by the solar panel?

- How practical is this *"off the grid going"*?

- Is it possible to do this on a larger scale, like the entire office or my house?

## Collecting energy

Using a solar panel to collect energy is simple: you just need to make sure it is facing the sun for as long and directly as possible. While the portable solar panel is great, it is not suitable for usage in rain. So, one of the first steps was to find a way for the panel to be (semi)permanently fixed so that I could collect energy regardless of the weather.

![Finding a way to fix the panel in a way that the weather would not harm it](https://willem.com/global/images/7a2cc4297f11.webp)

![The solar panel directly placed behind the glass](https://willem.com/global/images/e61a7a1df7e1.webp)

My first idea was to place the panel directly behind the glass. That way, I would not require any special mounts, it would be protected from the weather and its power output could be directly connected to my devices.

![Placed behind glass the panel works, but its performance is not optimal](https://willem.com/global/images/b0fffae0fbe3.webp)

This worked, but charging my devices was notably slow. I suspected that both the angle (90º) and the position *behind* double glass caused performance to be suboptimal.

![Placing the solar panel is direct sunlight for optimal performance](https://willem.com/global/images/e00f28a308cd.webp)

By directly placing the panel in sunlight, under an angle of about 40º, I achieved a much higher charging speed on my devices (under the same sunshine). Charging speed went up by 200-300%. If only I could find a way to achieve this optimal position more permanently...

### Mounting the solar panel on the balcony

My portable panel did not come with any mounting materials. Luckily I had unused rack mounted server chassis with rail kit laying around. I figured that I could take it apart and make a solar panel mounting system from it.

![Rack mounted server chassis (1U), with rail kit](https://willem.com/global/images/976569f35eff.webp)

![Engineering a solar panel mounting kit](https://willem.com/global/images/6c54e8b2470e.webp)

I designed the mounting kit in such a way that it would be possible to refit the panel back in its bag. I clamped the panel using parts from the server, I used some plastic to prevent damaging the glass.

![Clamping the solar panel using server parts ](https://willem.com/global/images/34030d6f7112.webp)

The panel performs best if it's placed under an angle. Depending on your location on the globe, the season, this angle differs. You can find commonly used angles for your location on the internet. In Amsterdam that is around 30-40º, an angle easily achieved by repurposing parts of the server chassis.

![Once the front of a server, now part of the solar panel mounting fixture](https://willem.com/global/images/a6de5ca038cd.webp)

![Achieved a nice angle with three legs, suitable for fixture on my balcony](https://willem.com/global/images/88d647bf806f.webp)

![Solar panel fixed on the balcony](https://willem.com/global/images/cdc12deb5e57.webp)

## Storing and distributing energy

Now that the panel is fixed in an optimal and permanent position it collects energy. Obviously I am not always near the solar panel, I need a way to store and distribute the energy collected by the panel.

I use a standard USB power bank to store and distribute the solar energy. I have two power banks that I connect in turn to the panel. It's easy, while one is being charged by the solar panel, I use the other one to power my devices. This way I am able to use electricity whenever and wherever I want.

![Measuring energy usage with an in-line USB power monitor](https://willem.com/global/images/9b5cd3693dfa.webp)

The panel easily charges a standard USB 5V, 5000mAh power bank in a day. That kind of power bank can charge an iPhone multiple times. I also have a much larger capacity Anker 20100mAh USB power bank that can charge my devices even more times.

![Charging Biostrap using solar energy from the Anker power bank](https://willem.com/global/images/b66f751e9780.webp)

Different devices charge at different speeds. It's interesting to see (and understand) the differences in power between your devices. Using an in-line power monitor I learned about the actual power needed to charge my devices.

![Charging AirPods using solar energy - note the higher amperes compared to the Biostrap](https://willem.com/global/images/641b478c9069.webp)

## Conclusion - insights gained so far

During the past 10 days I have successfully powered my devices using nothing but the solar energy collected with the small panel mounted on my balcony. It's really possible to take my devices off the grid.

The panel generates enough power to keep my power banks charged, and in turn my devices. Power banks are surprisingly practical as they are mobile and easily connect to multiple devices; one power bank can replace a number of chargers and cables.

The experiment also created awareness that small changes, like turning down the brightness of your phone, limiting the frequency of polling for new emails (during the night), can have great structural effects on your power needs.

This is just a small experiment, but already its changing my perspective on collecting, storing, distributing and using energy.

Great things come from small beginnings, or *sic parvis magna* in Latin. If this works on a small scale, I will be eager to try this on a larger scale, like my entire office or house. Time will tell!

![The Tesla PowerWall is a large battery pack that can be used to power an entire house ](https://willem.com/global/images/5f1acc81fe28.webp)

Note: this blog post, photos, image editing, writing, uploading and publishing was done entirely using solar energy!

---

## Outside the comfort zone: amateur acting

*Wearing an heart rate monitor during my debut performance* · 2018-04-18 · https://willem.com/en/2018-04-18_outside-the-comfort-zone-amateur-acting/

This month I made my debut as amateur actor. I am no Hollywood star, nor do I envy to become one. But I do like crazy experiments and operating outside of my comfort zone often leads to new and refreshing insights. I took part in an amateur drama play and - in the name of science and fun - strapped myself with sensors to measure what happened to my body.

## Comfort zone

Maybe you've seen some inspirational quotes that encourage you to go out and do something strange - something you wouldn't normally do. It's difficult because we tend to get comfortable with the familiar, our routines.

Back in 1908 psychologists Yerkes and Dodson explained the relationship between comfort levels and performance. They found that performance increases with physiological or mental arousal; but only up to a certain point. That point is called "optimal anxiety", where your stress levels are slightly higher than normal. At this "sweet spot", a person feels pressure to perform well and is prepared, but not debilitated with fear.

## Leaving the comfort zone: start acting

Few months ago, I went out to see my mom perform with her drama group, "de Opregte Amateur". They are a group of enthusiastic people of all ages and occupations that work together to organise the performance of two different plays a year. They have about 45 years of history of playing comedy farces, delivering a good laugh to about 180 people a night, two nights per play, two plays per year.

They where looking for new players for their group. Undoubtedly loosened up by the local brew, it seemed to me like the perfect opportunity to do something out of *my ordinary*... and so my acting career commenced. :-)

![Flyer announcing the play "Zusters in Zaken" by "De Opregte Amateur"](https://willem.com/global/images/44ea7ca346a7.webp)

![Oh boy... there is no way back when you're face is all around town!](https://willem.com/global/images/375bf7d85472.webp)

## Rehearsal, learning my text and learning to play

About three months before the performance, weekly rehearsals started during which parts of the play are practiced. It's a lot of fun to do and it allowed me to get familar with the other players, my text, physical movement (when and where to appear and disappear).

It's an amazing bunch of people that really made me feel welcome, even though I had like zero experience playing amateur drama. But progress came when weeks went by. I learned from other players by watching and listening how they interpreted their part of the play. It's amazing how far you can come without a manual if you're around experienced and passionate people.

![Part from the script with my first few lines of text, me playing "Gerard"](https://willem.com/global/images/5b1d9c31d3ef.webp)

## Sensors

Like I wrote about earlier, I_wear_a_biometric_sensor_on_a_daily_basis (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) to measure my heart rate, HRV, oxigen saturation, respiratory rate and sleep pattern. I find this health data interesting because it allows you to find out "what is normal" for your body. Once you know your normal numbers, you're able to recognise measurements that are out of the ordinary.

![Biostrap, wrist band, collecting health data on a daily basis, providing long term insights](https://willem.com/global/images/2b9c6d138a20.webp)

![Wahoo TICKR, waist worn strap, measuring heart rate in realtime](https://willem.com/global/images/861bb3b8d831.webp)

I wondered if anxiety would have effect on my biological readings. How would my body react to my debut performance? To allow a more precise reading during the actual drama performance, I also wore a waist mounted heart rate monitor. The two sensors together provided both long term and realtime data, perfect for my little experiment outside the comfort zone.

## The Performance

Oh my..., what a thrill! What an experience! It is an incredible feeling to play with a group of people and make it work. Getting feedback from the audience, like laughs, murmuring, and applause. It's really unlike anything else I know!

![Me playing "Broeder Gerard" in "Zusters in Zaken" during my debut as amateur actor](https://willem.com/global/images/b7a783f5c41c.webp)

You have a sense of control (over your own part), but you also sense the lack of control (on performance by other players). You're dressed up, prepared for action, you know your lines, but you never exactly know how the *actual* combined play will be.

Unlike watching a movie or reading a book, playing drama is much more interactive: you need to do things to make it work. In that sense it's like playing a video game, except there are 180 people watching you, and you have "just one life".

![Playing drama is a team effort - and the on stage interaction is what makes it fun!](https://willem.com/global/images/e2acc65056d4.webp)

## Data

During the performance nights I used my waist worn heart rate monitor to measure my heart rate. My character is due to appear just after the play starts. I clearly felt anxiety building up to that moment...  conviently providing a reference peak in the data:

![Heart rate during my debut - with annotations explaining what happened](https://willem.com/global/images/e56f31ee821c.webp)

![Heart rates during the two performance nights, left my debut, right the second performance](https://willem.com/global/images/ac23835d406b.webp)

Looking at the data you can spot a few interesting things:

- The first night (left) is different than the second night (right). My average and peak heart rates where higher on my debut night.

- Anxiety more gradually built itself up on the first night, whereas on the second night, my heart rate was much "flatter" in the hour before my appearance.

- It's very easy to spot my appearances, causing clear and sharp spikes in heart rate. (Four times before the break, two times after the break)

- You can clearly spot the effect of the break, providing a real relieve in between the appearances.

- On both nights, the first appearance is the hardest, each subsequent appearance is less stressful.

- On both nights, my second appearance is notably less stressful than the third. This is because I felt much more confident with those lines of text.

- You burn a lot of energy! Because I_cycle_frequently (https://willem.com/en/cycling-as-craft-building-riding-and-repairing-bikes/), I know that one night of drama play (1800 kcal) roughly compares to about 50KM of cycling.

In addition to the real time heart rates, I used the Biostrap (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/) to collect long term biometric data:

![Biometric readings covering the month leading up to the performance](https://willem.com/global/images/67b76ba7b012.webp)

These graphs cover the month leading up to (and including) the performance weekend. You can see that my biometric readings changed:

- **Resting heart rate**: indicates an overall increased level of excitement during the last two weeks, as these feature more rehearsals and an increased sense of "it's really gonna happen!"

- **Nocturnal heart rate variability (HRV)**: Variances between individual heart beats, or HRV, is an indicator of how exhausted I am. The lower it gets, the more tired I am. During the last week I worked fewer hours, allowing my body to better recover from the increased rehearsals, something clearly necessary.

- **Respiratory rate**: The average amount of breaths I take per minute is a clear indicator of anxiety. You can clearly see it rise up to the performance nights.

## Conclusion

Doing something out of the ordinary, outside your comfort zone, has a real and clear effect. Both physically (as the data clearly suggests) and mentally (the incredible thrill).

Taking part in the drama play was a lot of fun. I learned from experienced people, working together as a group to do something I have never done before. Their commitment, fuelled by passion (not commerce), is inspirational!

I am very grateful to "De Opregte Amateur" for allowing me to play along. Thanks Anneke, Ida, Patricia, Ramona, Bianca, Harry, Winfried, Joey, Carel, Linda, Corrie, Patrick, Jerry, and all the others behind the scenes providing clothing, make up, and decor. And of course the audience, the hundredths of people spending their time watching our play, thanks!

![De Opregte Amateur](https://willem.com/global/images/c779a03908a8.webp)

### References

Yerkes RM, Dodson JD (1908). "The relation of strength of stimulus to rapidity of habit-formation". Journal of Comparative Neurology and Psychology. 18: 459–482. doi:10.1002/cne.920180503.

---

## Cyber security: 5 easy tips to protect your server against hackers

*Server hardening best practices for Windows and Linux* · 2018-03-10 · https://willem.com/en/2018-03-10_cyber-security-5-easy-tips-to-protect-your-server-against-hackers/

This week one of my clients was hacked and asked me for emergency assistance to help secure their server infrastructure. It was a web server that ran WordPress websites on Apache (with PHP/MySQL), including a few webshops with customer data. This hack could easily have been prevented with the following best practices, is //your// server secure?

![The data centre is where your server lives. Even though it may be physically secure, you should check upon its software too!](https://willem.com/global/images/4a3f2a7449c7.webp)

## 1) Install less software

Cyber security is difficult enough, you should make it easier for yourself by installing less software. Fewer programs, services, plugins, mean less things to worry about. In cyber security terminology this is called reducing the attack vector.

### Reduce your attack vector by:

- **starting with a minimal base system**:  do not begin with a full blown and bloated operating system, start with as little as possible and keep track on the things you add

- **only install what you absolutely need**: install tools, plugins add-ons and programs that you really - really - need. Be hard and determined: less is more!

- **check dependencies of things you install**: If you install anything make sure you check the dependencies; software often requires other software (that you do not necessarily want)

## 2) Close all network ports, filter those you can't block

Firewalls are used to filter network traffic and are available as standard system software on most operating systems. Limit the openings hackers have to your server.

### Firewall configuration should:

- **adopt a default policy of blocking:** Most operating systems allow everything by default. Turn this around and block everything except that kind of traffic you expect and need. 

- **check inbound and outbound:** Filter incoming and outgoing network traffic. This makes it much harder for hackers to come in (and get out - in the unfortunate case of a successful hack).  

- **filter open ports:** Secure open network ports by filtering traffic based on source (IP-address) and/or state, only allow traffic from where you expect it to come from. 

## 3) Hide all version information

The software your server runs is versioned, often a number indicating the exact date when it was build. Hackers can use this version information to lookup known security problems, vulnerabilities, and weaknesses.

### Stop helping hackers by removing version information from:

- **web servers:** Apache, NGINX, Microsoft Internet Information Services, etc. Check your server by analysing the HTTP headers.

- **mail servers:** Postfix, Exim, Dovecot, Sendmail, etc. Often these servers communicate their version in a "hello banner", shown directly after establishing a connection using SMTP, IMAP, POP3. 

- **web languages:** PHP, .NET, Java, etc. Sometimes these frameworks and scripting languages add their own HTTP header ("x-powered-by") with version info.

- **WordPress:** plugins, themes, forms, galleries, webshops, etc. Version info is often included in HTML-output or in filenames of CSS, JavaScript and images. 

- **file servers:** FTP, SFTP, WebDav, etc. These servers communicate their version info in their greeting, shown directly upon connecting, often before authentication

- **SSH:** Did you know OpenSSH communicates operating system version info by default? 

## 4) Use certificate/key authentication instead of passwords

If password-based logins are allowed, hackers can repeatedly attempt to access the server. With modern computing power it's easy to automate this guessing by trying combination after combination until the right password is found (brute forcing).

### Secure authentication by:

- **use SSH key authentication:** an SSH key is much longer than a normal password and contains different characters than ordinary readable letters and numbers. This results in more possible combinations, making it exponentially more difficult for hackers to find the right key. 

- **limit authentication rate**: Artificially make the password / key checking slower, reducing the speed of automated guessing

- **block automated guessing:** Exclude IP-addresses if they have failed to login successfully. 

## 5) Check and update regularly

Most hacking is automated these days, bots are constantly scanning every server and website for exploitation opportunities. It's not a question *IF* they will find you, but *WHEN*.

### Take care of your server by

- **checking its logs: ** potential problems often become visible before any really bad things have happened. Check the server logs for errors and anomalies; often they're early signs of trouble. 

- **check for updates: ** either by using the software on your server or by checking the vendor / software website.

- **update regularly: ** don't wait until it's too late, install updates as soon as possible (but *after* you've tested them!)

![Check upon your server regulary - or find somebody that does this for you.](https://willem.com/global/images/82d99c9ffa6b.webp)

## Conclusion

If you implement these measures you can greatly improve the cyber security of your server. Protecting your server means better safety for your business, your organisation and your customers' data.

No (sane) security consultant will offer you guarantees, given enough resources and determination, hacks will always be possible. Be prepared by making backups and encrypting your data.

Hopefully these tips will help you, if you need additional help you can find my contact information here (https://willem.com) reach or check out my cyber_security_services (http://digidef.nl).

---

## Tablet as main computer

*Comparing the Microsoft Surface Pro to iPad Pro* · 2018-03-07 · https://willem.com/en/2018-03-07_tablet-as-main-computer/

For the past few weeks I have been using the Microsoft Surface Pro as my main computer. It's a modern tablet computer that can be used as laptop with the type cover. With the Surface Pen, it's a versatile PC that works in a lot of different ways. Time to find out if it's any good and how it compares to my other tablet computer, iPad Pro.

## Microsoft Surface

For some years now, Microsoft makes its own computers under the Surface brand. The Surface computers are special because Microsoft creates both the hardware and (Windows) software. This allows for seamless integration between the physical machine and its bits and bytes.

![Microsoft Surface family](https://willem.com/global/images/68d001e042d0.webp)

People praise Microsoft for providing the best possible Windows experience with Surface. The product line includes desktop, laptop and tablet computers - all equipped with touch screens to enable different kind of PC-interactions beyond the traditional mouse/keyboard input.

## Surface Pro

In order to develop the new Snake_'97_update_for_Windows_10 (https://willem.com/en/2018-02-21_updating-snake-97/), I needed a PC that could run Visual Studio and had a touch screen. Because I like working with tablets, I decided to try the Surface Pro. It's Microsoft's take on a tablet computer that can also function as laptop.

![Microsoft Surface Pro](https://willem.com/global/images/f6628afc3f27.webp)

Just like the iPad Pro, you need to buy the keyboard and stylus separately. I think that's stupid in the same way they don't sell cars without steering wheels... Well, at least you'll get more unboxing fun this way. :-)

![Surface Pro, type cover and pen - al sold seperately - because, why just one package if you can have three times as much fun!?](https://willem.com/global/images/df944dd3e043.webp)

After unboxing it's time for updating. Don't rush or plan to go anywhere, because this process can take hours. Really, hours.

![Updating... updating... updating... updating...](https://willem.com/global/images/2b84ec46efb8.webp)

It took almost 7 hours before I was able to actually use my new Surface Pro for the thing I bought it.

![Chromebook only took a few minutes to become usefull after unboxing.](https://willem.com/global/images/87b1e93577d0.webp)

The contrast with my Chromebook (that I bought and setup at exactly the same day) couldn't be bigger: the Chromebook was ready to use in just a few minutes.

![Look what happens to my face when my patience is tested...](https://willem.com/global/images/d71476260d24.webp)

## Windows 10

After a rough start, things got better quickly. I was surprised how far Windows has evolved to accommodate touch screens. In tablet mode your apps and start menu are full screen. You can switch, close and combine apps using easy to learn gestures.

![Windows works surprisingly well in Tablet Mode](https://willem.com/global/images/8d8808c82806.webp)

With the Surface Pen you can annotate pretty much anything, from PDF's to webpages.

![Annotate anything using Surface Pen](https://willem.com/global/images/ef88493b4d5a.webp)

The contents of the display rotate along with the orientation of the device. This makes reading a document a breeze.

![Reading using a tablet computer is not limited to your desk - I like reading on the couch](https://willem.com/global/images/57f24d186cdf.webp)

## Surface Pen versus Apple Pencil

Last year, I_replaced_my_paper_pencil_with_a_digital_one (https://willem.com/en/2017-01-30_ipad-pro-next-to-my-primary-machine/). Contrary to the Apple Pencil, you can use the Surface Pen as a pointing device to "hover" over buttons, much like moving a mouse cursor over menus and buttons.

![Apple Pencil and Surface Pen](https://willem.com/global/images/b583be2aa859.webp)

In addition to hovering, the Surface Pen has two buttons and the option to hold it upside down to use it as an eraser (in most apps). This makes the Pen more versatile than the Apple Pencil, which is just that: a pencil.

To find out which I liked better, I did a direct comparison by designing a specific piece of work on both devices. It is interesting to notice the differences in how the digitising works. I found the Apple Pencil to be slightly more accurate, better following my physical movement.

However, the extra buttons on the Surface Pen allowed me to quickly copy/paste certain sections of my work and switch to the eraser function more quickly. The integrated kickstand is sturdy enough to tilt the Surface and use the Pen under angle, nice!

![Working with Surface Pen and Apple Pencil](https://willem.com/global/images/3af862234efa.webp)

![Kickstand is useful in combination with the Pen](https://willem.com/global/images/543d686ed89c.webp)

An easy trick to compensate for inaccuracies in digitising is to simply zoom in (by pinching with your fingers), draw on a larger scale and then zoom back. It's an advantage that most folks forget when making the switch from paper to digital. This works on both iPad and Surface.

![Zoom in to work on details more precisely](https://willem.com/global/images/6e418543ebfa.webp)

## Tablet as main computer

Because of my work as app and web developer, touch screen interfaces are really important to me. The majority of web traffic (visitors of my customers' websites) is either mobile or tablet, traditional PC's are losing. My main computer should have a touch screen interface because I don't want limit myself to mouse and keyboard. The keyboard is however, an essential tool for me  when I use the tablet as main computer. Both the iPad and Surface have keyboards that connect magnetically.

![Touch screens are important these days when designing (and testing) interfaces](https://willem.com/global/images/621ab7b3b2e1.webp)

![Using the Surface and iPad as laptop](https://willem.com/global/images/f50e418b33c1.webp)

The Surface's keyboard has more keys (ESC, F1, F2 etc), backlight and an integrated touchpad. You need these extra's because often Windows apps, especially older ones, rely on this. The iPad's keyboard on the contrary, lacks the function keys and has no trackpad, because iOS works well without the mouse.

![Typing on a tablet is perfectly possible using an hardware keyboard.](https://willem.com/global/images/ab567780c7ab.webp)

Both keyboards take some getting used to, but get the job done well. I like the simplicity of the iPad's keyboard but prefer the Surface's flexibility to use the keyboard under different angles (using the kickstand and the magnetic "popup fold").

![The Surface keyboard can be used under different angles](https://willem.com/global/images/be0de60e4a44.webp)

![The kickstand is a clever piece of design and engineering, being both functional and sturdy.](https://willem.com/global/images/a76c754627ae.webp)

## Software

Both Windows and iOS offer their own diversity of apps. Basic things like email, browsing, spreadsheets and text editing can be done just as good on any device. Thanks to the modern web you can connect to your favourite web applications and services. The real difference is in the more specific and advanced type of software. Apps like Photoshop, Visual Studio, Xcode don't work on iOS.

But, there are many good apps out there that will allow you to draw, code and be creative on iPad. The advantage of iOS apps is that they usually have a touch optimised interface that introduces novel ways of getting work done.

![Autodesk Graphic is an amazing app for iOS - I use it to design icons and graphics, with layers and alignment tools](https://willem.com/global/images/c1af94b818ca.webp)

For those moments that you really need access to a specific piece of software that doesn't have a suitable alternative on iOS, you can always use Remote Desktop to connect to another computer. I use this to check websites in Microsoft Edge and Internet Explorer on my iPad.

![Windows on iPad is possible using Remote Desktop](https://willem.com/global/images/2121c4e027ce.webp)

On Windows you'll have all the apps you can think of. But often they lack optimisation for touch, forcing you back into traditional PC/mouse mode. To make matters worse, these traditional apps require an Intel processor that consumes more power (compared to iPad's chip) - depleting your battery faster.

![Running four apps simultaneously thanks to Windows multitasking - at the price of consuming more battery power](https://willem.com/global/images/a79bc46256a5.webp)

![Developing software with Microsoft Visual Studio on a Surface Pro tablet](https://willem.com/global/images/7c77021765e8.webp)

## Conclusion

While both Surface and iPad can be used to get things done, they differ greatly because of their different origin. One is a laptop with tablet features, the other a tablet with keyboard support.

Much like you shouldn't bring a knife to a gunfight is the decision of which tablet is better. It totally depends on what software you need (and want) to use. If you're thinking about getting one of these devices, I'll have a simple advice: just do it.

Both are great and provide you with (novel) ways to get things done. I like working on tablets because they offer great flexibility and mobility. Rather than replicating traditional workflows, using a tablet as main computer is all about reimagining the way you work.

---

## Creating the ultimate commuter bike

*Riding at 35KM/h with Nexus Alfine 8 and Gates Carbon Drive* · 2018-02-24 · https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/

This winter I use a Sensa Cintura bike with a Gates Carbon belt drive as my daily commuter. It's a bike designed to be nice to ride thanks to its sporty lightweight frame. It's also meant to be low on maintenance thanks to the belt drive and Nexus Afline 8 integrated gear hub. After 1800KM in just eight weeks, it was time for some upgrades.

![Sensa Cintura - as I got it from the local bike shop](https://willem.com/global/images/0955f24c885b.webp)

## Sensa Cintura Belt-Drive

The Sensa Cintura is a trekking bike with the following specifications:

- **Frame: ** Alu 7005 HydroFormed double butted smooth welding - belt drive

- **Front fork: ** Supra tapered 1.5 superlite alloy disc

- **Group: ** Shimano Alfine-8 + Gates CDN Belt Drive + Shimano hydraulic disc brakes

- **Seatpost: ** Supra base line

- **Head light: ** Hub dynamo + Bumm Lyt

- **Rear light: ** Integrated ilu in fender with stand light (powered by dynamo)

- **Stem: ** Supra competition line

- **Wheels: ** Supra TA Pro disc rims + Shimano disc hubs

- **Tires: ** Schwalbe Delta Cruiser

- **Saddle: ** Selle Italia Net

- **Colour: ** Matt Ano-Black

- **Weight: ** 13.8KG

It's a nice bike with various sporty components combined with maintenance friendly parts such as the integrated gear hub, disc brakes and the belt drive.

I have chosen this bike to be my primary bike during the Dutch winter when my normal road bike stays inside. Previously I used my road bike through the winter, too, but the dirt, combined with road salt (used on icy roads) proved to be killing for my group set... resulting in high wear and damage.

![Sensa Cintura from the rear - I didn't like the excessive branding on the fenders](https://willem.com/global/images/7b412540c301.webp)

Although I like the style of the bike, I didn't like the excessive branding on the fenders (both from Sensa and my local bike shop). After some careful testing I completely removed the paint from the fenders using a chemical solution (after taking it apart and removing other parts). The result is a much cleaner look:

![A cleaner look thanks to less obvious branding](https://willem.com/global/images/003aa3ab76b2.webp)

![The metal fenders match well with the bike's disc and bolts](https://willem.com/global/images/b51a103ed1a7.webp)

## Dutch Winter

During winter in The Netherlands it's often cold, wet and windy. If the temperature gets anywhere near the freezing point, the Dutch government applies a layer of salt on icy roads. The "salty wet slush" on the road surface is killing for bike components: instantly inducing oxidation and causing excessive wear.

![On the bike during Dutch winter](https://willem.com/global/images/34bfd586ee77.webp)

You can't escape these bad conditions if you use your bike for daily commutes. The only thing you can do, is to clean your bike more often. But with Dutch conditions this becomes cumbersome very quickly.

![Excessive dirt after a "normal" commute during winter time](https://willem.com/global/images/4378a0bfbdca.webp)

The dirt even finds its way onto the top of my rear fender. You can easily imagine that this kind of dirt is hard on regular bike parts, like a chain, cassette and derailleur.

![Dirt on top of my rear fender](https://willem.com/global/images/c5fe762b91dd.webp)

## Gates Carbon Drive

The Cintura bike is equipped with the Gates Carbon Drive, a belt drive that runs without oil for lubrication. It's dry and therefore attracts less dirt. After a "dirty ride" you can easily rinse it clean with water, without fear for oxidation.

![Gates Carbon Drive](https://willem.com/global/images/23e947f14601.webp)

In theory this is fantastic, but in practice it turns out to be a different story. After just 1800KM I noticed weird sounds coming from my rear sprocket...

![Gates Carbon Drive rear sprocket showing excessive wear after just 1800KM](https://willem.com/global/images/428ebaf272b9.webp)

The rear sprocket not only became rusty, the polymer teeth are worn badly and a few have broken off completely. This is lacklustre quality and I was greatly disappointed by the Gates Carbon Drive system.

Turns out that the Sensa Cintura is equipped with the Gates "CDN" line belt drive. It's the lower-cost option for casual riders (according to Gates), it's certainly not designed to be intensely used through salty and dirty conditions.

Instead of being dissapointed in either Sensa (for choosing the CDN line) or Gates (for selling it), I decided to take matters in my own hands.

## Upgrading Gates CDN to CDX

I was happy to learn that the inferior Gates Carbon Drive CDN shares the same shape and sprocket design as the premium Gates CDX system.

The Gates CDX system is designed for high mileage riding in the harshest conditions. The parts are compatible with each other. I was able to source some original CDX parts from a bike shop in Germany.

![Left the plastic CDN sprocket - if you look closely you'll notice the missing teeth, right the shiny stainless steel CDX sprocket](https://willem.com/global/images/7af502966145.webp)

![Upgrading the Sensa Cintura](https://willem.com/global/images/7ecf03a31507.webp)

Changing the rear sprocket is not too difficult. There are numerous YouTube videos available depending on the type of rear hub your bike has (mine has Alfine 8).

![The Gates CDX rear sprocket installed](https://willem.com/global/images/6cf98cef1040.webp)

## Tires

While I was at it, I also changed the bike's tires to something more sporty. Swapping the Schwalbe Delta Cruisers for Duranos. These tough road race tires are much lighter while still providing some profile and durability.

![Schwalbe Durano](https://willem.com/global/images/139d05b87475.webp)

## Saddle and Pedals

To achieve a sportier ride I installed click pedals (wich allow me to 'pull' in addition to pushing) and a Brooks Cambium C15 saddle that I think fits the bike well.

![Brooks Cambium C15 ](https://willem.com/global/images/f22a57710eaf.webp)

## Shimano Alfine 8

The internal gear hub takes some time to get used to if you normally ride a regular chain/cassette/derailleur group set. The differences between individual gears are slightly bigger.

![Shimano Alfine 8](https://willem.com/global/images/fe29b327c8a5.webp)

This causes your cadence to be somewhat higher or lower than you might prefer. But, in a flat country like the Netherlands this is not a problem. I really like the Alfine 8 internal gear hub.

![Shimano Alfine 8 trigger shifter](https://willem.com/global/images/aa33d93f7451.webp)

## Conclusion

After the upgrades the bike rides even better then before. The nasty sound from the failing CDN drive is gone and thanks to the sporty tires, saddle and pedals I easily ride at 35KM/h.

![The upgraded Sensa Cintura](https://willem.com/global/images/1d107a767ffb.webp)

It's a very nice bike and if there is one thing to take away from this blog post, it's that you sometimes have to make (minor) modifications yourself to make a good product fantastic.

![Maybe the ultimate commuter bike?](https://willem.com/global/images/35cf54dccaf3.webp)

## Updates:

- I removed_all_the_black_paint_from_the_bike_frame (https://willem.com/en/2018-06-09_removing-paint-from-a-bike-frame/) to unveal the raw aluminium underneath it.

- One_year_later,_6000KM_further_on_the_state_of_my_bike_and_the_Gates_Carbon_Drive (https://willem.com/en/2019-02-27_one-year-on-the-ultimate-commuter-bike/) 

- After 21.000KM I wrote another update on the bike: read_it_here (https://willem.com/en/2021-01-10_commuter-bike-checkup/).

---

## Updating Snake '97

*About the challenges of developing a wildly popular game* · 2018-02-21 · https://willem.com/en/2018-02-21_updating-snake-97/

Few years ago my brother threw a beer on my iPhone in an Amsterdam bar. The poor thing didn't like the Dutch brew as much as I do: it died. While waiting for a new phone to arrive, I used an old one that couldn't do anything but texting, calling and... Snake! The idea for Snake '97 was born and this month it was time to update the wildly popular game.

![Café 't Pakhuis in Amsterdam - where Snake '97 was "invented"](https://willem.com/global/images/06e55a3e0198.webp)

## Snake '97

Originally I programmed the Snake game in 2011 for iOS. I took me about two weeks to create a working prototype that looked and felt like the true classic from the 90s. My other brother helped me with graphics by taking some sharp looking macros from my old phone (it's still a weird idea that so many of you have a copy of my phone in your pocket).

![Snake '97 running on iPhone X - looking and feeling like the retro mobile phone game from the 90s](https://willem.com/global/images/ee992b73bb44.webp)

It got picked up by some big blogs (https://snake97.com/press/) that made Snake '97 rock the top rankings all over the world. Today it's being played all over the world, translated into 53 languages and available for iOS, Android, Windows, ChromeOS and MacOS.

![Snake '97 rocking the carts with Angry Birds and WhatsApp](https://willem.com/global/images/13f8f2dd6fc1.webp)

## Need for update

In 2011 there was just one iPhone, the iPhone 4. As developer you could safely ignore Android and Windows Phone wasn't even invented yet. Life was as beautiful as a (lazy) developer could wish: just one screen size.

![iPhone 4 - ahhh sweet developer memories when one (small) size did fit all...](https://willem.com/global/images/87b0ccd8c5d9.webp)

Fast forward to today, Apple currently sells 8 iPhones and there are millions and millions of Android devices out there, all with different screen sizes, processors, memory and software versions. It's an understatement to call this a challenge...

To maintain the fun in Snake '97 I had to update the game engine at its very core. Somehow I had to make the graphics fit every screen in the world and accommodate for the differences in processing power and memory....

![Prototype of Snake '97 running on various devices](https://willem.com/global/images/3da50637eff4.webp)

## One game engine to rule them all

The original versions of the game all had their own engine. One for iOS, one for Android, one for Windows etc. When I launched Snake 2k (the Snake II game variant), I simply added another set of game engines. In total I programmed 6 different Snake game engines in Objective-C (iOS), Java (Android) and C# (Windows). Keeping these engines running on new devices with different screen sizes, processors and memory configurations became increasingly difficult.

But this month I bit the bullet, big time. I redesigned and build another Snake game engine. But this one was meant to replace all the previous ones. It must run on iOS, Android and Windows. I wanted an engine that was ready for the future, for any screen and any kind of input (keyboard, touch, pencil, gamepad, joystick, you name it).

![Programming the new game engine and testing it on an HMD Nokia 2 running Android](https://willem.com/global/images/8d20b82f1396.webp)

## HTML5 Rocks

The web has caught up with native app technology. Many new API's have been introduced that enable rich interactive experiences on many different devices. I wondered how difficult it would be to make Snake '97 work on web technology. Only one way to find out, so I started.

### Responsive graphics

First I started building the graphics engine based on HTML5 canvas and a responsive scaling system that I designed for the Android version of Snake '97. In essence the engine measures available screen size, orientation and pixel density. It automatically translates high resolution photo material to match your specific screen.

![Same 3310? Look closely and spot the differences between iPhone SE and iPhone X](https://willem.com/global/images/37052d0f8036.webp)

The new graphics engine even accommodates for weird things like the iPhone X notch. This all happens in a split second. I designed the new graphics engine to respond to changes in screen size, too. Now it's possible to play the game in portrait or landscape, in a Window or full screen (or split screen if you're on iPad).

![Wide screen gameplay is now possible thanks to the new responsive graphics](https://willem.com/global/images/98f47b70cb4c.webp)

![Snake '97 running as macOS desktop app made possible by the new scalable graphics](https://willem.com/global/images/6848b7ac140f.webp)

### Differences in processing power

You think a simple game doesn't have to worry about computing power? Wrong! In a game like Snake timing is essential. People play the game with "muscle memory", repeating their yap-tapping on the touch screen without thinking about individual moves.

The game engine must be predictable, it must run constant. But moreover, the experience must be the same wether you're on an old Android device or a 6-core power house like the iPhone X.

![Analysing gameplay speed differences using slow motion video](https://willem.com/global/images/a5e27801afbd.webp)

I used the iPad Pro's high speed video camera to capture Snake gameplay in slow motion. Using the video I could spot differences in speed, frame by fame. This led to an internal benchmarking system (using timers, counting milliseconds) that automatically adjust the speed of the game precisely tuned to your specific device.

## Controls: Touch, Keyboard, Pencil, Gamepad

Players control the Snake using the retro controls (the old phone keypad). The original iOS version of the game used fixed transparent UIButton's that I placed over the photos of the old phone. A simple and effective start.

Unfortunately the buttons provided by iOS had some lag (causing unpredictable delays in input) and obviously didn't scale to different screen sizes. I literally hard coded new coordinates for every new iPhone Apple delivered over the past few years.... not a fun job.

The new game engine uses a trick that I developed for the Android version: dynamically positioned virtual buttons. Using the scaling information that the graphics engine calculates, I dynamically maintain a matrix of X and Y coordinates matching the virtual buttons. When a player touches the screen, the engine calculates the nearest button using mathematics, the Pythagoras theorem.

![The actual code from Snake '97 handling distance calculation using the Pythagoras Theorem](https://willem.com/global/images/6251dc574a72.webp)

This works like charm and effectively makes the entire screen a button. The game is much more fun to play this way. In addition to touch, I added support for the keyboard so that people without a touch screen could play Snake, too.

While I was working on the controls I discovered some more HTML5 goodness, the GamePad API. It enables programmers like me to support gamepads, joysticks and other input devices connected through USB or Bluetooth.

![Controlling Snake using a Super Nintendo gamepad is awesome (using a SuperSmart-joy USB connector)](https://willem.com/global/images/07b9c2f3b1a4.webp)

Supporting different gamepads is challenging, but fun nonetheless. I for sure lost an entire day while "testing" ... perfecting my skills using the formidable SNES gamepad and lovely analog stick from the DualShock controller. ("Sorry darlin, I'm working here...")

![A trick the original Snake couldn't: controlling the game using a Bluetooth DualShock PlayStation controller with an analog thumbstick](https://willem.com/global/images/fa191d607fbb.webp)

## Internationalisation

If you read this, you probably understand English. But for a major part of the Snake '97 audience is non-English. In fact, there are players with more than 30 different languages. From Spanish to Russian, from Arabic to Hebrew, from German to Japanese. You name it, and Snake has it.

Designing an interface that relies on text is challenging if you aim to serve the world. Icons aren't flawless either (different meaning to an image). As UX-designer you have to think of concepts that are broadly used world wide. For Snake, I used an icons of a clock, speedometer, speaker and a trophy. These icons are common all over the world and where chosen precisily for this reason.

![UX-design for an international audience. Designing interfaces without words is difficult!](https://willem.com/global/images/12934c0ebe67.webp)

The app description consists of text that I had translated by a professional translation service. Some other publishers rely on Google Translate - but I know that leads to dismal results.

## World wide ranking

Back in the 90s you got yourself some good street credit if you've achieved a nice score in Snake. In the original versions of Snake '97 you only had your own highscore to beat and on iOS you could upload your score to GameCenter.

For the new version I wanted a more global reach, introducing "world wide ranking". It's the new integrated leaderboard that instantly ranks your game, comparing scores from people all over the world. There are three rankings: all time, 24 hours and last hour.

![World champion of Snake '97 - but not for long...](https://willem.com/global/images/37c761847d86.webp)

The high scores are processed by an incredible 48-core Intel XEON server with a boatload of memory. It runs Debian GNU/Linux, MariaDB, NGINX and NodeJS. During peak hours it handles more than 10 game scores a second. The server setup is worthy of a dedicated blog post that I will write later - so keep an eye on this blog if big data is your thing.

![This is what the cloud looks like, dear boys and girls. ](https://willem.com/global/images/d31a2077c5a4.webp)

## Download now

There is only one way to find out if my work was any good: try it yourself.

- Android (https://play.google.com/store/apps/details?id=com.dsd164.snake97)

- ChromeOS (https://play.google.com/store/apps/details?id=com.dsd164.snake97)

- iOS (https://itunes.apple.com/us/app/snake-97-retro-phone-classic/id438052745?mt=8)

- Mac (https://itunes.apple.com/app/snake-97-retro-phone-classic/id1349761776?mt=12)

- Windows (https://www.microsoft.com/en-us/store/p/snake-97/9nblggh0ccmr)

- Web (https://snake97.com)

Please do let me know if you come across any bugs, you can find my contact info here (https://willem.com/).

![Snake '97 available as free download for iOS, Android, macOS, Windows and ChromeOS](https://willem.com/global/images/5234dd3dd7ae.webp)

---

## Something the smartwatch will never have: patina

*Wear and tear by the hands of time* · 2018-01-21 · https://willem.com/en/2018-01-21_something-the-smartwatch-will-never-have-patina/

A good friend of mine had an issue with his Apple Watch, the digital crown lost a rubber ring causing the watch to lose its water resistance. Apple made no problem of it and offered to replace his "device". While it solved his problem, it felt painful to my watch lover's ears. It made me realise the one thing a smartwatch will never have: patina.

## What is patina and why is it important?

Signs of wear and tear that come from decades of daily use, is what aficionados call patina. Counter intuitively as it may seem, patina on watches is something considered desirable.

![Tudor Oyster-Prince Submariner 7924 (from 1959) auctioned for $93,750 in 2016 (photo: Christie's )](https://willem.com/global/images/08ac2b8ce8f2.webp)

Collectors love the fact it takes time for a watch to become the way it looks today. Countless tiny scratches and occasional scars tell the story of previous owners. One may even imagine inheriting some of the machismo of previous wearers.

When you wear a watch you - quite literally - connect with it. The visible signs of this connection are what makes patina personal and unique. When an old watch is refurbished with a new dial, hands or other major parts replaced, it immediately loses its charm (and value).

## Smartwatches and patina

Like many modern consumer electronics, the smartwatch is only useful for a limited time as it will be replaced by a better, faster newer model within one year. While it will continue to function for some time, it will break down or become obsolete by a lack of software future updates. The smartwatch will simply not become old enough to develop any meaningful patina.

![The Pebble Smartwach is no longer supported by software an will not develop patina](https://willem.com/global/images/77770d30596c.webp)

## Heirloom pieces

Patina can be of incredible value - even if the watch is not that expensive. I consider myself lucky to have these three watches:

![a Zerdax (from the 1960's, worth about €100), a Citizen (1970's ~ €80) and a Seiko (2008, €130)](https://willem.com/global/images/9353a98fbcf0.webp)

These watches where worn by my grandfathers and my father, who all passed away. Their watches all have patina that is unique to them. Scratches, scuffs and dents that where collected while on *their* wrist. These signs of time make these watches worth much more to me than their monetary value.

![Notice the countless microscopic scratches reflecting light like no new watch would](https://willem.com/global/images/b9904cd33e18.webp)

![Among the scuffs and scratches you can see at least three different colours of paint drops](https://willem.com/global/images/c519712bba02.webp)

![The plated gold is worn through, but the watch still shines in sunlight](https://willem.com/global/images/3d7b02bad639.webp)

## Conclusion

When you compare smartwatches with normal watches you must not forget about patina. A regular watch can easily last a lifetime and develop matching patina to prove it.

My friend's Apple Watch was treated as an anonymous "device" when it was replaced because of the loose rubber seal in the digital crown. Imagine my reaction when my watch maker would "repair" my fathers watch by replacing it... I would become very mad!

Even though you may not value patina today, this might be different for the next generation. I am curious how the future generation will look back to the things we value and wear today. I guess that only time will tell... :-)

![Time can only tell how future generations will look back to the Apple Watch ](https://willem.com/global/images/610d58a1e22c.webp)

---

## Lessons from a takeaway plastic bag

*My ever increasing antipathy to planned obsolescence* · 2018-01-08 · https://willem.com/en/2018-01-08_lessons-from-a-takeaway-plastic-bag/

About five months ago I got some take away food from our local Asian restaurant. They packaged the food and gave me a plastic bag to carry it home. On my way home I was thinking about the bag. Although it has some nice styling printed on it, it's designed for single use only. What a waste... making me wonder: how long would it last if you would use it on a daily basis?

![Plastic bag from the Asian takeaway restaurant](https://willem.com/global/images/be0a79d6abf6.webp)

During a normal work week I regularly bring lunch along from home. My wife is a lovely cook and it's no punishment to eat leftovers for lunch the next day. I use the plastic bag to wrap the (reusable) box inside my commuting backpack, to protect the rest of the contents from possible (but rare) spills.

![Plastic bag at work, with food inside protecting the contents of my commuting backpack](https://willem.com/global/images/c4ebbc8d1643.webp)

As I commute by bike (https://willem.com/en/2017-12-02_commuting-by-bike/) the contents of my bag are exposed to shocks and shaking as I encounter my daily dose of holes, bumps and skewed sidewalk tiles...

## ... six months, 2000KM and counting!

Guess what? After five months of riding along, covering a distance of about 2000KM, it's still fine. For sure there are some signs of wear (few holes here and there), but the bag is still functional. It's fine, I could use it to carry takeaway food home just like when it was new.

This was somewhat shocking to me as I realised the sheer amount of plastic bags I've thrown away over the years... such a waste. But moreover, I realised that this wasn't just about bags. I realised that many other products I use are like the plastic bag: designed to be disposed.

## Buying new products

Every year I buy a new smartphone and a computer. As developer I create websites and apps. It has always been a "no-brainer" to me: I use them to for my work, therefore I buy them. Every year.

Usually I sell the "old" machines or give them to family. But over the years there are a few devices that stuck along. Inspired by the everlasting plastic bag, I decided to have second look at these devices:

### Smartphone

Consider the following smartphone for a moment, with these specs:

- 4.95" screen size (high quality IPS panel)

- 1080x1920 pixels at a 445 pixels per inch (PPI)

- 2,26Ghz quad-core processor 

- GPS, WiFi, Bluetooth, NFC

- Wireless charging 

- 3G and (fast)4G

- Latest and greatest apps available

... then guess what year this phone is from? It's the LG Nexus 5 from 2013. That phone is now more than 5 years old!

![LG Nexus 5 running the latest version of Chrome (v63)](https://willem.com/global/images/11c4aeaadbc1.webp)

The Nexus 5 is still supported by Google Play and you can download (and use) modern apps. It still runs the latest version of Chrome. I use it to test apps and websites for my work. It may not be as fast as an iPhone X, but ain't bad at all.

Like the plastic bag, the Nexus is holding on just fine. It would still function as a smartphone today.

### Laptop

Another example, consider this laptop, with the following specs:

- 12" wide screen IPS display

- 64bit Intel Processor (2.13Ghz, multiple cores)

- 8GB RAM

- 1TB solid state drive (SSD)

- Wifi, Bluetooth, LTE/cellular

- Battery life of 10+ hours

... sounds impressive? Like modern day Apple MacBook impressive? These are the specs from my ThinkPad X200 from.... 2008! Yes, *ladies and gentlemen*: 10 years old!

![ThinkPad X200 running Debian GNU/Linux with OpenBox.](https://willem.com/global/images/8e9408e3241b.webp)

ThinkPads are renowned for their durability and serviceability. This X200 is the living proof. I upgraded the RAM and installed a SSD (with incredible ease, just using one standard screw driver).

![Upgrading the ThinkPad X200 memory and SSD is easy. ](https://willem.com/global/images/a8dbfe0dcad0.webp)

I installed Debian GNU/Linux with OpenBox (a minimal, light weight Window Manager) and it runs superbly smooth. The fantastic keyboard in combination with Linux still makes this machine a perfect terminal.

## Planned Obsolescence

That I replace my devices every year is the result of something people call "Planned Obsolescene". It's a design strategy of making products with an artificially limited useful life. The idea behind this strategy is to reduce the time between repeat purchases in order to increase the long-term sales volumes.

There are few types of planned obsolescence that you can easily recognise in modern day products, including consumer electronics:

- **Contrived durability**: is a strategy to make a product break down quickly, by using inferior or brittle materials and parts. *Like: Glass parts in smartphones, plastic hinges in laptops*

- **Hindering repairability**: is a strategy to make a product difficult to repair or service, by sealing, glueing or bonding it in such a way that it's impossible to disassemble. *Like using weird screws or laminating display parts*

- **Fashionable desirability**: is a strategy to make a product perceived less desirable, by introducing new aesthetics in fashion cycles. *Like colours, screen shapes and curves*

- **Diminishing functionality**: is a strategy to make a product loose functionality, by excluding it from software updates or limiting it's network driven features. *Like apps that worked perfectly fine are no longer supported because of the introduction of a new version that is incompatible with your product*

## Conclusion: Takeaways from the takeaway plastic bag

Although my old smartphone and laptop still work fine, I need the new devices to test my websites and apps. That's because of you, dear reader; because you want this text to appear correctly on *your* modern screen.

But luckily this only applies to my professional gear, the same does not apply to all products I use. Things like my bike, TV, bag, clothing, shoes and various household devices.

If there is something you'll takeaway from my takeaway plastic bag: ask yourself if you *really* need the latest device - or are you being tricked by planned obsolescence? Be conscious, be aware!

You can save yourself a lot of money and while doing so you're much nicer to the environment.

![Dopper - the bottle is the message](https://willem.com/global/images/ade1eac2da8c.webp)

A small way to start is to stop using single-use plastic bottles. Get yourself a decent, reusable bottle. A good example is Dopper, I got one for my birthday from my wife. Designed to last, easy to clean and easy to repair (it's parts are sold separately and are interchangeable).

Let's fight planned obsolescence together!

---

## Commuting by bike

*One week (240KM) on the VanMoof Electrified S* · 2017-12-02 · https://willem.com/en/2017-12-02_commuting-by-bike/

For a few years now, I commute to work using a bicycle. I have lost more than 15KG since I stopped using my scooter. This week I tested a VanMoof Electrified S, an electric bike with an industrial, minimal design. Is it any good? How does it compare to a normal bike? Will an electric bike make you lazy? Read along to find out!

## VanMoof

Founded by two Dutch brothers, VanMoof is focused on making the perfect city bike. Their bikes are strong, tough enough to survive life in a city. Many of the parts (80%) are designed and produced by VanMoof themselves. Their design teams sit right above the store, close to all the action and right in the middle of the city. They love their bikes.

![VanMoof's founders, brothers Taco and Ties Carlier](https://willem.com/global/images/e3e837268217.webp)

## Electrified S

The Electrified S is *the result* of all VanMoof's efforts to design the perfect bike. It's a bike designed for cities, for commuting, to get from A to B, hassle free. It has an anti-theft tracking system and integrated lights. But it's best feature is the hidden battery and electric motor.

![VanMoof Electrified S - an e-bike with secret superpowers - a rocket disguised as bike](https://willem.com/global/images/f4cfa52e66d2.webp)

![The inners of the Electrified S: the battery and electronics are cleverly hidden inside the bike's frame](https://willem.com/global/images/f2a95e452ec1.webp)

The bike is available in black, grey and white, available with various options for carrying luggage. It's engine delivers 250W of power, meaning you don't need a driving license, insurance or registration plates. By EU-law the Electrified S is considered to be a normal bycicle, not a moped or scooter like the faster pedelecs are.

### Specifications

- **range** 60KM (full power mode) ~ 120KM (economy mode)

- **weight** 21KG (measured with chain lock)

- **engine** 250W front-wheel hub motor

- **battery** 418WH battery, integrated into the frame 

- **speed** 32KM/H in the United States or 25KM/H in EU-countries

- **charging** from 0 to 100% in 6 hours

- **size** suitable for riders of 170 - 210CM

- **tires** Schwalbe Big Ben on 28" wheels

- **brakes** front and rear mechanical disc brakes

- **lights** integrated lights powered by the battery, activated by sensors

- **chain and gears** fully enclosed anti-rust chain and SRAM automatix gear system

- **price** € 2998 (at the time of writing)

The bike's battery is the most expensive part of the bike. VanMoof indicates that the battery will last for about 1000 charge cycles (after which it will loose its capacity). Replacement batteries are available for about €600. This mandatory maintenance is something you should take into account (just like other means of transport require maintenance too).

## One week on the bike...

Usually I go to work by bike, cycling about 160KM a week. Depending on the weather I use a road racing bike or a normal city bike. My commute is a 16KM ride that I complete in about 40 minutes. The route takes me through Amsterdam and the Dutch country side (with lot's of windy open fields, the so-called 'polder').

I had the opportunity to test the VanMoof Electrified for a week, riding it through and through. What could possibly interfere with me riding the perfect bike?

### ... in Dutch weather

![Rain radar image during test riding the Electrified S (source: knmi.nl)](https://willem.com/global/images/8cd61993c816.webp)

They say that there is no such thing as bad weather... only bad gear. Despite the rain, cold and wind I took the bike and drove it during my daily commutes.

![That smile is not because of the fantastic Dutch weather... it's because of that rocket disguised as bike ](https://willem.com/global/images/3a19d2010c3b.webp)

The VanMoof Electrified S turns a common commute into a joyride! You go faster and more easily through the wind. That makes you smile, it really does!

![Dutch bike, Dutch weather: The Electrified S handles the dark, cold and wet conditions easily!](https://willem.com/global/images/4dc32f2dd921.webp)

### Unlocking the bike

The Electrified S is a SmartBike, it connects to your smartphone by Bluetooth. You can unlock the bike by simply touching it (it detects your presence by the signal of your phone).

![Unlocking the bike using a smartphone](https://willem.com/global/images/23e4266dcc54.webp)

### The VanMoof app

In addition to unlocking your bike, you can use the app the check the status of the battery, the location where you've parked it and configure things like the lights and speed.

![The VanMoof app](https://willem.com/global/images/8ab2b8fffeed.webp)

The Electrified S is limited to 25KM/H in EU-countries. However, the app provides you the option to change that into 32KM/H or 20MPH (to comply with US laws). VanMoof recommends to keep the local police happy by sticking to your country's limits... a recommendation you can choose to ignore.

### Anti-theft and "Piece of Mind Service"

The bike has a GSM integrated into its frame, making it possible to remotely track its position. It doubles as anti-theft tracking system. Stolen bikes get tracked down. With their "Piece of Mind Service", VanMoof offers you the guarantee that if your bike gets stolen and it can't be recovered within two weeks, they'll replace it.

![Out in the open: the Electrified S](https://willem.com/global/images/6ce115a6c7b1.webp)

## Riding the electric bike

The bike rides like any other bike: no need to learn any special controls or tricks. The engine only kicks in when you cycle. It support your efforts, it doesn't move by itself. You can choose from 4 levels of electrical support.

![Riding the VanMoof through the Dutch country side](https://willem.com/global/images/f7727d33bcca.webp)

![VanMoof Electrified S](https://willem.com/global/images/8c09d43aa3a6.webp)

The bike is well balanced and handles well. The extra weight of the battery and engine adds to the confidence the bike gives you riding. It feels like a tank while being as agile as a roadster.

It's ease of use and the extra speed make the Electrified S a very nice bike to ride. During rush hours I very often were faster than cars and busses.

![Smile inducing speed advantage over other traffic during rush hour](https://willem.com/global/images/8ffd740ccf82.webp)

### Steering and charging

Because of the display is integrated into the frame it is better protected against bumping into other bikes when parking the bike somewhere in the city. Right underneath the touchscreen you'll find the charging connector and a button to manually power the bike on or off.

![The bike features a sporty city steer and an integrated touchscreen in the frame](https://willem.com/global/images/0e601d18853c.webp)

![The dashboard indicates current speed, battery level and engine performance](https://willem.com/global/images/999dbe442e25.webp)

![Dashboard and charging connector are integrated into the frame](https://willem.com/global/images/740cc0925e67.webp)

![The charing port is hidden behind a rubber flap. ](https://willem.com/global/images/2c1de5b1fab0.webp)

### Electric engine

The motor is integrated into the front hub. It very much looks like a normal wheel front wheel hub, only slightly larger in diameter.

![Front hub electric motor](https://willem.com/global/images/455e4deeb657.webp)

![The booster button, conveniently positioned near the left thumb  ](https://willem.com/global/images/0986841bdbba.webp)

For those moments that you need a little bit extra help you can use the booster button. It (temporarily) increases power from the engine.

I used it leaving traffic lights or whenever I climbed a bridge. It's useful because it allows you to use the electrical system in economy mode (for longer range) while still being able to quickly unleash the electrical superpowers.

### Lights

Both lights are integrated into the frame. Like the touchscreen, this means the lights are better protected against bumping into other bikes. They are bright and do their job very well.

![Front light is integrated into the frame](https://willem.com/global/images/dcd8dc5d44fc.webp)

![Rear light is integrated under the seat post](https://willem.com/global/images/eceeee6deb62.webp)

One disadvantage of the rear light is that if you use a rear carrier, child seat or a long  jacket - the light gets blocked. Other bikes like the_Sensa_Cintura (https://willem.com/en/2018-02-24_creating-the-ultimate-commuter-bike/) use an ILU light that is integrated in the rear mud fender. Depending on your use, that may be better.

![ILU integrated light on the Sensa Cintura Belt Drive bike - it doesn't get blocked by rear luggage, child seats or a long jacket](https://willem.com/global/images/1cbdf3c77223.webp)

The chain guard 'floats' around the chain: it is not attached to the frame. It's made from flexible plastic. This makes it resilient to damage.

![Chain guard made from flexible plastic is resilient to damage](https://willem.com/global/images/4836e8544b9f.webp)

### Gears

The bike is equipped with a SRAM Automatix two gear rear hub. The two gears have a ratio of 1:1 and 1:1.37. The bike automatically shifts up at approximately 18KM/H. This is fine when you are using the electric engine, but it makes cycling without electric support very heavy... which I found out the hard way (when I ran out of battery power).

![SRAM Automatix two speed gear hub - hate it or love it](https://willem.com/global/images/9511abada85a.webp)

A manual gear system (like the Shimano Alfine) gives you more gears and would make the bike nicer to ride with less or no electric support. The Electrified S would benefit if VanMoof would offer this as an optional upgrade.

### Tires and brakes

The bike comes with Schwalbe Big Ben tires. As the name suggests, these are big fat tires. They are nice, give the bike great traction and limit the chance you get stuck in tram rails...

![Big Ben tires from Schwalbe](https://willem.com/global/images/e43147ce4f26.webp)

![The mechanical disc brakes have no trouble stopping you](https://willem.com/global/images/0711394fd530.webp)

In combination with the enormous grip the Big Ben tires provide, the mechanical disc brakes do their job well. The bike brakes very well, even in wet conditions. On a fast electric bike this is no luxury, but an absolute must!

### Carrying things around

The bike I tested only had a small luggage compartment used for the chain lock. You can opt for a front or rear carier.

![Lock chain inside a small luggage compartment](https://willem.com/global/images/9bce552575e0.webp)

![The optional "bambooman" front carrier can be quite handy (photo from another bike, my VanMoof S5)](https://willem.com/global/images/4aa427374643.webp)

### Range and running out of power

When using the most powerfull setting, the bike has a range of about 60 kilometers. During my week I ran out of power once, after 55KM, in heavy wind, the engine stopped. That was not a problem, lights and the bike lock still functioned and I continued home using manual pedalling power only (comfortably riding at 22KM/H).

## Test: Electrified vs normal bike

One thing I immediately noticed was that it is much colder on the electric bike (compared to a normal bike). I quickly figured this is because I am going faster and I am doing less. This is easily solved by a good pair of gloves and a warmer jacket, but it made me wonder: would I become lazy using the e-bike?

### Measuring heart rate

I decided to find out how much less effort my body had to deliver when riding the e-bike. In order to find out, I decided to compare the Electrified S to a normal bike, another similar VanMoof, but without an electrical engine.

![Normal (non-electrified) vs Electrified bike](https://willem.com/global/images/4ee4fa7f5b44.webp)

Using a waist worn heart rate monitor, I measured how much work my own body did. Higher heart rates indicate more physical effort.

![Using the Cyclemeter Pro and a Wahoo Tickr I measured speed and performance during the test](https://willem.com/global/images/dc29cd2256b9.webp)

I drove both bikes over a nearby circuit with roads in all directions (compensating for wind). Between laps I rested long enough for my heart rate to go back to rest. I did two laps on each bike: one "easy riding" at ±20KM/H and one "full speed" at ±30KM/H.

![Measuring heart rate at different speeds on both a normal and electric bike](https://willem.com/global/images/ca194f444a77.webp)

- **lap #1**: Non-electrified at ±20KM/H ~ 130BPM

- **lap #2**: Non-electrified at ±30KM/H ~ >180BPM

- **lap #3**: Electrified at ±20KM/H ~ 110BPM

- **lap #4**: Electrified at ±30KM/H ~ 150BPM

It is not surprising that your body is working harder on a normal bike. At full speed, this is really intense, you'll get tired quickly. My heart reached rates up to 195 BPM, considered very high for somebody of my age.

![Histogram of time and heart rate, showing how long (% of total time) a given heart rate was measured. (blue is electric, red is normal)](https://willem.com/global/images/eedf6df533b3.webp)

The test shows that if you ride slowly on an electric bike, you're not working out that much (indicated by the very low heart rate). But at higher speed you are in fact still working out!

## Conclusion

After one week with the VanMoof Electrified S during which I cycled about 240KM, I can say that this is in fact a very good bike. Commuting to work on this bike is fun. It's speed advantage gets you from A to B faster, its powerful engine saves you any sweat.

The electric advantage makes commuting on this bike much easier and less of a physical effort. All of this while your body still burns calories. If it works for you obviously depends on where you live, but I definitely recommend anyone to try!

![In case you're still in doubt: electric mobility is the future and is here to stay.](https://willem.com/global/images/9edfc8e27c88.webp)

---

## Collecting health data with Biostrap

*Wearing a clinical-grade photoplethysmography (PPG) sensor for a month* · 2017-11-15 · https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/

Most wearables (smartwatches, fitness trackers, etc.) use very basic sensors to capture heart rate. Their signal is binary: just counting beats. Biostrap is different, instead of just checking pulses, it captures a high-fidelity PPG waveform. These waveforms are the same kind that doctors use, making me wonder what I could learn from them!

## Health data

One thing I learned from wearing an Apple Watch is that I like health data. You can learn a lot about your body by measuring biometrics, such as heart rate. It's not just for athletes, it's my experience that heart rate indicates:

- how fit you are

- if you're physically active 

- how well you slept last night

- what influence longer or shorter nights have

- how fast you're recovering from alcohol, partying or drugs

- if you're under (emotional / work) stress

Best insights are gained over a prolonged period of time. Results are personal, what may be good for me can be totally different for you. It depends on your age, gender, fitness etc. I find it useful to know what (small) things in my daily routine have effect on my well being. With minor tweaks in your lifestyle you can feel a lot fitter, you would be foolish not to try!

## Wearing a sensor

Earlier this year I wore an Apple Watch, but like I wrote about it here (https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/), I still prefer an mechanical watch. I just don't like the manditory daily charging and extra attention the wrist mounted computer demands (buzzing, flashing, beeping, etc.).

### Meet Biostrap

It's an exercise in minimal design: no screen, no buttons, no buzz, no sounds; it's just a rubber strap that contains a sensor. You wear Biostrap on the wrist (either left or right) and you can combine it with any watch.

![Unboxing Biostrap: it comes well packed in a nice box. ](https://willem.com/global/images/d431d11fbb33.webp)

Biostrap comes in a small box with three different coloured straps, a charger, two sensors and a friendly "Thank you". Here in Amsterdam you can only get your hands on one by ordering it online.

![The box contains three straps, charging cable, charger and two sensors](https://willem.com/global/images/77e64ceddc47.webp)

Brace yourself for customs charges though... importing one from the United States isn't free in this *lovely tax burdened country* called "The Netherlands". You can order it at biostrap.com.

![Biostrap sensors size compared to an Apple AirPod](https://willem.com/global/images/bad36eb149aa.webp)

There are two small sensors, one that sits on your wrist and one that you can (optionally) click on your shoe. By combining data from two sensors Biostrap can recognise different activities and workouts. But for this experiment I was interested in the PPG-sensor, I did not use the shoepod (as I cycle a lot with different kinds of dedicated sensors, like cadence, speed, power etc).

![The Biostrap wrist PPG sensor next to a Swatch Sistem 51](https://willem.com/global/images/a8cc29662e04.webp)

![The Biostrap PPG sensor is about as thick as a watch](https://willem.com/global/images/d126ce02dba2.webp)

Compared to a normal watch you can see that the wrist mounted sensor is pretty small.

![On the bottom you can see the two red LED's and the PPG sensor. Just like the Swatch Sistem51 movement this is hidden when worn on wrist](https://willem.com/global/images/b2e34e39ab0e.webp)

On the rear you can see the sensors. The two red LED's light illuminate the inner flesh and blood of your arm. In between the LED's is the sensor, it captures the intensity of the red light reflecting from your arm. That enables Biostrap to capture a waveform of the blood flowing through your body. Pretty awesome stuff, I'd say.

![Biostrap it's pretty much just like a Swatch, light on the wrist because of it's material: rubber and plastic.](https://willem.com/global/images/518d6ab1e50e.webp)

![Biostrap on the wrist - now you see me...](https://willem.com/global/images/2a72820dd1f3.webp)

![... now you don't - Biostrap wears well and easily goes under your sleeve](https://willem.com/global/images/aff50a2476dd.webp)

## Data

About once every 10 minutes Biostrap tries to record a PPG waveform. This only works when you're at rest. If you're moving (too much) the recording is disregarded. Captured data is analysed by cloud services from Biostrap.

![Instead of just counting beats, the Biostrap cloud services analyses the PPG waveform captured by the sensor. ](https://willem.com/global/images/994904d7956e.webp)

Every single beat is analysed for 29 different parameters, then analysed against all other heartbeats from the last 24 hours. On a good day Biostrap captures about 2000 beats - that's a lot of data.

![Biostrap iOS app dashboard and daily heart rate](https://willem.com/global/images/a35855c69135.webp)

You can access your data through an easy to use app. Once opened you are presented a dashboard with the measurements of 'today'. You navigate through time or by specific biometric (like heart rate, oxygen saturation or respiratory rate).

The algorithms analyse the waveform and determine not only heart rate, but also respiratory rate, blood oxygen saturation and heart rate variability (HRV). The latter is considered an essential indicator to measure biological health (versus chronological health).

![Heart rate variability (HRV) as measured and explained by Biostrap  ](https://willem.com/global/images/a88ef8df34d7.webp)

Heart rate variability (HRV) is relatively new and unknown to many. It measures the gap between individual heartbeats. The higher the variability between gaps, the better rested you are. Lower variability means you could be stressed or overworked. HRV has been linked to hypertension, obesity, diabetes and problems with the immune system.

![Comparing the quality of sleep during two different nights. Being awake more often reduces quality of sleep. ](https://willem.com/global/images/97771b6b7344.webp)

Biostrap is at best when you're at rest: it does comprehensive sleep analyses. Inside the strap is a gyroscope, measuring movement. It detects how still you lay. Combined with the PPG measurements this provides insights in how restful your sleep was.

## Insights

With Biostrap you really get a lot of detailed data. I like that, but it can be overwhelming. That's why the app does some of the analyses for you and provides you with insights. Such as an alert that whenever you had a bad night, you should take it a bit easier during the day.

But if you're like me, you can go through the data yourself. You can find amazing insights and patterns. Take this graph for instance:

![Recovery after an heavy Thursday night can take up to days](https://willem.com/global/images/9034203c16e9.webp)

This graph shows my respiratory rate (the amount of breaths I take per minute). Lower is better, as it means you're more comfortable. You can clearly see that something serious happened at Thursday night, causing elevated rates for the entire week!

The story behind this graph is that I fell with my bike and injured myself. Although I didn't break anything, I did feel pain for days. This is clearly reflected in my respiratory rate.

## Limitations

Although I really like Biostrap, it is currently limited because it only measures well when you're at rest. It's unaware of your heart rate during exercise. This tends to create a bias when looking at average heart rates during the day. The good news is that the Biostrap app allows you to automatically export your data to Apple HealthKit.

![Apple HealthKit aggregating data from different sources and devices](https://willem.com/global/images/09207d4e4389.webp)

Using HealthKit I can aggregate the data from different sources and devices. Like my Wahoo Tickr that I use on my racing bike. I can imagine that data collected now will be available for years to come. For as long as I keep on using Apple HealthKit that is... (although Apple does in fact provide a way to export your data, neat!)

![Charging Biostrap is easy - Battery lasts up to 5 days](https://willem.com/global/images/3033656f0863.webp)

Battery life is about 4 days, that works for me but more is always better. I guess wearable health sensors is *another* field in need for a battery breakthrough. Luckily Biostrap charges quickly, from 0-60% in less than one hour.

## Conclusion

I care a great deal about my health. I only have one body, I better make sure I treat it well. Collecting biometric data on a regular basis helps me keep track of the condition of my body.

![One month of Biostrap health data](https://willem.com/global/images/c4d934460ea9.webp)

This is just one month of data, but imagine that you have collected years of data. You would be able to find patterns and diagnose problems before you actually experience health problems. Especially if you are able to compare your life signs with those of other people; both healthy and sick.

I truly believe that in the next decade wearable health technology will continue to evolve into smaller, less obvious things. It will become a part of our lives as it will contribute to our understanding of our health. For sure I'll continue collecting data!

---

## From tree to table

*Designing and creating a night stand* · 2017-10-23 · https://willem.com/en/2017-10-23_from-tree-to-table/

Right next to the house were I was born there was this chestnut tree, sadly it died one and a half year ago. When it was taken down, my brother saved me a slab of wood. I intended to create something from it, a nice "do it yourself" adventure, worthy of a blog post!

![The chestnut slab wood on bench](https://willem.com/global/images/27b64214cde5.webp)

## Designing a night stand

I wanted to create something from the three that I would use frequently. It turned out to be a night stand, a small table next to my bed. To make things interesting I set out a few design objectives:

- use the entire slab of wood

- do not use screws or metal for the structure

- the "tree" should be visible in the end result

- about 50 centimeters high

Before doing anything I measured the slab of wood. With the measurements I worked out a design that would use the circular shape of the slab to achieve the appropriate height.

!["Willem.com" night stand - Designed on iPad](https://willem.com/global/images/1f59c6785b48.webp)

The slab contained a large crack that I had to work around. Basically the design cuts the slab into four pieces (right along the crack). The pieces are bonded together to create a "folded slab design". If done well - the idea was - I would not need any metal parts to support the structure...

## Smoothening the slab

My brother used a chainsaw to get me this slab of chestnut tree. The chainsaw left a lot of marks on the wood that I had to smoothen.

![Sawing off rough edges](https://willem.com/global/images/e717b7957e3b.webp)

![Sanding the slab of wood](https://willem.com/global/images/571618703c8f.webp)

I used a Bosch Multitool for sawing and sanding the surface. After some hours of work, both sides of the wood where smooth enough to saw the slab of wood into the pieces designated by the design.

![Multitool sawing](https://willem.com/global/images/69f61bc1fa8e.webp)

![Sawed pieces on work bench](https://willem.com/global/images/0a6a2955391b.webp)

![Testing the design concept](https://willem.com/global/images/d17ba6ef1c90.webp)

## Sticking it together

In line with the design I wanted to connect the pieces witouth any visible means, no screws or metal pieces.

![Drilling holes for the wooden pins](https://willem.com/global/images/841d47337036.webp)

I drilled holes and used wooden pins to achieve enough strength (in combination with glue).

![Glueing together](https://willem.com/global/images/4e53b2582eae.webp)

![First connections made](https://willem.com/global/images/b00da7d1d6bb.webp)

After glueing the two angled pieces I let them dry in the afternoon sunshine.

## Transparent Lacquer

As a product of nature wood has an interesting texture because of its nerves. In this particular tree you could see the "year rings" in the wood. Due to changes in the seasons and weather, the speed of which the wood grows differs from time to time. I wanted to maintain these lines of life and chose a transparent lacquer.

![Two pieces on bench, painted.](https://willem.com/global/images/b711a61aa3d6.webp)

### Again and again

After applying the lacquer I sanded the surface again and again. Every time I used a finer sanding paper; I stared with 60 and went all the way up to 400.

![sanding again](https://willem.com/global/images/b12b6b9e06eb.webp)

![Fresh lacquer... again](https://willem.com/global/images/4429473db95e.webp)

![... and again](https://willem.com/global/images/29080dd62f67.webp)

## Result

Many hours later the result is a night stand with a very smooth surface in an original design.

![Result (design fully visible)](https://willem.com/global/images/6e6f489021b3.webp)

![Smooth surface detail](https://willem.com/global/images/93c1840d0aaf.webp)

![Wood nerves nicely visible throught the transparent lacquer](https://willem.com/global/images/df8a7e7a22b8.webp)

![Drilling holes for wheels](https://willem.com/global/images/68d8c3068a60.webp)

I mounted three wheels for easy moving (and some additional height). I choose three to prevent the stand from wobbling. I used metal rings to allow fine-tuning the angles (as the wooden slab isn't perfect flat).

![Wheel with ring](https://willem.com/global/images/6a12ba6c62e8.webp)

![Result on garden table](https://willem.com/global/images/0150624dde31.webp)

![Lacquer finish is fantastic](https://willem.com/global/images/45dbefa83acf.webp)

![Night stand next to the bed](https://willem.com/global/images/40c78fa52cc6.webp)

It was an interesting experience doing some "do it yourself" wood design. Just take your time and don't rush yourself. I had a lot of fun and can recommend it to anyone. In fact I had so much fun that I probably will do it again!

---

## Saving a MacBook Air with exploded battery

*Don’t try this at home - but I did* · 2017-09-14 · https://willem.com/en/2017-09-14_saving-a-macbook-air-with-exploded-battery/

Last night I had a nasty surprise: my original MacBook Air was swollen due to an exploded battery. I immediately had to take action, for reasons of safety and  to preserve this piece of modern computer history. Don’t try this at home, but if you do... read along for some practical tips.

## MacBook Air

Steve Jobs introduced this MacBook Air during the 2008 Macworld conference. Its an original MacBook Air from 2008. He pulled it out an envelope to demonstrate its thinness.

![Steve Jobs unveiling the MacBook Air in 2008 from a vanilla envelope](https://willem.com/global/images/6a444211bc7c.webp)

It was one of the first laptops to ditch the optical drive, have limited ports and to offer solid state flash memory. Often it’s described as the original blueprint for modern Ultrabook laptops. It was a very expensive computer, €3600 for this topped out model with SSD!

![The original MacBook Air: Groundbreaking due to its thinness and lack of ports](https://willem.com/global/images/e300a9fb99a7.webp)

## Swollen battery

When I wanted to use this laptop, I noticed the case was swollen and deformed. I immediately suspected that this was caused by a battery explosion; as there are very little other parts inside the MacBook Air.

![This laptop is not supposed to have a bobble...](https://willem.com/global/images/b0dc65a92cc8.webp)

![The keyboard and casing is deformed](https://willem.com/global/images/8d9bcac8527e.webp)

It is very important **not** to power on a laptop with a faulty battery, and disconnect it from power immediately! Failing battery packs can cause fire and acid burns.

![That bobble is not supposed to be there.., causing the keyboard to be bend](https://willem.com/global/images/76ad45d6ed3c.webp)

You should go to an Apple Store for support. Apple is keen on exploding batteries and offers help, even if your computer is out of warranty.

## Saving it

This particular machine means something to me: it was my very first new Apple laptop, I used it to write my master thesis and gave it to my late dad for him to use as his first computer to access the internet. No replacement computer would be good enough, I had to save *this* one.

So without hesitation I took my special micro screw drivers and went on to open the deformed MacBook. Opening the MacBook air can be done by removing the bottom lid.

![Opening the MacBook Air is possible by removing the bottom lid.](https://willem.com/global/images/243107d2b067.webp)

When you open a laptop (or any piece of electronics) you should remember what screw came from what hole. I place the screws in a specific pattern that matches the layout of the screw holes. This way I can always fit the screws back in the same order as they came out.

![Make sure to remember what screw went where... ](https://willem.com/global/images/c22a24752c99.webp)

Be very careful if you suspect battery damage. Be sure to do this at a save place where acids or even fire can be easily controlled. Like outside - or somewhere near a fire distinguisher. Never touch chemicals leaking out battery packs!

![The damage to the battery pack is clearly visible](https://willem.com/global/images/d779fb654228.webp)

Once opened I confirmed that the battery pack caused the trouble: it was swollen and cracked at its centre. I carefully examined the exploded battery to determine it was safe to remove it.

![Swollen and cracked. I carefully looked for any leaks.](https://willem.com/global/images/c4fd42293ba7.webp)

To remove the battery I used a plastic piece to disconnect the wires from the MacBook’s logic board. Plastic because it does not conduct electricity and I did not know for certain if there where any (crazy) currents on the connector. Better be save than sorry, I guess.

![I disconnected the battery from the logic board using a plastic tool (that does not conduct electricity).](https://willem.com/global/images/deadb40347b6.webp)

Once removed the deforming is clearly visible. The MacBook’s unibody case snapped back to its original shape after I removed the battery pack. With the battery removed it was safe to see if the computer could still be powered on.

![Once removed the deformation in the battery pack is clearly visible](https://willem.com/global/images/9363647beb56.webp)

![This battery is dead.](https://willem.com/global/images/a0da0ca74e2c.webp)

After I put the MacBook back together I connected the MagSafe power adapter. It took some time, but there it was, the famous Apple startup sound: it worked!

![The MacBook is back alive, greeting me with its boot screen.](https://willem.com/global/images/a06c63362cd2.webp)

![MacOS X correctly concluded that there are no batteries available, it works fine using a Power Adapter.](https://willem.com/global/images/8412e2be42ad.webp)

Obviously the MacBook now only works when connected to a power cord. That’s OK for me as I use it to convert music CD’s to lossless audio files using an old version of iTunes (I will write about that some other time). I can always use Ebay to find another battery pack. For now I am happy I saved this computer.

---

## Climbing Mount Etna

*Visiting an active volcano on Sicily, Italy* · 2017-09-02 · https://willem.com/en/2017-09-02_climbing-mount-etna/

Last week me and my wife went to Sicily for a little summer holiday. It is the largest island in the Mediterranean Sea. It is an autonomous region of Italy, along with surrounding minor islands. It's home to Europe's largest active volcano: Mount Etna. We had a chance to visit this lava spurring monstrosity and it was quite the experience.

## Volcanic region

Sicily and its surrounding small islands have some highly active volcanoes. Italy contains the only active volcanoes on mainland Europe. This is mainly because Italy is near the boundary of two tectonic plates. Magma erupting from Italy's volcanoes is thought to be the result from the upward forcing of rocks melted by the subduction of the African plate below the Eurasian one.

![Overview of tectonic plates (image: USGS)](https://willem.com/global/images/d42d14eb1b32.webp)

## Mount Etna

The Etna is the largest active volcano in Europe. It's more than 3300 meters tall and its basal circumference is 140 kilometres. It's big and clearly stands out in the scenery. Every day smoke is coming from it's summit, consisting of steam and gasses.

![Etna is big enough to see it from space (NASA Earth Observatory)](https://willem.com/global/images/0ec7ae998d59.webp)

If you approach the volcano you're in for a treat in terms of scenic change. The higher you get the more extra terrestrial the environment looks. You can drive by car up to the Rifugio Sapienza. That's a base station from where you can go up the volcano.

![Lateral crater from 2001 - but if you look closely you'll notice many additional craters further below](https://willem.com/global/images/e453230babb7.webp)

![Rough terrain](https://willem.com/global/images/a46a3ead52dd.webp)

![Mountaineering like a pro... of sorts. :-)](https://willem.com/global/images/e83069bf085d.webp)

## 300+ Craters

Near the base station are a few recent craters which you can climb. Although the volcano summit stands out most clearly, there are more than 300 additional craters from which the magma has erupted in the past. It's quite incredible to realise this when you stand on mount Etna. These lateral craters can come out of nowhere and have done so several times before.

![The higher you get the rougher the terrain becomes](https://willem.com/global/images/c935c8003d76.webp)

From Rifugio Sapienza we took the cable car up to the upper station at an altitude of 2500 meters. From this upper station you can take a special terrain bus that takes you up to about 2900 meters. From there you can only go higher under guidance of a professional guide.

![The white/yellow on the Etna summit is sulphite - not gold... according to our guide](https://willem.com/global/images/741b5d872a01.webp)

Breathing is a little different at higher altitudes as there less oxygen because the air is thinner. You just have to take it easy and don't be too quick when climbing the craters.

![One can only image the forces of nature judging by these craters. ](https://willem.com/global/images/463b817ece26.webp)

## Volcanic dessert

The view is amazing. Our guide explained that there is practically no vegetation in this volcanic dessert. Everywhere you look there are rocks, old magma and lots of dust. Because of Etna still being active you can really see the difference between "fresh" and old lava flows.

![Fresh lava, just a few months old, clearly recognisable](https://willem.com/global/images/5798343a0f56.webp)

![These craters are the result of explosive magma eruptions](https://willem.com/global/images/240fd6ee0e7c.webp)

Most of the terrain is dark grey or black. Some parts are browner. This is because inside magma chambers all kinds of minerals are melted along with the rocks, including elements like iron. When the volcano erupts these elements come out, too. The brown colour you'll see is the result of oxidation of iron particles inside the pyroclastic material. In a way, the rocks are rusting. :-)

![The brown color is oxidation iron, or simply "rust"](https://willem.com/global/images/44523864ab91.webp)

## Volcanic heat

Our guide took us into the crater that erupted in 2002/2003. For humans that's some time ago, but at a geological scale that's still very recently. The crater is still hot.

![Our guide, Peppe, uncovers some dark patches on the crater. Steam escapes from it - you can literally feel the heat!](https://willem.com/global/images/8260f3221e11.webp)

![The view is spectacular.](https://willem.com/global/images/0fbc383ebb5f.webp)

In fact, you can see smoke coming from inside the rocks. It's quite the thing if you're standing next to it. You can feel the heat with your bare hands if you move some dust and rocks aside.

![Not your typical busses. These 4x4 vehicles double as emergency escape cars in case of eruption.](https://willem.com/global/images/ebf66d3764c8.webp)

![The summit of Mount Etna](https://willem.com/global/images/06eecea2a244.webp)

![An overview of the craters - notice how it is kept up to date :-)](https://willem.com/global/images/365b08e297f5.webp)

![Mount Etna](https://willem.com/global/images/48ea8d339072.webp)

Standing on top of a volcano is something you should do if you ever have the chance. I highly recommend it!

---

## Clouds below my floor

*Building a little datacenter in my basement* · 2017-08-31 · https://willem.com/en/2017-08-31_clouds-below-my-floor/

At my home I have this crazy fast optical internet connection. It is a 600MB up and down fibre connection which directly arrives in my home (no copper cables involved). It's like a private internet highway. Reason enough to find out if I could do something to make better use of all this speedy fiber galore...

## Hardware

I had some spare parts left from killing my office LAN last month. You can read about it here (https://willem.com/en/2017-07-31_the-day-i-killed-my-lan/). It left me some shielded network cables, some power supplies and a power efficient server.  All the ingredients for some do-it-yourself-datacenter-engineering.

The server started its life originally as a power efficient (and silent) desktop computer. I took it apart to remove the optical drive to make room for extra memory and harddisks. It now has two drives of 8TB each, totalling a whopping 16TB of storage.

## Software

The computer runs Debian GNU/Linux - the same software that my corporate servers run in the (real) datacenter. This is great because it means that I can use the very same software as a normal server could run. (Like some good native HTTP, SFTP, SSH and RSYNC action!)

## Under the floor

Ideally I wanted the hardware to be out of sight so I went looking in the house for a suitable place. Computer hardware works best in dry and cool environments. I figured the space under my house matched these conditions.

![Though a hatch near my front door I have access to the space below the floor.](https://willem.com/global/images/b466ecfaf16d.webp)

It is easily accessible by a hatch in the floor near the front door. This space is meant as a buffer between the foundation and the house. At some houses this space is not dry, but judging by the amounts of utterly dry dust I figured that this place hasn't seen any moisture in years.

![Sitting on some concrete tiles the modified PC is connected to the internet](https://willem.com/global/images/9663a6d83ed9.webp)

Just to be sure though, I took some concrete tiles and made a little tower to lift the electronics from the ground. After some more efforts I managed to get a power and network cable into my newly arranged little datacenter.

If you're planning on doing this yourself, make sure the place is dry. If in doubt you can get an humidity sensor for a few euro's at the local department store. Or find one you can connect using USB to the server itself. Whatever the case: electronics and water usually don't go well together...

## Testing

The server connects to the router using a 1GB shielded CAT6 ethernet cable. The Apple Airport Extreme router is connected to the glass fiber modem using a very short, CAT6 cable. After powering on the server and some router configuration I was ready for a little test drive.

![Connected a monitor and keyboard to test the systems](https://willem.com/global/images/6a015775189f.webp)

![Averaging 3.4 milliseconds in pinging Google. That's fast, datacenter fast. ](https://willem.com/global/images/cac3104b66e3.webp)

Pinging google.com is lightning fast, averaging at 3.4 milliseconds. Then I decided to see what speeds I can achieve when pushing some data through the wire. For this test I used rsync to copy over a bunch of files. The speed is amazing, maxing out at in excess of 230 megabit - which I assume is because of the physical limits of my harddisks and some software overhead because of the encryption I use.

In just one hour I copied about 104 gigabytes of data. That's insanely fast, datacenter fast. If I would let it steam along, I could transfer 2496 gigabytes per day and an astonishing 75TB per month.

At some point I even contacted the internet provider, monitoring the datacenter, to let them know that the spike in traffic was not an error or DDOS attack... it was me and my little server. :-) They saw the traffic and thanked me for the explanation.

![Graphs from the connection monitoring system (from the real datacenter) cleary show when I tested my little server](https://willem.com/global/images/aed0a29d2feb.webp)

## Actual use

How about actually using this? I decided to use my newly connected server as an additional backup: making copies of production files and databases from the real servers. While cloud computing has become cheaper over the past few years, storing big data is still expensive (€50 per month for just 10TB).

I would never do any actual production computing from a setup like this. The datacenter is much more suitable for this because of it provides an unmatched redundancy in power and connectivity. But for non-critical operations it works great!

Then there I have it: clouds below my floor.

![Clouds below my floor: my little basement datacenter. ](https://willem.com/global/images/1261457404f4.webp)

---

## The day I killed my LAN

*Turned off my local network and went 4G only* · 2017-07-31 · https://willem.com/en/2017-07-31_the-day-i-killed-my-lan/

Today I called my provider to quit my office's ADSL internet subscription, I don't need it anymore. I have turned off my local area network and switched my workflow onto mobile internet only. The simplicity and savings actually surprised me so much, that I made blog post for it.

## Internet guy

Without a doubt I am an heavy internet user, I develop internet applications for a living. I move gigabytes of data on a weekly basis. You think that of all people I would need a dedicated fast internet subscription in my office, right?

Wrong! (I was surprised too!) Over the past few years my workflow has changed. Previously I used a local workstation to do the heavy lifting, downloading and uploading many gigabytes of data. But now, I no longer have a local workstation: I use a cloud based workstation instead.

Because my data is already online, there is no need to download and upload it locally. This significantly reduces the need for a fast (local) internet connection. I still move a lot of data, but it moves "inside the cloud", from one fast internet server to another.

In a way I now work with the internet like an air traffic controller with planes. The air traffic controller controls the traffic, but doesn't own an airport or runway.

## The office and it's LAN

My office in Amsterdam is where I do programming and web development. The following connected devices and things are part of it:

- ADSL internet connection 

- Telfort ADSL-modem (Experiabox V8, speed 100MB down / 10MB up)

- Apple Airport Extreme (router / 1GB switch / 5Ghz wifi)

- HP Laserjet network printer

- Canon Canoscan scanner

- Onkyo TX-8050 network audio receiver

- AppleTV for Airplay streaming

- Samsung HD TV

- 3TB local file server (NAS)

![Feeling old already, my trustworthy old local area network (LAN)](https://willem.com/global/images/eb644cecab17.webp)

Before I turned off my LAN, I had to make all of the devices above obsolete.

### Paperless office

I moved to a digital administration earlier, photographing invoices and sending bills as PDF by email. Earlier this year I started using iPad for sketching, drawing and designing with Apple Pencil. I no longer use paper, and I like it, read about it here (https://willem.com/en/2017-01-30_ipad-pro-next-to-my-primary-machine/). This saves trees and toner, and effectively makes the printer and scanner obsolete.

![iPad Pro + Apple Pencil replacing paper](https://willem.com/global/images/d51cfc953251.webp)

### Workstation and files in the cloud

Since I started experimenting with using iOS as a production platform, I moved my programming and testing workflow onto a virtual private server (VPS) in the cloud. This made it possible to work from pretty much any device, including an Apple Watch, like I wrote about here (https://willem.com/en/2017-02-16_programming-on-apple-watch/). It also means that I no longer need a local file server, it has been replaced by an online cloud server.

![Programming on iPad Pro using VIM, Blink and a Linux VPS](https://willem.com/global/images/fa27086768ce.webp)

### AppleTV and Samsung TV

Previously I used an AppleTV in combination with a large 55" Samsung television to test and demo web content. Showing off your creations to customers on a large screen might seem a good idea, but with increasing need for touch interactivity, the TV-setup grew obsolete by itself. These days testing and demonstration happens on the actual devices, the majority of them being tablets and smartphones.

### Office music

Obviously this depends on personal taste, but from time to time I do like some music in the office. From minimal electronic house beats (like deepmix.ru) to the occasional "destroy-it-all"-Metallica guitar riffs. The Onkyo network receiver is a versatile device with many in- and outputs. But you don't need all its features to listen to fancy tunes; a simple stereo receiver in combination with an iPhone/iPod dock can provide pretty much the same functionality.

![Music from the office cabinet - iPhone as a connected music player. Quite the solid rock show in combination with Apple Watch as remote.](https://willem.com/global/images/d4d05312ed22.webp)

![Charging and listening to music simultaniously using an Apple Lightning dock](https://willem.com/global/images/373dab715867.webp)

### Internet connectivity

With all this cloud magic going on I do need some internet connectivity. But does it have to be a fixed ADSL connection with a dedicated WiFi router? My fixed ADSL internet connection has a speed of 100MB down and 10MB up. Modern mobile 4G+ broadband provides speed up to 225MB!

The cool thing is that my mobile operator provides an extra SIM-card for just €5 per month that piggybacks on my smartphone's mobile data plan. For reasons of convenience I use this separate SIM in my iPad and laptop, but you could skip the data SIM and set up a mobile hotspot instead.

## Savings

The "dangerous" thing about network devices is that they are always on. Despite their low per hour wattage, annual consumption can actually be substantial because of the many operational hours. Let's do some calculation:

- ADSL internet modem ~ 10W

- Apple Airport Extreme ~ 9W

- HP Laserjet ~ 10W (when idle)

- Onkyo receiver ~ 10W (when idle, not playing music)

- Network file server NAS ~ 35W (when idle)

- AppleTV ~ 6W

- Samsung smart TV ~ 0,3W (in standby)

Total continuous power consumption: 80,3 Watt per hour, 24 hours a day, 365 days a year totalling 703428 watts. That's 703kWh for a year. Current energy prices in The Netherlands are ± € 0,20 per kWh, resulting in energy savings worth € 140 for per year.

But that's not all, you can end your internet subscription if you no longer have a local area network. For me the Telfort ADSL Internet Connection costs € 30 per month, or € 360 on per year.

That's a total of **€500** in savings per year. It may not be world changing for a large enterprise, but if you have a small office like mine, it may be worth it; especially considering it doesn't really cost you anything in terms of functionality. (and you get a less cluttered office with fewer wires and devices as a bonus)

## Limitations

Most mobile internet connections are limited with a data cap. Whether that is a problem depends on your own workflow. I don't hit the limit because I do the 'heavy lifting' from inside the cloud (internet-to-internet data transfers, versus the local-to-internet uploads). For the occasional exception I have my home WiFi, or I could visit a coffee bar and have a nice Latte Macchiato while doing "big byte" things.

## Conclusion

I am always looking for ways to cutting costs while improving flexibility and productivity. Killing my local network did just that: I save money while I my workflow is now the same for in and out of office.

Wonder what the next step would be, switch the office for a nice tropical beach perhaps? :-)

![Maybe... my next office? ;-)](https://willem.com/global/images/e75025769249.webp)

---

## Fietselfstedentocht 2017

*Cycling the 235KM bicycle tour through Friesland* · 2017-06-30 · https://willem.com/en/2017-06-30_fietselfstedentocht-2017/

This month I cycled the Fietselfstedentocht, a 235KM tour through Friesland. This tour brings you through various Frisian cities throughout one of the most Northern provinces of the Netherlands. The tour was first organised in 1912 and has grown to become legendary due to its history, challenge and popularity; well worthy of a blog post!

## History: The Frisians and their eleven cities

Friesland is a special province in the Netherlands, where the people have their own (officially recognised) language and culture. Part of this culture is the "elfstedentocht", a 200KM ice skating tour, over canals, rivers and lakes through the eleven Frisian cities during winter. The ice skating tour was first done in 1890 during a long and cold winter. Since then the elfstedentocht has become a legendary tour where people that have completed the 200KM distance are regarded as heroes, successfully withstanding the elements.

![Elfstedentocht - where men become heroes](https://willem.com/global/images/91fcbb073bcc.webp)

Somehow, more than 100 years ago, a couple of Frisians decided that one could do the Elfstedentocht on bike instead of skates during summertime. History was written: since then the bike tour has been organised regularly. Popularity grew to 12.000 participants in the 1970s. The organisation maintains a record of who have completed the tour, and special recognition is given to people that have successfully finished multiple times.

![Sneek, 1912 - the first Fietselfstedentocht](https://willem.com/global/images/89c6653f3c5e.webp)

## Participating

I wanted some of this "elfsteden"-heroism, too. Getting a starting voucher is difficult: every year there are more people wanting to cycle than there are tickets available. To get your ticket you have to preregister in November, where tickets are allocated using a 'lottery mechanism'. While I was unlucky at the first round, I was able to seize my ticket in January (when they where reissuing unclaimed tickets).

Since the tour starts in the early morning you somehow have to get there in time. The easiest way to do this, is to sleep the night before somewhere in the neighbourhood. I booked an hotel in Leeuwarden, the "Postplaza Hotel". Other cyclists are camping on one of the few campings in Bolsward, where both the start and finish is.

![The Postplaza Hotel in Leeuwarden](https://willem.com/global/images/5016ebe6ea66.webp)

The funny thing of the Elfstedentocht is that the entire region is aware of it. So too for the Hotel, there are special accommodations for your bike and you can have an extra early breakfast arranged. They serve healthy food, perfectly suitable to gain that extra energy that is needed for the grand tour.

Locals make a special day from it, everywhere there are crowds of people applauding and supporting participants. Some with music, some with cheering, some with signs, some with dancing, some with special dressing up. It is really unlike any of the other bike tours I have ridden.

## Start

So there I arrived at the start in the early morning of June 5th, 2017. It was just a drive of 20 minutes from the Hotel. Everything was relaxed, cool, and I felt ready to start the 235KM ride.  That all changed when I opened the trunk of the car....

![Something is missing... my front wheel!](https://willem.com/global/images/8a4112f16c04.webp)

... if you look at the picture above you'll notice something essential is missing: my front wheel! I forgot to put my front wheel in the car when I left home! Rarely have I felt such instant and intense misery...

I wouldn't let it happen that my attempt to take part in the Elfstedentocht would end before it had begun, so I took my bike (all parts of it anyway) and walked into town. It didn't take long for people to notice me. "Hee, aren't you forgetting something?!" people asked. Then a friendly local elder man approached me asking if I needed any help. He knew a bike shop that was open (it was still very early in the morning), we walked there (taking some downtown shortcuts) and I thanked him.

![Bike in the local bike shop "werkplaats" (Dutch for workshop)](https://willem.com/global/images/144f1414a202.webp)

At the local bike shop they told me I wasn't the only one, apparently more people do stupid things like forgetting your wheel when going for a 235KM bike ride...

With a fresh and newly mounted front wheel I was set to go (as the stickers on the shop window fittingly stated - as it was meant to be this way).

![Set to go - ready for 235KM on two wheels!](https://willem.com/global/images/0193147e360d.webp)

## The 235KM Challenge

The thing with a long ride, or grand fondo (as the Italians say), is that during the ride the conditions can change. So in a way you're never quite know for sure what to expect. I have ridden long rides before and I know how to dose my efforts to be able to keep going on for hours.

![Crowdy streets near stamp posts along the route](https://willem.com/global/images/a01a64c23ba9.webp)

It was quite windy during the morning and early afternoon. Riding for many kilometres through the open country side, the wind proved to be a real challenge. Luckily I wasn't the only participant; with some handy positioning I managed to join some other cyclists in a formation through the wind. Cycling in a 'train', behind other cyclists can really reduce the effect the wind has on you. But, be sure to take your part of the wind as it's unfair to have others do all the hard work.

![Yep, it's me. :-)](https://willem.com/global/images/4d71234dea7f.webp)

![Along the way you collect stamps from the various Frisian cities. You need a completed card in order to collect the medal (Elfstedenkruisje)](https://willem.com/global/images/9ccc81dd18a4.webp)

## Support

Lots of people where along the route. It was awesome and it certainly helps get you through the day. I had some special supporters this day: my wife with some fresh sandwiches and my mother and her friend.

![Special support: my lovely wife, Ellen!](https://willem.com/global/images/d01e7f7b0d17.webp)

![Special support: my moms and her friend Albert](https://willem.com/global/images/c66d554a9ad9.webp)

## Finish

After 8 hours and 41 minutes I was back in Bolsward and finished the ride with an average speed of 27KM/hour (not bad considering the wind!). It was one the most challenging rides I have done, but it was totally worth all the efforts!

![Finished! Collected all the stamps, earned the medal and a drink to celebrate an awesome day!](https://willem.com/global/images/07e1de9c50f9.webp)

![The route through Friesland](https://willem.com/global/images/c61486e7cf2a.webp)

![Statistics from Cyclemeter Pro](https://willem.com/global/images/b78cf12dbee3.webp)

There it was a day later, my original front wheel - still in the garage at home. Next year I'll bring both wheels to the start. :-)

![](https://willem.com/global/images/7f6fa0a15325.webp)

---

## Beast of the Green Hell

*Driving the Mercedes-AMG GT R* · 2017-05-31 · https://willem.com/en/2017-05-31_beast-of-the-green-hell/

This month I received an invitation to join Mercedes at the Zolder circuit in Belgium to drive in "the beast". The Mercedes-AMG GT R, a furious green coloured performance car that gets its nickname from the Nürburgring where it was developed. It was an incredible experience, well worth a blog post!

![The Mercedes-AMG GT R at the Zolder Circuit in Belgium](https://willem.com/global/images/f1ce0f17f2f2.webp)

## Technical facts

- 430kW (585HP) at 6250rpm

- 700Nm torque at 1900-5500rpm

- 4.0L twin-turbo V8

- mid-front engine, transaxle, rear gearbox

- made from aluminium and carbon

- 0-100KM/h in 3.6 seconds

- top speed of 318KM/h

- rear-biased weight distribution of 47.3% to 52.7%

- active aerodynamics

- active rear wheel steering

![4.0L V8 Twin turbo AMG engine](https://willem.com/global/images/3fe448fad2fa.webp)

## Circuit day with AMG Driving Academy

The action packed day started with a good and early breakfast followed by a presentation addressing AMG's history.

![Breakfast at 8 am at the Zolder Circuit](https://willem.com/global/images/4f3ade08a97e.webp)

Fun fact is that while AMG was originally not owned by Mercedes, the founders where actually former Mercedes-Benz engineers: Hans Werner Aufrecht and Erhard Melcher. They started AMG after their job on a special performance Mercedes engine was cancelled. Their engine was a great success and won many prices, inspiring the entire brand. The letters "AMG" stand for Aufrecht, Melcher and Großaspach (Aufrecht's birth town).

![1971 Mercedes 300 SEL 6.8 AMG at the 24 Hours of Spa](https://willem.com/global/images/400eef80ed15.webp)

## 4x4 off-roading

After the presentation we went on to drive the G-class on an off-road track, exploring it's 4x4 capabilities. The G is an amazing car that feels like a tank. The model I drove was a "Professional" edition, used by police and army.

![Mercedes-Benz G-Class - a 4x4 powerhouse](https://willem.com/global/images/1476bc51c5ab.webp)

![The G-Class Professional is pretty hardcore "function first"](https://willem.com/global/images/8e59a19c881f.webp)

![The Mercedes-AMG G63 comes in fancy colours, too](https://willem.com/global/images/7fcd5db179c3.webp)

## Scenic tour

Next we went into the Belgium country side driving various AMG models, including the A45, C63S, SLC45 and the S63 cabriolet. Before driving each car we had to sign a document stating you take responsibility for traffic fines etc.. :-)

![Happy boy, driving AMG-goodness on the open road](https://willem.com/global/images/bd9d89fc9204.webp)

While I have driven different AMG cars before, driving the different models on the same road, closely after each other allows you to better understand the differences in driving dynamics between the cars. It makes quite the difference if you drive the S63 or C63; even though they are both very fast.

![The C63S is definitely my favourite, a rudimental monster with an open roof](https://willem.com/global/images/e3d549376e0d.webp)

![Some more details of this brutal C63S machine](https://willem.com/global/images/59faa8681ee7.webp)

![If you drive in the AMG GT S you feel like Bernd Mayländer (who drives a similar F1 Safety Car)](https://willem.com/global/images/786146f20faf.webp)

![The S63s feels like a ship, a very fast one... ](https://willem.com/global/images/91f76391ba44.webp)

![The S63s interior is second to none: amazing details, very high-end](https://willem.com/global/images/4174438408b5.webp)

![The S63s is very comfortable for its passengers and there is plenty of space](https://willem.com/global/images/47a7620b9150.webp)

## Race Taxi

After lunch we went to the paddock, taking on race helmets and getting ready to be driven around the track by a professional race driver. Man! That is bloody fast! A race driver brakes much later, harder and goes much faster through corners than I as a normal driver would comfortably go. Quite amazing!

![Ready for a run around the track with a professional race driver](https://willem.com/global/images/d9efadc79306.webp)

![Not your average Taxi... ](https://willem.com/global/images/39543ef1c76c.webp)

## Driving the E63S AMG on track

Next I drove the E63S on track. We were to follow a professional race driver that gave instructions using a radio inside the race helmets. He explained the racing line, break points and corner apex.

![Driving the E63S around track surely gets the blood pumpin'... ](https://willem.com/global/images/df760eb1eaf5.webp)

It is very nice to be able to drive a car much more aggressively because on track there is no police (and traffic lights, pedestrians etc.). It really makes a difference and is much more fun because of the lack of worry.

## Agility-X

Then followed an agility challenge where I had to drive as fast as possible on a small and twisty track with two very different AMG cars. The A45 (light, four wheel drive) and the S63S (heavier, more powerful). Due to the laws of physics, the smaller, less powerful A45 was quicker.

![The less powerful A45 (left) is actually faster at the agility challenge than the S63s (right)](https://willem.com/global/images/8bb12ae06640.webp)

## Beast of the Green Hell

Then it was finally time for me to drive the Mercedes-AMG GT R, nicknamed the "Beast of the Green Hell". This car is the street legal version of the AMG GT3 racing car. It's a powerful car, but it really stands out in terms of balance. The engine is in the front/middle and delivers it's 585HP through an axle to the gearbox that is mounted in the rear. The better a car is balanced, the faster you can go through corners.

![The Beast from Green Hell: Mercedes-AMG GT R](https://willem.com/global/images/9f2aba990414.webp)

The car features many technical novelties, it's an ultimate gadget on wheels. Man! What an incredible experience! The car is furious, extremely powerful, full of grunt and angry noises. Yet, after two of three laps it gives you the confidence you can go faster and faster. That's what sets this car apart: its a monster that grows on to you, making you feel comfortable.

![It looks hungry.... for speed!](https://willem.com/global/images/2024f9cd77b3.webp)

The balance is amazing, you have the feeling you can turn into any twisty corner and the car simply follows. Screaming tires are an indication you're on the edge of physics... but inside it's still a comfortable Mercedes. One you drive with an heart rate well above what's normal... :-)

![As hardcore is it is, the interior of the GT R is still top notch!](https://willem.com/global/images/a13d60ba8268.webp)

The green beast made a lasting impression on me! Whoow!

*Special thanks for this amazing day to Mercedes-Benz, Stern Auto Amsterdam, Bernd Schneider (the four-time DTM champion giving instructions on track).*

## Gallery

Some more awesomeness, tap any picture to enlarge:

---

## Smartwatches vs Mechanical watches

*Why I still wear mechanical and why smartwatches have potential* · 2017-04-30 · https://willem.com/en/2017-04-30_smartwatches-vs-mechanical-watches/

Technology has come a long way since the first computer. Smartwatches today are very much an achievement of miniaturisation of technology. I recently used an Apple Watch Series 2 to find out if technology has come far enough to replace my mechanical watch, today I share you my findings.

## Smartwatch history

In 2012 Pebble launched its equally named smartwatch on Kickstarter. It promised to follow the smartphone in delivering apps that do useful things; but this time right on the wrist. Its key selling points where silent notifications, access to email, internet and infinite customisation through different watch faces.

![The original Pebble from 2012](https://willem.com/global/images/a65adb8a6d81.webp)

Although the Pebble was not the first digital watch (Pulsar/Seiko) and internet connected watch (Timex Datalink, Fossil WristPDA, Microsoft Spot) it was the first modern smartwatch because it connected to the smartphone to enable two way internet connectivity. It became the most successful Kickstarter campaign ever. I was one of the original 2012 Pebble backers on Kickstarter.

The buzz around Pebble most certainly stimulated smartphone giants Apple and Google to respond. In 2014 Google launched Android Wear with the LG G Watch. Android Wear added more in- and output options to the smartwatch experience as originally defined by the Pebble, at the expense of battery life.

![The LG G Watch running Android Wear](https://willem.com/global/images/8984e4eba983.webp)

Apple introduced the Apple Watch in 2014, but it would take up to 2015 for the product to become available for customers. The Apple Watch introduced an integrated heart rate sensor, the ability to easily change watch bands, and the ability to use Apple Pay to pay for things in stores.

![The Apple Watch from 2014](https://willem.com/global/images/42b888a67500.webp)

Today Pebble no longer exists and it seems that, like smartphones, Apple and Google dominate the smartwatch market. As I mainly use an iPhone, the Apple Watch seemed the most logical choice for my test

## Apple Watch (Series 2)

The current model of the Apple Watch is Series 2. It is very much an improved version of the original Apple Watch introduced in 2014, with advances in battery life, included GPS, improved processing speed and water resistance. It is argued by many reviewers to be the best smartwatch experience currently available (at least if you have an Apple iPhone..).

![The Apple Watch Series 2](https://willem.com/global/images/a818beda4c5d.webp)

I tested the Apple Watch Series 2 (in steel with sapphire display) for three months, wearing it all the time except when it needed charging. During a normal week I go to work, cycle for sport, go out for diner and drinks, visit customers and relax at home on the couch. I tested the smartwatch in all these settings. I also wear the watch at night (to use sleep tracking and its silent alarm clock) and under the shower (to clean it after sweating while sporting).

### Design and build quality

Wether you like the Apple Watch design or not is obviously something personal, but judging on my experience with Swiss mechanical watches, I can attest that the Apple Watch is well built. The attention to detail, feel and weight is in my opinion a testament of the true understanding the designers of the Apple Watch have of watch design.

It's size and appearance make it possible for the technology to "disappear". The hardware gets out of the way for the software; with the black display blending it's edges making you feel software and hardware acting as one.

![Different styles thanks to the different watch band options](https://willem.com/global/images/2dc8ad4313e5.webp)

The Watch bands really add the personality to the watch; they are very easy to change (without tools). There are many different watch bands available. Charging the watch requires you to take it off and connect it to a special magnetic charging cable. That's easy and charging is fast (about one % per minute). On a daily basis the design and quality of the watch is really sufficient to challenge the majority of watches out there.

## Smartwatch advantages

### Distraction filtering

I really love the ability to use the smartphone to filter incoming calls, mails and messages and only forward those things to my wrist that I deem important. It takes some time to configure it right, but once you have this working it gives you the ability to have some more distance from your phone (while staying available for those you deem important, like close family).

While wearing my smartwatch I used my smartphone less frequently. Often I could quickly respond to messages right from my wrist using pre-defined texts or by dictating answers. At home I often put my phone in the charging dock and leave it there for the evening or night.

![Apple Watch on the wrist showing current temperature, time, heart rate and access to mail, messages and music](https://willem.com/global/images/a0ee9a8a3284.webp)

Compared to the smartphone I found the smartwatch to be less distracting, mainly because its limited feature set and smaller screen. I liked that whenever I was doing something else, like reading, watching TV or going to bed.

### Data mining your daily moves

Interesting are the options the smartwatch provides to quantify your every move. Think about the amount of steps, stairs, kilometres, sleeping hours, standing hours, calories and heart rate. If you take the time and use the right apps to analyse the data, it can provide interesting insights in yourself.

![Comparing data from sleep analyses (two nights with clearly a different pattern)](https://willem.com/global/images/6a36a0c648d4.webp)

For instance, I found out that when I used alcohol, my average heart rate at night was higher, for as much as 30%. In addition, I could see it could take several days after a long party night before my physical metrics where back to normal. And like alcohol, I could clearly see work stress contributing to higher heart rates and restless nights.

Given a longer period of time, data collected by a smartwatch can really provide useful, surprising insights.

### Sport companion when road cycling

I also used the smartwatch when sporting (road cycling). The watch can work in combination with the smartphone (and Bluetooth sensors) to collect data on speed, cadence, heart rate and distance information. You can combine and compare this data to previous trainings, providing a clear view on progress and fitness.

![Analysing sport data from a cycle ride](https://willem.com/global/images/c7f6984c025b.webp)

Before the smartwatch, I used a dedicated Garmin bike computer with a wrist worn heart rate sensor. The main advantage over a dedicated sport system is that the smartwatch continued to collect data after a workout. It showed that it could take up to several hours before my body returned to it's normal metrics.

## The smartwatch shortcomings

### Another device in need of charging

The Apple Watch lasts about 1.5 days on a battery charge. That means that you need to charge it on a daily basis. Some people charge the Apple Watch at night, but I used it to analyse my sleep so I could not charge it at night. I usually charged the watch when I was showering or having breakfast or diner. But it always required some planning on when to charge the watch, annoyingly. Maybe a second smartwatch would make sense so that you can switch between them and limit "watch downtime"...

![The Magnetic Charging dock is a fancy solution to an annoying problem: the constant need to charge the smartwatch](https://willem.com/global/images/a4abad8d2ea4.webp)

### Display dorkyness

In our western culture, checking your wrist in an obvious way, is a social signal saying something like "I need to go". You really need to be aware of this when you wear a smartwatch; incoming notifications drawing your attention to your wrist can be interpreted as rude.

The Apple Watch display only goes on when you tilt your wrist or touch a button. This makes it much more difficult to check the time in a stealthy fashion. It must be noted that there are other smartwatches available that feature displays that are always on.

### Smartwatch software

During my three month test period I had to update my watch a few times, resolve some email synchronisation problems, rebooting it and managing the installation and updates of watch apps. The software is not perfect and it requires your attention every now and then.

Another disadvantage of the smartwatch software is that it's feature set is lagging behind that of its smartphone counterparts, regulary requiring you to use the smartphone to get things done. I can't help but wonder how much more worthwhile the smartwatch would be if it could do everything the smartphone can.

## Mechanical competition

Alternative to the smartwatch is the mechanical watch. It has been around for a long time and it comes in different forms and finishes. While it is beyond the scope of this blog post to cover the full history of the mechanical watch, it's good to focus on a few advantages of the mechanical watch over the smartwatch.

![A mechanical watch: Christiaan van der Klaauw](https://willem.com/global/images/41600782da9e.webp)

### No need for batteries

An automatic mechanical watch collects energy using a mechanical weight (the rotor) that moves inside the watch whenever you move your wrist. The rotor is connected via gears and axels to an hairspring that stores the energy. Through the regulator this stored energy is released into the watch movement so that the watch maintains track of time. The beauty of this mechanical engineering is that you do not need a battery or electric charging.

![The mechanical watch winding rotor and movement, visible through the sapphire case back](https://willem.com/global/images/d61b587b12f3.webp)

### Ecstatic engineering and design

Mechanical watches are sometimes engineered to withstand extreme physical conditions (like ocean depths, outer space, magnetic fields), or they are designed as a piece of art with incredible attention to detail and finishing. This wide spectrum of options makes it much more a personal choice what watch one wears. The watch you choose to wear says something about you and is a message in itself.

![My mechanical watch in action (Milgauss 116400GV zBlue)](https://willem.com/global/images/1aa571e7cd0c.webp)

## Conclusion

After testing the smartwatch I found the mechanical watches to be better watches (no need for charging), and the smartphone to be a better mobile computer (more features).

The only true advantage the smartwatch provides is data mining (activity, heart rate, sleep analyses etc). Unfortunately this advantage is limited by battery life and the frequent need to take the watch off to charge it (thus interupting the data collection).

I expect the future to bring devices_focussed_on_health_data_collection (https://willem.com/en/2017-11-15_collecting-health-data-with-biostrap/), wearable sensors designed to be worn for longer periods of time uninterruptedly. These devices will be small, unobtrusive and possibly integrated in classic jewellery (like mechanical watches, bands, bracelets and rings).

This health data will be hugely valuable, for individuals but also for research and commercial uses. I expect it to be the future, but for now I happily hold on to my mechanical watch.

Related posts:
- [Is the Apple Watch the modern tool watch?](https://willem.com/en/2018-11-02_is-the-apple-watch-the-modern-tool-watch/)
- [Apple Watch as Phone](https://willem.com/en/2023-11-10_apple-watch-as-phone/)

---

## Repairing a Nintendo Gameboy Advance SP

*Chip surgery to play classic Zelda* · 2017-03-26 · https://willem.com/en/2017-03-26_repairing-a-nintendo-gameboy-advance-sp/

This month Nintendo released the Switch with Zelda "Breath of the Wild". The new console received positive reviews. The new Zelda game is amazing and can be played on-the-go, thanks to the portability of the Nintendo Switch. But it its hardly the first Nintendo device that features the mythical kingdom of Hyrule with Link and princess Zelda. I found an old Gameboy Advance, perfect for playing classic Zelda games... but it was in need for repair!

## The Problem

When this Gameboy is squeezed (what happens during intense gameplay), the system suddenly resets... That is really annoying! (imaging fighting some bad ass boss, nearly winning and then BANG this happens)

![This old Gameboy was broken: it stops working if you "squeeze" it... an indication of some electrical failure. ](https://willem.com/global/images/d8a1396b33ec.webp)

The Gameboy Advance was released in 2002 and was the first Nintendo handheld console that featured a display with light. And yet is is fully compatible with original Gameboy cartridges. It is the perfect machine to play classic Zelda games as many of the original NES titles have been made available as Gameboy Advance title.

## Why Zelda: Open world exploring and andventure

Ever since the first Zelda game in 1986 the game allows the player to freely explore an open world full of adventure. You decide where to go next and how to go there: walking (multiple routes), running, horse riding, swimming, sailing, warping and even time traveling. Along the way, the game surprises you with random challenges, interesting characters, secrets and puzzles. This really makes playing Zelda feel like a personalised adventure.

![The new Zelda game "Breath of the Wild" sets the new benchmark for open world games according to the popular blog The Verge. It looks amazing!](https://willem.com/global/images/598b62644bf4.webp)

![On the left: an original screenshot from "Link's Awakening" (1993). On to the right: how fans perceive the magic. (Fan art created by "einen" from http://einen.deviantart.com) ](https://willem.com/global/images/add74a997e6a.webp)

## Repairing the Gameboy: replacing the logic board

Using some simple logic I determined that the Gameboy resets because something electrical fails. At first I suspected a faulty battery (contact), but the problem persisted checking the connection and replacing the battery. If it is not the battery, then it must be something else, but what?

The Gameboy has very few parts, all the action is on one single chip: the logic board. I figured that if I replaced the logic board, the problem would be gone. Luckily original parts can be found easily through Ebay.

![Thank you Ebay: an original replacement logic board for about €15](https://willem.com/global/images/96862d880d3f.webp)

![Using the right tools: a Tri-wing triangular screwdriver](https://willem.com/global/images/e5a04d90fb12.webp)

Nintendo prefers no tinkering with it's hardware so it uses special screws to keep people from opening the consoles. You really should use a tri-wing triangular screwdriver to open your Nintendo, using the wrong screwdriver will much likely damage the screws.

![Arrange the screws around something easy to recognise (the battery) to easily keep track of where the (different) screws should ](https://willem.com/global/images/671c95175b7b.webp)

It is always good to keep track of individual screws when opening up electronic devices. Very often different screws (length, width) are used in specific positions. I learned this the hard way when opening up an Apple PowerBook G4 (a laptop that contained more than 50 screws...). I arranged the screws around the battery - something that I can easily recognise.

![The Gameboy Advance SP from the inside](https://willem.com/global/images/be7d94d7f56a.webp)

After removing the screws, carefully remove the rear cover. Pay special attention to the shoulder (L/R) and power buttons.

![The buttons can be removed easily to be cleaned](https://willem.com/global/images/b6a8f7f3c8b8.webp)

Lifting the logic board from the Gameboy, be very careful with the flat cable connecting the logic board to the display. It is secured using two tiny plastic 'flips'. Make sure to remember what logic board is the faulty one... and what is the new one. :-)

![Clever hardware design: each button fits exactly on one position and orientation only!  ](https://willem.com/global/images/df88f23b6ae4.webp)

This is an excellent time to remove the buttons from the Gameboy and have them cleaned. Over time they collect dirt and cleaning them is an extra bonus.

I cleaned mine using some water with dish washing soap. Make sure to dry them thoroughly before placing them back!

![Spot the differences: the original faulty logic board above and the replacement on the bottom](https://willem.com/global/images/4f8e69f0fb57.webp)

My replacement logic board appears to have a slightly different CPU. You can see this by the differences in reference numbers on the logic board. My replacement seems to have a higher CPU revision number, indicating a newer board. It is not uncommon that game hardware evolves during the lifecycle of a game console, but fortunately it doesn't affect gameplay whether or not you have newer logic board.

After reinstalling the logic board, make sure to secure the flat cable, buttons and screws back again.

![Zelda "Link's awakening" from 1993 on the repaired Gameboy Advance SP](https://willem.com/global/images/7c11b16b9da9.webp)

After putting the Gameboy back together it was time to see if it worked... it did! The repair was successful and the Gameboy is back into service!

---

## Programming on Apple Watch

*Serious about crazy experiments* · 2017-02-16 · https://willem.com/en/2017-02-16_programming-on-apple-watch/

Over the past years I have been no stranger to crazy experiments, but this time I really wanted to push it into the extreme: programming on an Apple Watch. Would it be possible to actually write code on such a tiny device? Why even bother? This post is about the case for crazy experiments, and why you should try too!

A week ago I was exchanging some emails with my buddy Niels, telling him about this idea of using an iPhone to get work done. He suggested (in Dutch) that I would take that idea to the next level... Apple Watch.

![Message from my buddy Niels, suggesting I take my "working on a smartphone"-idea to the next level, complete with a Photoshop mockup. ](https://willem.com/global/images/91b808d07886.webp)

While he used his brilliant Photoshop skills, I used Xcode, my Linux knowledge, SSH, VIM, the local network, a bluetooth keyboard, an actual Apple Watch, some time and patience.... resulting in this proof of concept:

![And so I did! Programming on Apple Watch using VIM, SSH, a Bluetooth keyboard and coffee. ](https://willem.com/global/images/a91c01a62961.webp)

![Real programming code, real Apple Watch. No Photoshop. ](https://willem.com/global/images/a168f98b960f.webp)

## How it works (for dummies)

I created a small Watch app that connects to an external computer that runs the development software. The keyboard is connected to this external computer, so that I can actually write code. The principle is simple and can be compared to the Camera-app that is on the watch by default: you use the watch as a viewfinder for the camera in the iPhone. This Watch app is like a "viewfinder" for programming code.

## How it works (for those tech savvy among us)

In the local network I run a small NodeJS server on a Linux machine that takes screenshots from a shell session running my favourite programming code editor, VIM. The keyboard is connected to this laptop using Bluetooth. On the Watch I created a simple app that fetches a new screenshot every few seconds and use that to show the image full screen. It's a proof of concept, not anything worthy of the AppStore (there is quite some latency between refreshes - but it works). If you're thinking about building it yourself, look for *WKInterfaceImage*, *UIImage*, *NSURLSession* and *dataTaskWithURL*

![The source of the Magic: my ThinkPad X1 connected to the local network.](https://willem.com/global/images/caa603c5520c.webp)

## Why

I experiment regulary, because it allows me to learn about the way I do things. The experiments force me to rethink things I take for granted or normal. In many ways **"the chase is better than the catch"**.

I actively experiment with new hard- and software, just to stay up-to-date and learn new things. In 2008, few months after the AppStore launched, I was among the very first to start with iOS development. Even though the potential was unclear, I learned and experimented with the technology. My early experience helped me program the Snake (www.snake97.com) '97 app in 2011, another crazy idea that turned out to be a *20 million downloads*-game... :-))

![Snake '97 - the original idea and stars of the game, the Nokia 5110 and 3310 - possible because of earlier experimentation with technology](https://willem.com/global/images/d260e207062a.webp)

## What I learned

So instead of asking "Why?" you'd better ask "What did I learn?". Well, quite a few things actually:

- **Move your programming environment into the terminal:** Go text based, ditch the IDE (like Visual Studio) and learn to properly use VIM (or emacs) with keyboard shortcuts. These tools run practically on *any* device and don't require a proprietary operating system. 

- **Bye bye to the Mouse:** keep your fingers where you write code, on the keyboard. Instead of reaching for a mouse, use the keyboard (shortcuts). It may take some time getting to know them, but in the end you are *much* faster. In addition to speed you also gain the ability to use any screen, as more devices support keyboards but not mouse (think game consoles, smart TV's, AppleTV, old school devices)

- **Use the pixels, wisely:** If you constrain yourself to a small screen, you are forced to better think about how to use the pixels. Do you really need all those toolbars visible, all the time? The fewer interface elements permanently visible, the more space you'll get for the actual content.  Less distraction, more focus.

- **Write better code:** To keep things readable on a small screen, you'll learn to really pay attention to things like code structure, function logic and naming. Small screens encourage shorter lines of code and more compact function bodies. It forces you to make things simpler and shorter, repeat yourself less. These advantages translate to bigger screens too. 

- **You don't really need a PC anymore:** If it's possible on a Watch, think about those other devices you carry around, like your smartphone and tablet. Being able to better use your mobile device(s), will make you less dependent on traditional PC's. 

- **Apple Watch has potential: ** Earlier, Facebook developers already succeeded (http://www.theverge.com/tldr/2015/10/2/9443491/doom-apple-watch-new-apple-tv-port) in getting the famous Doom 3D game running on Apple Watch. I learned, too, that the device has serious potential. I am beginning to think that the Apple Watch is much more an "always there, mobile computer" rather than something to compare to a traditional mechanical watch. 

![Feeling mobile: this blog post was created using an iPhone, a keyboard and some coffee! No PC!](https://willem.com/global/images/4b4f8a31a75a.webp)

## Conclusion

This whole experiment really pushed me forward in terms of mobile computing. I learned to optimise my toolset and the way I work. In fact, this whole blog post was created on an iPhone, including the photos (taking them, cropping them), and it didn't feel weird at all. I love it because it makes everything easier, and that made this experiment worthwhile

### Bonus: Nokia Communicator and Jolla

When I was writing this post, I wondered if my old Nokia Communicators still worked. After some fiddling with the old batteries I managed to get the E90 and 9300i working. Using Putty and 802.11b WiFi, I managed to connect to my newly created development system that I used for this experiment with Apple Watch. Guess what? It worked just fine - who needs a new phone anyway? :-)

![Multi platform development done properly, Nokia Communicator E90 with Symbian series 60 from 2007, Nokia 9300i running Symbian series 80 from 2004, Jolla phone with SailfishOS with the funky other half keyboard (tohkbd), and the iPhone 7.](https://willem.com/global/images/6870b8e5577e.webp)

![Nokia E90 Communicator running Putty on Symbian Series 60.](https://willem.com/global/images/f19e6557543c.webp)

![Nokia 9300i, officially not a communicator but nonetheless a device with advanced mobile communication options for its day (2007). Running Putty on Symbian Series 80.](https://willem.com/global/images/ef24cdb8830e.webp)

![Multi user, multi screen. Two Nokia Communicators (E90/9300i) connected to my work environment simultaneously using Putty.](https://willem.com/global/images/2786e0481cad.webp)

---

## iPad Pro next to my primary machine

*Using it with Apple Pencil as a creative powerhouse* · 2017-01-30 · https://willem.com/en/2017-01-30_ipad-pro-next-to-my-primary-machine/

I wanted see if I can find something better than my old fashioned pencil and paper that I use for designing software as professional developer. I knew iPad Pro from my test last summer, figuring out if it could replace my primary development machine. While it may not be able to completely replace my thrustworthy ThinkPad, it turned out to be a totally different story when it comes to paper.

![Typical drawing I create when designing software](https://willem.com/global/images/64bad261760f.webp)

## Extending and improving my thoughts with paper

I use paper to jot down ideas and when I do that right, it enables me to improve and extend my original thoughts. Using pencil and paper I have been able to design some of the best things I have created as professional software developer. I like paper because it is free of distractions and whenever you use a blank sheet it feels like a fresh start (of something potentially amazing).

### Problem with paper

Inherent to its physical form, a piece of paper can only be at one place at the same time. You need to carry it with you if you go somewhere, together with a pencil and eraser. It seemed somewhat silly that my smartphone can do all this amazing stuff and yet I carried around pieces of sliced dead trees...

### Problem with digital drawing and note taking

So, why didn't I ditch paper a long time ago when I got my first laptop or smartphone? It is because I feel limited by a physical keyboard as it forces me to use words to express my ideas and thoughts. And while it is possible to draw using a mouse, I experience too much distance between me (my hand on the mouse) and the drawing (on my monitor) to really like it.

## Meet iPad Pro with Apple Pencil

My best ideas come from direct manipulation, instantly and without distraction. Earlier I used iPad Pro in an experiment as primary computer, of which you can read about here (http://willem.comhttps://willem.com/en/2016-08-15_ipad-pro-as-primary-computer/). While it didn't succeed in replacing my primary computer I did like it's pencil and digital note taking app. The Apple Pencil feels just right and if  you disable notifications, the iPad poses little distraction with its minimal industrial design.

![Initial scribble to see how pencil response](https://willem.com/global/images/359a7faa0215.webp)

The Pencil's response is very direct and precise. Due to the high resolution of the iPad's retina display, digital ink is rendered convincingly. The standard Apple note app does a great job, but there are few apps that simulate different drawing tools like paint and bigger pencils.

## Designing software with iPad Pro and Apple Pencil

I decided to simply start using iPad to do my design work to find out how I like it.

![Using iPad to design something - with coffee](https://willem.com/global/images/02d7d95ee305.webp)

If you use your imagination to think the bezel away, using iPad can be just like a piece of paper. It blends in very nicely because of its physical dimensions.

The software can be configured to move away and the brightness and white balance can be set to match the environment. Apple calls this the "true tone display", and it really works.

## Beyond traditional paper 

Because iPad is digital, it becomes possible to share my designs with my customers, synchronise them between my devices and to automatically have them backed up. This is a mayor plus compared to traditional paper.

Not soon after my first scribbles, I got used to Apple Pencil and my writing and drawing improved. I began experimenting with the ruler, different tools and colors.

![I began using the ruler and color](https://willem.com/global/images/56e24c8ef0a0.webp)

But perhaps one of the most surprisingly cool advantages is the undo function. It allows you to draw something and have it be removed instantly. While it may sound obvious, this is very difficult on traditional paper since an eraser is far more clumsy and removes everything it touches.

![White on blue](https://willem.com/global/images/6bb7d6aff7a5.webp)

Before, I had one colour pencil because I didn't want to carry around multiple pencils. But with digital ink it is no extra effort. I can now even use a white pencil, it is really a lot of fun.

## Drawing

I liked drawing with Apple Pencil and iPad so much that I started drawing some more, just for fun.

![A pink sheep named Beh](https://willem.com/global/images/d7958dc2fb6b.webp)

At first I tried to create something simple, a pink sheep but soon after that, I continued on more challenging subjects, like a Rolex GMT Master.

![Rolex GMT Master](https://willem.com/global/images/9f5e442d173c.webp)

Or a sunset:

![Sunset](https://willem.com/global/images/8d7610c5ad00.webp)

## willem.com/drawing

Because it's all digital, I am now able to share my drawings with you. I have created a separate section on my website: www.willem.com/drawing

Together with the drawings I also post some "making of" photos, so you'll have a better idea on how these drawings are created.

## Conclusion

Without any doubt I can say that iPad Pro with Apple Pencil really is better than my traditional pencil and paper. While it may be different for you, I can highly recommend that you give it a try!

And that's why the iPad has earned a position next to my primary development computer.

![iPad Pro next to my ThinkPad](https://willem.com/global/images/f9748ca07b6e.webp)

---

## One year of cycling

*GPS recording an entire year of bike rides using Garmin and Strava* · 2016-12-31 · https://willem.com/en/2016-12-31_one-year-of-cycling/

One year ago I started recording all my bike rides, including commutes, short grocery trips and long Gran Fondos. I equipped my bicycles with Garmin Edge computers that recorded location (GPS), speed, cadence and my heart rate. I covered more than 7683 kilometers during 320 hours of riding. It's time to review all the data and share some photos I took along the ride!

## Collecting cycle data

While it is possible to record cycle rides from your smartphone, I chose dedicated bike computers to record my rides. They provide more accurate speed data and can be connected to external sensors, like cadence and heart rate sensors.

On my Sensa Romagna road bike I used the advanced Garmin Edge 1000 bike computer while on my VanMoof city bike I used the compact Garmin Edge 25. Both bikes are equipped with speed and cadance sensors, and during many of my rides I wore a heart rate monitor. Bike rides were uploaded to Strava for analyses and aggregation.

Data collected:

- speed (using GPS and speed sensors)

- distance

- GPS location (where I went)

- heart rate

- local temperature

- time (of the day and duration)

- cadence (revolutions per minute of the pedals)

Among the rides where my daily commutes and short trips to the local grocery store. I even recorded my nightly rides to (and from) the Amsterdam bars. About once every month I drove a "Gran Fondo" (Italian for long distance ride). Combined with the varying Dutch weather conditions these long dinstance rides (>100KM) provided a real challenge for both man and machine.

## Heatmap: Where did I go?

Strava provides an option to generate an heatmap, visualising all the GPS location data. The more frequent a route is, the more red (or hot) it becomes (hence the name heatmap).

![Heatmap of my bike rides in The Netherlands. Red indicates frequently driven routes. ](https://willem.com/global/images/2f776e5c4ff0.webp)

On this map of The Netherlands you can clearly see that I did most of my rides just under the city of Amsterdam. That's no surprise since that is where I live and work.

![Heatmap of my bike rides in the Amsterdam area. ](https://willem.com/global/images/d041d2afb030.webp)

If we zoom into the Amsterdam area, my main commute route can be distinguished easily. My house is in Uithoorn (lower left) and I work in Amsterdam-Zuidoost. You can also spot alternative routes and my favourite area in downtown Amsterdam.

## Summarising the data

Using Strava and Garmin Connect it is possible to summarise the data:

- total distance of 7683 kilometers 

- total ride time of 319 hours and 56 minutes

- weekly average distance of 147.75 kilometers

- weekly average ride time of 6 hours and 9 minutes

- 366 rides

- 250744 calories burned

- average heart rate of 145 BPM 

- maximum heart rate of 198 BPM

- average speed of 25 kilometers per hour

- maximum speed of 57 kilometers per hour

- average bike cadence of 83 RPM

- coldest ride, temperature of -4 °C (30 December 2016)

- hottest ride, temperature of 35 °C (20 July 2016)

- longest ride 231 kilometer during 9 hours 11 minutes (Fietselfstedentocht, 16 May 2016)

- fastest commute 27 minutes 15 seconds for a distance of 16.17 KM (35.2 kilometers per hour)

## Tires, wear and tear

During the year I had two punctures and wore out four tires. But the most visible wear on the bike were my pedals, they where new when I started just 12 months ago...

![This pedal was new when I started, this is how thousands of kilometers cycling look like on a pedal. ](https://willem.com/global/images/49f343116ab5.webp)

## Next year

In 2017 I will continue collecting cycle data to do a back-to-back comparison next year. Feel free to follow me along into the new year: www.strava.com/athletes/12012433

## The year in pictures

I took photos during many of my rides. Click on any photo for an enlargement.

![First gran fondo was cycling around the Dutch "Markermeer", a 208.5KM ride.](https://willem.com/global/images/0078e63e1b46.webp)

![After some long haul rides I disassembled the bike to get home.](https://willem.com/global/images/17424201acf8.webp)

![For longer rides (>8 hours) the bike computer required additional power. I installed small USB power bank in my seat bag. ](https://willem.com/global/images/dd884c3efbce.webp)

![The completed stamp card of the "Fietselfstedentocht", with 231 kilometers the longest single ride of 2016.](https://willem.com/global/images/325d72064e28.webp)

![In addition to commutes and grand fondos I also recorded short trips to the grocery store. Like this one on the "Beer Bike".](https://willem.com/global/images/5c844341322e.webp)

![On few occasions I crossed international borders. This photo was taken in Germany next to an Autobahn. ](https://willem.com/global/images/682aec513dcc.webp)

![This photo was taken during a ride through the forest near Hilversum. The nearby trees really give you a sense of speed (and reason to stay focussed on steering straight...)](https://willem.com/global/images/e776c5e9f0b0.webp)

![During autumn the days became shorter and many rides where done during dusk or dawn. It's nice to see the sun come up or go down. ](https://willem.com/global/images/44918c08eb81.webp)

![This picture was taken in downtown Leiden during one of the first cold days of November.](https://willem.com/global/images/dc863a975db7.webp)

![In the Netherlands there is no shortage of dykes. Many of them have long straight bike lines on them. This one is near "Hoek van Holland", you can see the Rotterdam Maasvlakte industry at the horizon. ](https://willem.com/global/images/176b9a629ad9.webp)

![One of my nightly rides went through the McDrive - bikes are welcome, apparently :-)](https://willem.com/global/images/3de1feee1664.webp)

![It was really cold during this ride in December. My drink bottles, gloves and shoes where frozen! ](https://willem.com/global/images/df9a5aee6191.webp)

The Netherlands is beautiful by bike. Click any picture for an enlargement:

---

## Being a volunteer in Amsterdam-Zuidoost

*Computer support in the local community center* · 2016-11-21 · https://willem.com/en/2016-11-21_being-a-volunteer-in-amsterdam-zuidoost/

After realising how lucky I am as an healthy, well educated, young man with a solid income, I wanted to do something for other people as volunteer. It just so happens to be that two years ago I received a flyer in my mailbox from the local community center: they were looking for someone with some knowledge of computers. A very interesting journey was about to begin!

## Amsterdam Venserpolder

In 2010 I bought a small apartment in the Venserpolder neighbourhood in Amsterdam-Zuidoost. Some friends warned me about the bad reputation of the area: home to thiefs, drugs and other criminals. I decided to ignore that and find out for myself. I was not afraid since I am a rather tall guy with a slightly more than healthy weight.

![Typical alley in Venserpolder, Amsterdam-Zuidoost](https://willem.com/global/images/a5d39fb08909.webp)

The neighbourhood is composed of several large 4-5 story apartment blocks made in the 80s. There is a mix of house owners and social rental houses. The area is well connected to the rest of Amsterdam by road, train and metro. In contrast to the older central part of Amsterdam, this part of the city has much more space for green (bushes, grass, trees) and water. Cars, bikes and pedestrians are often separated by distinct roads and pathways.

![The neighbourhood has lots of water and green](https://willem.com/global/images/217999ffa7b7.webp)

I really like the neighbourhood despite some of its problems. You can eat here like nowhere else in Amsterdam, there are lots of friendly people that aren't as stressed and self-minded as I have seen elsewhere. And what's more: many of them say "hello" when you pass them. Sometimes I think of Venserpolder as a little village, and that's a good thing.

![The local community center is located at the Albert Camuslaan](https://willem.com/global/images/f09bedcf96e1.webp)

## Local Community Center

In December 2014 a flyer from the local community center was calling for volunteers. The community center can be described as a public living room with a kitchen, free coffee and wireless internet, where inhabitants of the neighbourhood are able to organise activities like a knitting course, cooking and Dutch lessons.

![The community center is like a cosy living room](https://willem.com/global/images/4bbee11e9087.webp)

The local community center was looking for someone with computer knowledge. With more than 10 years of professional IT experience, a related academic degree and several certifications, including two from Microsoft, I figured that I might be qualified for the job. But I really did not want my professional reputation to be part of this. I wanted to start from scratch, earn trust and appreciation from what I would do there instead of what I had done before. Heck, I just wanted to be "Willem from the neighbourhood".

![Different activities are organised at the community center](https://willem.com/global/images/53225aed9804.webp)

![Dutch is more challenging than many natives realise](https://willem.com/global/images/960f6ea28456.webp)

## Computer Support

After a brief introduction at the weekly meeting, I was welcome to start my work as volunteer. I joined the so-called "ComputerBrigade" that aims to help people with all kinds of computer problems (viruses, updates etc) and tasks (internet, email, social media, banking, and office). It runs on a weekly basis where people can just drop by and get help. Nothing I can't handle I thought...

My first day was good, helped about three or four people and was assisted by another volunteer with some more experience. But just two weeks after my first day the other guy left and I was running the computer support by myself. The number of people grew every week. At times I was helping more than 10 people simultaneously! I remember to go for a sleep after each session because of the sheer intensity of all this helping (they don't teach you that at the University, ha!).

[image[

## Earning trust and appreciation

Having survived the first weeks I really started to know some of the regular visitors. And likewise: people started to know me. They knew I was serious and would show up every week. This mutual trust is very important because it allowed me to have the weekly schedule changed from 2x1 hour to 1x2 hours. The longer session allowed me to help people with more complex problems while making it easier for myself to combine my work as volunteer with my regular job.

It actually surprised me how valuable my knowledge is when used to help people: you are appreciated in a way that is genuinely different than getting money for a job. No matter how small a problem appears to me, being able to solve it can make a huge impact on how other people feel. You are instantly rewarded with gratitude and unlike money you don't have to pay tax on these gains (ha!)

## Sad things I learned about modern society

In addition to the trust and appreciation I gained, I also learned a few sad things about the modern socieity many people are proud of. Let me share two examples:

### Cashback trickery

One day an elderly lady told me about a kitchen device she bought; she paid €40, but she was told by the shop's staff that the real price was just €30 because of a cashback action... she just had to visit some website and the money would come back.

In order to be eligible for the cashback, the manufacturer of the kitchen device required her personal details (like name, address, date of birth, phone number etc). Then they would send an email with a PDF attachment that had to be printed, filled out with banking details and send by paper mail order to get the money back.

The lady did not even have a computer, let alone internet access, an email address or the ability to print PDF attachments. FURIOUS by this madness I created a false email address and filled out the forms with her, it took us three weeks but we got the money back.

![Some of the regular visitors of the weekly computer support sessions](https://willem.com/global/images/6f4b337ce04a.webp)

### Fixing things that ain't broken

Another day a guy came by with his laptop, he told me he has fallen onto it (..) and now the keyboard didn't work anymore. He told me he visited a computer store that concluded his laptop needed a €55 keyboard replacement. If that was too much money for him they were willing to sell him an external USB-keyboard for €30.

Curious by this story I decided to start the laptop and see for myself. When I pressed some keys, strange input appeared on the screen: pressing the "U"-key got me a "4", the "I"-key a "5" and more of that. To an untrained eye the keyboard was malfunctioning... but to my eyes it was the Numlock function on his laptop keyboard that was accidentally enabled.

I made a little fun with the guy when I said that it simply required "magic fingers" to type on it: I quickly disabled Numlock when demonstrating his keyboard was typing fine, then quickly re-enabled it when inviting him to give it a try... I explained the Numlock function and saved him a new keyboard.

![Cashback madness: imagine explaining this to your grandmother](https://willem.com/global/images/015fee1d4eaf.webp)

What an amazing time I have as volunteer! In the past two years I have helped many people and learned a few things myself. It is hugely rewarding. It is different every time, you never know who will show up and what his or her story will be... already looking forward to next week!

![Numbers instead of letters: a keyboard feature easily mistaken as malfunctioning if you are unfamilair with Numlock](https://willem.com/global/images/cbce500b4522.webp)

## Update July 2018

Recently I started to help people with free software on their computers. Read_about_it_here (https://willem.com/en/2018-07-20_helping-people-with-free-software/).

---

## Harvesting boredom to let creativity flourish

*using the Punkt MP01 dumb phone* · 2016-10-01 · https://willem.com/en/2016-10-01_harvesting-boredom-to-let-creativity-flourish/

Smartphones are everywhere in the modern society we live in today. Through our 4G and WiFi connections the internet is just one tap away. In fact, it is so close that it feels like a natural extension. But is this wealth of information all good or does it have a downside too? It seems like an interesting experiment to go app-less for a while and solely use a dumb phone.

## My problem with smartphones: they are good

Before jumping into the experiment I can describe myself as an advocate for the modern smartphone. As mobile app and web developer it is really a part of my life. The smartphone makes things easy, the way we exchange messages, mails, photos and other things is nearly effortless.

It also provides a convenient way to look things up by accessing the web. Very few questions cannot be answered with a simple query on Google. And before you know it, the online things you find take your attention away from the question you had in the first place. I find that to be hindering my creativity because very often the questions are more important than the answers.

## Creativity

Creativity is characterised by the ability to perceive the world in new ways, make connections between seemingly unrelated phenomena, to find hidden patterns and to generate solutions. I am most creative when I am alone with my thoughts, like under the shower or while riding my bike. I think this is because during these times I am not interrupted and (temporarily) unable to look things up on the Internet. It makes me wonder if a water resistant smartphone is such a good thing...

The modern smartphone is good at keeping me busy. Any spare moment I use it to tap into the constant stream of new information, news, tweets, messages and emails. I wonder what would happen if I would no longer have constant access to all of this.  Perhaps some artificially created boredom will do me good. Would I become more creative, and what else?

## Meet the Punkt MP01

The Punkt MP01 is a mobile phone without apps and internet. It was specifically designed this way to be a simple phone that supports basic calling and text messaging.

![The Punkt MP01 dumb phone](https://willem.com/global/images/29b67ce85355.webp)

It comes in a big box with a booklet, charger, SIM-tool and a headset.

![Once opened it contains the charger, headset, booklet, SIM-card tool and the phone.](https://willem.com/global/images/32146ddb44f5.webp)

![What was the last time I got a booklet with my phone? ](https://willem.com/global/images/7cc5af1a5f8d.webp)

Its design is functional with big round buttons that have a nice “clicky-clack” tap. It runs a minimal operating system that is unlike Android or iOS. It does not run any apps except a built-in alarm and calendar that only shows the date (and does not allow you to save appointments).

![The Punkt phone feels nice when you hold it; neither too small or too big.](https://willem.com/global/images/36d090858b91.webp)

It is a modern phone with support for bluetooth carkits and it has a relatively large battery. Because it is so simple, it’s battery lasts weeks (!!) before needing a charge.

![The back has a nice shape that makes it disappear in your pocket.](https://willem.com/global/images/6d4edcde5962.webp)

## Setting it up: cloudless contacts

My thrustworthy iPhone connects to the cloud to synchronise my contacts and phone numbers. Obviously the MP01 dumbphone does not support the cloud. You can connect the phone to a computer that will see it as a (tiny) USB thumb drive. You can then copy a file to it containing your contacts in VCF-format (which is available on Apple Mac, Microsoft Windows and Google Gmail). The phone will detect the file and import your addressbook easily.

## The experiment

I expect that I will need some time to adjust, so I will take three months for this experiment (until the end of this year). I am curious what apps I will really miss and how I will circumvent their absence.

![The experiment is on!](https://willem.com/global/images/f0649a81235a.webp)

Through my laptop I will continue to have access to the internet, but I will no longer be constantly connected using a smartphone. It will have it’s downsides for sure, but I wonder if is any good for my state of mind and creativity.

To be continued...

---

## Batavus Champion bike from 1978

*restoring retro glory with some help from the Internet* · 2016-09-03 · https://willem.com/en/2016-09-03_batavus-champion-bike-from-1978/

Almost a year ago I bought an old steel racing bike from 1978. I wanted to figure out if using a bike to commute worked for me. It did! I used it to ride more than 1000KM before I decided to get a modern road bike. Now, almost a year later, I decided to put the powers of the internet into good use: to bring the bike back to its retro glory!

## Vespa self destruction

In September 2015 I used the Dutch graiglist (marktplaats.nl) to find a bike suitable for commuting. A few weeks earlier my Vespa moped decided it was time for self destruction - its cylinder got jammed and destroyed the engine.  I was using a normal 3-speed city bike to commute since I hate using the car due to the Amsterdam traffic, but I found it too heavy and inefficient for daily commutes.

## Faster forward like a champion

So there I found it, an fine example of 70s low end bike design: the Batavus Champion. By no means a special or performant bike, even in its day. But to me it meant everything: it moved me faster forward than any other bike I owned and it was unlike I had seen before!

![New school Sensa Romagna Sport '15 and Old school Batavus Champion '78](https://willem.com/global/images/0eb362d74322.webp)

Batavus Champion specifications when I found it:

- heavy frame made from steel

- double front crankset

- 6-speed rear cassette

- fluffy saddle

- a '90s Syntace front stem 

- two tires "in original condition"...

- worn out, rattle inducing, bearings

The first time I used the brakes one of the bolts holding the brake wire snapped. Clearly this machine required some overdue maintenance!

## Local bike shop to the rescue

So I went to the local bike shop to fix my newly found piece of biking history. Two new tires, an entire set of new bearings (at the crankset, rear and front) and some fresh bolts in the brakes (to hold the break wire). When I got it back it felt like new, ready for many kilometers of commuting!

![After cleaning and degreasing the bike, its retro glory became visible](https://willem.com/global/images/257490a47a9a.webp)

After about 1000KM of riding I bought a modern road bike, mainly because of improved geometry, lower weight and better gear system. The modern bike rides better and because of it the Batavus stood still once more...

## Restoring the retro glory

Something happened during the last year of biking: my condition improved significantly. I can now ride any bike with ease, pretty much regardless of its weight or geometry. I figured it would be cool to ride on the old Batavus again!

With my newly acquired bike knowledge, I investigated the old Batavus, it needed serious cleaning, degreasing and some of the mechanical parts seemed non original.

![Old school bike brakes, slowing you down in retro style](https://willem.com/global/images/4885d91f9774.webp)

![With all the black filthy grease removed, the retro orange really shines in combination with the metal front chain discs](https://willem.com/global/images/ad407f677812.webp)

![The rear derailleur was rusty and not original to this bike](https://willem.com/global/images/efbf2ea26c8d.webp)

## Powers of the Internet

Obviously I was not born a 1978 Batavus bike expert..., but luckily I am quite handy when it comes to Internet. After some extensive searching I found an original advertisement of the Batavus Champion from 1978:

![An original advertisment of the bike from the 70s - with specification of original parts](https://willem.com/global/images/7ced4075582b.webp)

Not only gave this advertisement an indication how the bike looked originally, it also specified what gear shifting groups where available for this bike!

### Derailleur

The rear derailleur on my Batavus was rusty and obviously not original (it was still available at the local branch of Decathlon...). Luckily I found a guy selling a period correct Hurret rear derailleur!

![Thank you Ebay: a period correct Hurret rear derailleur](https://willem.com/global/images/39c215244b13.webp)

The derailleur was shipped from the other side of the world to me and I got it installed on the bike. It fitted perfectly!

![The Hurret rear derailleur (which was flown in from the other side of the world) fits nicely](https://willem.com/global/images/32cf12bc907a.webp)

### Pump

Unlike modern bikes, the old Batavus has a special hook on its frame to mount a large bike pump. Obviously the pump was missing from my bike. I found a fitting Italian Silca pump with a matching Presta pump head.

![Retro bike pumps are available in different colours and sizes - I found an fitting chrome one from Italy!](https://willem.com/global/images/5a44d4c928d0.webp)

### Retro drink bottle

When you ride a bike, you should always have something to drink with you. I figured that a modern drinking bottle would be silly on this bike. After some searching I found a mid seventies new old stock (NOS) drinking bottle somewhere in the United States of America. The owner was happy to ship it to me, just as happy as the local Dutch customs office which charged me a whopping €36 for this old piece of plastic as import duties...!

![The pump fits well and I also managed to find a period correct plastic drink bottle](https://willem.com/global/images/e1ae30bfb5fa.webp)

## Stem

When I found the Batavus it had a much newer black Syntace stem mounted to the steer. Functional for sure, but I deemed it nicer to replace it  with a metal coloured stem from santafixie.com

![The big ding-dong bell is an overstatement and the tiny Garmin Edge 25 is a touch from the modern era I added to the bike to GPS-record my rides](https://willem.com/global/images/c5bc4a7da5ac.webp)

In addition to the stem, I added a large ding-dong bell and equipped the bike with a tiny (but powerfull) little Garmin Edge 25 GPS bike computer.

### Saddle

A bike's appearance is defined by its saddle for a large part. The saddle I got with the Batavus was big, fluffy, and not exactly sporty.

![The Brooks C15 saddle with matching bag is a perfect (and comfortable) match for this bike](https://willem.com/global/images/eed9a5ad40df.webp)

The Brooks Cambium C15 is a modern saddle with retro looks. It was not hard to find a matching saddle bag in similar retro style.

## The result

After many (international) shipments of bike parts I am very happy with the result:

![Batavus Champion bike from 1978 - ready for a ride!](https://willem.com/global/images/5bc9feab192e.webp)

The bike is back and fully appreciated for its retro vibe. For sure a modern bike can ride faster, but why move in hurry if you can travel in style? :-)

---

## iPad Pro as primary computer

*testing iOS as primairy development platform* · 2016-08-15 · https://willem.com/en/2016-08-15_ipad-pro-as-primary-computer/

The lack of physical clutter, distracting branding, or blinking LED's makes the iPad Pro a textbook example of minimal design. My despiction of distraction explains my interest in using the iPad Pro as only computer to test if it is up to the task. Is Apple's latest effort on iOS enough to enable it to do serious development work?

## From desktop to laptop to ...tablet?

Over the past decade I have solely used a laptop for my work. Before then, I used a powerful desktop computer until I started to travel more frequently and needed to do work on the go. Mobility provides a liberating feeling from being required to physically be somewhere to get things done, it is something that I came to appreciate big time. So I wondered, how big is the step from laptop to tablet?

![Shiny new Apple iPad Pro, Apple Pencil and the Smart Keyboard](https://willem.com/global/images/3625e8867ba9.webp)

## Things I do for work

Before I started the experiment with the iPad Pro, I thought about what I do for work and if these tasks are bound to the device I use. My work mainly consists of software designing, programming, managing servers, doing email and reading.

### Designing Software

I usually use an old fashioned pencil and paper when I design software. I like not to be bound by digital boundaries of (any) note taking or drawing software. A piece of paper lacks any pretensions and exactly this enables the free flow of my thoughts to be jotted down the way I like.

### Programming

I worked extensively with Microsoft .NET (C#) to develop software. I used Microsoft Visual Studio as my main integrated development environment (IDE). Working within an IDE can be empowering: it provides structure in projects, repetitive tasks can be automated, debugging software is made easier and writing code is assisted through the magic of IntelliSense (which auto completes your code).

But, as part of another experiment, I decided to start using a plain text editor as means of writing software. At first it was terrible, I really missed the things the IDE provided. But I grew to become less dependent on help from the IDE making me a better programmer no longer bound by the platform my IDE runs on: my favourite text editor VIM runs practically on anything.

### Managing servers

My company uses a network of physical, virtual and cloud servers to run the software solutions clients use. It is my task to make sure the servers are running fine. Managing servers these days can be done remotely from almost any device. I use an ordinary web browser, SSH, VNC and RDP to keep things running.

### Mail

Email is my preferred way of communicating with customers, suppliers and others in my corporate network. I have disabled all email notifications and do not use push mail. I read email when I like, at moments that I am not doing other (often complex) work. In the modern connected world it is easy to have access to email on pretty much any device.

### Reading

Reading from paper can be pleasant, but the need to print every document I read would be a waste of paper and toner. During my time at the University of Amsterdam I quickly learned myself to read from a screen. It takes some getting used to, play with brightness and font and colour settings, but it is a big boon to be comfortable with digital papers, documents and books.

## Setting up the iPad Pro

After unboxing the iPad Pro, I started to prepare the iPad for my work tasks:

- **designing software**: I use the Apple Pencil in combination with the iOS notes app

- **programming**: I use the "Prompt" app from Panic (https://panic.com/prompt/) to log into a remote Linux system using SSH and have access to my normal development setup that uses VIM and a bunch of Linux command line tools

- **managing servers**: I use Safari, Prompt and the Microsoft Remote Desktop app to remotely manage the servers

- **mail**: The standard mail app works fine, it did took some extra effort to disable all notifications and automatic email fetching

- **reading**: I read using Safari, Apple iBooks and the Papers (http://papersapp.com/ios/) app

In addition to the iPad Pro, I also got the Smart Keyboard and Apple Pencil. Although I have learned to type effectively using software (touch) keyboards, I am still much faster typing (blindly) on a physical keyboard. In case I did not like the Apple Smart Keyboard I also have an ordinary bluetooth Apple Keyboard (more on that later).

![The Smart Keyboard has a very nice tactile feel, but lacks certain keys (like ESC, HOME, END)](https://willem.com/global/images/e4181c093e11.webp)

## Findings: hardware

The iPad Pro is a wonderful piece of hardware with a gorgeous screen and enough speed to handle my work tasks with ease. It's improved mobility over the laptop caused me to more frequently move around when doing different tasks: from desk to my easy chair when doing email or reading. It is really something special to realise that your using a tablet to do your work.

### Sharing the Power

Another advantage over the laptop is that the iPad has the same charger as my phone (and the phones of my friends and family). The tablet itself has a good battery life, but knowing that there is always a charger nearby is nice. I can even charge the device while driving using nothing but a standard USB charger in my car. These are serious advantages over the laptop.

### No mouse: no problem

The iPad Pro has no support for mouse. Instead you use your fingers or the Apple Pencil for pointing and tapping. I did not miss the mouse for pointing, but I did find it annoying when trying to scroll through mails or long texts when the tablet was in its upright position. Having to reach out for touch and scroll gestures is physically more demanding (now I am a strong boy..., but still). But the keyboard is here to help: there are many keyboard shortcuts available, that are made visible if you press the CMD-button for a few seconds. These are enough to forgo the lack of a mouse when switching apps, selecting text and scrolling through content.

### Apple Pencil

Writing on a piece of glass is different than writing on old fashioned paper. But it is very close, so close that I can get used to it. The only thing that is a bit of a weird sensation is that the illuminated glass gets warm. It feels like a heated piece of paper, I am not sure if I like that during hot summer days; but it could be nice during cold winter days.

### Smart Keyboard

The Apple Smart Keyboard types really well, that I say as a keyboard junkie. Keys are big enough (certainly if you use the larger iPad Pro). The tactile feedback the keys provide is different but not bad. I really liked the keyboard. One thing that you need to work around is that the Smart Keyboard does not have all the keys a normal keyboard has. Keys like ESC, HOME, END, PAGE UP and PAGE DOWN are missing. I happen to use those keys a lot when working with Linux servers or programming in VIM. Good thing is that the iPad supports ordinary bluetooth keyboards – something I tried during the experiment.

So all in all the iPad Pro hardware is really good and - with some getting used to - pretty suitable for serious work.

![The iPad Pro along side my trustworthy ThinkPad X1](https://willem.com/global/images/277647b357c9.webp)

## Findings: software

The iPad Pro runs iOS - during my test version 9.3, which is an operating system Apple uses for iPads, iPods and iPhones. The operating system has excellent support for multi touch and is known for its ease of use interface. But how does it fare if I used it to do my work?

### Smoothness

The apps I selected to do my work on the iPad work well. iOS is a stable software platform where apps run smoothly and without sudden crashes. iOS works great if I did my mail, programming, server managing and reading. When you use a single app for a longer period of time iOS really delivers a good working environment.

![The iPad Pro works well with a normal bluetooth keyboard](https://willem.com/global/images/a26dc822475e.webp)

### Spit screen multitasking

Since 2015 iOS supports split screen multitasking, allowing you to run two apps at the same time. You can choose to divide the screen in predefined segments: 50-50% or 75-25%. I used it to have my programming code at the left side, while having a real time preview of my work on the right side.

Split screen multitasking works well for touch interaction, but it fails when you use a keyboard because there is no visual indication what app has the keyboard focus. It happened frequently that my keyboard input ended up at the wrong side of the screen, and that sucks big time if your dealing with potentially lethal Linux server commands...

![Split screen multitasking allows me to have access to the my programming code (left) and a live preview (right) simultainiously](https://willem.com/global/images/24ba2fe2c2bc.webp)

### Distracting animations

Another funny thing I experienced is that iOS animations on a 12-inch iPad Pro are much more intense (due to the big screen) than on a smaller iPhone. I really started to hate the animations because of their distracting effect when switching from one app to another. Reducing the animations using the Accessibility settings did replaced the animation with a evenly inefficient cross-fader effect.

### Network connections

Really bad are the limits iOS imposes on software developers to maintain network connections in the background. Network connections are terminated if an app is not active for some time. This is hugely frustrating if I did server managing or development work over a remote SSH network connection. Although the networking limits make sense on a smartphone, having these limits on a 'Pro' device is stupid.

## Conclusion

Using the iPad Pro as a primary computing device for work has advantages, mainly because its versatility and mobility. However, the iPad Pro is limited by its software, in a way that I think can be fixed easily. If split screen multitasking gets better at handling the keyboard it would make a huge difference. If Apple removes networking limits and allows to disable animations the experience would even be better.

Doing this experiment provided me with valuable insights in my work flow. I learned that it gives a great sense of freedom to be less dependent on specific pieces of software bound to a certain operating system. In addition I made some modifications to my desktop operating system based on this iOS experiment: I more often use the keyboard for app switching and window arrangement (tasks I previously did with my mouse).

So in the end I returned the €1200 package to Apple for a refund. My trustworthy ThinkPad continues to be my primary work machine... for some time!

### Update, January 2017 

Read along here (http://willem.comhttps://willem.com/en/2017-01-30_ipad-pro-next-to-my-primary-machine/) for my update on iPad Pro.

---

## Cash is king, or is it?

*The wallet- and cash-less experiment* · 2016-07-15 · https://willem.com/en/2016-07-15_cash-is-king-or-is-it/

Very often I see men carry a wallet filled with plastic: multiple debit and credit cards plus a bunch of loyalty programs and membership cards. Then, some even top it off with stinky paper money and sticky metal coins! It made me wonder if I can free up one pocket by ditching the wallet?

So what did my wallet look like? My wallet contains:

- personal debit card

- personal credit card

- corporate debit card

- shared debit card (with my girlfriend)

- drivers licence

- health insurance card

- public transport chip card

- some paper money

- a card indicating I volunteer as organ donor

- a paper list with "in case of emergency" phone numbers 

These where the things I thought where wise to be in my wallet that I carry pretty much all the time. But then I decided to really think about how much I really used these items. The first step to get rid of the wallet, is to identify the things you really do with it.

## Identify actual use

Of course I use my wallet to make payments, usually with my personal debit card. Only sometimes I use another card. Most places I go accept electronic payments using some kind of credit or debit card. If electronic payments are not accepted, an ATM is usually nearby allowing me to get some cash if it is really nessecary.

I never needed my health insurance card (lucky me); and I know by experience that Dutch hospitals and care providers have a computer system that allows them to verify insurance details and donor info by entering your name and date of birth. So the health insurance card and organ donor card can be left out.

I mostly travel by bike, moped or car. Only once or twice a month I use the public transport. For public transport in the Netherlands you need a special chip card. Not all metro stations and bus stops sell them. So when travelling with public transport, I need that card, only then, not all the time!

In the Netherlands it is required by law to be able to present a valid ID, if you fail to do this the fine is about 90 euros. In practice, I have been asked for an ID during traffic checks or whenever I pick up a package at the local post office.

After some serious consideration, I reduced the functional requirements of my wallet to just: making payments and being able to identify myself.

## Optimising payments: smartphone

It seems silly in this modern, connected, world that I carry four (!) bank cards. I just want to be able to pay and somehow make sure that it is done from the right source of money. I don't care about the card I use. Can I ditch the cards all together?

Obviously the future of payments is mobile. Since almost everybody carries a smartphone it is only logical that both the major smartphone forces in the world are breaking ground on mobile payments. I am talking about Apple Pay and Google Wallet. Sadly, mobile payment support in the Netherlands is still in its infancy and at best it is very fragmented. So, at least for now, it seems that I need at least one widely accepted bank card to make payments.

If I carry just one bank card, which one should it be? I figured out that most of my payments are personal, non-corporate. Paying for groceries, coffee, or a sandwich. Only once or twice a month I use my corporate card. With banking apps I can quickly transfer money from one account to another: making it easy to leave the infrequently used banking cards at home. In the Netherlands (and its neighbouring countries) debit cards (Maestro / PIN) are best accepted followed by credit cards. Therefore I choose my private debit card as "the one", but if I would live in the United States it might have been my private credit card.

## Packing it together

Ideally I want to get rid of the wallet, but I need to carry two plastic cards: a bank card and my drivers license. I thought about glueing or taping them together. But then it hit me: the smartphone I use is large enough to stick one or two cards between the case and phone.

![The iPhone case is large enough to hide cards.](https://willem.com/global/images/923e4b04103f.webp)

Unlike smartphone payments in the Netherlands, contactless payments (through an NFC chip in the bank card) are now widely accepted. You just need to hold the bank card within range of the payment terminal to make a payment. For small payments (under 50 euros) most Dutch banks allow you to make the payment without entering a PIN code. What most people don't know is that contactless payments also work for larger amounts, there still is no need to present the bank card (you're just prompted to enter a PIN on the terminal).

![Stacking two plastic cards is easy](https://willem.com/global/images/6c0587ea2a8c.webp)

Since radio waves can easily traverse through a rubber iPhone case, I tried to stick the NFC-bank card and drivers licence just behind my phone. The flexible rubber case nicely conceiled the cards and the phone rarely became any thicker. Brilliant simplicty... or so I thought!

![The iPhone with case is only slightly thicker. ](https://willem.com/global/images/ce901db81b4a.webp)

## Field testing

A friend of my owns a bar and he kindly allowed me to use his payment terminal to test the "smartphone with hidden contactless bank card"-setup. It did not work! The terminal did not recognise my bank card if it is tucked away between my phone and case. Removing the phone and presenting the rubber case with card did work.

Even altough I do not use the Apple Pay in my iPhone, the NFC chip inside the phone seems to interfere with the bank card signal. I tried turning on flight mode (killing all radio chips) and even turning the phone off entirely. The combination still didn't work contactless. Every time I wanted to make a payment I had to fiddle to get the bank card out of the case... meh!

![Just like any other iPhone: but this one has an NFC contactless bank card and ID hidden it it!](https://willem.com/global/images/983a907a2b8f.webp)

## Refining the concept

After some searching I found another smartphone case with two card sleeves on its back. It is still a minimal package, but it allows much easier access to one or two cards. That is great for the card I use for payments. Since I rarely need my ID, I decided to tuck that one away between the case and the phone. This actually works well in practice.

In addition to the new case I also installed the app "Card Mate Pro" to easily keep a digital copy of my other cards (including loyalty programs and membership cards). Digitising a card is just as easy as taking a photo. It is a simple app that works very well.

![This case allows easy access to the payment card while hiding the ID inside.](https://willem.com/global/images/4c171a022bf0.webp)

## Experience after weeks of testing

As I have gone without a wallet and cash for some time now, I can say it works and I really like it. I went to Germany and Belgium and it all worked great. There where a few times when I encourtered a shop that didn't accept any bank cards. That wasn't a real problem: I either got some cash from a nearby ATM or I found another store to get whatever it was I wanted. One of the exceptions was a (small) ferry over the Maas river, for this reason I have placed some coins in my car and my bike's saddle pocket.

Another thing I didn't think about upfront, was the public transport chip card. Sometimes, when the weather is very bad, I leave the bike at home or at work and take the metro or bus. But due to the unpredicatble nature of the weather, I had a hard time deciding when I needed to take with me the chip card. Sometimes I wanted to take the metro, but then my public transport card was at my location but at my destination! The solution was to buy another card and to make sure that both my work and home have a public transport chip card "at stand by".

So in the end I did it: no longer I carry a separate wallet. I like the empty pocket in my pants and the simplicity of just having to take my phone with me.

---

## Building the blog... in style!

*Developing on a 20-year old computer with 16MB RAM and Windows 98* · 2016-06-23 · https://willem.com/en/2016-06-23_building-the-blog-in-style/

One must be a bit crazy to come up with the idea to build a blog (as in: actual programming) on an old 486 laptop with just 16MB RAM. I happen to be that crazy: I took my very first laptop from the 90s and decided to find out if it was possible to turn it into a development machine.

## The laptop

It was around 1999 when I used all my savings to buy my first computer, it was a second-hand Toshiba T2130CT with mighty impressive specs:

- Intel 486DX4 processor running at 75Mhz 

- 16MB RAM

- 500MB harddisk drive (that I later upgraded to a 2.1GB disk)

- 3.5" floppy disk drive 

- dual PCMCIA socket 

- 10-megabit 3COM PCMCIA network adapter

- 65,536 colors TFT display with a resolution of 640x480 pixels 

- integrated MousePoint ("knub-style" rubber dot) mouse

- battery life of about 20 minutes

![Toshiba T2130CT laptop with a 75Mhz Intel 486 processor and a whopping 16MB RAM (that is megabytes!)](https://willem.com/global/images/b5be855aa969.webp)

When the machine was newly released, in 1995, it was the top model. I got it as a second-hand refurbished unit from a local computer seller for a whopping 1,000 Dutch Guilders (which in todays money is roughly the same as a E1,000). As a young student I fiddled around with it and used it to program my first software in BASIC and websites in HTML.

## Get it to work

After years of collecting dust bunnies in the closet I wondered if the machine was willing to power on, it didn't. The computer greeted me with a "invalid boot disk" message. Obviously it either suffered from amnesia or something else was causing it not to boot.

![I had to remove the original disk because it didn't work... or so I thought!](https://willem.com/global/images/3ae0df46d1ce.webp)

I suspected the harddisk to be the problem and decided to hook it onto my modern computer. My daily Linux machine was unable to talk to the disk, but I had some more luck with connecting it to a MacBook Air. The OS X Disk Utility identified the disk correctly and I was able to browse the contents of the 2,1GB disk (it's a funny thing to realize that even smartwatches today have more memory than my precious old laptop). I checked the file system for errors and once cleared I reinstalled it into the Toshiba. Unfortunately it didn't make any difference: the "invalid boot disk" remained.

![... apparently it needed a little encouragement from its modern cousins...](https://willem.com/global/images/1610bbee32b3.webp)

Fortunately I also had the original 500MB harddisk drive (that was installed before I upgraded the disk at a later moment). The laptop did recognize its original 500MB disk and started to boot. I almost forgot it existed when I saw Microsoft Scandisk prompt itself to have disk examined. So with one disk working and the other not... it must be something else!

As often with computer science the solution was a logical one: because the computer was disconnected from any power source for a long time, the BIOS battery was empty. That caused the basic computer settings, such as the date/time to be reset. Among the BIOS settings there was the option for harddisk interface mode. Once the harddisk interface mode was set to "enhanced IDE" the computer was ready to boot using the larger 2.1GB disk.

## Windows 98 and the modern internet

Never was I so happy to see the Windows 98 boot screen. It's funny to realise that today's boot screens are far less colourful, but then again todays boot screens are only visible for a few seconds. The old laptop took its time and once it finished booting I was ready to take it onto the next level: connecting it to the modern internet!

![Never thought I would be happy to see this: the Windows 98 boot screen!](https://willem.com/global/images/c44b872a7dfc.webp)

Modern laptops have most hardware integrated, but back in the day it was common to plug in additional hardware (such as network adapters and modems). Somewhere in 1999 I bought a 10-megabit 3COM PCMCIA network adapter. As fast as some computer technologies develop themselves the internet protocol is actually very much the same today as it was in the 90s. This made it relatively easy to connect the old laptop to my local network using an ordinary network cable.

![The 486-development machine! ](https://willem.com/global/images/6a30ba0135ec.webp)

On a security note: one must be very careful to connect such an old computer directly to the public internet. Any old  computer makes an interesting target for computer viruses. Since I am the local network administrator I was relatively sure that it was safe to connect the computer. (And if it was to blow up it would have made an interesting passage in this story I guess...)

## Development tools: cloud power

So how good is Windows 98 then for modern software development? Well forget about fully fledged modern integrated development environments, there is no modern web browser and if something crashes on Windows 98 it is possible the entire computer freezes (due to the way the Windows 98 manages its processes). But, it ain't all bad: Notepad is there, the Windows file Explorer and I managed to find a compatible copy of PuTTY! Using PuTTY you can login other computers and use their software offering as it where on the local machine.

![VIM running on the 486 through PuTTY](https://willem.com/global/images/4e404681a940.webp)

With PuTTY I connected the old laptop to a modern Debian Linux virtual machine running in the cloud. The old computer became like "a Window" into the modern (development) world, making it totally possible to program this weblog!
