Projects & Open Source Work

A list of projects I'm currently working on

Here’s a list of all the projects I’m working on. I’ll try to keep this list updated as much as possible. All of them link to GitHub. To see the most up-to-date information, consider checking out my work on GitHub.

All of the projects will show:

  • My train of thought when developing software in the open: make sure to check issues and pull requests
  • Unit tests, integration tests and test-driven development
  • Continuous Integration and Continuous Delivery (especially as Docker Containers and other destinations)

Let’s get into it!


kubectl-slice: a YAML slicer for Kubernetes

language Go technologies Go, Kubernetes, YAML

YAML parsing with kubectl-slice kubectl-slice is a nifty and small Go application that takes in a multi-YAML file and slices them into individual files (you know, those YAML files that are separated by triple-dashes). It becomes super useful when you have multiple YAMLs in a single file, and you want to apply them individually, slice a specific kind out – like grabbing only type: Deployment resources – or just to make it easier to read.

It’s available to install by downloading the binary directly from the Releases section, or you can also use krew to install it via kubectl krew install slice.

Used in the following places:

Thanks a lot to these organizations for using my software in an open source manner. Several private companies also use kubectl-slice but they cannot be listed here due to obvious reasons.

Link: kubectl-slice

http-server: a simple HTTP server

language Go technologies Go, Linux, Markdown, HTML

http-server Logo http-server is a tiny Go application that allows you to expose a directory on your machine (or the machine where you’re running the application) as a web server. If an index file is encountered (like an index.html or index.htm file) then the file is served instead. In fact, you could serve this entire Hugo-powered blog with http-server.

The server can run standalone (as a single binary) or as a Docker Container via GitHub container registry: ghcr.io/patrickdappollonio/docker-http-server. At the time of writing this page, the Docker container alone has over 208,000 pulls.

It supports a handful of nifty tricks like the ability to provide a directory listing if no index file is found, or markdown rendering if there’s a README.md file in the directory, or basic customization of the page’s architecture like title, links or even a banner message, or full air-gap support, so no request is being made to the internet: super useful for when you’re in an environment that doesn’t have internet access.

Authentication support via basic auth or using JSON Web Tokens is also supported, as well as providing CORS headers if needed.

Super easy to use and maintain and happy to take any request in its repository! Feel free to open an issue if you don’t see a feature you might need.

Used in the following places:

The following open source repositories use http-server to serve their content. Additionally, some companies still use http-server internally.

  • SKA Telescope project Kubernetes Setup (repo) (use)
  • EngagementLab’s NEXTjs site (repo) (use)
  • Akvo Foundation’s Lumen & Flow Authorization (for testing purposes) (repo) (use)
  • The HomeLab DockSTARTer project (repo) (use)
  • DreamWorks Animations LLC for some private documentation sites
  • Ubisoft Entertainment SA for some private documentation sites

Link: http-server

Additional up-and-coming projects

These projects are smaller in size than the previous ones, but they still deserve a place in this list.

tabloid: your kubectl and docker CLI output parser

language Go technologies Go, Docker, Kubernetes, Linux, Shell

tabloid was born out of a need: I spent way too much time looking at docker, kubectl and other CLI outputs, that I wanted to have a way to parse the columns printed by these CLIs into a software that would allow me to filter, sort and search the output, or even decide what columns I want to print.

I ended up learning a lot about awk, but for long outputs (longer than 80 characters or where lines are really, really long), awk will not regenerate the columns, and you’re left with a huge amount of empty space which makes it difficult to read for humans.

Yes, it’s true that some of these tools have JSON outputs that could be used to parse and process the output into better outputs, with filtering and all, but you would have to remember a tool to filter, sort and search the JSON outputs, then another tool to render your new JSON in the columns you want. That was too much for me!

Link: tabloid

tgen: a Consul templates-like template tool

language Go technologies Go, Go Templates, Linux, Shell

tgen was born out of a personal need: every now and then I would need to work with Consul Templates, but I didn’t want to install the whole Consul stack just to use the templates. I wanted something that was small, fast and easy to use. That’s how tgen was born: a very simple Go application that uses Go templates to render content.

From there, it morphed into a tool I use quite often. I’ve added Helm-like processing (so even a values.yaml file would work). Its core feature is on pulling data from the environment as well, and fail if the environment, for example, did not provide the required configuration. I’ve used it in scenarios like YAML templating to standard Linux configuration (like Nginx configuration files).

Over 2.5k downloads (at the time of writing this) vouch for it!

Link: tgen

dotenv: your environment variables’ best friend

language Go technologies Go, Linux, Shell

Inspired by another few tools with the same name and behaviour, dotenv is a simple tool that allows you to load environment variables from a file. It has a few cool features like the ability to create a folder in your home directory where you can have multiple environment variable files, and then load them by name. The environment variables can also provide a command to run, as well as a strict mode that will remove any environment variable that is not defined in the file (with the exception of a handful required like $HOME and $PATH).

My most useful tool on a day-to-day basis is to have OpenStack credentials stored in files and loaded using dotenv. Similar situation with some AWS credentials.

Link: dotenv

wait-for: wait for TCP resources before continuing

language Go technologies Go, Docker, Kubernetes

wait-for is my own version of another very popular tool to wait for TCP resources (such as a database to be up) before continuing. I wrote extensively about it here, but in short: give it a TCP hostname and a timeout, and the app will wait and exit-code-zero if the resource is available, or exit-code-one if the resource is not available: super useful to be used as an initContainer in Kubernetes, for example.

Link: wait-for

google-analytics-reverse-proxy: a proof of concept to hide/bypass ad blockers

language Javascript technologies Cloudflare Workers

Now, don’t hate me for this one. This is a simple project that aims to see if it’s possible to proxy the Google Analytics tracker code using something like Cloudflare Workers. And the answer is yes, it is possible. It works for any script from before Google Analytics 4 (GA4). It will rewrite the Javascript code, on-the-fly, and allow you to track people even if they have an ad blocker installed.

Keep in mind its use though: Google Analytics is not GDPR compliant, and you should not use it to track people without their consent. This is just a proof of concept, and I don’t recommend using it in production.

Link: google-analytics-reverse-proxy

Cloudflare Cache Purger: a tool to clear entire sites’ cache

language Go technologies Go, Cloudflare, GitHub Actions

As an avid user of Cloudflare and their globally distributed CDN, I often see myself publishing new content and having to clear the cache manually when the cache is configured to aggressively cache content at the edge. I wanted to automate this process, and so I did. This tool allows you to clear the cache of an entire website using the Cloudflare API.

The tool can also be used as a GitHub action, considering GitHub Actions can be run off Docker Containers. Instructions on how to set it up both as a standalone binary, as a Docker image or as a GitHub Action can be found in the README.

Link: cloudflare-cache-purger

kubernetes-guestbook: my personal implementation of the backend software

language Go technologies Go, Docker, Kubernetes, Redis, SQL Server

Kubernetes has an official application to test environments and deployments to a Kubernetes cluster called guestbook. It’s written in PHP and only supports Redis as a backend, as long as it’s a Redis Cluster.

My copy is a full rewrite of the Guestbook, but in Go, with support for multiple backend types, not just a Redis Cluster: in fact, it was written to support a standalone Redis instance, which is super useful when the clustering is done by a proxy on top of Redis. SQL Server support was added as a proof-of-concept while I was migrating a well known Canadian bank to Google Cloud.

Link: kubernetes-guestbook

localized: find the user’s language off system settings

language Go technologies Go, Multi-architecture, Cross Compilation

localized is a Go library that allows you to detect the language of the Operating System where you’re running it. It uses environment variable details on Unix environments, and on Windows, it uses Windows API calls to get the language of the system. It supports providing a default language in case the detection doesn’t yield useful results.

Link: localized

crd-controller-tutorial: a barebones training on Kubernetes CRDs and Operators

language Go technologies Go, Kubernetes CRDs, Kubernetes Operators

At one of my previous jobs, I had to provide a quick training on how Kubernetes Operators work, from the bare-minimum for things like where to get Tokens, how to access the Kubernetes API from inside the operator, how to query and retrieve resources, how to add new resources to the Kubernetes ecosystem and more. This repository is a proof-of-concept for the training where I add a todo (as in To-do list) resource to Kubernetes and render it through a Deployment.

The process does not use the Kubernetes Go SDK and instead it focuses on using bare-bones access to these resources. It’s a great way to learn how to build your own Kubernetes Operator.

Link: crd-controller-tutorial

haproxy-log-parser: better output of HAProxy access logs

language Go technologies Go, HAProxy

At a previous company, I had to skim through a lengthy list of logs collected from multiple nodes that had HAProxy running as a reverse proxy. One of the scenarios I had to deal with was to analyze the biggest consumers of HTTP requests and bandwidth, but to do that easily, I would had to submit my logs to a third-party service, which I didn’t want to do.

This app allows you to read one or many logs, and render them in a human-readable way.

Link: haproxy-parser

Share this: