More from Willem L. Middelkoop
On 11 August I wrote in my notebook: the speed at which we move is about twenty times the old top speed. In one day I do what I used to do in twenty. This post is about that speed, what it does to the human in the loop, and the counterweight I found. It is the first post of September, written on a day of deliberately doing less. Twenty times The number is not a boast, it is a measurement. In August two problems on the cloud were analysed and fixed on the day they appeared, work that used to be a week of digging. It is mentally draining, this speed. Still I find it beautiful, because you shoot with precision and power. Last week was a normal week. A complete restaurant site. A proof of concept for an event venue, promised online within the week. The final touches on a bar site. New sections on two local news sites and a full site for a city square. A site and a members area for a medical publication. Printer support in the shop app, through Apple's review. Analyses of four competitors. A video call setup on the new laptop. And on Sunday evening a prototype for writing by hand, which is how these notes were written. In the same week: three customer visits, two video calls, school runs, football training and a match, a birthday present for my wife built as a little game, a sleepover guest. It is not surprising that we sometimes feel a bit full. Saturday night, 5 September: the terminal on the laptop, one of the sites of the week in the making The human in the loop Mid August, after a week of full throttle, I wrote: I am at my max. Head and body at the limit. The gear worked fantastically, and I was the limiting factor. That is the honest state of things in 2026: the agents do not tire, the logs do not sleep, the builds run at night. The bottleneck has moved, and it moved to me. On a campsite in France I had already written the paradox down: post AI, the challenge is simple to use, less is more. Ship less. A contradiction with agents that can make everything. And the people around you do not always keep up either. The pipelines give you speed, enough to ship at eighty percent and learn. But a customer will look at the breakthrough tomorrow, and a partner needs a week. I have to learn to accept that not everyone switches at light speed. Sometimes that delay is a gift: a quieter period, a little more time for a delivery. The partial eclipse over the trees on 12 August, an evening walk in the busiest week of the month The counterweight The answer I found is not slower agents. It is a routine for the body. We must not see sport as not working: the ideas, the space and the energy are crucial. So there is a shake before the coffee, a run on the odd days, the gym three times a week, and no more finishing the leftovers. A 10K alone on a Friday morning is a relief, clarity of mind through real silence. The best runs of the summer, along the Seine at dawn and on the coast of Brittany, were not fast or strong. They were where the thinking happened. And at the end of August the sharpest note of all: the overload creates the wish for rest and space. That space has to be protected. Sleep matters, and working late at night maybe not. With school, sport and football there is not enough left over to sustain that. I have known this since my first marathon: you can push the limit, but you cannot move it by wanting. The Seine at sunrise on 6 August, the run where the thinking happened The Eiffel tower from below at the turnaround, not fast or strong A marathon, not a sprint Something else happened this week. Sites that generate themselves are becoming common, I see comparable techniques appear around me. The distinguishing factor is no longer the public endpoint, it is the stack behind it: a customer who is happy with the app in her pocket, another who bounces because of his charts. That is much harder to replicate. And there is a harder question still, also for the big AI companies: how do you carry the responsibility of keeping an engine running well, for years? Generating something neat once is easy. Keeping it running, maintaining it, over the long term is another matter. This is a marathon, not a sprint. One of the week's deliveries on the phone: a site for a city square, fresh every day This week So this week we do it differently. Mandatory time for sport and away from the keyboard. A week of rolling out cannot hurt: ninety-nine percent reactive, an empty inbox, and some polish on our own tools. No new websites without a customer's mandate. No customer contact on my initiative. This morning I slept an hour and a half longer and ran five kilometers. The plan had been a half marathon. The body really needed the extra sleep, and I feel a lot better now. The things that are in motion can roll out on their own for a while. Sunday 6 September: sleep 86 percent, recovery 94 percent, strain 0.4, a day off by design Conclusion Twenty times faster is real, and so is the bill. The agents do not tire, I do, and that makes the pace mine to set. A run, a night of sleep and a week of doing less are not a break from the work. They are how the work stays good. Sunday evening: the prototype for writing by hand on the new laptop, these notes were written with it
In August my computer setup changed more than it had in years. And yet the lesson of the month was the opposite of new hardware: the existing gear has stretch, innovation is software. This post is about one brain, the machine in the homelab where my files and my agents live, the machines around it, and why infrastructure has become subordinate to concept. One brain On 2 August, from a campsite in France, I got remote control over the router at home. The plan was to set up a direct connection to the machine in the homelab in Limburg: one brain, one login, one place where files and agents work. Two days later the workshop server that hosted my projects was phased out. Every project moved home, checksum verified, and the homelab took over the full role through a direct mosh link. From the campsite I steered it from my phone, with speech to go faster. That machine in the homelab is the anchor. It holds the platform, the customer projects, the photo library, the backups of the cloud and the agents that work on all of it. The cloud servers run the sites, the agents work from home. Everything else is glass: a screen and a keyboard to look at the brain with. 2 August, from the campsite: a mosh session on the phone into the machine in the homelab, the one brain Logs are readable On 11 August two problems on the cloud, one in mail and one in the web server, were analysed and fixed on the same day. That is only possible through the integration of the anchor in the agentic flow, plus an understanding of the relevant logs and signals. The speed at which we move is about twenty times the old top speed. In one day I do what I used to do in twenty. It is mentally draining, but you shoot with precision and power. The agents do not all live in the cloud. A local model runs on the homelab with no data leaving the house. On 24 August it watched the footage of the doorbell and described, frame by frame, a man walking barefoot to the front door. It was me. Local agents, with access to the network, the files and the protocols, nothing in the way, and a local shell: that is what makes the anchor more than a computer. 24 August: the local model on the homelab describes the doorbell footage frame by frame, no data leaves the house Glass Mid August I watched the introduction of the new Omarchy release. Beautiful work, and the most important features I already had for years: a window manager and integrated tooling. The agent integration is nice, but not fundamentally different from what I do myself. Eye candy is nice, but not a money mover. The existing gear has stretch, innovation is software. Sixteen months ago I explained why I chose a Framework laptop for that gear. So why is there a second Framework on my desk, a twelve inch one? Because of a strict job description. It is not a second brain, it is the agentic workbench: persistent split screens for several agents at once, closed and reopened with one keystroke, and no local computing on it. Glass never becomes anchor. It runs Omarchy, it booted with a green W, and it cost a fraction of the machine it looks at. The Framework 12 open on the table: modular, repairable, and deliberately just glass First boot after setup on 25 August: a green W on the workbench The twin On 22 August I ordered a backup computer and an internet line for Amsterdam. Yes, a fixed line: nine years after the day I killed my LAN and went mobile only, the cable is back, because a machine that receives backups every night needs a connection that is always there. Although I am no fan of clutter, this was a smart step, crucial even, for the data. The anchor has become so important that we must do this. It became a Framework mainboard in a small case with an eight terabyte disk, built on the kitchen floor on 26 August and ready to travel to Amsterdam. From its first night there, the anchor pushes its backups to it. Two houses, two copies, one brain. 26 August, the kitchen floor: the Amsterdam twin being built, a mainboard in a small case with the console on a monitor Infrastructure becomes concept The future? Infrastructure becomes subordinate to concept. Control over routers, devices and connections is scriptable. Logs are readable and concepts are translatable. The artefacts were there before: my own tablet OS on a Surface, the Gran Fondo app. They were not good enough, and I abandoned them. Now it is different, because I can realise things much faster. A custom launcher for my phone, with all its compliance, I would never have built for fun. This month I did. That is the next post. Conclusion One brain, a few pieces of glass and a twin in Amsterdam. The hardware decisions of this month were the small part. The big part is that a machine with agents, logs and a local shell does in a day what used to take weeks, and that the same setup now stands in two houses. Innovation is software. So before you order a faster machine: give the one you have some agents and a look at its logs. It has more stretch than you think, ha! Back at work: the workbench with the mechanical keyboard, the brain out of sight
This month I brought Lemmid Count back: the website statistics of my platform, rebuilt from scratch without AWStats and without a database. Its party piece is the dimension every other analytics tool throws away: the bots. In the agentic era the question "what did AI agents read on my site" matters as much as "how many humans visited". This post is about counting what pretends not to be there, and about putting the answer in your customer's pocket. Google Analytics is blind here Google Analytics works by placing a piece of JavaScript on your pages. A browser runs it, the script reports home, and that report is your statistics. I explained the difference with log-based tools back in 2018. In 2026 that difference has become the whole story. GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot and their friends fetch your HTML and read it. They do not run your JavaScript. They never appear in Analytics. If the agentic web is where your next customers come from, your dashboard is showing you a shrinking world. The web server sees everything. Every request, every user agent, every status code, JavaScript or not. In July my site hartvaat.nl served 114,883 pageviews. 2,187 of them were humans. Analytics would have shown you the 2,187 and called it a quiet month. hartvaat.nl in July 2026: 114,883 pageviews, 2,187 by humans, 112,696 by bots; Analytics would have shown the small number Logs, not scripts Lemmid Count v3 reads the per-site logs of the web server directly, every hour, and folds them into small JSON files per site per day. No database anywhere, no tracking script on the pages, no third party at runtime: the visitor is never touched. That also fixes what killed the previous version: AWStats pumping a near-raw copy of the logs into MariaDB forever. Now the rotated logs are the raw store and the summaries are the product. Two principles. Pages, never people: no visitor counts, no uniqueness tricks, no IP addresses on disk, the browser language instead of geo. And auto configuration: a site with a log file has statistics, nobody has to register anything. Every site on the platform runs along automatically. Classify, do not filter Every request becomes either human or bot, and a bot gets a family and a group: search, ai, social, seo, monitor, feed, lib, scraper. Declared bots are named by their user agent. Instead of filtering them out, Count shows them as first class citizens: a "read by AI agents" card with the agents by name, and a toggle between all, humans and bots. That is new, and it makes people look up. On a restaurant site, in the first days of July, ChatGPT had read 75 pages and Claude 51, next to 185 human pageviews. All, humans or bots: one restaurant site in the first days of July, 185 human pageviews next to 1,171 by bots The humans view: top pages of a cafe site, filtered in one tap The pretenders Labeling is difficult, because some bots pretend to be human. A current Chrome user agent, HTTP/2, a plausible language header, one page per IP address, thousands of addresses from cloud providers. The user agent is worthless there. Behaviour is not. Real browsers load images. Real visitors arrive from search and links, and go to the same popular pages. A crowd that visits thousands of distinct pages, each exactly once, is not a crowd, it is a harvest. Hosting more than a hundred websites is the structural advantage: a signature that shows up on many sites within one hour is not a person. Add honey pots, pages no human would ask for, and address space from datacenters as a hint, never as a verdict. The classifier is versioned, and after every upgrade the last two weeks of history are recomputed. That matters, because the other side moves. One fleet answered a new rule within a day by fetching a single CSS file as an alibi. The next version asked for images. I will not list every signal here, that is the point of a honey pot. Read by AI agents, by name: chatgpt-user, claudebot and the stealth group of pretenders on the same site Full circle: in your pocket Here is the thing: detailed statistics are not unique. Anyone with logs and patience can count. The other half of the job is translating it back into something friendly, pocketable and actionable. Count is an app my customers carry in their pocket, next to the other Lemmid apps: one screen per site, the month in one chart, the top pages, the sources, and the agents by name. No login rituals, no setup, it simply appears for every site you own. The feedback is the best part. A customer showing the stats during the coffee round, exactly the use I had in mind years ago. A cafe owner seeing that ChatGPT read the menu seventy times this month, and drawing the obvious conclusion: put the menu where the agents read it. That is a statistic turned into an action, on a phone, in ten seconds. The pocket app: Manager, Count, Handler, User and Bill, one home screen for every site you own Conclusion The share of humans on the web will keep falling, and a tool that only counts humans will keep telling you the wrong story. Count the agents, name them, and hand the answer to the person who can act on it. High tech in the log parser, low tech on the screen. The bots read. You had better make sure they read the right thing, ha! Midnight on 6 July, the night Count came back, terminal on the iPad
Halfway June I came back from Amsterdam buzzing. A week and a half later six websites were live on a publisher that did not exist before: MP1, a static site generator that lives as a ZIP file inside my own CMS. This post is about what made that possible: automating the dull work with AI agents, so my time goes to the things that matter. It was exhausting, exhilarating and highly rewarding. Amsterdam energy Those days, and nights, were completely nuts, as I wrote in my notebook on 13 June. I had been in Amsterdam and was caught by the energy of real entrepreneurs, and by my own way of doing things from before the move to Limburg. It led to a list: a friend on board with five websites, another back on board with one, new connections with creative people in the Amsterdam nightlife, and Lemmid Handler, my order handling app, in production. Building sites for hospitality in Amsterdam is the Champions League of webdesign, I knew what I was getting into. The dull work Every website needs the same boring things: a web server configuration, a certificate, a place to upload, a way to publish. I have done this by hand a hundred times. In one weekend that became managed-web-configs: an nginx configuration with certificate, created in production fully automatically. Add a queue for downloads and the distribution of the engine itself, and the boring part is gone. Not because it is unimportant, but because it is the same every time. That is exactly what computers are for. MP1 The Lemmid Manager is the CMS I built over the past decade: content, images and settings for every site live there. The proof of concept for a new generation publisher, MP1, turns the generator into a ZIP file that is stored in the site's own configuration. Check it out, change it, check it in. On save the Manager unpacks the ZIP, runs the build and syncs the result to the server. No generator lives on a laptop anymore, the Manager holds the only copy. An AI agent works inside that same loop, on its own working copy, and reports back. This is the report I found on my terminal at 07:41 one morning: checked out, changed, verified, checked in, dress rehearsal passed. The video reel on the homepage now comes straight from the Manager at build time. The agent's report on my terminal at 07:41 on 13 June: checked out, changed, verified, checked in, dress rehearsal passed Rapid iteration The effect of embracing AI is visible: complex challenges can be settled step by step. It is the agentic loop at full speed: try, look, improve, again, while the agent does the checking. willem.com, sjocombinatie.nl, k2amsterdam.nl, fishfries.nl, centrumbar.nl and lammetje.com, in ten days. Each one a real site for real people, with its own design, photos and story. The best part is where the freed up time went: straight into the things that matter. The design, the words, the photos, the conversation with the owner about what the place is really about. That is the work only a human can do, and now there is more room for it. k2amsterdam.nl on MP1: two seasons, one party lammetje.com: come by 't Lammetje, photo wall included fishfries.nl: what the guests say, in English and Dutch centrumbar.nl: brown cafe by day, party by night (in development) The reaction of one of the owners, on the evening the site went live, says it all. And my own site got the same treatment: willem.com is on MP1 too, including the Dutch edition you are maybe reading right now. The reaction of one of the owners on the evening the site went live willem.com itself on the new publisher: Hallo, ik ben Willem Conclusion On 23 June, late at night, I wrote in my notebook: "What a week and a half! We thought up MP1 and built it. It is insane! Now sleep." That is the honest summary. It is exhausting, exhilarating and highly rewarding at the same time: delivering cool and amazing things to more people. The ambition has not changed since I wrote about staying a company of one: build systems, not projects. What changed is the speed. Automate the dull work and the rest of the day is yours, for the work that only you can do. Ha! The load monitor on the evening of 23 June, during the batch publish of six sites
More in technology
Sometimes it's easier to identify an IC with a microscope. While sorting a box of old ICs, CuriousMarc came across some Harris ICs labeled "F1-10-5", a mysterious part number that didn't show up in any databooks. Since unidentifiable ICs are useless, he gave me one to analyze. Conveniently, it was in a ceramic package, so I could open it up with a quick tap from a chisel. Under the microscope, the chip's most striking feature was a grid of square capacitors. With all those capacitors, I guessed that it was a switched-capacitor filter. The die provided another clue: the part number HF-10. With this information, we quickly found that the chip was Harris's version of the standard MF10 switched-capacitor filter chip.1 The Harris integrated circuit, labeled F1-10-5 (or maybe FI-10-5), with a 1985 date code. Photo courtesy of CuriousMarc. Switched-capacitor filters were a popular way to implement analog filters in the 1980s. Rapidly switching capacitors in and out of a circuit enabled the construction of single-chip filters that were easy to use and performed well. The MF10, introduced by National Semiconductor in 1981, provides two flexible filters on a chip; each filter acts as a low-pass filter, band-pass filter, or a high-pass filter. The filter's characteristics are simple to control with a few external resistors. The Harris HF-10 die under the microscope with the main functional blocks labeled. (Click for a larger image.) Since I had the chip under the microscope, I took the opportunity to analyze it more closely. The white lines are the metal wiring that connects the chip's circuitry. Under the metal layer are two layers of polysilicon (reddish) and the underlying silicon (gray). The top and bottom halves of the chip are mostly mirror images, corresponding to the chip's two filters. The distinctive reddish squares in the middle of the chip are 72 tiny capacitors, constructed from polysilicon. Above the capacitors, CMOS switches turn on and off at the clock frequency, switching capacitors in and out of the circuit. Each filter uses three operational amplifiers (op amps), outlined in red. At the right are the three outputs from the three op amps: high pass, band pass, and low pass. The control circuitry is on the left: clock level shifting, clock shaping, frequency ratio handling, startup circuitry, and current sinks to provide fixed currents to other parts of the chip. Around the edges of the silicon die, 20 hair-thin bond wires connect the die to its 20 external pins. The die has some interesting chip art: a Harris logo and an outline of Florida; Harris was headquartered in Melbourne, Florida. The initials on the die are presumably the engineers who designed the chip. Some interesting images from the die. Switched capacitor circuits The filter is based on switched-capacitor circuits. A switched capacitor can replace a resistor in certain circuits, as shown below. The switches are controlled by a clock signal; the switches alternately close in clock phase 1 and phase 2 (ϕ1 and ϕ2). In phase 1, the capacitor is charged to the input voltage. In phase 2, the capacitor passes charge to the output. By rapidly toggling the switches, charge is (almost) steadily passed to the output. The larger the capacitance, the more charge that is passed through. Likewise, a higher frequency passes more charge. It can be shown that the circuit matches a resistor with resistance of 1/(fC): a higher capacitance and frequency correspond to lower resistance. A switched capacitor can replace a resistor. Why would you replace a simple resistor with this complicated switching circuit? In an integrated circuit, resistors are inaccurate and inconveniently large, especially high-value resistors. Replacing a large resistor with a small capacitor saves space on the die. Moreover, it is easy to generate an extremely accurate clock frequency with an inexpensive quartz crystal, making the filter's frequency highly accurate. Finally, the equivalent resistance can be changed simply by changing the clock frequency, making it easy to tune or sweep the filter. On-chip capacitors are fairly inaccurate, with the capacitance typically varying by 20% from chip to chip due to variations in manufacturing conditions. However, this isn't a problem in the MF10 because the circuitry was designed to depend on the ratio between capacitances, which is stable. Specifically, the MF10 uses 72 identical square capacitors, which will have almost identical capacitances. Careful examination shows that some of the capacitors are separate, while others are connected in groups of 8 to form larger capacitors.2 This yields a highly accurate ratio of 8:1 between the grouped capacitors and the individual capacitors, even though the absolute capacitance will vary from chip to chip. Each capacitor is constructed from two layers of polysilicon,3 forming the plates of the capacitor, separated by a thin layer of insulating oxide that acts as the dielectric. I estimate that each capacitor square is 5 picofarads. The grid of capacitors in the MF10. I've added yellow lines to show how the capacitors are grouped. The switches are above and below the capacitors. This chip uses one more trick with switched capacitors: it inverts the voltage while acting as a resistor. In the switched-capacitor circuit below, there are four switches. The capacitor charges to the input voltage during phase 1, the same as before. But duing phase 2, note that the top plate of the capacitor is grounded, while the output comes from the bottom plate. If the capacitor was charged to, say, 1 volt, the top plate is 1 volt above the bottom plate. So if the top plate is grounded, then the bottom plate must be at -1 V. (This is the same idea as a charge pump.) This circuit turns out to yield a more accurate filter because some parasitic capacitances cancel out. By using four switches, the switched capacitor can invert the voltage. The op-amp integrator The heart of most analog circuits is the operational amplifier, or op-amp. An op-amp takes two inputs and amplifies the difference by many orders of magnitude. Normally, an op-amp is configured with negative feedback, which forces the two inputs to be essentially the same. Op-amps are useful not only for amplification, but for filtering, buffering, summing, and other tasks. A basic op-amp integrator. The filter chip uses op-amps as integrators, to integrate an input voltage over time. The circuit above shows a simple op-amp integrator. The input voltage produces a current that flows through the resistor and charges the capacitor, so the capacitor holds the integral of the input voltage over time. You might expect that the left side of the capacitor would become positive as it charges. However, the op-amp's feedback forces both inputs to ground, so instead the right side of the capacitor becomes negative. Thus, the output is the negative integral.4 The MF10 chip uses the circuit above, except the resistor is replaced with a switched capacitor. The capacitor across the op-amp is not switched, but consists of either 8 or 16 capacitors from the capacitor grid. The CMOS switches The CMOS switch is the technology that makes the switched-capacitor filter possible. A CMOS switch has a fairly low resistance (maybe tens of ohms) when closed and an enormously high resistance (hundreds of megohms) when open. This high resistance ensures that the charge doesn't leak out of the capacitors. A CMOS switch is constructed by combining an NMOS transistor and a PMOS transistor. The NMOS transistor and PMOS transistor are opposites. An NMOS transistor is good at pulling the output low, while a PMOS transistor is good at pulling the output high, so in combination they provide an effective switch. An NMOS transistor is turned on by a high voltage on the gate, while a PMOS transistor is turned on by a low voltage on the gate. Thus, a CMOS switch requires two control signals of opposite polarity, which is a minor inconvenience. A CMOS switch. The diagram above shows how a switch is implemented with an NMOS transistor and a PMOS transistor in parallel. When the control line is high, and the inverted control line is low, both transistors turn on, providing a path through the switch circuit. When the control line is low (and the inverted line high), the transistors turn off, opening the switch. The chip uses CMOS switches in pairs, with one switch on and the other off. This forms the equivalent of a toggle switch that connects either A or B to the output. This circuit is simply two CMOS switches, with separate control lines for each switch, as shown below. In the MF10, the switch toggles at the clock frequency. During one clock phase, the switch is connected to A, while the switch is connected to B during the other clock phase. The schematic on the right, below, is the same circuit, but reorganized to match the layout on the die. A double-throw CMOS switch. The photo below shows a CMOS switch on the die, constructed from two PMOS transistors and two NMOS transistors. The four control lines run horizontally in polysilicon, forming a transistor gate where they cross doped silicon. The upper PMOS and NMOS transistors are driven by the clock phase 1 (Φ1) signals, while the lower transistors are driven by the phase 2 signals. CMOS switches on the die. The metal layer was removed to show the transistors. One problem with switched-capacitor filters is that the clock can generate switching noise that appears in the chip's outputs. The MF10 uses several techniques to reduce clock noise. Each set of transistors is surrounded by two isolation rings: one positive and one negative. These block noise from traveling through the silicon substrate. Note that the rings have opposite polarity for the NMOS transistors and the PMOS transistors. The light tan region in the photo above is a second layer of polysilicon. This polysilicon is connected to ground, providing a shield layer over the switching circuits. For the photo above, I removed the metal layer with acid5 to make the transistors more visible. The photo below shows the original die, with the metal layer connecting the transistors. The small black circles are connections between the metal layer and silicon or polysilicon. The same CMOS switches, showing the metal layer. Putting it together: the state variable filter There are many ways of creating a filter. The MF10 chip uses a technique called the state variable filter, invented in 1967. This circuit acts as three filters, with high-pass, band-pass, and low-pass outputs. Moreover, the circuit is flexible since the frequency, the gain, and the filter quality (Q) can be varied independently. It uses three op-amps: one to sum signals and two for integration. By changing how the values are summed, the characteristics of the filters can be changed. The diagram below shows a simplified representation of a state variable filter. The mathematics behind a state variable filter is complicated, so I won't get into it. In short, the signal, the integral, and the double integral form the three state variables that define the state of the system. Simplified diagram of a state variable filter, with two integrators. Inspired by North Coast Synthesis. The block diagram below shows how the filter is represented in the MF10 datasheet.6 The diagram is similar to the diagram above, with three op-amps. However, the summing circuitry has been separated out. Moreover, the feedback paths are not shown explictly. Instead, resistors are connected between the chip's external pins (squares) to configure the filter as desired. The mode switch at the top allows the low-pass feedback to be controlled by an external pin (SA/B). Block diagram of one of the filter sections. Adapted from the datasheet. The schematic below is my reverse-engineered schematic of the filter, as implemented on the chip. It closely matches the block diagram, but fills in the details. In the block diagram, the summing circuit (circle) adds one signal and subtracts two signals. This summing circuit is implemented with the three switched capacitors on the left, which act as summing resistors. Note that one switch is grounded during phase 1, while the others are grounded during phase 2; switching the polarity implements addition versus subtraction. The top sum input is either feedback from the low-pass output or ground, selected by an input pin. A CMOS switch is used here, but the switch is static, not clocked, so it doesn't use protection rings and shielding like the other switches. My reverse-engineered schematic of one of the filters. Click this image (or any other) for a larger version. The integrators have switched capacitors on the inputs, acting as resistors. The integration capacitor is either 8 or 16 "squares" of capacitance, selected by a ratio selection pin. This controls the ratio between the clock frequency and the filter frequency, either 50:1 or 100:1.7 Although the integration capacitors are attached to a CMOS switch, the switch is static, so the capacitors act as regular capacitors, not switched capacitors. The op-amps The op-amps are fairly standard CMOS op-amps, built from about 35 transistors. (You might get a lower count if you try counting the transistors below, since some of the blocks are multiple transistors.) The op-amp transistors are much larger than the CMOS switch transistors (very bottom, center). On the die, each op-amp is split into two parts: the differential amplifier on the left and an additional amplification stage on the right. A large capacitor (pinkish) sits between the halves. My first thought was that this was the integration capacitor, but it is just a frequency compensation capacitor, common in many op-amps to stabilize the output. The op-amps also have large transistors next to the output pins; these transistors are functionally part of the op-amps, but located next to the pins to minimize resistance. One of the chip's op-amps. I removed the metal layer to make the transistors visible. One unusual feature of the op-amps is a low-power mode. Pulling a particular IC pin low causes the chip to stop filtering and enter a low-power mode, reducing power consumption by 70%. This is implemented by shutting down the "current mirror" circuits that provide fixed currents to the op-amps and other parts of the chip. The non-overlapping clock generator The MF10 chip is driven by external clock signals, one for each filter, with the frequency of the filter proportional to the clock frequency. The photo of the CMOS switches earlier showed that the clock drives four control lines for the switches. You might think that two control lines would be sufficient: the clock and the inverted clock. The problem is that it is very important to avoid having both switches closed at the same time, even for a moment, as that will short the inputs and corrupt the signals. Instead, the two switches have separate control lines that enforce a small gap between when one switch opens and the other one closes. This is implemented with the circuit below that takes an input clock signal and produces the four outputs that drive the switches. The circuit to generate non-overlapping clock signals. There is a delay between when gate A or B turns on and when the corresponding output changes. The idea behind the circuit is that a phase is blocked from going high until after the other phase goes low, with a pair of inverters providing additional delay. In more detail, suppose the input clock drops from high to low. Gate A will turn off, causing the phase 1 output (ϕ1) to drop after a few gate delays (A delay). Gate B can't turn on until ϕ1 goes low. After additional gate delays, ϕ2 goes high. The behavior is similar when the input clock goes high. Gate B turns off, causing ϕ2 to go low after a delay. This allows gate A to turn on, turning on ϕ1 after more delay. To summarize, after a phase is turned off, there is a delay before the other phase turns on, so the two phases never overlap. The clock-shaping circuitry is implemented with CMOS logic gates. The photo above shows this circuitry under the microscope, with the metal layer removed. The rectangular blocks are doped silicon that forms transistors. The darker regions on the left are NMOS transistors and the lighter regions on the right are PMOS transistors. A CMOS gate consists of NMOS and PMOS transistors working together. The PMOS transistors are larger because PMOS transistors are slightly less efficient than NMOS transistors. The dark circles are contacts between the silicon and the metal layer on top. The copper-colored lines are not metal but a special type of silicon called polysilicon. When a polysilicon line crosses doped silicon, it forms the gate of a transistor. The pinks and greens are due to thin-film interference from a thin layer of oxide that didn't completely dissolve; the silicon is actually gray. The ternary input A weird feature of the chip is the input pin that selects the ratio between the input clock and the filter frequency. In effect, this is a digital input with three values. Tying the pin to the high supply voltage selects a 50:1 ratio. Tying the pin to the midpoint between the supply voltages selects a 100:1 ratio. Pulling the pin to the low supply voltage stops the filter and puts the chip into a low-power mode.8 To handle the three-level input, the input goes through two separate buffers, one that transitions at a lower voltage and one that transitions at a higher voltage. Thus, the two buffers separate the middle signal level. Each buffer consists of a special inverter feeding into a regular inverter. Before explaining the special inverters, I'll review how a regular CMOS inverter works. A CMOS inverter is constructed from a PMOS transistor and an NMOS transistor. When the input is high, the NMOS transistor turns on and pulls the output to ground. When the input is low, the PMOS transistor turns on and pulls the output high. Thus, the input signal is inverted. A CMOS inverter is constructed from a PMOS transistor and an NMOS transistor. In the die photo, you can see the four PMOS transistors (light gray) and four NMOS transistors (darker), forming four inverters. When a polysilicon line (copper-colored) crosses a doped silicon region, it forms the gate of a transistor. For this picture, I dissolved the metal layer in acid so the transistors are visible. The metal layer connected the transistors to complete the wiring of the inverters: it connects the two "out1" contacts to "in2" and connects the two "out2" contacts to the rest of the chip. For the second buffer, "out3" connects to "in4" and so forth. The four inverters that handle the ternary input. I flipped the image to make the orientation better. In this circuit, the length of the transistor gates is varied to make the inverters activate at different voltage levels. Six of the transistor gates are normal (orange arrows); the PMOS gates are wider (in the vertical direction) than the NMOS gates because PMOS transistors are inherently weaker. However, two of the transistor gates are unusually long (horizontal direction, red), making the transistors weak since the current must travel a longer distance. The inverter on the left has a weak PMOS transistor. If the input is high or low, the inverter will operate normally. But if the input is in the middle, both transistors will partially turn on. Since the PMOS transistor is very weak, the NMOS transistor will "win", pulling the output low. Thus, the leftmost inverter treats a medium-level input as a 1, outputting a 0. The third inverter is the opposite; the NMOS transistor has a long, winding gate, so it is weak. In this case, a medium-level input will partially turn on both transistors, but the PMOS transistor will "win", pulling the output high. To summarize, the two inverters have opposite behavior for a middle-level signal, allowing the three input levels to be distinguished. Since the output from a special inverter may be weak, the output goes to a normal inverter to amplify the signal. Conclusions Like most semiconductor companies, Harris has a complicated history. Harris started way back in 1895 as a printing press company. Harris moved into high technology in the 1950s and 1960s, acquiring various radio and electronics companies. In particular, Harris entered the IC business in 1967, when it acquired Radiation, Inc., renaming it Harris Semiconductor a few years later. (We've encountered some Radiation modules in Apollo systems, but I haven't written about them yet.) Harris got out of the semiconductor business in 1999, spinning off Intersil, which was later acquired by the Japanese semiconductor firm Renesas. In 2019, Harris merged with L3 Technologies to become L3Harris, the eighth-largest defense contractor in the US. As for switched-capacitor filters, they have lost popularity as filtering is now more easily done in the digital domain. Texas Instruments acquired National Semiconductor (and the MF10) in 2011; TI's website shows the MF10 as active but expensive and out of stock, so it's probably no longer being manufactured. State variable filters are still used in the synthesizer world both because of their flexibility and because they provide low-pass, band-pass, and high-pass filters in one unit. For more, follow me on Bluesky (@righto.com), Mastodon (@[email protected]), or RSS. Thanks to CuriousMarc for providing the IC. AI statement: Despite the presence of the em dash, no AI was used in the writing of this article (details). Notes and references Once we found the "HF-10" part number, a search turned up a National Semiconductor databook that confirmed that the Harris HF-10 was a direct replacement for the National Semiconductor MF10. It remains a mystery why the Harris chip is externally labeled "F1-10-5" rather than "HF-10". This format doesn't resemble other Harris part numbers. I would suspect a military part number, but it is completely different from the military formats that I've seen on other chips, such as JM38510 numbers or NSN numbers. ↩ You might wonder why the larger capacitors are formed by connecting eight smaller capacitor squares, rather than making one capacitor that is eight times as big. The reason is to get better matching between the two capacitor sizes. A capacitor that is eight times as large won't have exactly eight times the capacitance due to factors such as the behavior of the electric field around the edge of the capacitor, inaccuracies that may make the capacitor slightly larger or smaller than desired, or etching variability around the edges. By building larger capacitors out of identical smaller capacitors, the values can match very well, up to ±0.01% according to The Art of Analog Layout. (With laser trimming, matching of ±0.001% is possible, but that is much more accuracy than the MF10 required.) ↩ Most chips from this era have a single layer of polysilicon, so I was surprised to find two layers in this chip. I've seen two layers of polysilicon before, in the MK4116 DRAM chip and AMD's LANCE Ethernet chip. In both cases, the second layer of polysilicon was used for storage devices. ↩ A standard op-amp integrator is an inverting integrator, and the output is negative. However, the MF10 uses the four-switch switched capacitor that inverts the input voltage. The two negatives cancel out, so the MF-10's integrator is a non-inverting integrator. See Introducing the MF10: A Versatile Monolithic Active Filter Building Block for details. ↩ To remove the metal layer, I used Whink rust stain remover (1.5-3.5% HF) to remove the oxide layer and hydrochloric acid to dissolve the metal. I applied Whink for 20 minutes and HCl for 16 minutes in total. I alternated each chemical for about 3 minutes each, applying a few drops at a time. I examined the die under the microscope after each application to gauge the progress. I stopped at this point since the metal was removed and the underlying transistors were visible. Moreover, the silicon became differentially stained, with NMOS transistors significantly darker than PMOS transistors. Some more Whink would probably improve the appearance of the die, but the risk is that the polysilicon might get removed, which would be bad for reverse engineering. In other words, I'd rather stop too early than destroy the features that I want to see. ↩ For reference, the full block diagram of the chip is below, from the datasheet. Block diagram of the MF10 from the Texas Instruments datasheet. ↩ The filter frequency of the MF10 can be set to either the clock frequency divided by 50 or divided by 100. You might wonder where these ratios come from, since the capacitors on the chip are in 8:1 or 16:1 ratios, not 50:1 or 100:1. The formula for a switched-capacitor integrator is that the filter frequency is the clock frequency divided by 2π times the capacitor ratio. (This can be derived from the op-amp integrator formula and the equivalent resistance of a switched capacitor.) It turns out 2π×8 is 50.27 and 2π×16 is 100.5, providing the 50 and 100 values. Note that these values aren't exactly 50 and 100; they are off by 0.5%. Curiously, the datasheet specifies that the typical frequency error is ±0.2%, significantly smaller. I suspect that the explanation is that the capacitor ratio is not precisely 16:1, due to stray capacitance in the wiring and other factors, and the designers ensured that these factors tweaked the ratio in the desired direction. ↩ I suspect that the ternary input pin was used because the chip didn't have enough physical pins for all the functions they wanted. Note that the two filters are entirely independent, even with separate clocks, except for the 50/100 ratio control and the A/B mode control. I'm sure that these two functions would have independent control pins if the chip had pins available. They could have used a standard 24-pin package for the chip rather than the somewhat unusual 20-pin package, but maybe they had a motivation for avoiding a much larger 24-pin package. ↩
There was a time I'd look at a board like the Radxa Dragon Q8B (at left, above) and be like, "there's no way I'd spend $209 on an SBC with 8 gigs of RAM". But we're in 2026, and seeing the 8 gig Raspberry Pi 5 going for almost the same amount, I figured I'd give it a shot. On paper, the Q8B beats the Pi 5 in pretty much every way. A lot of that is thanks to this Snapdragon 8cx Gen 3 chip, which is the same chip I tested on Microsoft's Windows Dev Kit 2023.
The Sting belongs in the pantheon of films I'm deeply embarrassed to have not watched earlier. Not just because it's a great film — and it is — but because it is so incredibly my shit that I feel retroactively spurned for not having watched it sooner.
If everything worked as well as the product called Evapo-Rust, the world would be a much better place. That’s just one of the many lessons learned during my recent — successful! — project to transform my old, nonfunctioning gasoline-powered generator into something much better.