Articles

Designing Distributed Systems: The First Four Chapters

Designing Distributed Systems: The First Four Chapters

Brendan Burns opens Designing Distributed Systems with a useful premise: distributed systems become easier to reason about when we give recurring solutions names. The first chapter establishes that pattern language; the next three make it concrete with small, reusable containers that support an application without becoming part of its business logic.

Sidecar

A sidecar extends an application from beside it. Both containers share a lifecycle and local resources, but remain independently built and maintained. Think HTTPS termination, configuration sync, or log collection.

PostgreSQL vs ClickHouse: Filtering and Sorting

PostgreSQL vs ClickHouse: Filtering and Sorting

Introduction

Using a database-per-service approach in a microservice architecture is standard practice for good reason. It allows each microservice to be independently maintainable and deployable. The downside appears when a client needs a single datagrid assembled from multiple services, with sorting and filtering across any column.

In that model, one service has to fetch data from the others, assemble the combined result set in memory, then sort, filter, and page before returning a response. That can work at small scale, but it does not scale well as row counts grow.

Calculus Refresher: The Ultimate Formula Cheat Sheet

Calculus Refresher: The Ultimate Formula Cheat Sheet

A reference of core formulas and concepts that build on each other — perfect for brushing up before advanced math, physics, or machine learning.


1️⃣ Limits & Continuity

Limit definition
lim_{x -> a} f(x) = L

Common limit laws

  • Sum: lim(f + g) = lim f + lim g
  • Product: lim(f * g) = (lim f) * (lim g)
  • Quotient: lim(f / g) = (lim f) / (lim g) (denominator ≠ 0)

Special limits

SQLAlchemy vs Hibernate: A Deep Dive into Python and Java ORMs

SQLAlchemy vs Hibernate: A Deep Dive Into Python and Java ORMs

Introduction

When developing applications that interact with databases, Object-Relational Mappers (ORMs) help bridge the gap between relational databases and object-oriented programming. Two of the most popular ORMs are SQLAlchemy (for Python) and Hibernate (for Java). While both serve the same purpose, they have different approaches, strengths, and best use cases.

In this post, we’ll compare SQLAlchemy and Hibernate, provide code examples, and show how to generate SQLAlchemy classes from an existing PostgreSQL database using sqlacodegen.

Comparing Persistent Data Sources on AWS: Choosing the Right Storage Solution

Comparing Persistent Data Sources on AWS: Choosing the Right Storage Solution

Introduction

Amazon Web Services (AWS) offers a variety of persistent storage solutions designed to meet different needs, from simple object storage to high-performance databases. Choosing the right data source depends on factors such as scalability, durability, cost, and access patterns. This guide compares the most commonly used persistent data storage options on AWS to help you make an informed decision.

AWS Persistent Storage Solutions Overview

Here’s a high-level comparison of AWS’s persistent storage options:

Write Unit Tests First and Use AI to Generate Code That Passes Them

Write Unit Tests First and Use AI to Generate Code That Passes Them

Introduction

Many developers turn to AI to generate unit tests for existing code, but what if we flipped the process? Instead of using AI to write tests, we can write unit tests first and use AI to generate the implementation that satisfies them. This approach aligns with test-driven development (TDD), ensuring that our code meets predefined requirements and is robust from the start.

In this article, we’ll explore how to use Java with Gradle and JUnit to write unit tests first, then leverage AI to generate code that fulfills the tests.