Archives
2024
- Sun 03 November 2024
- Programmatically set the pixel density (DPI) of a PNG image
- Sat 19 October 2024
- Developer PSA: Learn to type!
- Sun 18 August 2024
- Taking a step back from open source development
- Fri 05 July 2024
- Book Review: Cybersecurity Myths and Misconceptions
- Tue 02 April 2024
- PostgreSQL indexing: The basics
- Sun 24 March 2024
- Configuring touchpad tap in Sway
- Mon 11 March 2024
- Syntax highlight anything with Tree-sitter
- Thu 29 February 2024
- Extending NeoVim for commenting and uncommenting code blocks
- Sat 24 February 2024
- Adding guardrails to psql for PostgreSQL
- Sun 04 February 2024
- First impressions of Wayland on Arch Linux
- Mon 29 January 2024
- Dependabot's dependency grouping is awesome
2023
- Wed 25 October 2023
- A new dark theme for the blog!
- Tue 24 October 2023
- What does the number in a man page mean?
- Sat 21 October 2023
- The sheer insanity of interfaces and nil in Go
- Sat 14 October 2023
- Book Review: Writing an Interpreter in Go
2022
- Mon 26 December 2022
- Fix 3D graphics in Arch Linux on Dell XPS 15 9520
- Sun 20 November 2022
- Book Review: CPython Internals
- Sat 19 November 2022
- The difference between Python and CPython
- Sun 06 November 2022
- The pre Python 2.5 ternary operator hack
- Sat 29 October 2022
- Why I write a blog that nobody reads (and you should, too)
- Mon 24 October 2022
- Introducing my Wiki!
- Wed 10 August 2022
- Book Review: The Rust Programming Language
- Mon 11 July 2022
- Book Review: 97 Things Every Programmer Should Know
- Sun 10 July 2022
- Full text search with pelican-search!
- Thu 07 July 2022
- The art of learning from the less experienced
- Sat 02 July 2022
- Book Review: Apprenticeship Patterns
- Sun 12 June 2022
- Eleven Table Tennis: A VR masterpiece
- Sun 12 June 2022
- Learning a new programming language as a practicing software engineer
2021
- Thu 09 September 2021
- RepoBee at ITiCSE and SIGCSE 2021!
2020
- Sun 04 October 2020
- RepoBee at ITiCSE 2020!
- Sat 03 October 2020
- Essential pytest pt. 3: Rerunning failed tests (and the pytest cache)
- Sat 03 October 2020
- Essential pytest pt. 2: Selecting tests to run
- Tue 29 September 2020
- Thoughts on graduating with an MSc in Computer Science and Engineering
- Sun 02 August 2020
- The Linux /etc/passwd file, and why it doesn't contain passwords
- Fri 31 July 2020
- Essential pytest pt. 1: Controlling the verbosity of output
2019
- Sun 10 November 2019
- Don't use String for method options, use an enum!
- Fri 11 October 2019
- Java's Optional: Why you should prefer it over null
- Mon 22 July 2019
- RepoBee (and Simon) at ITiCSE 2019!
- Mon 22 July 2019
- Git worktrees: work in parallel on multiple versions of a project
- Sun 23 June 2019
- Redirecting stdout and stderr in bash
- Thu 13 June 2019
- Technical e-books from Humble Bundle
- Tue 11 June 2019
- I/O redirection in bash
- Tue 21 May 2019
- Piping commands in bash
- Mon 06 May 2019
- Using bash aliases
- Mon 29 April 2019
- Git local
- Mon 22 April 2019
- History and history expansion in bash
- Tue 09 April 2019
- Reverse search in bash
- Tue 09 April 2019
- Announcing Tip of the Week (TotW)
- Sat 06 April 2019
- Migrating my blog
- Tue 05 March 2019
- Testing tips: Tests that don't test
2018
- Sun 30 December 2018
- TornadoFX+Exposed pt. 3: Adding, editing and removing rows
- Wed 26 December 2018
- TornadoFX+Exposed pt. 2: Showing a database table
- Tue 25 December 2018
- TornadoFX+Exposed pt. 1: Project and database setup
- Wed 14 November 2018
- Collapsing and expanding HTML elements using (mostly) CSS
- Tue 30 October 2018
- A binary search tree in Kotlin pt. 2: Generic node
- Sun 28 October 2018
- A binary search tree in Kotlin pt. 1: Representing a node
- Wed 17 October 2018
- Creating a standalone (runnable) Kotlin .jar file with IntelliJ and Gradle
- Tue 03 July 2018
- Awesome Python Podcasts
- Tue 01 May 2018
- What the self? Python's self demystified!
- Thu 05 April 2018
- Properties as Pythonic setters
- Thu 05 April 2018
- Properties as Pythonic getters