Writing on software and technology

Dive into my world of tech insights, experiences, and stories on this blog page, where I share my journey and learnings as a software engineer and entrepreneur.

My Blogging Journey

I narrate my journey as a tech blogger, evolving from a self-created PHP framework to Squarespace, and eventually embracing Tailwind UI and CSS for greater control. I share my transition to MDX and Next.js, leading to a highly efficient site hosted on Google Cloud Platform.

JSON Unmarshalling and Marshalling Custom Types

Implementing the Unmarshaler and Marshaler interfaces for custom types in JSON can lead to stack overflow issues, which can be resolved using intermediary variables and type aliases to break recursive loops.

oh-my-zsh plugins without the aliases

Using oh-my-zsh's plugins brings numerous aliases, many of which may remain unused, like the roughly 50 in the git plugin; to prevent these from loading, alias 'alias' to 'true' before sourcing oh-my-zsh, and then unalias it.

Gentoo as a router

Choosing Gentoo Linux over pfSense for router functionality, this detailed guide covers installation, setup, and configuration, including partitioning, chrooting, Portage settings, kernel updates, inittab modifications, networking with udev rules, bridge creation, hostapd setup, and advanced nftables and Wireguard integration for secure, efficient routing.

What's bad about Slack

Slack, often chosen by companies for its convenience and features, has notable drawbacks including its proprietary nature with embedded trackers, the shutdown of its XMPP/IRC bridge pushing users to its closed client, and privacy concerns due to administrative access to user messages, leading to viable alternatives like IRC, Matrix, Rocket, and Mattermost.

Gitea firejail profile

Firejail security sandbox uses Linux namespaces and seccomp-bpf in order to isolate processes.

Migrating from GitHub to a Gitea

Migrate your GitHub projects to a Gitea instance using a provided script that leverages the platform's API.

Experiences from hosting your own email server

Hosting your own email server, while initially appealing for privacy and learning, proves time-consuming and complex, involving intricate setup and security concerns. I'll share my experience of server configuration, the historical context of email technology, and the challenges of ensuring reliable and secure email communication.

4 Privacy and Security Extensions for Firefox

This blog post highlights four essential Firefox extensions for enhancing online privacy and security, reflecting a growing public desire for control over internet anonymity.

Improving website accessibility for screen readers (part 2)

In this second part of a series on enhancing website accessibility for screen readers, the focus shifts to applying ARIA (Accessible Rich Internet Applications) to buttons, navigation, and dialogs.

Improving website accessibility for screen readers (part 1)

This article, the first in a series on website accessibility, highlights the importance of making web content accessible to visually impaired users, an often-overlooked aspect by developers. The article details ARIA attributes, roles, and HTML elements essential for accessible web design, such as labels, inputs, fieldsets and legends.


At FOSDEM 2016 in Brussels, I experienced the growing popularity of this event firsthand, as I volunteered during its buildup and cleanup, witnessing the gathering of an estimated 5,000 hackers globally.

Making Gentoo GNU/Linux libre and respect your freedom (sort of)

Gentoo GNU/Linux, though not inherently respecting user freedom by default, can be configured for a more libre experience. By setting ACCEPT_LICENSE="-* @FREE" in /etc/portage/make.conf and adding the deblob USE-flag to the kernel package, users can limit their Gentoo installation to free software, aligning more closely with the principles of the Free Software Foundation.

Optimizing Wordpress load speed

In this article I will show how to optimize Wordpress load speed by using the PageSpeed Module, W3 Total Cache and Varnish.