3D printing for embedded development
Used mostly for creating little plastic objects, the desktop 3D printer is not an obvious addition to the embedded developer's toolbox. However, if you're looking for more reasons to get one, or already have one that's mostly gathering dust, here are a couple of embedded-related ways to get more value out of it.
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.
Who needs source code?
Many developers feel that the supplying source code is essential for licensed software components. There are other perspectives, including the possibility of it being an actual disadvantage. Even the definition of source code has some vagueness.
Supply Chain Games: What Have We Learned From the Great Semiconductor Shortage of 2021? (Part 5)
Most of the time a wafer spends in a fab is spent waiting in queues, not being processed. Jason Sachs peels back why cycle times stretch weeks to months, covering WIP accounting, die and wafer banks, the days per mask layer metric, and how variability and utilization tradeoffs turned fab behavior into a major factor in the 2021 chip shortage.
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.
Supply Chain Games: What Have We Learned From the Great Semiconductor Shortage of 2021? (Part 3)
Jason Sachs pulls back the curtain on Moore's Law and the foundry business to explain why the semiconductor shortage exposed brittle economics. He traces how roadmaps, depreciation schedules, and node mix force foundries to juggle expensive new fabs and mature capacity, and shows why leading-edge nodes punch above their volume share in revenue. Engineers get practical insight into how capacity and timing decisions ripple through the supply chain.
Development of the MOS Technology 6502: A Historical Perspective
A tiny team at MOS Technology pulled off one of the most influential microprocessor wins of the 1970s, creating the 6502 by marrying clever circuit choices with pragmatic manufacturing techniques. This excerpt by Jason Sachs focuses on the NMOS depletion-load process, mask and layout workflows, and yield-improving tricks like Micralign projection lithography and spot-knocking, showing how engineering and process decisions made a low-cost CPU ubiquitous.
Supply Chain Games: What Have We Learned From the Great Semiconductor Shortage of 2021? (Part 2)
Jason Sachs zooms through semiconductor history, fab economics, and the microcomputer era to explain why the 2021 chip shortage unfolded the way it did. He blends technical explainers on photolithography, yields, and node migration with business lessons about risky multi-year fab investments and cyclic demand. Engineers get historical case studies and practical signals to watch when designing products for greater supply resilience.
Reading and Understanding Profitability Metrics from Financial Statements
Reading a company’s financial statements does not have to feel like accounting homework. Jason Sachs shows how engineers can pull out the most useful profitability signals, especially gross margin and operating margin, from SEC filings and earnings releases. Using semiconductor companies as examples, he explains what those ratios mean, how they’re computed, and why they can hint at business strength or weakness.
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.
Stuck with Jira — and Stuckons
Jason Sachs vents about Jira’s quirks and why it still feels stuck despite years of fixes. He walks through concrete pain points: nonstandard markup, relentless notification noise, poor meta-task support, and limited analytics that make day-to-day engineering work harder. To explain why schedules blow up, he introduces a simple kepton model of planons, workons, and stuckons that highlights unexpected work.
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.
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 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.
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.
Levitating Globe Teardown, Part 1
Tim Wescott buys a $30 floating-globe desk toy and walks through first impressions, hands-on magnet experiments, and a frank critique of its control system. He highlights the toy's underdamped response, uni-polar electromagnet tradeoffs, and simple hacks that reveal clues about the pole pieces and magnet layout. This is a practical, engineer-forward preview before the actual teardown in part two.
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 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.
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.
Levitating Globe Teardown, Part 2
Tim Wescott opens up a budget levitating globe and shows why it seems magical: a massive 30 mm rare-earth magnet and a deliberately cheap magnetic circuit. He documents a bolt used as the flux core, a likely microcontroller and hall sensor in the head, very fine winding in the electromagnet, and a single-transistor unidirectional drive. Part 3 will measure forces and sensor voltages to build a better controller.
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 II: libgf2 and Primitive Polynomials
Jason Sachs digs into practical finite-field arithmetic for LFSRs, using his libgf2 Python library as the hands-on guide. He shows how to test whether a polynomial is primitive, why that matters for maximal-length sequences, and how the library implements addition, multiplication, exponentiation, and shifts over GF(2). The post is both a math refresher and a code walkthrough for engineers who want to compute with LFSRs instead of just talk about them.
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
Basic hand tools for electronics assembly
Though the software tools vary with different microcontrollers, many hardware tools are the same.
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.
Linear Feedback Shift Registers for the Uninitiated, Part V: Difficult Discrete Logarithms and Pollard's Kangaroo Method
Most discrete-log problems are hopeless by brute force, but clever algorithms cut that cost to feasible levels. This installment walks through baby-step giant-step, Pollard’s rho and kangaroo methods, and how Silver-Pohlig-Hellman and index calculus leverage group structure to speed attacks on GF(2^n) fields. Jason Sachs includes Python examples, heuristics, and complexity nuggets so you can see when each method is practical.
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 VI: Sing Along with the Berlekamp-Massey Algorithm
Jason Sachs breaks down the Berlekamp-Massey algorithm and shows how to recover an LFSR's minimal connection polynomial from a stream of output bits. The article mixes intuition, worked examples, and Python code to demonstrate the update rule, visual debugging tables, and when the solution is unique. Expect practical implementation notes, a complexity discussion, and a libgf2 example you can run in an IPython notebook.
Margin Call: Fermi Problems, Highway Horrors, Black Swans, and Why You Should Worry About When You Should Worry
Jason Sachs walks through practical strategies for choosing engineering margin, from split-second Fermi estimates to industry-grade safety factors. He blends highway and boiler anecdotes with a MOSFET thermal example to show why probabilistic thinking, experiments, and documentation matter when you must decide fast or later justify your choices. Read this to learn how to balance conservatism, cost, and risk in real projects.
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.













