I think the cost of building things has changed a lot lately. For a while in my career, being an engineer meant spending more time on “alignment” and design docs than on actual code. But with the way agents are working now, I feel like we’re going back to a time where the most important thing you can do is just build.
I’ve been learning Japanese since December 2025. In this article, I share my goals and the tools and strategies I’m using to learn this new language.
I’ve been learning French on my own since mid 2024. I’m progressing in my fluency, and I can
understand and speak it with relative comfort. In this article, I share how I’m learning
this new language.
I spent a few weeks using Zellij to see if it could be a replacement for Tmux.
It had some things I liked for a terminal multiplexer, but a few
things that I didn’t like eventually sent me back to my reliable Tmux setup.
I perform in open mics in my spare time. When I decide to perform a cover of
a song, I usually play the guitar and sing. Therefore, I prepare
a backing track without the tracks I use as background music during
the performance. 
 In this article, I show how to create a backing track using yt-dlp, Demucs, and FFmpeg. 

This is my bachata dancing journey. I talk about how I first got started with bachata and what motivated me to keep going. I talk about my experiences at bachata festivals and how they’ve helped me to grow as a dancer. Finally, I also share some of my favorite bachata dancers and bachata combos that I’ve learned over the years.
Ordinary moments may not seem valuable now, but they will become more so over time.
We might think that mundane things will stay the same forever, but they don’t.
I decided to document my life by journaling, printing pictures, and making vlogs.
Kubernetes is an open-source container orchestration platform that automates the deployment,
scaling, and management of containerized applications. 

I try to improve my productivity every day to get better use of my time. This article summarizes my day-to-day productivity framework and how it has evolved from traditional multitasking and manual terminal tools to modern workflows using AI agents. These are divided into: getting used to multitasking, having time for deep focus, managing emails, task management, note retrieval with NotebookLM,…
This is my interview preparation plan for a software engineering role.
I share a summary of my preparation, a plan of problems to tackle for
coding interviews, the topics to study for system design interviews, and
the questions to prepare for the behavioral section.
When designing a system, it’s important to consider the limitations of the technologies
chosen. Making some approximate calculations when the system is designed helps
us decide on the tradeoffs of the different approaches. These approximations include: 
 
This article has a table with latency comparison numbers, common numbers used
in system design calculations, and some…
A glossary of terms used in machine learning.
 
For an up-to-date glossary, also check 

 https://developers.google.com/machine-learning/glossary 

.
Hyperparameter tuning is the process of finding the optimal hyperparameters (the parameters fed into the model for it to change its inner parameters) for a model to converge efficiently through trial and error.
The algorithms that we use every day to manipulate data assume that we have access to all
the data we need. What if there’s more data than can fit on a single computer, or if accessing
the data itself to do searches is expensive? If so, we can use specialized data structures
that can help us “estimate” the actual value without actually computing it. In some…
Expectation maximization is a method of finding maximum likelihood estimates of the parameters of a model.
The method alternates between making an expectation (E) step based on the current estimate of
the parameters and a maximization (M) step, which computes new parameters.
A Bayesian network is a directed graph in which each node is annotated with quantitative probability
information. This article covers the definition of a Bayesian network with a graphical representation,
the determination of independence between variables, and the problem of finding the probability
distribution of a set of query values given some observed events.
Kafka is a distributed event streaming platform designed for building high-throughput, fault-tolerant, and scalable data streaming applications. 
 
This article covers key designs in Kafka, such as how messages for a topic are shared into partitions assigned to brokers. Then, we see some
guarantees about producers, consumers, and consumer groups.
The pattern of batching data in memory, tracking it in a write-ahead log, and periodically flushing it to disk is ubiquitous today. Open-source examples include LevelDB, Cassandra, InfluxDB, and HBase. 
 
In this article, I implement a tiny memtable for a time-series database in Go and briefly talk about how it can be compressed into a sorted string table.

Cassandra is a highly scalable, distributed NoSQL (non-relational) database management system designed for handling large
amounts of data across multiple commodity servers. 
 
This article covers key design features of Cassandra, such as the usage of consistent hashing, the write
pattern to a write-ahead log and a memtable, the read pattern from the memtable and from…
Data partitioning refers to the process of dividing a system’s data into smaller, more manageable subsets,
which are distributed across multiple storage locations or nodes. 
 
This article covers several strategies for partitioning, including random partitioning, by hash key, by range,
and a hybrid approach for skewed workloads. It also discusses strategies to rebalance…
Non-functional requirements refer to quality attributes or system characteristics that describe how well a software system or solution performs or behaves. 
 
This article covers well-known non-functional requirements such as reliability, availability, scalability, performance, and durability.
Futures/promises refer to constructs used to synchronize program execution.
Learning how they work under the hood by implementing them is a great fundamental skill to have.
 
 
This article is about writing an A+ Promise implementation from scratch,
following the A+ promise spec in JavaScript the TDD way.
Let $a,b \in \mathbb{Z}$. We say that $a$ divides $b$, written $a \given b$, if there’s an integer $n$ such that $b = na$. If $a$ divides $b$, then $b$ is divisible by $a$, and $a$ is a
 divisor or factor of $b$. Also, $b$ is called a multiple of $a$. 
 
This article covers the greatest common divisor and how to find it using the Euclidean Algorithm,
the Extended Euclidean…
Diffuse shading is a technique to render the surface of objects that are not shiny.
 
 
As an example, in the 

 picture (credits to Marc Kleen) 

, we see a real-life car with a matte coating, which we want to emulate using the Lambertian shading model.
Surface shading is a process to color a surface. In computer graphic applications, this is done to mimic how objects look in real life. This article covers the variables available in the rendering pipeline.
A first-person camera captures objects from the viewpoint of a player’s character. Some aspects have to be considered, like the characteristics of the camera (orbiting with the mouse and translation with keyboard keys), as well as how we could capture all these characteristics with math and linear algebra. 
 
In this article, I analyze the math needed to design and implement a…
Quaternions are an alternate way to describe orientation or rotations in 3D space using an ordered set of four numbers. They have the ability to uniquely describe any 3D rotation about an arbitrary axis and do not suffer from a problem using Euler angles called gimbal lock.
GCC is a suite of compilers for various programming languages, including C and C++. In this article,
I cover the compilation stages and the flags used to compile source code into a binary.
Make is a build automation tool commonly used in software development to compile source code and
create executable programs or other output files. It automates the process of building complex
software projects, including compiling source code, linking object files, and creating executable files or other types of output. 
 
In this article, I cover the following: targets and…
CMake is a cross-platform build system generator of Makefile s. Projects specify their build process with platform-independent CMake listfiles included in each directory of a source tree with the name CMakeLists.txt . This article explains how to use CMake to build projects.
The math behind culling and clipping and how it’s related to the camera and what it sees. 
 
 
 Culling is a process where geometry that’s not visible from the camera is discarded to save processing time. 
 Clipping is a process that removes parts of primitives that are outside the view volume (clipping against the six faces of the view volume). 

A vector space is a set whose elements are called “vectors” (denoted as $\v{v}$ or $\mathbf{v}$), which have two operations defined on them: addition of vectors and multiplication of a scalar by a vector. 
 
This article covers some examples of vector spaces, bases of vector spaces, and linear maps.
In an affine space, any point can be represented by the sum of an origin point plus a set
of scaled vectors. This article covers defining all the points in a triangle within an affine space.
One matrix transformation in the 3D to 2D transformation pipeline is the viewport transform, where objects are transformed from normalized device coordinates (NDC) to screen coordinates (SC). 
 
In short, it's the transformation of numbers in the range [-1, 1] to numbers corresponding to pixels on the screen, which is a linear mapping computed with linear interpolation.
 
In this…
An eigenvalue represents how an object scales (or stretches/compresses) a particular direction (or eigenvector) when acted upon by the object. This article covers how to find these values in a square matrix, as well as their applicability in computer graphics.
In projective geometry, unlike Euclidean geometry, two parallel lines meet at a point. Desargues
introduced the concept of a line at infinity where a point at infinity can be defined. This article
covers the need for a point at infinity in projective space, the line at infinity, and the projective plane.
Ray tracing is the process of identifying the color of all the pixels on a 2D screen by emitting rays from all the pixels, simulating how light travels in real life. This article covers the math for ray generation from each pixel for both orthographic and perspective cameras.
Rendering is a process that takes as input a set of objects and produces as its output an array of pixels (image), each of which stores information about the color of the image at a particular point in a grid (determined by the target width and height).
In computer graphics, 3D objects created in an abstract 3D world will eventually need to be displayed on a screen. To view these objects on a 2D plane like a screen, objects will need to be projected from the 3D space to the 2D plane with a transformation matrix. 
 
In this article, I cover two types of transformations: orthographic projection and perspective projection, and analyze the…
One matrix transformation in the 3D to 2D transformation pipeline is the view transform, where objects are transformed from world space to view space using a transformation matrix. 
 
In this article, I cover the math behind the generation of this transformation matrix.
Taking multiple matrices, each encoding a single transformation, and combining them
is how we transform vectors between different spaces. This article covers creating a
transformation matrix that combines a rotation followed by a translation, a translation
followed by a rotation, and creating transformation matrices to transform between different
coordinate systems.
Perspective projection is a fundamental projection technique that transforms objects in a higher dimension to a lower dimension. This transformation is usually used for objects in a 3D world to be rendered into a screen (a 2D surface). In the transformation, these objects give the realistic impression of depth.
 
 
This article covers the math behind it and how to generate the…
Orthographic projection is a fundamental projection technique that transforms objects in a higher dimension to a lower dimension. This transformation is usually used for objects in a 3D world to be rendered into a screen (a 2D surface) and in the process keeps parallel lines parallel in the lower dimension.
 
 
This article covers the math behind it and how to generate the…