
July 31, 2024
Last month, the Ansible Forum had a discussion about potential changes that might be implemented in AWX.
One aspect that immediately hit me was the decision to move from SemVer to CalVer.
More specifically, what struck me was the focus on this change in the initial post and in the comments.
Since it took me a while to formulate a whole reasoning behind my perspective, I created this blog post to explain my thought process better.
Read More 
September 30, 2022
I still remember when 15 years ago, the topic of Infrastructure as Code was beginning to be discussed.
At the time, the majority of tools we know and use for Infrastructure as Code did not exist.
Some people and companies realized the need for such a paradigm, while many others were skeptical or against it.
In the last few months, I had a kind of a Deja Vu when I started to have conversations with some stakeholders around Policy as Code, or as someone prefers to call it, Compliance as Code.
The idea behind Policy as Code is that if it was possible to write policies in a language that is both easily readable by a human and a computer, we could better govern IT.
Policy as Code is not a new concept by itself.
In fact, in Infrastructure as Code software such as Ansible, it is possible to create a Playbook to assess if a system is in the expected state.
The problem, though, is that a Playbook written with Ansible with this scope is not always evident if read by people that are not highly trained on the topic.
Read More 
August 22, 2022
As it happens every year, I had to pull a lot of information from various financial intermediaries and convert them into the way the local tax system wanted them.
For this reason, I created a Go program that does this modularly.
Whenever I have a new financial intermediary, I create a new module that can read whatever format they create and returns a structured object in the form that the application expects.
This year I added a new financial intermediary with a very “interesting” CSV format.
Read More 
March 21, 2022
One of the first issues that I had to solve when I started to use gRPC was how to inject a DB connection pool to the function handling the request.
The DB connection injection is needed because creating a new SQL connection every time there is a new gRPC request (and tearing it down at the end) is a massive waste of resources.
Also, this approach could limit the scalability of the API since the database probably has a limited number of connections it will accept.
Read More 
February 22, 2022
gRPC is a very nice technology that allows the implementation of efficient APIs in a very efficient way.
Thanks to gRPC and protobuf, you do not have to write much boilerplate code since the boilerplate code is generated automatically from the proto
file.
This works perfectly until both your client and server can perform gRPC calls.
Luckily most of the languages have no issue with this.
Still, the big exception is JavaScript (and other languages that will compile to JS, such as TypeScript) running in a browser.
Read More 
July 28, 2021
A few years ago, I wrote a blog post on managing CORS headers with Negroni.
Lately, I’ve created a new API server that needed to be accessible from the browser, but this time I used a different technology, more precisely gRPC-Gateway.
Few months after I wrote that blog post, I stopped writing new REST services by hand.
I did not rewrite all the services that used the old paradigm just because they needed a fix or a new feature, but for all new services, I moved to gRPC with gRPC-Gateway.
Read More 
June 28, 2021
Few months ago I posted a library for sensible int scale for Gonum Plot.
There is a similar package I’ve developed to handle timescales.
The integer one, being based on a recursive function, works with any number scale.
Differently, this one will only work well with a timescale between 2 days and a couple of years.
Extending it is not hard since it’s enough to add additional case
statements in the switch
, but I’ve not found use-cases for different timeframes so far.
If you add additional options, please commit them back!
Read More 
January 20, 2021
Over the years, I found myself multiple times using Gonum Plot.
I do find it as a very good and easy to use plotting tool for Go.
The problem I found myself, over and over, dealing with is the tickers scale.
If you know before-hand the values that can be expected to be created by the application, it is very straightforward, but the majority of times, this is not the case.
I often find myself creating a plotting application on data that track events that have not yet happened and cannot predict their range.
Read More 
September 22, 2019
Last week, in a previous article, I’ve introduced you to gcsc (Google Cloud Snapshot Cleaner).
I’ve just released the version 0.2.0 of it, and it has a lot of clean-ups done, both in the code and the user experience.
There are also some new features, but the one I’m more satisfied with, is the introduction of the http
subcommand, to expose an HTTP server.
The webserver will listen to any URI and Methods, and the request will trigger the snapshot clean-up.
Read More 
September 16, 2019
I’ve just tagged the first version (0.1.0) of gcsc (Google Cloud Snapshot Cleaner).
The idea behind this small software is to create a more flexible way to keep the Google Cloud Disks Snapshots tidy.
Google Cloud does provide a very nice way to automatically snapshot your disks, leveraging the resource policies.
This is very nice, since it allows you to be sure that the Google Cloud always and reliably snapshots your disks.
The tool also allows you to auto-delete the snapshots after a certain period, but I found this feature a little bit too limited.
The main reason is that it does not allow you to have complex retention policies.
In fact, the tool only allows to set a single expiration date for all snapshots.
Read More