Posts

Implementing a CRDT Application with JavaScript and C++ Clients

Implementing a CRDT Application with JavaScript and C++ Clients In today’s interconnected world, distributed systems are everywhere—from collaborative editing tools and messaging apps to cloud databases and IoT networks. One of the biggest challenges in these systems is ensuring that data remains consistent across multiple devices and platforms, even when updates happen independently and network partitions occur. Traditional approaches often rely on complex conflict resolution or central coordination, which can introduce latency, bottlenecks, or even single points of failure. Enter Conflict-free Replicated Data Types (CRDTs) , a family of data structures designed to make distributed consistency simple, robust, and scalable. A Brief History and Theoretical Foundations of CRDTs The concept of CRDTs emerged in the late 2000s as researchers and engineers sought better ways to handle data replication in distributed systems. The foundational work by Marc Shapiro and others formalize...

Digging deep with heaptrack/massif

Debugging Memory Growth on a Ti-Sitara AArch64 ECU with Heaptrack A while back I had to track down a recurring heap growth issue on a customer’s automotive ECU based on a TI Sitara Cortex-A53. The system ran multiple ML models for ADAS feature extraction at different frequencies. Each model ran in its own POSIX preemptive real-time thread, pinned to cores with priorities like 120, 110, 80, 60 . When switching scheduling policies (for example SCHED_OTHER → SCHED_RR or SCHED_FIFO under PREEMPT_RT), the visible priority ranges changed — which is expected behavior on a real-time patched kernel. The Problem Over time, memory usage crept up until the system became unstable. The workload made it tricky — multiple ML models meant irregular allocation patterns with frequent buffer churn. I needed something lightweight that could run directly on the target to pinpoint the source. Why Heaptrack Heaptrack turned out to be the best fit. It hooks into memory allocations using a preload li...

Lost in the Domains

For a while, I felt like I was building software on a map of my own making – a patchwork of technical solutions that didn't truly reflect the business realities. Then, I stumbled upon Domain-Driven Design (DDD), and suddenly, it felt like finding a compass for navigating complex problems. This isn't just a collection of patterns; it’s a philosophy of building software that’s deeply aligned with the business. Here's a look at my journey into DDD, and what I’ve learned along the way. The Initial Hesitation (and Why It’s Normal) Let’s be honest, the first time I encountered DDD, I was intimidated. The terminology – bounded contexts , aggregates , entities , value objects – felt overwhelming. There’s a lot to learn, and the initial investment can seem significant. I’d spent years focused on delivering features, and the idea of meticulously modeling a domain felt… slow. The Turning Point: Talking to the Experts What truly shifted my perspective was the realizati...

The Elegant Logic of Functional Programming

Functional programming, at its core, centers around the construction of software with pure functions – functions that yield the same output for identical inputs, without side effects. This contrasts fundamentally with imperative programming, which relies heavily on mutable state and altering external conditions. What *Is* Functional Programming? Let’s examine a simple example: // Imperative (Mutable State) int x = 5; int y = x + 3; // y’s value depends on x’s changing value In contrast, a functional equivalent: // Functional (Pure Function) int addThree(int x) { return x + 3; } int y = addThree(5); // y’s value is constant, derived from the input The critical distinction is the absence of mutation. The `addThree` function's output is predictable and independent of external state. Monads: Encapsulating Side Effects Monads represent a powerful abstraction for handling operations that inherently involve side effect...
Building Resilient Distributed Networks for Smart Mobility In the era of smart mobility and connected public transport, distributed networks form the backbone of real-time communication, safety, and passenger experience. This post explores the architecture, protocols, and design patterns behind building robust, failover-capable distributed networks for modern mobility systems. Why Distributed Networks Matter in Smart Mobility Real-Time Data Exchange: Vehicles, infrastructure, and control centers must exchange data instantly for safety and efficiency. Dynamic Topology: Buses, trains, and roadside units join and leave the network dynamically, requiring adaptive protocols. Safety-Critical Operations: Failover and redundancy are essential to maintain service during faults or disconnections. Core Technologies and Protocols Service Discovery: Enables devices to find each other automatically. Common protocols include mDNS, DNS-SD, and custom P2P solutions. Multic...

Hardware Security in Chip Hardening

Interactive Report: Hardware Security in Chip Hardening Hardware Security in Chip Hardening An interactive exploration of fault injection attacks and hardware countermeasures. Clock Glitch Hardening Reset Injection Hardening Tamper Protection Understanding Clock Glitch Attacks This section explores how attackers introduce precise, short-lived faults (glitches) into a chip's clock signal. These disruptions can cause instructions to be skipped or corrupted, potentially bypassing security checks. Below, you can visualize this attack and then explore common defense mechanisms. Attack Vector: Clock Signal Manipulation ...

Hardware Security and Tamper Protection

I. Introduction to Integrated Circuit Physical Security and Threat Landscape A. Context and Strategic Importance of Hardware Hardening The security landscape for integrated circuits (ICs) has shifted dramatically, necessitating robust hardware defenses as attackers increasingly push low into the platform stack, moving below conventional software controls.1 This physical hardening is strategically vital because the physical platform represents the immutable first layer in any layered security approach. It provides the initial protections required to ensure that all higher-layer security controls—such as operating systems, secure firmware, and applications—can be fundamentally trusted.2 Without this fortified foundation, the integrity of the entire system, including advanced concepts like Confidential Computing or Secure Boot, is potentially compromised. The necessity of IC hardening addresses both known vulnerabilities and persistent threat models, notably the Hardware Troja...