Active Filters
Git fundamentals, a complete guide
If you already work with Git daily but want to have a good comprehension of Git fundamentals , then this post is for you. Here, you’ll have the chance to truly understand the Git architecture and how commands such as add, checkout, reset, commit, merge, rebase, cherry-pick, pull, push and tag work internally. Don’t let...
Arrays in x86 Assembly
Originally posted in Portuguese Recently I wrote a 6-article series about x86 Assembly (written in Portuguese, but I’m planning to translate the guide...
You don't need Kafka: Building a message queue with only two UNIX signals
Have you ever asked yourself what if we could replace any message broker with a very simple one using only two UNIX signals? Well, I’m not surprised i...
Voltando às raízes de blogueiro
Já faz um tempo que não escrevo aqui no blog. E também já faz bastante tempo que tenho o interesse em voltar a escrever mais como fazia antigamente, q...
Um resumo do meu 2024
31 de Dezembro de 2024. Sentado no sofá e assistindo Frozen, tive a ideia de escrever sobre minha retrospectiva deste ano. Nunca fiz isso antes, então...
Arrays em Assembly x86
Recentemente escrevi uma saga de 6 artigos sobre Assembly x86, abordando conceitos fundamentais de arquitetura de computadores e programação low-level...
Construindo um web server em Assembly x86, the grand finale, multi-threading
Uma vez que temos um web server funcional, podemos dar o próximo (e último) passo, que é deixar o servidor minimamente escalável fazendo uso de uma po...
Construindo um web server em Assembly x86, parte V, finalmente o server
No artigo anterior, passamos pelos fundamentos de Assembly, onde foi possível entender alguns conceitos básicos tais como tipos de registradores, stac...
Construindo um web server em Assembly x86, parte IV, um assembly modesto
Uma vez que temos uma compreensão sobre sistema binário, hexadecimal, ASCII e código de máquina, chegou o grande momento de entrarmos no assunto princ...
Construindo um web server em Assembly x86, parte III, código de máquina
Agora que já temos uma base de entendimento sobre hierarquia de memória, arquitetura de CPU e registradores, vamos aplicar estes conceitos em exemplos...
Construindo um web server em Assembly x86, parte II, história e arquitetura
No artigo anterior demos uma introdução não-técnica sobre o que será esta saga de Assembly x86 conforme avançamos na construção de um web server. Agor...
Construindo um web server em Assembly x86, parte I, introdução
Assembly . Para alguns, um monstrinho. Pra outros, algo antiquado. Mas pra quem tem curiosidade em entender como as coisas funcionam, oportunidade . N...
Superficial, básico e avançado
Ufa, finalmente meu primeiro artigo de 2024. Criei vergonha na cara coragem e resolvi sentar e escrever um pouco. Vou voltar a escrever coisas técnica...
Building a dead simple background job in Rust
In today’s post we’ll explore how to create a basic background job in Rust, simulating Rust channels with a Vector-based queue. First things first Gen...
Understanding the basics of Smart Pointers in Rust
In today’s post we’ll delve into the basics of smart pointers in Rust, while we build from scratch a simple linked list - starting from a singly linke...
Compiladores, trampolim, deque e thread pool
Faz alguns dias que não escrevo. Minha rotina mudou um pouco e também tenho focado em estudar algumas coisas que eu não tinha tanto domínio. Entretant...
Rust, Go, Rinha e I/O
Este artigo é o início de um formato diferente de conteúdo que quero experimentar, um apanhado (ou resumão, ou dump, como queiram chamar) de coisas qu...
Entendendo fundamentos de recursão
Se pra você: Recursão é um tema obscuro ou quer entender mais um pouco sobre; Tail call e TCO são meios de comunicação alienígena e; Trampoline é nome...
Vencendo os números de ponto flutuante: um guia de sobrevivência
TL;DR Se quer poupar tempo e ir direto ao assunto, para cálculos precisos, prefira decimais de precisão arbitrária ou equivalentes como BigDecimal em ...
Winning at floating-point issues: a survival guide
TL;DR For precise calculations, favor arbitrary-precision decimals or equivalents like BigDecimal over floating-point numbers. Additionally, avoid unn...
[pt-BR] Fundamentos do Git, um guia completo
Se você já trabalha com Git diariamente, mas deseja ter uma boa compreensão dos fundamentos do Git, então este post é para você. Aqui, você terá a cha...
AI & Ruby: an introduction to neural networks
Currently we find ourselves in the middle of the hype surrounding Artificial Intelligence (AI) and all its buzzwords. It’s natural to feel that terms ...
Kubernetes 101, part VIII, networking fundamentals
So far, we have gained an understanding of the primary workload objects in Kubernetes. These objects enable us to effectively run and manage multiple ...
Kubernetes 101, part VII, jobs and cronjobs
Our previous article, we learned how DaemonSets can effectively collect data from Kubernetes nodes, allowing data to be structured and sent to appropr...
A comprehensive introduction to Ruby
Another tutorial for learning Ruby? Absolutely not . This guide is different from the typical tutorials you’ll find online. As someone new to Ruby, yo...
Kubernetes 101, part VI, daemonsets
For most use cases, deploying core business apps in Kubernetes using Deployments for stateless applications and StatefulSets for stateful applications...
Kubernetes 101, part V, statefulsets
In the previous article, we explored ways to handle pod updates without affecting availability , using Deployments . This article will cover stateful ...
SQL JOIN explained
In this post we’re going to see how the SQL JOIN works, guided by a practical example while covering SQL and Set theory basics. Even though you’re not...
Git fundamentals, a complete guide
If you already work with Git daily but want to have a good comprehension of Git fundamentals , then this post is for you. Here, you’ll have the chance...
Kubernetes 101, part IV, deployments
In the third part, we went a bit further and learned how Kubernetes employs self-healing capabilities by using the controller pattern through the util...
Kubernetes 101, part III, controllers and self-healing
The second part of this series explained how Pods work while building a Pod having two containers communicating to each other using FIFO and a shared ...
Kubernetes 101, part II, pods
In the previous post we’ve seen the fundamentals of Kubernetes as well as an introduction to its main architecture . Once we got introduced, it’s time...
Kubernetes 101, part I, the fundamentals
It’s been a while I wanted to take a time to sit down and write about Kubernetes . The time has come. In short, Kubernetes is an open-source system fo...
Tekton CI/CD, the grand finale, interceptors
We learned in the previous article how to delivery applications using Tekton and the kubernetes-action Task being part of our Pipeline. But let’s thin...
Tekton CI/CD, part IV, continuous delivery
The previous post demonstrated how to listen to Github events and trigger a pipeline based on such event. So far, the pipeline consists in: fetching t...
Tekton CI, part III, listen to Github events
For this guide I’m assuming you are running a local Kubernetes cluster. In the previous article we’ve seen how to share information across a Pipeline ...
Tekton CI, part II, sharing information
In the previous post, we viewed an introduction to Tekton and a brief overview through its main components: Steps, Tasks and Pipelines . Now, let’s ke...
Tekton CI, part I, a gentle introduction
In another post I talked about CI/CD in a nutshell and its fundamentals, before going further on Tekton . In case you need, I suggest you reading that...
CI/CD in a nutshell
CI/CD is a popular practice that many companies and projects use today. However, sometimes we use these terms mistakenly, but in this article we’ll di...
Seu dinheiro não é infinito
Se você tem algum tipo de influência nas decisões arquiteturais de software no local onde trabalha, e a empresa ou instituição não tem dinheiro infini...
Liderança começa com confiança: minha trajetória
Neste post, quero compartilhar um pouco da minha trajetória e alguns valores sobre trabalho em equipe e liderança que costumo aplicar no meu dia-dia. ...
Thinking like containers
We can’t deny how popular Docker containers became on the daily basis of many software developers around the world. Moreover, it is a mainstream techn...
Simulating OOP in Bash
Everyone knows that OOP stands for “Object-oriented programming”. But what is in fact OOP? Is it a Class ? Is it inheritance and polymorphism like we ...
Building a Web server in Bash, the grand finale
What a journey. In the previous post we experienced a refactoring in our ShellScrpit web server, adding a complete login/logout system to it. Now, let...
Building a Web server in Bash, part III - Login
In the previous posts we’ve seen how to manipulate sockets using netcat . Moreover, we learned how to start reading and parsing an HTTP message using ...
Building a Web server in Bash, part II - parsing HTTP
In the first part of this guide, we walked through the basics of netcat nc command, from basic UNIX sockets to TCP sockets, all the way writing an HTM...
Building a Web server in Bash, part I - sockets
Have you ever wondered how a Web server works under the hood ? Moreover, would you be willing to sharpen your Shell scripting skills? Maybe this guide...
Inter-process communication: pipes
After learning how OS processes can use file descriptors for IPC, it’s time to analyse another IPC approach: pipes. Let’s recap the following example:...
Inter-process communication: files
In the previous post we learned that computers evolved to tackle concurrency , the reason why operating systems were created in order to share compute...
A brief history of modern computers, multitasking and operating systems
In this article I’ll try to write a brief history of modern computers, multitasking and how operating systems tackle concurrency. 40s The first modern...
Métricas cAdvisor no Kubernetes com Prometheus e Grafana
No último artigo vimos o funcionamento básico do Prometheus e como configurar um servidor Prometheus em um cluster Kubernetes . (lembrando que estou u...
Prometheus on Kubernetes 101
Prometheus é um projeto open-source escrito em Go, criado em 2012 e utilizado para monitoramento e sistema de alerta de aplicações. Foi desenvolvido o...
Mastering the Docker networking
Few months ago I demonstrated through a practical example the reasons to understand and take advantage of Docker volumes. In this one, I’ll try to do ...
Implementando um simples background job com UNIX named pipes
No último artigo vimos o funcionamento de UNIX streams, pipes e mais precisamente, anonymous pipes . E que estes canais são uma das bases de comunicaç...
Entendendo UNIX pipes
Basicamente, a todo comando UNIX é atribuído um conjunto de streams, que são canais de comunicação. Ou seja, um comando pode enviar dados para uma str...
Resolvendo problema de performance no PostgreSQL com CTE
Spoiler : a query ficou 23x mais rápida com CTE’s apenas transformando o problema quadrático em linear. Sem índices . Um dos cenários mais comuns de p...
A very simple GraphQL tutorial in Ruby
According to Wikipedia GraphQL is an open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing dat...
Mastering Docker Volumes
For those just starting with Docker, I’ve written some posts on how to think like containers, which I believe to be an important mindset to using Dock...
How to reduce the time complexity of nested loops
In this post I’ll demonstrate a way to understand, analyse and reduce the time complexity on algorithms, specially on nested loops . The examples will...
A powerful full-text search in PostgreSQL in less than 20 lines
This blogpost will guide you to understand the fundamental pieces needed to implement a good enough full-text search using PostgreSQL. Spoiler alert :...
A CRUD journey in Haskell, part II, Socket programming
Assuming that we’ve got some introduction to Haskell, let’s start doing some Socket programming in order to build a simple TCP server. Requirements Fo...
A CRUD journey in Haskell, part I, introduction
In the past few days, I’ve been learning some Haskell after years of seeing people praising this programming language, be it about its expressiveness ...
Using Docker in development the right way
If you are not proficient in Docker, or that topics like containers and virtual machines are still a bit “fuzzy”, have problems working with Docker in...
Web basics: sending HTML, CSS and Javascript content through HTTP
Now that we have an HTTP server sending plain text content, it’s time to enhance the server so it can respond in a more appropriate content type for W...
Web basics: a simple HTTP Server in Ruby
In the previous article, we learned the very basics of networking and how to write a simple TCP server in Ruby. Here, we’ll see a simple implementatio...
Web basics: a TCP Server in Ruby
This series guide covers the very basics of Web and the building blocks of a Web server. If you have ever wondered on how a Web server works and have ...
Boilerplate for a containerized plain Ruby application
Recently I’ve been poking around automation in order to experiment and build software on destroyable environments, so that I won’t mess up with my ope...
Quicksort, a Ruby implementation using Test-driven development
Quicksort is a sorting algorithm designed to have a reasonable time complexity . In average, most implementations of this algorithm are capable of com...
Deploy to Kubernetes using Github Actions (including Slack notification)
In this guide we’ll cover the full cycle of deploying to Kubernetes using Github Actions. Batteries included: Kubernetes cluster running in AWS EKS Do...
Ruby blocks made easy, part III ~grand finale~, blocks and syntactic sugar
In this series of posts, we already covered that methods can be transformed into procs and as such, can be evaluated later . Furthermore, we’ve seen t...
Ruby blocks made easy, part II, curry and procs as arguments
In the previous post, we learned that methods can be transformed into procs to be evaluated later . One thing worth to mention is that, the method its...
Ruby blocks made easy, part I, methods and procs
Blocks in Ruby are powerful structures that are part of our daily basis as Ruby developers. We see them being used across a variety of standard classe...