The blog


as a young Software Engineer trying to get sharp, I constantly read things and also try out all sorts of new things - both during the job as well as on my free time (lucky me! I have the opportunity to work with some pretty cool tech!).

To fill the gaps I find extremely useful to write about what I'm learning, constantly. This way I force myself to go after what I didn't go deep on the job or a side project and then really learn it. Fortunately, I started doing that a little while ago, even though I never published what I was writing.

If you're curious like I am, enjoys using software to build cool stuff and is looking for some technical and actionable material, make sure to subscribe to the newsletter and follow the blog! Every week there's new content that I hope is also useful for you.

Below there's a list of all the blog posts I've written so far. The articles have no comments functionality so please reach out to me if you need any help, find something weird or just want to chat 👍 Feel free to drop by at Twitter and reach me there - @cirowrc.




  1. Using network namespaces and a virtual switch to isolate servers

    Yet another blog post on how to create a virtual network that connects network namespaces using a brdige, veth pairs and iptables.

  2. Adding privileged containers to Docker Swarm mode

    Privileged services are not something you can have with a regular Docker Swarm cluster. Check out how to have privileged containers using Docker Swarm Mode

  3. Compiling and running your own forked Docker release

    Installing docker has never been easier - add the apt repository and install it. What about running your own fork of it?

  4. Blocking EC2 Metadata service from Docker containers in AWS

    Check out how to make sure Docker containers running in AWS are unnable to access the EC2 metadata service.

  5. Running Docker with a forked RunC

    Check oout how the docker daemon interacts with containerd and how we can leverage that to modify runc and set some defaults

  6. Implementing a TCP server in C

    Writing a TCP server in C can teach many things. Check out how to implement a TCP server and understand some of the syscalls involved in the process.

  7. A practical look at basic AWS Networking with Terraform

    A conventional AWS Networking Tutorial out there using Terraform doesn't go around the concepts of AWS Networking. Check out how to provision an AWS VPC with multiple subnets and configure security groups using Terraform.

  8. Nginx HTTP2 Server Push

    NGINX just added server push to mainline. Checkout a NGINX HTTP2 server push example using the latest code from source integrating with an HTTP1 Golang web server.

  9. The first limit you'll hit on AWS EFS: Locks

    AWS imposes various quotas on the usage of its distributed filesystem. Check out how to go over them by running MYSQL on EFS and then developing a stress test.

  10. Initializing Grafana with preconfigured dashboards

    Grafana v5 is coming with two great features: dashboard and data source provisioning. Checkout how to initialize a dashboard without touching the UI using this new release

  11. Simulating AWS tags in local Prometheus

    Going through Prometheus relabelling to emulate an AWS environment locally with Vagrant

  12. What happens when a pipeline is created in Concourse CI?

    A dive into how the fly command set-pipelines triggers a pipeline registration in concourse ATC

  13. How to build and run Concourse CI locally

    Get Concourse CI built from source - the first step to contributing to the project.

  14. Creating a simple extension to block websites

    Seeing yourself procrastinating in HackerNews? Create an extension that blocks it. All in less than 20 lines of code.

  15. How to publish a blog using AWS

    AWS can guarantee amazing speeds for serving a blog - it supports HTTP2, IPv6, caching and has free TLS certificates. Check out how I do it for this blog.

  16. Configuring HAProxy with HTTP2 support

    HTTP2 support recently landed in HAProxy 1.8. Check out how to configure HTTP/2 support for HAProxy.

  17. Sending files via gRPC

    gRPC shines when it comes to sending a bunch of messages here and there. What about file uploads? Is gRPC a good fit for file transfer? Check out how to send files with gRPC and see if that makes sense.

  18. Should you buffer your writes?

    It's common practice to have a buffer between the network and your application. Today I tried to measure how different buffer sizes changes the total time to transfer 1GB of data.

  19. Writing DNS messages from scratch using Go

    How to write a DNS message from zero and send it via UDP to a server.

  20. Can we manage multiple GitHub repositories in a better way?

    Wondering how a project manager might look at GitHub triggered some questioning. How could someone extract more meaningful data from it?

  21. Creating a hello-world API using Swagger and Go

    Swagger allows us to separate api definition from implementation. This guide goes through the process of creating a minimal API using go-swagger and Golang.

  22. A minimal Docker Ansible role

    How to create a minimal Ansible role that provisions a Linux machine to have Docker installed - from role conception to testing it using Vagrant.

  23. Incremental backups using GNU Tar and S3

    How to take snapshots of a directory and send to them as backups to S3 using Linux tools

  24. Updating the Docker version in Travis-CI

    Docker is not always up to date in Travis' builds. Check out how to update the version of Docker in Travis-CI.

  25. Inspecting Docker images without pulling them

    How to inspect a docker image from dockerhub without pulling it

  26. Getting TLS certificates with Letsencrypt and HAProxy

    A guide on building and configuring HAProxy from scratch to achieve HTTPS with Letsencrypt certificates

  27. Pushing Docker images right from Travis-CI

    How to automate the process of building an image and pushing it to DockerHub using Travis-CI

  28. Changing the name of an index in Elasticsearch

    Elasticsearch indices can be renamed with two different approaches - Reindex API and Aliases. Checkout out how to rename an Elasticsearch Index using these approaches.

  29. Executing multiple commands in SSH session against multiple machines

    It might happen that you need to execute multiple commands against a set of machines via SSH. Check out how to do it programmatically.

  30. Concurrently running container-based and VM tests in Travis-CI

    Running container and virtual machines side by side in Travis is possible. Check out how to do it

  31. Why my Ubuntu container doesn't execute profile scripts?

    Making use of the login flag to make sure bash executes profile.d scripts.

  32. A Dockerfile tailored for Golang applications

    Leveraging multi-stage builds to create tiny Golang Docker images

  33. LVM on loopback devices

    An actionable guide on how to use LVM without formatting physical disks and just using loopback devices

  34. Minimal Golang Makefile

    Having build many Golang projects I came with a minimalist makefile that might work for you.

  35. How to install HAProxy with Lua support on MacOS

    Setting up HAProxy on Mac is not complicated. Check out how to build it from source and run it locally.

  36. Augmenting Linux Swap Space

    How to extend Swap space on Linux after you already set it