Database Theory: How Databases Work Under the Hood

Introduction Databases are at the heart of virtually every software system — from web applications to financial platforms to machine learning pipelines. But how do they actually work? What happens when you run a SELECT query? How are rows stored on disk? How do multiple transactions run concurrently without corrupting data? This post is a comprehensive guide to database theory, covering the full lifecycle of database design and operation: from conceptual modeling to physical storage, from SQL queries to concurrency control. Whether you are studying for an exam, preparing for a systems design interview, or simply curious about what happens beneath the ORM layer, this guide has you covered. ...

February 9, 2026 · 21 min · Umberto Domenico Ciccia

Computer Networks: A Comprehensive Guide

Introduction Computer networks are the backbone of modern computing. Every time you browse a website, send an email, or stream a video, you rely on a complex stack of protocols, algorithms, and hardware working together. This post is a comprehensive guide to how computer networks work — from the physical transmission of bits to the application-layer protocols you use daily. We will walk through the layered network models (OSI and TCP/IP), dive into each layer’s responsibilities, explore routing and addressing, examine transport-layer reliability, and cover essential application-layer protocols. We will also touch on security, cloud computing, peer-to-peer systems, and distributed architectures like blockchain. ...

February 9, 2026 · 27 min · Umberto Domenico Ciccia

System Design Fundamentals

Basic Application Architecture Developer Perspective A typical application is composed of: Build & Deploy Layer — CI/CD pipeline Server Layer — handles incoming requests Storage Layer — persists application data (can be external) Logging Storage Server — logs all events Metric Storage Server — logs all metrics Alert Server — alerts when something goes down User Perspective Users simply make requests to the server and receive responses. Scaling Vertical Scaling: add more physical resources (CPU, RAM) to a single server Horizontal Scaling: add more servers to distribute the load Load Balancer: distributes traffic between multiple servers ...

February 9, 2026 · 8 min · Umberto Domenico Ciccia

Ddeep dive into Ruby

Ruby is a dynamic, interpreted, object-oriented language designed by Yukihiro “Matz” Matsumoto in the mid-1990s. Its design philosophy prioritizes developer happiness and productivity — Matz famously said Ruby is “optimized for developer joy.” Under the hood, Ruby is a surprisingly sophisticated language with a rich object model, a multi-phase interpreter pipeline, and powerful metaprogramming capabilities that let you reshape the language itself at runtime. These notes cover Ruby from the ground up: the syntax fundamentals, how the interpreter turns your source code into executable instructions, how memory is managed, and the metaprogramming system that makes Ruby one of the most flexible languages in existence. ...

February 9, 2026 · 26 min · Umberto Domenico Ciccia

chatgpt-cli: A Simple ChatGPT CLI That Stays Out of Your Way

chatgpt-cli: A Simple ChatGPT CLI That Stays Out of Your Way I recently built chatgpt-cli, a minimal command-line interface for interacting with ChatGPT. 👉 Project link: github.com/umbertocicciaa/chatgpt-cli The motivation is straightforward: most existing ChatGPT CLI tools are far more complex than they need to be. The Problem with Most ChatGPT CLIs Search for a ChatGPT CLI today, and you’ll typically find tools that: Require multiple files, folders, and configuration steps Depend on several external libraries Try to do everything instead of doing one thing well Demand more setup time than actual usage time They’re powerful, sure — but often overkill. When all you want is to quickly ask ChatGPT something from the terminal, that complexity becomes friction. ...

January 31, 2026 · 3 min · Umberto Domenico Ciccia