macondo: making Docker-wrapped applications easier to run

December 30, 2020

I found this article and it reminded me of a tool I wrote a couple of months ago called macondo. In this post, I will try to explain what it is, why I wrote it and some of the drawbacks I’ve found. I am not trying to justify its existence of it or even suggesting this is the right way of doing things. I haven’t decided whether I like it or not. ... Read more

Kotlin's .copy() gotcha... when Java is better

December 29, 2020

Kotlin’s data classes are cool. They are the recommended way of replacing POJOs and it is usually recommended to use them with vals so the classes are immutable. They come with a handy copy() method that “clones” the data class, which can also be parameterized with any named argument, so the new object has all the fields of the original class + the overridden fields. So far so good. How does Kotlin’s copy() work under the hood? ... Read more

Tools I use

November 30, 2020

It should be no mystery that tooling is a big part of anyone working with computers. They can make a huge impact on your workflow and productivity. I decided to maintain a list of the tools I feel define my workflow, focusing on the tools that I don’t see used as much by my peers (e.g. I don’t list my browser or anything commonplace): NixOS I used macOS heavily for at least 7 years. ... Read more

YouTube flagged me so I built a Telegram bot to proxy/watch videos

August 10, 2020

TLDR; I use ad blockers. YouTube flagged my account and devices. I can only watch around 1 in 4 videos. So I wrote a Telegram bot that receives YouTube URLs and replies back with the video. The problem I use adblockers to have a semi-decent experience on the Internet. I mainly use UBlock Origin plus some DNS ones. One nice feature of UBlock Origin is that it does block ads from YouTube videos. ... Read more

Automatic work session recordings with OBS Studio + TaskWarrior + TimeWarrior + YouTube

June 3, 2020

Hacker News discussion Not long ago I read a comment on Hacker News about tips to improve one’s performance as a developer; it recommended a system of recording oneself while working and someone suggested uploading the videos to YouTube (as private or unlisted) for future revision and as a backup. I liked the idea so I wanted to give it a try myself. Of course, like most of the stuff I do, the practicality of it was not as important as the chance to see how I would implement a system to support such workflow. ... Read more

Include versions in published POM file when using Gradle platforms (BOM)

May 20, 2020

Gradle platforms are a nice feature introduced back in Gradle 5. They allow you to align the versions of the dependencies across multiple projects by declaring them explicitly in a “platform module”. This is no more than Gradle implementing Maven’s BOM (bill of materials) pattern. This post is not intended to sell you the idea of Gradle platforms. In fact, it assumes familiarity with this feature. Instead, we will discuss one of the downsides and a potential solution: when publishing an artifact that uses a platform, the generated POM file will not, by default, include the version numbers of the transitive dependencies. ... Read more


June 3, 2019

I enjoy mentoring too. If you need need some engineering mentoring, especially around Java (and other JVM languages), data engineering (Flink, Presto, etc.), backend engineering, infra (Kubernetes, Docker, etc.), please send me an email or contact me via telegram at Sessions price can vary depending on the topic, but it goes for around 80USD/hr.

Connect to VPN using Pritunl + auto 2FA

April 21, 2018

At work we use Pritunl to connect to the office VPN. This process involves entering a password and a two factor authentication token. Tired of manually connecting using the graphical user interface and pulling my phone to get a new 2FA every time, I went ahead and tried to automate the process. It turns out that, in Linux, Pritunl offers two clients: CLI and GTK. Using the CLI one, once you have imported the VPN profile, you can connect to a VPN like this: ... Read more

Idempotence layer on bloom filters

April 10, 2018

TLDR: we run several applications consuming multiple real-time streams. These applications implement idempotence using Redis sets. In this post I describe our journey moving to bloom filters (using the ReBloom module), which brought down our memory usage by almost 10x. Let’s briefly define idempotence: An operation is said to be idempotent when applying it multiple times has the same effect. There are some reasons why applications consuming a real-time stream must have an idempotence layer, e. ... Read more

© 2017 | Powered by Hugo ♥ | Art by Clip Art ETC