Definite Article: Notes on Traceability
Electronic component distibutor Digi-Key recently announced part tracing for surface-mount components purchased in cut-tape form. This is a big deal, and it’s a feature that is a good example of traceability. Some thing or process that has traceability basically just means that it’s possible to determine an object’s history or provenance: where it came from and what has happened to it since its creation. There are a...
Painting with Light to Measure Time
When Jason Sachs needed to verify a first-order sigma-delta LED dimming implementation but had no oscilloscope, he turned to long-exposure "light painting" to turn time into space on a photograph. By sweeping the camera across blinking LEDs he captured pulse trains, read the bit patterns from the light trail, and confirmed the result with a tiny Python accumulator model. The post shares practical tips on timing accuracy, exposure, and avoiding ambient-light artifacts.
Linear Feedback Shift Registers for the Uninitiated, Part XVIII: Primitive Polynomial Generation
Jason Sachs walks through how to find primitive polynomials for GF(2) LFSRs, moving from naive exhaustive checks to smarter synthetic constructions. The article compares sieve and constructive methods, shows practical optimizations like parity checks and companion-matrix updates, and demonstrates decimation plus Berlekamp-Massey to generate all primitives from one seed; it also teases a novel Falling Coyote Algorithm for additional speedups.
Linear Feedback Shift Registers for the Uninitiated, Part XVII: Reverse-Engineering the CRC
Jason Sachs shows how to pry CRC parameters out of a black-box oracle and reimplement the checksum yourself. By canceling the affine offsets, probing single-bit basis messages, and treating per-bit outputs as LFSR sequences, you can recover the generator polynomial, bit and byte order, and init/final XOR values. The post includes working Python code, a 4-message shortcut, and real-world tests such as zlib CRC32.
A Wish for Things That Work
Jason Sachs revisits his long-running gripe with poor user interfaces, cataloguing annoyances from his Toyota Prius dashboard to desktop apps and browsers. He mixes sharp, real-world examples with a short, practical wishlist for 2018 aimed at making embedded displays, update behavior, security cues, and developer tools noticeably less frustrating for engineers and end users alike.
Linear Feedback Shift Registers for the Uninitiated, Part XI: Pseudorandom Number Generation
Jason Sachs breaks down when linear feedback shift registers make good pseudorandom sources and when they fail. He shows why LFSR output bits look very different from full-state integer samples, explains their two-valued autocorrelation and quasi-random behavior, and gives practical guidance on when an LFSR is acceptable for fast hardware bit generation and when you should use a proper PRNG instead.
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, Part IX: Decimation, Trace Parity, and Cyclotomic Cosets
Taking every jth bit of a maximal-length LFSR uncovers a surprising algebraic structure. Jason Sachs walks through cyclotomic cosets, shows why decimation by powers of two preserves minimal polynomials, and connects LFSR output to trace parity and simple bitmask parity computations. The article uses hands-on Python with libgf2, Berlekamp-Massey, and state recovery so you can reproduce and automate these analyses.
Linear Feedback Shift Registers for the Uninitiated, Part VIII: Matrix Methods and State Recovery
Matrix methods for LFSRs look intimidating, but Jason Sachs walks through companion-matrix representations and shows why they matter for time shifts and state recovery. He derives lookahead masks from powers of the companion matrix, then translates those matrix insights into efficient bitwise and finite-field algorithms. The article includes two simple state-recovery methods and working Python/libgf2 examples you can run and adapt.
Linear Feedback Shift Registers for the Uninitiated, Part VII: LFSR Implementations, Idiomatic C, and Compiler Explorer
Jason Sachs takes LFSR theory back to real hardware, showing multiple C implementations and dsPIC33E assembly to squeeze cycles out of Galois LFSR updates. He digs into idiomatic C pitfalls like rotate idioms, demonstrates tricks using unions and 16/32-bit views, and shows when inline assembly with SL/RLC and conditional-skip instructions pays off. The article also uses Compiler Explorer and supplies an MPLAB X test harness for verification.
Linear Feedback Shift Registers for the Uninitiated, Part XI: Pseudorandom Number Generation
Jason Sachs breaks down when linear feedback shift registers make good pseudorandom sources and when they fail. He shows why LFSR output bits look very different from full-state integer samples, explains their two-valued autocorrelation and quasi-random behavior, and gives practical guidance on when an LFSR is acceptable for fast hardware bit generation and when you should use a proper PRNG instead.
Project Log: Pixelblaze Christmas Lights
Festive fun and the hacker spirit combine in my janky attempt to adorn my house with addressable LEDs! In this post, I show you how I used a Pixelblaze and a cheap strip of WS2811 RGB LEDs (and not a little bit of hot glue and paper clips) to make a super cool set of Christmas lights.
Linear Feedback Shift Registers for the Uninitiated, Part VIII: Matrix Methods and State Recovery
Matrix methods for LFSRs look intimidating, but Jason Sachs walks through companion-matrix representations and shows why they matter for time shifts and state recovery. He derives lookahead masks from powers of the companion matrix, then translates those matrix insights into efficient bitwise and finite-field algorithms. The article includes two simple state-recovery methods and working Python/libgf2 examples you can run and adapt.
Reading and Understanding Profitability Metrics from Financial Statements
Whoa! That has got to be the most serious-minded title I’ve ever written. Profitability Metrics from Financial Statements, indeed. I’m still writing Part 2 of my Supply Chain Games article, and I was about to mention something about whether a company is profitable, when I realized something that didn’t quite fit into the flow of things, so I thought I’d handle it separately: how are you supposed to know what I mean, when I say a company is profitable? And how am I...
Linear Feedback Shift Registers for the Uninitiated, Part III: Multiplicative Inverse, and Blankinship's Algorithm
Jason Sachs walks through Blankinship's constant-space variant of the Extended Euclidean Algorithm and shows how to compute multiplicative inverses both modulo an integer and in GF(2)[x]. The article uses clear numeric and polynomial examples, Python snippets, and an LFSR finite-field example to show how the algorithm yields Bézout coefficients and inverses useful for discrete-log tricks and cryptographic contexts. Readers get a practical recipe for inverse computation.
Linear Feedback Shift Registers for the Uninitiated, Part IX: Decimation, Trace Parity, and Cyclotomic Cosets
Taking every jth bit of a maximal-length LFSR uncovers a surprising algebraic structure. Jason Sachs walks through cyclotomic cosets, shows why decimation by powers of two preserves minimal polynomials, and connects LFSR output to trace parity and simple bitmask parity computations. The article uses hands-on Python with libgf2, Berlekamp-Massey, and state recovery so you can reproduce and automate these analyses.
Basic hand tools for electronics assembly
Though the software tools vary with different microcontrollers, many hardware tools are the same.
Book Review: "Turing's Cathedral"
The early days of electronic computing are explored through George Dyson's Turing's Cathedral, which traces the IAS machine, John von Neumann, and Princeton's Institute for Advanced Study from 1940 to 1958. Jason Sachs praises Dyson's archival access and narrative detail, especially on hardware like vacuum tubes and delay lines, but warns the book's software explanations feel vague and would have benefited from diagrams.
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.
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
Supply Chain Games: What Have We Learned From the Great Semiconductor Shortage of 2021? (Part 4)
The chip shortage didn't end with 2021, it moved into older process nodes where cars and industrial gear live. In this installment Jason Sachs explains why mature-node and trailing-edge capacity remain tightly constrained, how NCNR commitments and price increases are reshaping supplier behavior, and what companies like NXP and Microchip are doing to cope. He warns the imbalance could take multiple semiconductor cycles to fix.
Linear Feedback Shift Registers for the Uninitiated, Part III: Multiplicative Inverse, and Blankinship's Algorithm
Jason Sachs walks through Blankinship's constant-space variant of the Extended Euclidean Algorithm and shows how to compute multiplicative inverses both modulo an integer and in GF(2)[x]. The article uses clear numeric and polynomial examples, Python snippets, and an LFSR finite-field example to show how the algorithm yields Bézout coefficients and inverses useful for discrete-log tricks and cryptographic contexts. Readers get a practical recipe for inverse computation.
Tenderfoot: Embedded Software and Firmware Specialties
This post revisits an earlier Stack Overflow answer and breaks embedded firmware into practical specialties, from assembly optimization and device drivers to DSP, IoT networking, security, UI, and systems architecture. It outlines the core skills, tools, and math each specialty demands, and explains how product constraints and industries shape those roles. Newcomers get clear guidance on where to focus their learning and career development.
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
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.
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.
nRF5 to nRF Connect SDK migration via DFU over BLE
This writeup contains some notes on how I was able to migrate one of my clients projects based on the nRF5 SDK, to nRF Connect SDK (NCS) based firmware, via a DFU to devices in the field over BLE.
How to Succeed in Motor Control: Olaus Magnus, Donald Rumsfeld, and YouTube
Jason Sachs turned frustration with algorithm-heavy motor-control app notes into a practical MASTERs class, now available on YouTube. He walks through building a fifteen-minute field-oriented control refresher, the hazards teams commonly miss, and the months of prep required to make a polished technical lecture. Read for a candid behind-the-scenes look at teaching motor control to engineers and tips you can apply to your next drive project.
Oh Robot My Robot
Oh Robot! My Robot! You’ve broken off your nose! Your head is spinning round and round, your eye no longer glows, Each program after program tapped your golden memory, You used to have 12K, now there is none that I can see, Under smoldering antennae, Over long forgotten feet, My sister used your last part: The chip she tried to eat.
Oh Robot, My Robot, the remote controls—they call, The call—for...












