Bad Hash Functions and Other Stories: Trapped in a Cage of Irresponsibility and Garden Rakes
A tiny filename decision in MATLAB's publish() can silently swap rendered equations, and Jason Sachs shows why that matters. He reproduces the bug, walks through hash-function basics and collision math, and contrasts safe and unsafe caching strategies. The piece then broadens into practical lessons about software fringes, legacy constraints, and the usability traps that leave engineers repeatedly stumbling over avoidable design choices.
Efficiency Through the Looking-Glass
Efficiency numbers can be misleading, Jason Sachs argues, because they hide the real cost engineers pay in wasted watts. This post flips the focus from percent efficiency to absolute power loss, shows how losses often stay nearly constant across loads, and walks through a practical thermal method to measure those losses more reliably than subtracting input and output power. Read it to rethink how you budget heat and energy in designs.
Understanding and Preventing Overflow (I Had Too Much to Add Last Night)
Integer overflow is stealthier than you think, and in embedded systems it can break control loops or corrupt data. Jason Sachs walks through the usual culprits, including addition, subtraction, multiplication, shifting and Q15 fixed-point traps, plus C-specific pitfalls such as undefined signed overflow and INT_MIN edge cases. He then lays out practical defenses: prefer fixed-width types, widen and saturate intermediates, enable wraparound where appropriate, and reason about modular congruence for compound arithmetic.
How to Estimate Encoder Velocity Without Making Stupid Mistakes: Part II (Tracking Loops and PLLs)
Jason Sachs explains why simple differentiation of encoder counts often fails and how tracking loops and PLLs give more robust velocity estimates. Using a pendulum thought experiment and Python examples, he shows how a PI-based tracking loop reduces noise and eliminates steady-state ramp error, and why vector PLLs with quadrature mixing avoid cycle slips and atan2 unwrap pitfalls in noisy or analog sensing.
Another 10 Circuit Components You Should Know
Jason Sachs walks through ten underrated circuit components every embedded engineer should know, from bus switches and thermocouple signal ICs to PCB stiffeners and opto-FET isolators. He mixes practical part examples, high-current hardware tips, and MCU features like CTMU and Peripheral Pin Select so you can pick the right trick when space, isolation, or precision matter.
Short Takes (EE Shanty): What shall we do with a zero-ohm resistor?
When you need flexibility on a PCB, zero-ohm resistors are the obvious shortcut, but Jason M. Sachs shows why the label zero is misleading. He compares common SMT jumper specs, high-current specialty parts, and a practical workaround using 1 milliohm resistors to avoid voltage drop. Read this for a quick checklist to pick jumpers that actually carry your board's current.
Fluxions for Fun and Profit: Euler, Trapezoidal, Verlet, or Runge-Kutta?
Which ODE solver should you pick for resource‑constrained embedded simulations? Jason Sachs walks through practical numerical methods — Euler, trapezoidal, midpoint, 4th‑order Runge‑Kutta, semi‑implicit Euler, Verlet and the Forest–Ruth symplectic scheme — using hands‑on examples (damped bead, Kepler orbit, pendulum). He highlights accuracy vs. function‑evaluation cost, timestep guidance, and why symplectic methods beat general solvers for long‑term energy conservation.
Signal Processing Contest in Python (PREVIEW): The Worst Encoder in the World
Jason Sachs previews a hands-on Python contest to find the best velocity estimator for a noisy, low-cost quadrature encoder. The post explains the Estimator API, submission constraints, and a 5 second, 10 kHz evaluation harness that uses a simulated "Lucky Wheel" encoder with realistic manufacturing timing errors. Jason also includes a simple baseline estimator and discusses the practical tradeoff between noise reduction and phase lag in velocity estimation.
Lost Secrets of the H-Bridge, Part III: Practical Issues of Inductor and Capacitor Ripple Current
Jason Sachs cuts through the math to show what ripple current actually does to H-bridge hardware. He explains why peak current is the limiting factor for inductors, why capacitor ESR usually dominates DC-link voltage ripple, and how center-aligned PWM and duty selection reduce harmonics and ripple. Read this if you want practical rules of thumb and calculation templates for real power-electronics designs.
Lost Secrets of the H-Bridge, Part II: Ripple Current in the DC Link Capacitor
DC link capacitor ripple often determines capacitor life, yet the H-bridge waveform has a lot more structure than you might expect. Jason Sachs separates capacitor current into ramp and pulse components, derives closed-form peak and RMS expressions for edge and center PWM, and shows harmonic amplitudes. The post includes Python simulation so you can visualize the waveforms and apply the formulas to capacitor selection and EMI analysis.
Linear Regression with Evenly-Spaced Abscissae
Jason Sachs cuts through the matrix algebra to show a tiny trick for linear regression when x values are evenly spaced. You can compute the intercept as the mean and the slope as a simple weighted sum with arithmetic weights, using q = 12/(m^3 - m). The post includes Python examples and a compact routine to get least-squares coefficients without matrix solvers.
Bad Hash Functions and Other Stories: Trapped in a Cage of Irresponsibility and Garden Rakes
A tiny filename decision in MATLAB's publish() can silently swap rendered equations, and Jason Sachs shows why that matters. He reproduces the bug, walks through hash-function basics and collision math, and contrasts safe and unsafe caching strategies. The piece then broadens into practical lessons about software fringes, legacy constraints, and the usability traps that leave engineers repeatedly stumbling over avoidable design choices.
Ten Little Algorithms, Part 4: Topological Sort
Jason Sachs detours from signal processing to make topological sort feel practical and even a little funny, using a Martian Stew recipe to illustrate dependencies and cycles. He walks through two canonical algorithms, Kahn’s method and the depth-first-search variant, compares adjacency-list and matrix graph representations, and provides complete Python implementations so you can run and inspect cycle detection and ordering yourself.
How to Include MathJax Equations in SVG With Less Than 100 Lines of JavaScript!
Jason Sachs recounts a simple hack to get MathJax equations inside SVG without heavy dependencies or complex tools. His approach renders MathJax in temporary HTML divs, captures the resulting SVG nodes, and swaps them into SVG
A Second Look at Slew Rate Limiters
Picking the right slew rate can cut overshoot dramatically while keeping delay reasonable, Jason shows. He numerically analyzes a feedforward slew-rate-limited step into a normalized second-order system and proposes a simple empirical rule R = Δx/(2π α τ) with α ≈ 1. The post includes Python/Scipy code and a 3→5 V example that demonstrates about a 3× overshoot reduction and a ≈5τ peak delay.
Efficiency Through the Looking-Glass
Efficiency numbers can be misleading, Jason Sachs argues, because they hide the real cost engineers pay in wasted watts. This post flips the focus from percent efficiency to absolute power loss, shows how losses often stay nearly constant across loads, and walks through a practical thermal method to measure those losses more reliably than subtracting input and output power. Read it to rethink how you budget heat and energy in designs.
10 Items of Test Equipment You Should Know
Jason Sachs walks through ten often-overlooked pieces of test gear that make debugging embedded hardware faster, safer, and more precise. From clamp-on and Rogowski current probes to spring-tip probes, IC test clips, and compact DAQ systems, each tool targets a common bench frustration. Practical buying notes and use cases help you choose tools that save time and reduce guesswork.
Trust, but Verify: Examining the Output of an Embedded Compiler
Jason Sachs argues embedded engineers should read their compiler's assembly even if they rarely write assembly. He walks through Microchip XC16 output for dsPIC33 devices, showing how simple C variants and optimization flags produce very different code. The article demonstrates practical verification techniques and a tiny Python helper, pyxc16, to quickly inspect assembly for timing-sensitive firmware without rewriting everything in assembly.
Sheep Bridge: In Praise of Generalists and System Engineers
Jason Sachs makes the case for hiring generalists and valuing system engineers, because they do more than take a high-level view. He explains how multi-scale thinking, arbitration among subsystems, and clear visualization prevent integration failures, using concrete examples from battery-voltage tradeoffs, Sheep Bridge map lessons, and encoder signal checks. Read this for practical rules that keep embedded projects coherent.
10 Software Tools You Should Know
Unless you're designing small analog electronic circuits, it's pretty hard these days to get things done in embedded systems design without the help of computers. I thought I'd share a list of software tools that help me get my job done. Most of these are free or inexpensive. Most of them are also for working with software. If you never have to design, read, or edit any software, then you're one of a few people that won't benefit from reading this.
Disclaimer: the "best" software...
Implementation Complexity, Part I: The Tower of Babel, Gremlins, and The Mythical Man-Month
Jason Sachs argues that implementation complexity often outpaces manpower and good intentions, using the Tower of Babel and Fred Brooks's The Mythical Man-Month as lenses. He walks through communication costs, Kolmogorov complexity, and interface pitfalls with concrete examples like the NEMA 5-15 outlet, then offers pragmatic approaches such as modular design, gray-box awareness, and documenting assumptions to spot the gremlins before they derail a project.
Linear Feedback Shift Registers for the Uninitiated, Part IV: Easy Discrete Logarithms and the Silver-Pohlig-Hellman Algorithm
Discrete logarithms can be either trivial or infeasible depending on how group elements are represented, and Jason Sachs shows a practical route when they are intentionally easy. This article walks through using LFSRs as fast counters, why a smooth group order matters, and how the Silver-Pohlig-Hellman algorithm plus the Chinese Remainder Theorem recovers exponents in GF(2) with small prime factors.
Supply Chain Games: What Have We Learned From the Great Semiconductor Shortage of 2021? (Part 1)
Jason Sachs argues the 2021 semiconductor shortage was not a single surprise but a set of structural imbalances exposed by COVID-19. He connects long lead times, constrained 200mm fabs and mature-node economics to why automotive features like heated seats became scarce, and shows how bullwhip dynamics and inventory practices amplified the problem. This first part uses concrete anecdotes and simple games to make the supply-chain lessons tangible.
Linear Feedback Shift Registers for the Uninitiated, Part X: Counters and Encoders
Jason Sachs shows how linear feedback shift registers can be practical counters and compact absolute encoders, and why the choice of polynomial matters. He explains using primitive and reducible polynomials to get long but decode-friendly periods, demonstrates a 48-bit example, and lays out a De Bruijn chain-code encoder that turns an extra track into quick absolute resynchronization. Read to learn implementation tradeoffs and decoding strategies.
Linear Feedback Shift Registers for the Uninitiated
Jason Sachs assembled an eighteen-part deep dive into linear feedback shift registers, connecting the simple shift-register circuit to finite-field algebra and practical tools. The series walks through primitive polynomials, Berlekamp-Massey state recovery, libgf2-based analysis, discrete-log methods, and real-world uses from PRNGs and Gold codes to Reed-Solomon and CRC reverse-engineering. It’s a single reference for engineers who want both theory and working code.
Racing to Sleep
Jason Sachs walks through a realistic field sensor case study, the BigBrotherBear 2000, to show how a careful power budget exposes surprising energy costs. He demonstrates that radios and data transmission often dwarf quiescent MCU current, explains the race-to-sleep principle for computation-bound tasks, and outlines practical wake-up and measurement trade-offs so engineers can extend battery lifetime in real deployments.
Hot Fun in the Silicon: Thermal Testing with Power Semiconductors
Bringing hundreds of amps into the lab for low-Rds(on) MOSFET thermal tests is impractical. Jason Sachs demonstrates a clever workaround using a zener diode, a series resistor, and a constant-current lab supply to dump the same watts into the device at much lower current. He also explains how to use datasheet RθJC values and type T thermocouples to estimate junction temperature and size heatsinking or airflow.
Ten Little Algorithms, Part 7: Continued Fraction Approximation
In this article we explore the use of continued fractions to approximate any particular real number, with practical applications.
Efficiency Through the Looking-Glass
Efficiency numbers can be misleading, Jason Sachs argues, because they hide the real cost engineers pay in wasted watts. This post flips the focus from percent efficiency to absolute power loss, shows how losses often stay nearly constant across loads, and walks through a practical thermal method to measure those losses more reliably than subtracting input and output power. Read it to rethink how you budget heat and energy in designs.
Implementation Complexity, Part II: Catastrophe, Dear Liza, and the M Word
Complex systems hide risks that often surface long after the developers move on, and maintenance usually becomes the true costliest burden. Jason Sachs walks through catastrophic engineering failures, cyclic dependencies, proprietary lock-in, supply-chain fragility, redundancy pitfalls, and software traps like state-machine bugs. The post closes with practical, engineer-focused advice on designing simpler, more maintainable embedded systems and planning for lifecycle safety and repair.







