Reading List

The most recent articles from a list of feeds I subscribe to.

It's easier when you do it earlier

Web accessibility becomes easier and cheaper, when you address it earlier. In this post, we’ll look at various ways to do that, like picking the right CMS and making accessibility part of the agile process. Combine them for maximum effect.

A quick disclaimer before we start: while this post is about web accessibility, the same probably goes for web security, web privacy and other important aspects of a healthy web.

To make websites accessible, most organisations choose to follow the Web Content Accessibility Guidelines (WCAG). It’s also the standard most governments embed in their rules. Meeting WCAG does not guarantee accessibility, but the standard is a good baseline. It is our best bet as a shared understanding ‌of what ‘this is accessible’ means.

Choose a CMS that helps with accessibility

WCAG is about the accessibility of content, so it makes sense to optimise what we do when we create content. We could pick CMSes that help editors create accessible content. In my talk “Your CMS is an accessibility assistant”, that I did last year, I discuss just that.

What if a CMS, when you add a video, prompts for subtitles? What if it, when you place text on a hero image, it helps you pick a color that has sufficient contrast, or suggests to add a background color? Some CMSes already ship with features like this.

WordPress’s Gutenberg editor, for instance, will tell you when you’re starting to use colours with insufficient contrast:

white text and light gray background, with on the right a color settings panel that shows a warning saying the color combination may be hard to read and suggests making the background darker

Features like this are super helpful, because they let us spot accessibility issues early in the process. Without them, we may have only found out about problems once the functionality went live and got audited. With good early warning systems, WCAG audits can focus on the more complex issues.

Check accessibility with every user story

A lot of web projects rely on some form of agile project management, many move new functionality through a set of stages. If you can build accessibility steps into the process, somewhere before the last stage, you can find and fix accessibility problems before they go live.

There are many ways to do this. You may not want to do a full WCAG audit on each piece of functionality, but I’ve seen teams leverage checklists that address low hanging fruit. When you combine a bunch of fairly easy to execute manual checks with some automated accessibility checker, you will likely be able to address problems while they emerge. For instance, add that keyboard handler while you’re building the widget, rather than following a formal accessibility audit months after the feature initially launched.

Some checks you could include are:

  • do the automated checks (for instance from axe-core, Tenon, Polypane or Siteimprove) return zero issues? Note, automated checks can only check 10-30% of WCAG issues, don’t rely on just automated checks
  • can all controls in the feature be used with only a keyboard?
  • can you still use everything if the browser is set to 400% zoom?
  • for all form inputs, does the input activate when you click on the label?
screenshot of terminal window running axe and another screenshot of wikipedia zoomed in 300%

Checklists have caveats though… the most important is to realise that “what’s most easy to check” is not necessarily the same as “what’s the most important to check”. It would be quite the coincidence if it was. But having said that, easy checks are probably the checks that are most feasible to include with each piece of functionality.

Level up on HTML proficiency

A large portion of issues I find in my WCAG audits relates to HTML and how to use it. Developers who know the HTML spec inside out are at a massive advantage when it comes to the WCAG compliance of the product they work on. Which elements to use when, how to build forms, what attributes exist for tables… it will all help write more accessible code.

For instance, developers who are aware that input-elements have an autocomplete attribute, will have no trouble meeting Identify input purpose (Success Criterion 1.3.5, which requires that attribute for form fields that collect personal information).

Ensuring new developers can bubble sort may be important to your business goals, but so is testing for HTML proficiency. Even, maybe especially, when you interview a full stack developer for your team, make sure you also interview for the HTML bit of the stack. It will help the team create accessible code from the start.

Wrapping up

In conclusion, with the right CMSes, checklists for every user story and high levels of HTML proficiency, teams can get a lot of their accessibility right early in the process. These all may all seem like no-brainers, but I’ve only seen very few organisations adopt them. I’m curious if others have more strategies for putting accessibility earlier in the process, please do reply via email or Twitter, or in the comments below.


Originally posted as It's easier when you do it earlier on Hidde's blog.

Reply via email

How I turned my Goodreads data into a self-hosted website with Eleventy

In the last week of 2020, I decided to export my Goodreads data to display it on my personal website. This post is about what I did and how.

Screenshot

Why export?

First, I quite like Goodreads. It lets me see the reads of friends and acquaintances. It lets me share my own. This is all splendid, but it is still somebody else’s site. Somebody with very different life goals from my own, in fact. For more control on what I display and how, I decided to create a new section of this website dedicated to books, fed by an export of my Goodreads data.

The two main reasons I use Goodreads are people and books. I want to connect with (internet) friends and be inspired by what they read. I also want to keep track of what I have read and plan to read, for instance when a person or article mentions an interesting book. When I’m reading a book review in the paper, I’l sometimes grab my phone and add the thing to the list. Goodreads has an easy to use catalog that usually lists what I searched.

Some things to dislike about the platform are the gamification and the generic recommendations: it’s noise that I could do without (“you read something in philosophy, maybe you’ll like this book by Plato”). There are also lots of trackers, and it is powered by a faceless multi-billion dollar enterprise that threatens the livelihood of friendly, local bookshops.

Some features

Various people’s online bookshelves inspired me to create one on this site, including Melanie Richard’s highlights, focused on highlights, Dave Rupert’s Bookshelf, which features many short reviews and half stars, Tom McWright’s, Maggie Appleton’s, Mandy Brown’s, Alex Chan’s, Sawyer Hollenshead (also with highlights) and Amanda Pinkster (includes where she read them).

I like the processes of other people: Katy Decorah uses GitHub actions, Nienke uses her own What.pm and Jeremy Keith tags notes with ISBN numbers. My process is still different from each of them though, for no particular reason.

For me, a personal book repository does not require a lot, but these are some features I wanted to have:

Separate views for Dutch and English
I mostly read in these two languages, some viewers may only be interested in either section.
Hand-picked book covers
‘Never judge a book by its cover’, they say. Well, I like book covers as expectation setters and did not automate the cover art collection process.
Links to author’s personal sites
Personal sites deliver on the promise of the web, said Matthias Ott in Make it personal. I haven’t enriched a lot of the data with this piece of information, but will be.
Dark mode
Because CSS is fun. I went for a midnightblue background with khaki text.
No tracking
This site does not track users. Minimum Viable Data Collection (zero, in this case) ftw.

What I could automate

CSV entries to front matter in Markdown

I decided to use Eleventy to turn my data into a web page, as I like its flexibility, its focus on simplicity and its firm hesitation to make decisions for developers using it.

Goodreads provides reading data in CSV files, which are reasonably well structured. For the Eleventy site, I needed a folder full of Markdown files, one for each book, with basically the metadata from the Goodreads export as Yaml front matter:

---
title: "Uncanny Valley"
author: "Anna Wiener"
isbn: "0374278016"
isbn13: "9780374278014"
rating: "5"
publisher: "MCD"
pages: "281"
publishYear: "2020"
read: "2020"
goodreads_id: "45186565"
---

I did this in Node using a slightly modified version of CSV to Markdown. The project is archived and I could not get the Noderize wrapper to work, but the provided script in index.js did the job for me.

It seems like Hay Kranen’s dataknead may be a great alternative to do this work (in Python).

Image processing

This site has a lot of images, and resizing or optimising would not be my definition of fun. I used the official Image plugin for Eleventy to generate correctly sized images from my source images, and the documented Nunjucks shortcode to output a picture element with webp and jpg versions in various sizes.

I used the native lazyloading attribute, loading="lazy" , which I learned only in this project, is not added to the picture-element, but to the fallback <img>.

The grid

I knew how I wanted my content to be layed out, but I didn’t know what my content would be. Grid Layout is fantastic if that’s your situation. I used grid’s autoplacement feature: I defined a grid, added the content in HTML and each book magically appeared in its right place.

books with grid browser tools overlayed

On small screens, I used the non-default autoflow value column, to make new items appear horizontally.

What I didn’t automate

In web projects, we often balance between spending time to automate versus doing it manually. Sure, automation can be a fun thing to work on. But if I’m honest, I only want to do it if it saves more time than it costs.

Book covers

Cover art is among the highest forms of graphic design. Covers of music and books can be incredibly creative. Film posters can be a prone to cliche overuse, but have you seen Saul Bass’s movie posters?

Books often get different covers when they are reprinted or distributed in different countries. This project was the perfect excuse to handpick my favourite for each book.

CSS authoring

There was not enough complexity to warrant any form of CSS processing, so I just created a single CSS file and started adding styles. I used no methodology or framework. I did mostly avoid classes, because in my day to day work I overuse them and it seemed like a fun challenge.

Extra data

I’ve also added some data manually that I didn’t have in Goodreads, like the language I read a book in. And I want to slowly add more data to some books, like the URI for the author’s personal website, and, in case I wrote a review, a link to that review.

Future features

There are some things that I would like to improve when there’s more time or less lockdown. A website is never finished!

Some interface to add data
Adding a new book now involves me manually creating a Markdown file with the right front matter and a JPG file with the same name for the book cover. I could automate at least part of this.
Filters
Books can currently display by language. If I started adding tags to books, I could create sub lists, “Show books about topic X”. That would be fairly trivial to do.
Better sorting
I messed up transforming the date field in the Goodreads export, so now I only have a year and no way to sort by reading date. I plan to add this for new books.
RSS
I doubt anyone would subscribe to something like this, but wide availability of reading list RSS feeds would allow us all to create a decentralised Goodreads in feed reader software of our choice.
Better lazyloading
Currently, all images on the book site have the loading="lazy" attribute. The recommended way is to only add this attribute for images that are not in the viewport. I’m not sure how to solve that on this site, because my grid grows with the viewport. Which images are in your viewport, depends on how wide it is.
Better markup
Maybe I can use more standard markup for the books, like microformats. The indieweb personal library page has some pointers, including Paul Munday’s example of microformats for books.

Woops, that’s quite the list. Let me just postpone it to the next sprint.

Wrapping up

So, my book site is available on books.hiddedevries.nl, the source is on GitHub. This has been a fun weekend project, and to be honest, I am very much looking forward to continue expanding the existing data and add new stuff.

If you have one of these digital bookshelves yourself, please do share them in the comments or reply on Twitter! If you have any thoughts or opinions on what I’ve done, feel free to let me know.


Reply via email

How I turned my Goodreads data into a self-hosted website with Eleventy

In the last week of 2020, I decided to export my Goodreads data to display it on my personal website. This post is about what I did and how.

Screenshot

Why export?

First, I quite like Goodreads. It lets me see the reads of friends and acquaintances. It lets me share my own. This is all splendid, but it is still somebody else’s site. Somebody with very different life goals from my own, in fact. For more control on what I display and how, I decided to create a new section of this website dedicated to books, fed by an export of my Goodreads data.

The two main reasons I use Goodreads are people and books. I want to connect with (internet) friends and be inspired by what they read. I also want to keep track of what I have read and plan to read, for instance when a person or article mentions an interesting book. When I’m reading a book review in the paper, I’l sometimes grab my phone and add the thing to the list. Goodreads has an easy to use catalog that usually lists what I searched.

Some things to dislike about the platform are the gamification and the generic recommendations: it’s noise that I could do without (“you read something in philosophy, maybe you’ll like this book by Plato”). There are also lots of trackers, and it is powered by a faceless multi-billion dollar enterprise that threatens the livelihood of friendly, local bookshops.

Some features

Various people’s online bookshelves inspired me to create one on this site, including Melanie Richard’s highlights, focused on highlights, Dave Rupert’s Bookshelf, which features many short reviews and half stars, Tom McWright’s, Maggie Appleton’s, Mandy Brown’s, Alex Chan’s, Sawyer Hollenshead (also with highlights) and Amanda Pinkster (includes where she read them).

I like the processes of other people: Katy Decorah uses GitHub actions, Nienke uses her own What.pm and Jeremy Keith tags notes with ISBN numbers. My process is still different from each of them though, for no particular reason.

For me, a personal book repository does not require a lot, but these are some features I wanted to have:

Separate views for Dutch and English
I mostly read in these two languages, some viewers may only be interested in either section.
Hand-picked book covers
‘Never judge a book by its cover’, they say. Well, I like book covers as expectation setters and did not automate the cover art collection process.
Links to author’s personal sites
Personal sites deliver on the promise of the web, said Matthias Ott in Make it personal. I haven’t enriched a lot of the data with this piece of information, but will be.
Dark mode
Because CSS is fun. I went for a midnightblue background with khaki text.
No tracking
This site does not track users. Minimum Viable Data Collection (zero, in this case) ftw.

What I could automate

CSV entries to front matter in Markdown

I decided to use Eleventy to turn my data into a web page, as I like its flexibility, its focus on simplicity and its firm hesitation to make decisions for developers using it.

Goodreads provides reading data in CSV files, which are reasonably well structured. For the Eleventy site, I needed a folder full of Markdown files, one for each book, with basically the metadata from the Goodreads export as Yaml front matter:

---
title: "Uncanny Valley"
author: "Anna Wiener"
isbn: "0374278016"
isbn13: "9780374278014"
rating: "5"
publisher: "MCD"
pages: "281"
publishYear: "2020"
read: "2020"
goodreads_id: "45186565"
---

I did this in Node using a slightly modified version of CSV to Markdown. The project is archived and I could not get the Noderize wrapper to work, but the provided script in index.js did the job for me.

It seems like Hay Kranen’s dataknead may be a great alternative to do this work (in Python).

Image processing

This site has a lot of images, and resizing or optimising would not be my definition of fun. I used the official Image plugin for Eleventy to generate correctly sized images from my source images, and the documented Nunjucks shortcode to output a picture element with webp and jpg versions in various sizes.

I used the native lazyloading attribute, loading="lazy" , which I learned only in this project, is not added to the picture-element, but to the fallback <img> .

The grid

I knew how I wanted my content to be layed out, but I didn’t know what my content would be. Grid Layout is fantastic if that’s your situation. I used grid’s autoplacement feature: I defined a grid, added the content in HTML and each book magically appeared in its right place.

books with grid browser tools overlayed

On small screens, I used the non-default autoflow value column, to make new items appear horizontally.

What I didn’t automate

In web projects, we often balance between spending time to automate versus doing it manually. Sure, automation can be a fun thing to work on. But if I’m honest, I only want to do it if it saves more time than it costs.

Book covers

Cover art is among the highest forms of graphic design. Covers of music and books can be incredibly creative. Film posters can be a prone to cliche overuse, but have you seen Saul Bass’s movie posters?

Books often get different covers when they are reprinted or distributed in different countries. This project was the perfect excuse to handpick my favourite for each book.

CSS authoring

There was not enough complexity to warrant any form of CSS processing, so I just created a single CSS file and started adding styles. I used no methodology or framework. I did mostly avoid classes, because in my day to day work I overuse them and it seemed like a fun challenge.

Extra data

I’ve also added some data manually that I didn’t have in Goodreads, like the language I read a book in. And I want to slowly add more data to some books, like the URI for the author’s personal website, and, in case I wrote a review, a link to that review.

Future features

There are some things that I would like to improve when there’s more time or less lockdown. A website is never finished!

Some interface to add data
Adding a new book now involves me manually creating a Markdown file with the right front matter and a JPG file with the same name for the book cover. I could automate at least part of this.
Filters
Books can currently display by language. If I started adding tags to books, I could create sub lists, “Show books about topic X”. That would be fairly trivial to do.
Better sorting
I messed up transforming the date field in the Goodreads export, so now I only have a year and no way to sort by reading date. I plan to add this for new books.
RSS
I doubt anyone would subscribe to something like this, but wide availability of reading list RSS feeds would allow us all to create a decentralised Goodreads in feed reader software of our choice.
Better lazyloading
Currently, all images on the book site have the loading="lazy" attribute. The recommended way is to only add this attribute for images that are not in the viewport. I’m not sure how to solve that on this site, because my grid grows with the viewport. Which images are in your viewport, depends on how wide it is.
Better markup
Maybe I can use more standard markup for the books, like microformats. The indieweb personal library page has some pointers, including Paul Munday’s example of microformats for books.

Woops, that’s quite the list. Let me just postpone it to the next sprint.

Wrapping up

So, my book site is available on books.hiddedevries.nl, the source is on GitHub. This has been a fun weekend project, and to be honest, I am very much looking forward to continue expanding the existing data and add new stuff.

If you have one of these digital bookshelves yourself, please do share them in the comments or reply on Twitter! If you have any thoughts or opinions on what I’ve done, feel free to let me know.


Originally posted as How I turned my Goodreads data into a self-hosted website with Eleventy on Hidde's blog.

Reply via email

2020 in review

It’s that time of the year again! In this post, I’ll share some highlights of my 2020, a year that I personally can’t wait to leave behind. Below, you’ll find what I’ve been up to and some things that I have learned.

This year I have had some great things happen to me: I became a father for the second time and moved house. It has also been a struggle in many ways. But I’ll repeat my disclaimer from 2018, in these public posts, for reasons, I chose to leave the “lowlights” out. Rest assured there were many, as I imagine was the case for you too.

Highlights

Projects

It has been a good year for my freelance practice, also a stressful one, particularly in lockdown times.

Wai work

I spent the vast majority of my time this year working with the Web Accessibility Initiative at the W3C. This year, I worked on various things:

  • redesign of WCAG supporting documents, like Techniques and Understanding, to launch sometime next year, with improvements including syntax highlighting and clarified context
  • talks about the importance of authoring tools, like Your CMS is an accessibility assistant for WordPress Accessibility Day
  • launched the ATAG Report tool, which can be used to report on accessibility issues in authoring tools, like CMSes, e-learning systems and form generators

In the time that was left, I did a bunch of accessibility audits and workshops in my own capacity. Some for my own clients, some for the clients of consultancies like Firm Ground and Eleven Ways. I also had a short advisory role on the CoronaMelder website, helping with accessibility and code reviews.

I gladly said yes to all of these things, and loved combining the standards-oriented work with the practical hands-on stuff. It’s truly been good to see people understand accessibility better.

Speaking

Almost all of my speaking this year was virtual. I had planned to represent W3C/WAI at the CSUN accessibility conference this year, but this ended up the first of many events cancelled.

The only in-person talk of the year was a practice round for that CSUN talk: Amplifying your accessibility with better authoring tools. It was in Groningen, close to where I grew up and first worked, and I also got to see Maike do her awesome talk about empathy in government.

I also did some private talks, and these public talks, all online:

Generally, online talks felt harder than IRL ones, because of less audience interaction and more preparation time. There was also less meeting people and traveling.

Less traveling was also an advantage: I could cook family dinner after delivering a talk, instead of being away for a few days. There was also one time where I attended my Q&A with a plaster, because I thought I could do some meal prep in a conference break. 🩹

Reading

I was able to read plenty and discovered a bunch of new authors that brought me joy and wisdom. I did one reading list post this year: Equality, a reading list (2).

If you’re looking for recommendations, find me on Goodreads (email/DM for my handle), I read in Dutch and English. These are some highlights in fiction:

These were my favourites in non-fiction:

  • Jia Tolentino’s Trick Mirror, essays about the culture of the self
  • Wendy Liu’s Abolish Silicon Valley, about what’s wrong with Silicon Valley’s ideology
  • Michael Sandel’s The Tyranny of Merit , about why meritocracy is a lie
  • Ibram X Kendi’s How to be an anti-racist – paraphrasing Dutch journalist Pete Wu: it’s probably not right to think in strict boxes but the categories of “racist” and “anti-racist” seem like a very useful distinction to make. Ibram X Kendi’s work has been my favourite about anti-racism so far. He narrates the audiobook himself and it is super powerful.

Writing

I wrote a lot less. Partly, I’ll blame 2020. Partly, it may be due to more of my work involving writing.

Some of the posts I did write:

For the next year, I have some drafts floating around, that I hope to once finish and publish.

Cities

Last year, I had a “Cities” section. This section will be resumed next year.

Things I learned

I didn’t really do any side projects or volunteering this year. Some things I have learned this year:

  • the basics of XSLT, which is used at W3C/WAI to generate the documents that support the WCAG standard
  • I struggled a bit with git submodules, and ended up learning a bit about them
  • For obvious reasons, I worked on talk recording skills and found out it’s all about light, light and light. And that I pull weird faces and should move my head less.
  • Audiobooks allow one to read while going for a walk or doing the dishes, which are some of the few tasks reading can nicely be combined with.
  • Static site generators are perfect for creating WCAG conformance reports. Turning HTML into an accessible PDF is not trivial, and one almost certainly requires PrinceXML for it. It doesn’t support Grid Layout, but has lots of print-specific CSS that is fun to play with, should you be a CSS nerd.

Dear readers, I hope 2021 treats you well. Hang in there.

Should you want to read more personal review posts, check out those of Michelle, Matthias, Melanie, Chee Aun, Una, Nienke, Max, Marcus and Brad.


Reply via email

2020 in review

It’s that time of the year again! In this post, I’ll share some highlights of my 2020, a year that I personally can’t wait to leave behind. Below, you’ll find what I’ve been up to and some things that I have learned.

This year I have had some great things happen to me: I became a father for the second time and moved house. It has also been a struggle in many ways. But I’ll repeat my disclaimer from 2018, in these public posts, for reasons, I chose to leave the “lowlights” out. Rest assured there were many, as I imagine was the case for you too.

Highlights

Projects

It has been a good year for my freelance practice, also a stressful one, particularly in lockdown times.

Wai work

I spent the vast majority of my time this year working with the Web Accessibility Initiative at the W3C. This year, I worked on various things:

  • redesign of WCAG supporting documents, like Techniques and Understanding, to launch sometime next year, with improvements including syntax highlighting and clarified context
  • talks about the importance of authoring tools, like Your CMS is an accessibility assistant for WordPress Accessibility Day
  • launched the ATAG Report tool, which can be used to report on accessibility issues in authoring tools, like CMSes, e-learning systems and form generators

In the time that was left, I did a bunch of accessibility audits and workshops in my own capacity. Some for my own clients, some for the clients of consultancies like Firm Ground and Eleven Ways. I also had a short advisory role on the CoronaMelder website, helping with accessibility and code reviews.

I gladly said yes to all of these things, and loved combining the standards-oriented work with the practical hands-on stuff. It’s truly been good to see people understand accessibility better.

Speaking

Almost all of my speaking this year was virtual. I had planned to represent W3C/WAI at the CSUN accessibility conference this year, but this ended up the first of many events cancelled.

The only in-person talk of the year was a practice round for that CSUN talk: Amplifying your accessibility with better authoring tools. It was in Groningen, close to where I grew up and first worked, and I also got to see Maike do her awesome talk about empathy in government.

I also did some private talks, and these public talks, all online:

Generally, online talks felt harder than IRL ones, because of less audience interaction and more preparation time. There was also less meeting people and traveling.

Less traveling was also an advantage: I could cook family dinner after delivering a talk, instead of being away for a few days. There was also one time where I attended my Q&A with a plaster, because I thought I could do some meal prep in a conference break. 🩹

Reading

I was able to read plenty and discovered a bunch of new authors that brought me joy and wisdom. I did one reading list post this year: Equality, a reading list (2).

If you’re looking for recommendations, find me on Goodreads (email/DM for my handle), I read in Dutch and English. These are some highlights in fiction:

These were my favourites in non-fiction:

  • Jia Tolentino’s Trick Mirror, essays about the culture of the self
  • Wendy Liu’s Abolish Silicon Valley, about what’s wrong with Silicon Valley’s ideology
  • Michael Sandel’s The Tyranny of Merit , about why meritocracy is a lie
  • Ibram X Kendi’s How to be an anti-racist – paraphrasing Dutch journalist Pete Wu: it’s probably not right to think in strict boxes but the categories of “racist” and “anti-racist” seem like a very useful distinction to make. Ibram X Kendi’s work has been my favourite about anti-racism so far. He narrates the audiobook himself and it is super powerful.

Writing

I wrote a lot less. Partly, I’ll blame 2020. Partly, it may be due to more of my work involving writing.

Some of the posts I did write:

For the next year, I have some drafts floating around, that I hope to once finish and publish.

Cities

Last year, I had a “Cities” section. This section will be resumed next year.

Things I learned

I didn’t really do any side projects or volunteering this year. Some things I have learned this year:

  • the basics of XSLT, which is used at W3C/WAI to generate the documents that support the WCAG standard
  • I struggled a bit with git submodules, and ended up learning a bit about them
  • For obvious reasons, I worked on talk recording skills and found out it’s all about light, light and light. And that I pull weird faces and should move my head less.
  • Audiobooks allow one to read while going for a walk or doing the dishes, which are some of the few tasks reading can nicely be combined with.
  • Static site generators are perfect for creating WCAG conformance reports. Turning HTML into an accessible PDF is not trivial, and one almost certainly requires PrinceXML for it. It doesn’t support Grid Layout, but has lots of print-specific CSS that is fun to play with, should you be a CSS nerd.

Dear readers, I hope 2021 treats you well. Hang in there.

Should you want to read more personal review posts, check out those of Michelle, Matthias, Melanie, Chee Aun, Una, Nienke, Max, Marcus and Brad.


Originally posted as 2020 in review on Hidde's blog.

Reply via email