56,966 blogs · [ { "id": "01a08c63-f30a-732f-9523-570da5f96b54", "title": "Saying Goodbye to my Git Server's CGit Frontend", "url": "https://www.worthe-it.co.za/blog/2026-09-05-saying-goodbye-to-my-git-servers-cgit-frontend.html", "published_at": "2026-09-04T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da65f6685", "title": "Separating End to End Tests in Rust with Cargo Features", "url": "https://www.worthe-it.co.za/blog/2026-07-17-separating-end-to-end-tests-in-rust-with-cargo-features.html", "published_at": "2026-07-16T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da6c5a7d2", "title": "It's been 15 years, what have I learned?", "url": "https://www.worthe-it.co.za/blog/2026-05-13-its-been-15-years-what-have-i-learned.html", "published_at": "2026-05-12T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da75e21f3", "title": "My 2025 In Review", "url": "https://www.worthe-it.co.za/blog/2026-01-01-my-2025-in-review.html", "published_at": "2025-12-31T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da7c63fbd", "title": "The Localhost Podcast CLI Tool", "url": "https://www.worthe-it.co.za/blog/2025-10-19-the-localhost-podcast-cli-tool.html", "published_at": "2025-10-18T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da8ad865f", "title": "Buying Tech Books in South Africa", "url": "https://www.worthe-it.co.za/blog/2025-05-17-buying-tech-books-in-south-africa.html", "published_at": "2025-05-16T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570da919f9a4", "title": "My Exobrain", "url": "https://www.worthe-it.co.za/blog/2025-05-04-my-exobrain.html", "published_at": "2025-05-03T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daa099645", "title": "New Songbook Added to this Blog", "url": "https://www.worthe-it.co.za/blog/2024-06-26-new-songbook-added-to-this-blog.html", "published_at": "2024-06-25T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daa241cbe", "title": "My approach to Advent of Code puzzles", "url": "https://www.worthe-it.co.za/blog/2024-02-26-my-approach-to-advent-of-code-puzzles.html", "published_at": "2024-02-25T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daaef37f7", "title": "Make the computer do it!", "url": "https://www.worthe-it.co.za/blog/2023-10-25-make-the-computer-do-it.html", "published_at": "2023-10-24T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570dabe144a4", "title": "Building a digital music collection in 2023", "url": "https://www.worthe-it.co.za/blog/2023-08-20-building-a-digital-music-collection-in-2023.html", "published_at": "2023-08-19T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daca8a2b6", "title": "Release Announcement: South African ID Parser (JavaScript library) v1.1.0", "url": "https://www.worthe-it.co.za/blog/2023-06-14-release-announcement.html", "published_at": "2023-06-13T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570dacfccdbd", "title": "Concatenating PDF files on Linux", "url": "https://www.worthe-it.co.za/blog/2023-06-08-concatenating-pdf-files-on-linux.html", "published_at": "2023-06-07T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570dad4e4a46", "title": "Leveling Up Your Git Server - Sharing Repos with a Friend", "url": "https://www.worthe-it.co.za/blog/2023-06-02-leveling-up-your-git-server-sharing-repos.html", "published_at": "2023-06-01T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570dae22d913", "title": "I was saved by Test Driven Development", "url": "https://www.worthe-it.co.za/blog/2023-02-09-i-was-saved-by-test-driven-development.html", "published_at": "2023-02-08T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daea91d48", "title": "Software Engineering is Engineering", "url": "https://www.worthe-it.co.za/blog/2022-10-27-software-engineering-is-engineering.html", "published_at": "2022-10-26T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daeb481e3", "title": "How to Train Your Git Server", "url": "https://www.worthe-it.co.za/blog/2022-06-10-how-to-train-your-git-server.html", "published_at": "2022-06-09T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daf525868", "title": "My Current Pick of Rust Performance Optimization Tools", "url": "https://www.worthe-it.co.za/blog/2021-06-19-rust-performance-optimization-tools.html", "published_at": "2021-06-18T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daffd4d4e", "title": "The Newtype Pattern in Rust", "url": "https://www.worthe-it.co.za/blog/2020-10-31-newtype-pattern-in-rust.html", "published_at": "2020-10-30T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570daffdda88", "title": "A Fancy New Website Redesign", "url": "https://www.worthe-it.co.za/blog/2020-09-06-a-fancy-new-website-redesign.html", "published_at": "2020-09-05T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db066a1e0", "title": "The Localhost Podcast", "url": "https://www.worthe-it.co.za/blog/2020-05-27-localhost-podcast.html", "published_at": "2020-05-26T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db0c54c9a", "title": "Advent of Code: Expressing yourself", "url": "https://www.worthe-it.co.za/blog/2020-01-24-advent-of-code-expressing-yourself.html", "published_at": "2020-01-23T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db12657fa", "title": "Rust Iterators", "url": "https://www.worthe-it.co.za/blog/2019-08-01-rust-iterators-cheatsheet.html", "published_at": "2019-07-31T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db1ecb650", "title": "Illustrate your Point with Literate Programming", "url": "https://www.worthe-it.co.za/blog/2019-05-07-illustrate-your-point-with-literate-programming.html", "published_at": "2019-05-06T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db21684f9", "title": "What's in a Name?", "url": "https://www.worthe-it.co.za/blog/2019-03-24-whats-in-a-name.html", "published_at": "2019-03-23T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db2eadbb9", "title": "Implementing a Bitwise Simulation", "url": "https://www.worthe-it.co.za/blog/2019-01-06-implementing-a-bitwise-simulation.html", "published_at": "2019-01-05T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db31bb6fd", "title": "Compile Time Feature Flags in Rust", "url": "https://www.worthe-it.co.za/blog/2018-11-18-compile-time-feature-flags-in-rust.html", "published_at": "2018-11-17T22:00:00+00:00" }, { "id": "01a08c63-f30a-732f-9523-570db34afb8c", "title": "Property Based Testing", "url": "https://www.worthe-it.co.za/blog/2018-11-08-property-based-testing.html", "published_at": "2018-11-07T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82cfe1b87", "title": "Going Four Times Faster using Multi-Threading", "url": "https://www.worthe-it.co.za/blog/2018-10-03-going-four-times-faster-with-multithreading.html", "published_at": "2018-10-02T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82d68fbff", "title": "Performance Tuning in Rust using Benchmarking and Perf", "url": "https://www.worthe-it.co.za/blog/2018-09-23-performance-tuning-in-rust.html", "published_at": "2018-09-22T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82e1eb35c", "title": "Coding for the Win", "url": "https://www.worthe-it.co.za/blog/2018-09-19-coding-for-the-win.html", "published_at": "2018-09-18T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82ef85d26", "title": "WebAssembly", "url": "https://www.worthe-it.co.za/blog/2018-08-21-webgame-webassembly.html", "published_at": "2018-08-20T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82fa42e12", "title": "Game Programming Inspires My Software Development", "url": "https://www.worthe-it.co.za/blog/2018-07-28-game-programming-inspires-my-software-development.html", "published_at": "2018-07-27T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82fb237c4", "title": "FUN: JMP FUN", "url": "https://www.worthe-it.co.za/blog/2018-06-17-fun-jmp-fun.html", "published_at": "2018-06-16T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a82fd1a7a3", "title": "Literate Programming", "url": "https://www.worthe-it.co.za/blog/2018-05-28-literate-programming.html", "published_at": "2018-05-27T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83027e76d", "title": "Writing an Entelect Challenge bot in Rust", "url": "https://www.worthe-it.co.za/blog/2018-05-02-writing-an-entelect-challenge-bot-in-rust.html", "published_at": "2018-05-01T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a830f6cdcc", "title": "Monte Carlo Simulations", "url": "https://www.worthe-it.co.za/blog/2018-03-28-monte-carlo-simulations.html", "published_at": "2018-03-27T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83130575d", "title": "What's a WASM?", "url": "https://www.worthe-it.co.za/blog/2018-03-06-whats-a-wasm.html", "published_at": "2018-03-05T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a831fe1eea", "title": "Why functional programmers should care about Rust", "url": "https://www.worthe-it.co.za/blog/2018-02-11-why-functional-programmers-should-care-about-rust.html", "published_at": "2018-02-10T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a832b19c7a", "title": "Happy 2018: A stereotypical new years post", "url": "https://www.worthe-it.co.za/blog/2018-01-15-happy-2018.html", "published_at": "2018-01-14T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a833407ffb", "title": "Using Git for Incremental Backups", "url": "https://www.worthe-it.co.za/blog/2017-12-21-using-git-for-incremental-backups.html", "published_at": "2017-12-20T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a833f2b1fe", "title": "The Fundamentals of Version Control", "url": "https://www.worthe-it.co.za/blog/2017-11-29-fundamentals-of-version-control.html", "published_at": "2017-11-28T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a834d16457", "title": "Error Reporting from your Systemd Automation", "url": "https://www.worthe-it.co.za/blog/2017-11-07-error-reporting-from-your-systemd-automation.html", "published_at": "2017-11-06T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a8356825b0", "title": "Multi-platform Rust and Emscripten-Specific Functions", "url": "https://www.worthe-it.co.za/blog/2017-10-10-multiplatform-rust-and-emscripten-specific-functions.html", "published_at": "2017-10-09T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a835755a8a", "title": "A Quick Introduction to Graphviz", "url": "https://www.worthe-it.co.za/blog/2017-09-19-quick-introduction-to-graphviz.html", "published_at": "2017-09-18T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a8357abe33", "title": "Writing Git Hooks using Rust", "url": "https://www.worthe-it.co.za/blog/2017-08-29-writing-git-hooks-using-rust.html", "published_at": "2017-08-28T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a836299c46", "title": "Rusty Microphone", "url": "https://www.worthe-it.co.za/blog/2017-08-14-rusty-microphone.html", "published_at": "2017-08-13T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83663ced3", "title": "A Rusty Tale of Shared Memories and Passed Messages Part 2: Pointers to Shared Memory", "url": "https://www.worthe-it.co.za/blog/2017-07-11-a-rusty-tale-of-shared-memories-and-passed-messages-2.html", "published_at": "2017-07-10T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a836896aa0", "title": "A Rusty Tale of Shared Memories and Passed Messages Part 1: Channels", "url": "https://www.worthe-it.co.za/blog/2017-06-19-a-rusty-tale-of-shared-memories-and-passed-messages-1.html", "published_at": "2017-06-18T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a837445e31", "title": "A love poem to the mechanical keyboard", "url": "https://www.worthe-it.co.za/blog/2017-05-30-a-love-poem-to-the-mechanical-keyboard.html", "published_at": "2017-05-29T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a837e0cb89", "title": "Backups are a form of Risk Management", "url": "https://www.worthe-it.co.za/blog/2017-05-11-backups-are-a-form-of-risk-management.html", "published_at": "2017-05-10T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a838d561fa", "title": "Updated Thoughts on using GTK in Rust", "url": "https://www.worthe-it.co.za/blog/2017-04-25-updated-thoughts-on-using-gtk-in-rust.html", "published_at": "2017-04-24T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a839961326", "title": "The Script I Use to Deploy My Website", "url": "https://www.worthe-it.co.za/blog/2017-04-09-the-script-i-use-to-deploy-my-website.html", "published_at": "2017-04-08T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83a2acc67", "title": "Tail Recursion", "url": "https://www.worthe-it.co.za/blog/2017-03-28-tail-recursion.html", "published_at": "2017-03-27T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83a3d9e5f", "title": "Reflections on the IT Industry", "url": "https://www.worthe-it.co.za/blog/2017-03-15-reflections-on-the-it-industry.html", "published_at": "2017-03-14T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83a76aff8", "title": "What Note Is This? Part 2: Taking a signal from a microphone, and making sense of it musically", "url": "https://www.worthe-it.co.za/blog/2017-02-26-what-note-is-this-2.html", "published_at": "2017-02-25T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83ade5420", "title": "Validating a South African ID Number in Javascript", "url": "https://www.worthe-it.co.za/blog/2017-02-12-validating-a-south-african-id-number-in-javascript.html", "published_at": "2017-02-11T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83bd56856", "title": "What Note Is This? Part 1: What is sound, and how do I use it in a program?", "url": "https://www.worthe-it.co.za/blog/2017-01-29-what-note-is-this-1.html", "published_at": "2017-01-28T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83c43880e", "title": "Aliasing Traits in Rust", "url": "https://www.worthe-it.co.za/blog/2017-01-15-aliasing-traits-in-rust.html", "published_at": "2017-01-14T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83c635230", "title": "What's in a Generic Number Type?", "url": "https://www.worthe-it.co.za/blog/2017-01-05-whats-in-a-generic-number-type.html", "published_at": "2017-01-04T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83cdc090e", "title": "Development in the Open", "url": "https://www.worthe-it.co.za/blog/2016-12-22-development-in-the-open.html", "published_at": "2016-12-21T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83ddbc062", "title": "My first GUI with GTK and Rust", "url": "https://www.worthe-it.co.za/blog/2016-10-23-my-first-gui-with-gtk-and-rust.html", "published_at": "2016-10-22T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83e63fbb5", "title": "Static Website Generation with Jekyll", "url": "https://www.worthe-it.co.za/blog/2016-09-21-static-website-generation-with-jekyll.html", "published_at": "2016-09-20T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83f109f46", "title": "I've been using Emacs for about a year now", "url": "https://www.worthe-it.co.za/blog/2016-09-02-ive-been-using-emacs-for-about-a-year-now.html", "published_at": "2016-09-01T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83fe861b2", "title": "Automated Syncing with Git", "url": "https://www.worthe-it.co.za/blog/2016-08-13-automated-syncing-with-git.html", "published_at": "2016-08-12T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83fe898b1", "title": "All about Rust: The programming language, not the game", "url": "https://www.worthe-it.co.za/blog/2016-08-03-all-about-rust.html", "published_at": "2016-08-02T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a83ff92f32", "title": "A scipt to convert Striata statements to PDF", "url": "https://www.worthe-it.co.za/blog/2016-07-20-striata-reader-script.html", "published_at": "2016-07-19T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a8403d0b2c", "title": "So I've been learning Emacs...", "url": "https://www.worthe-it.co.za/blog/2015-10-10-so-ive-been-learning-emacs.html", "published_at": "2015-10-09T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a8412058d7", "title": "Building a Computer from Parts", "url": "https://www.worthe-it.co.za/blog/2015-07-25-building-a-computer-from-parts.html", "published_at": "2015-07-24T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a841b31038", "title": "Open Source Recording", "url": "https://www.worthe-it.co.za/blog/2015-06-16-open-source-recording.html", "published_at": "2015-06-15T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a842005ce3", "title": "Getting Started with Angular JS", "url": "https://www.worthe-it.co.za/blog/2015-06-12-getting-started-with-angular-js.html", "published_at": "2015-06-11T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a8426c9bfe", "title": "An Open/Closed Icon in Angular JS", "url": "https://www.worthe-it.co.za/blog/2015-03-07-open-closed-icon-in-angular-js.html", "published_at": "2015-03-06T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a84285b9d0", "title": "Return to C++", "url": "https://www.worthe-it.co.za/blog/2015-01-04-return-to-c-plus-plus.html", "published_at": "2015-01-03T22:00:00+00:00" }, { "id": "01a08c63-f30b-7393-90f6-d3a842cdb5ef", "title": "Bitwise JavaScript", "url": "https://www.worthe-it.co.za/blog/2014-12-16-bitwise-javascript.html", "published_at": "2014-12-15T22:00:00+00:00" } ] posts Claim your blog
Back to worthe-it.co.za
Blog · corpus.blog/blogs/worthe-it.co.za/posts

worthe-it.co.za

worthe-it.co.za

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014