IBM Misses, IBM’s Mainframe Moat, IBM’s Many AI Problems
IBM announced preliminary results that spooked the software market generally; this is a story, however, specifically about IBM and its mainframe franchise.
IBM announced preliminary results that spooked the software market generally; this is a story, however, specifically about IBM and its mainframe franchise.
We've been buying servers from Dell since the 2000s at 37signals, but I was never too impressed with their personal computers. They either felt cheap or enterprisey to me. Like they were made exclusively for people who are handed standard-issue laptops by corporate, and not something discerning techies would buy with their own money. But the new XPS line has completely changed my perception. I've now spent several months with the 2026 XPS 14 and 16, and last week I added the MacBook Neo-fighting XPS 13, and all I can say is that these machines are fantastic! Great chips, great screens, great build quality. Superb packages. Which is very satisfying to see because there are few American business leaders I respect more than Michael Dell. He's been running his company for over forty years now, and he's still calling the shots! So to see the company pull a turnaround like this, so many years into its run, is very inspiring. I've written about the XPS 14 before, and as I noted back in April, a good portion of the credit for these new Dell machines being really good belongs to Intel. The 18A process is paying big dividends for both companies (and the rest of the PC makers). But Dell could still have stuck these chips into forgettable machines, and I wouldn't have had any interest. In fact, they did! Just last year, for the 2025 model year, they shipped new XPS machines with awful capacitive-touch function and esc keys. Two years after Apple had finally thrown in the towel on the ill-fated Touch Bar on their MacBooks! Dell also killed the XPS branding last year, and went with the truly uninspired Plus/Premium/Pro copycat branding. Like some cheap Chinese knockoff. It was embarrassing, to be honest. But unlike Apple, which introduced that cursed Touch Bar back in 2016, and then crammed it down everyone's throat for seven long years, Dell rebooted this nonsense almost immediately. Gave us back real function and esc keys, and revived the XPS branding. You could argue that they should have learned from Apple's mistakes to avoid their own, but the next best thing is surely a quick reversal. And what a reversal it's been. As I said, I've spent months using an XPS 14 as my main machine. It's been so good I even gave up on using a dedicated desktop machine. Now I just run everything off the XPS 14, connected to an Apple XDR 6K 32" (nobody has yet managed to beat this, and I've owned it for years). It's a great, simple setup. The XPS 14 is an expensive machine, though. Not more so than its direct competitors, but still, at $2,799 for the 358H/32GB/1TB/OLED unit, it's a lot. I'd spend that in a heartbeat, but not everyone is going to drop that kind of cash on a laptop. Especially if they already have a powerful desktop. That's where the new XPS 13 comes in. It's part of the PC industry's answer to Apple's new MacBook Neo, which analysts all thought would catch the other side flat-footed. Well, surprise, it didn't! Apple charges $699 for an 8GB RAM/256GB SSD Neo, whereas Dell wants $699 for 8GB RAM/512GB SSD, and even offers a 16GB RAM/512GB SSD version for $899 (there's no RAM upgrade possible for the Neo). But matching Apple on specs and price wasn't the surprise; it was besting them with a nicer screen and keyboard, and meeting them on build quality. The XPS 13 has a great 120Hz screen (something you don't even get on a MacBook Air at twice the money!), a superb keyboard w/ backlighting (also missing on the Neo!), and weighs 20% less at just 1 kg with every bit as nice an aluminum chassis. Now I'd forgive anyone their skepticism about 8GB RAM and Windows. Microsoft isn't exactly known for creating a responsive operating system on modest specs these days, but who cares, we have Linux! Of course, I've been running Omarchy on this thing for the past week, and it's frankly fantastic. As long as you understand the limitations! The Intel Wildcat CPU uses the same performance cores as the full Panther Lake chip, so single-threaded snappiness is all there, but it only has two of those, and then another four low-powered cores. So six total, but not a mix that's conducive to running big multi-core workloads, like local CI. This is where the XPS 13 meets the moment. As the agent craze has been taking over software development, you might have seen any of the many memes about half-cracked laptops, just so the agents won't halt with a closed lid. The obvious answer is of course to run these agents off a home server in the closet, connect them to something as slim and light as an XPS 13 over Tailscale, and then control it all over SSH. Used like this, you get a machine that runs a browser as fast as anything on the PC (thanks to those full-speed performance cores) while costing a fraction of a new top-spec machine, and having better close-the-lid ergonomics. Win-win-hurray. When I posted my enthusiasm on X about this new XPS 13, I got at least three replies with "Is this an ad???". No. This is not an ad. I bought the XPS 13 with my own money, and frankly, you couldn't pay me any sum to use a laptop I didn't like. I did try Dell's laptops a few years back, didn't like what I saw, and ended up spending a few years using Framework computers instead (they're still great too). I'm simply excited that the PC isn't giving up without a fight. That Linux has been on a run among early adopters. That companies like Intel and Dell are here to keep Apple honest. Competition is great. It was Apple's M chips that rejuvenated the laptop market, and they held a supreme lead for years. So it's lovely to see Intel, Dell, and others actually being ready to meet the challenge from the low-cost Neo right out of the gate. So I tip my hat, once again, to Michael Dell. Forty-plus years at the helm, not too proud to pivot quickly, and now the maker of my favorite Linux laptops. Well done, sir.
Long-time readers will know I’m convinced local voice interfaces and sub-$1 embedded chips will fundamentally change how we interact with everything in the physical world. That’s why I’m so excited to introduce Moonshine Micro , a version of the Moonshine Voice open source framework that can run a useful voice interface in just 520KB of RAM. It contains separate libraries for voice-activity detection , speech to text , and text to speech , all powered by tiny neural networks with an example bringing them all together on an 80 cent Raspberry Pi RP2350 chip . I’m still working towards the end goal of the moonshot I started at Google Brain in 2017, a full ASR and TTS system on a 50 cent chip that can run on a coin battery for a year, but this is a big milestone on the journey. This release runs a 50-word command recognizer, that’s fully trainable for custom words , and a neural network-based text to speech engine, and can be used to set up a wifi connection. There’s still a lot of work to do to increase the scope of the recognition to full speech, rather than individual words, increase the text to speech quality, and to offer advanced intent recognition on this kind of system, but with the hardware improvements that are likely to come over the next few years, I think we’re getting a lot closer. I’m looking forward to seeing applications I’d never thought of for this technology, so if you build something neat please tag me on Hackster, and for questions or issues let me know on GitHub .
I did it. I finally bought a new Mac. I managed to snatch a MacBook Neo on Amazon a few minutes after Apple announced the price increase across their line-up. It all happened very quickly, but I think it’s worth taking the time to explain my messy, complex, overcomplicated train of thought. If you’re a regular reader of this blog, you know that I complained (or bragged) a lot about the fact that I still used an early 2020 MacBook Air as recently as two weeks ago, and that its battery was getting a bit old, and it was maybe a little bit slow at times. I explained in a post that I felt confident in being able to keep using it for one more year, as its limitations felt more like a way to focus and maintain a well-controlled set-up rather than constraints. I was ready to wait for something like the M6 generation of the MacBook Air (so I could continue my story with that family of laptops, which started with the early-2015 11-inch model). But this post was written in January, before Apple unveiled the new M5 MacBook Air, and, as a little surprise, the MacBook Neo. I first considered the Neo, because its clear limitations were not a deal-breaker for me; on the contrary, they were a great follow-up to my then-current set-up, which was very much not demanding by design. In fact, the Neo looked pretty much, feature by feature, like the laptop of my dreams: simple, focused, reliable, cheap, well-built, straight to the point. With the classic Apple pricing ladder, of course the MacBook Air looked very tempting, offering so much more for just a little extra: better speakers, better trackpad, a backlit keyboard, double the memory, a better screen, a better audio jack, better connectors, a better battery, a far better chip, a better webcam, Touch ID, etc. Therefore, for 400 euros more, it looked like a better deal, and better value than the Neo. I could even use that extra bit of power to finally edit photos on my laptop instead of on my phone, where the screen and performance have long been better suited than those of my old Mac for running apps like RAW Power. This is where it got a bit complicated in my head and froze all my purchase intentions. Value-wise, the MacBook Air M5 was, like I said, a much, much better choice than the Neo: for 50% more money, you get more than double the computer basically. Money-wise, if the Neo is indeed sold at a great price, it’s not as good a deal as the MacBook Air, not as good value. But if I were to stick to value and price, well, keeping my old MacBook Air Core i5, costing me zero, would always be a better deal. For a while, whenever I thought of “what I already have” (the old MacBook Air) versus “what I really want” (the new MacBook Air), I had always chosen the easiest and cheapest option of the two. What I should have done instead was focus on the fundamentals: what I actually needed (the MacBook Neo). What I need is a laptop I can count on, but not only performance-wise, where my old Air was surprisingly resilient. The battery life, enabling the laptop lifestyle, is essential. Spending time on my computer is my hobby, my pleasure at the end of the day. On the days I had forgotten to plug the computer in, when I wanted to check something sitting on the couch or on my balcony, far from the reach of the charging cable, well, I could not: the little bugger had no juice left, my end-of-the-day moment was ruined, and this situation was overall a pain. So when I first learned that Apple planned to raise prices , I reconsidered once again the timeframe in which I had to change my Mac. Waiting another year and spending 20% more for the same-ish computer as the one I could buy today didn’t look like a good idea. So when I saw that Amazon had a special deal on the MacBook Air, priced at 1080 instead of 1200 euros, I was ready to buy one. A few days later, while I still hadn’t made the jump on the purchase, I saw the headlines pop up that the Air was getting 200 euros more expensive on the Apple store. From that moment, I knew I had to act fast, before Amazon raised the price too. This is when I saw that the Neo was sold at 630 euros instead of 700, and this is when a little light bulb appeared above my head. This Mac was the one I needed. In fact, as I needed to buy the laptop right away, before the price change, I was keen on saving 450 euros, especially a few days before my salary arrived. The 630 euro price tag was more affordable than 1080 and more compatible with an impulse buy. So I ordered the cheapest Neo model, without Touch ID, and ended up saving 170 euros on the Neo. That’s more than a 20% discount if applied to the current price on the Apple website. Needless to say, I’m very pleased with this deal: now if I were to sell my computer I could possibly still get more money than I paid for it, in case I end up unsatisfied with it, which is not the case so far. After two weeks of regular use, I have no complaints really. Thank you Apple for raising prices and forcing me to buy the computer I actually needed, I guess? Performance is fine, even great when compared to my old Mac. I want to say it’s more or less as snappy as the M1 MacBook Air I use for work. Clearly, this is no match for the M5 chip, and 8GB of memory may feel a bit limiting, but I don’t need that much memory to run BBEdit, NetNewsWire, GoodLinks, and Safari anyway. I actually like that this limitation is forcing me to keep my feet on the ground when it comes to trying out new apps and revisiting my current set up . We’ll see how it goes in the coming months and years. I don’t think I’ll be able to push this device as hard as I pushed my old Air, but hey, it’s almost half the price. The keyboard is more or less the same, if a bit firmer, probably due to the fact that it’s a new computer and I come from a six-year-old, worn-out keyboard. Most of the computer feels identical to the Air, if ever-so-slightly worse, like the speakers or the screen. As I don’t plan to edit photos on this machine, really, there is only one part where I really “suffer” from a downgrade compared to the Air: the trackpad. The Air’s trackpad has been so good for so long that we tend to forget about it: the haptic feedback makes it very satisfying and informative to click. On the Neo, pressing on the trackpad is nowhere near as satisfying. The travel distance of the trackpad is, I want to say, 60 to 70% longer than it feels like on the haptic trackpad, and this is 60 to 70% too long, too deep, too loud. So far, this is the only part that feels really worse in terms of my daily experience. In the end, this is what the Neo really is: a familiar 630-euro laptop — a 630-euro new Mac — perfect for my activities of web browsing, video streaming, writing, and geeking around with apps. Dare I say that the Neo, as a single-purpose device, is a perfect blogging machine?
Hi premium readers! I’ll be taking a week off of the premium next week — July 17 — to have some well-earned rest. This will mark only the second time I’ve missed a premium piece since I started this newsletter in June 2025, and I hope you’ll forgive me for the (short) break. Don’t worry. Today’s piece is also an absolute banger. Everything’s more expensive, and it’s all AI’s fault. It really is that simple. An AI data center is full of servers, which are in turn full of (for the most part) NVIDIA GPUs. Each NVIDIA GB300 has two B300 GPUs, the two of which have 576GB of High Bandwidth Memory (HBM, or HBM3e to be specific), and a CPU, which has 480GB of lower-power LPDDR5X RAM (the kind usually used in cellphones and other mobile devices). These systems tend to be sold in an NVL72 rack with 18 compute trays, bringing us to 36 GB300s , for a total of 20.7 terabytes of HBM and 17 terabytes of LPDDR5X RAM, and that’s before you get to the RAM associated with the high-speed networking gear and other associated components. Analyst estimates have the cost of the high bandwidth memory of a single NVL72 GB300 at around $15.27 per gigabyte, for a total of around $316,000 of HBM, and while I can’t seem to find a stable source for pricing around LPDDR5X, I think a fair estimate is around $4 per gigabyte based on this piece , so around $68,000 worth per NVL72 rack. At around 150kW of power draw per NVL72 , a 1GW data center (with 740MW of critical IT load) would have around 4,933 NVL7s racks — for a total of $ 1.894 billion in HBM and LPDDR5X costs, or around $2.559 million of HBM and LPDDR5X RAM per megawatt of IT load. Oh, and each of these NVL72s can hold as much as a petabyte of expensive solid state storage, costing an additional tens of thousands of dollars. Because HBM takes up more space on a wafer — the slice of semiconductor material that is etched using photolithography ( read: molten tin ) and then cut into separate dies (individual chips) — and generally has much higher margins (thanks to the triopoly of Samsung, SK Hynix and Micron), memory manufacturers are dedicating more space on their manufacturing lines to it than to regular consumer RAM, which allows (thanks to said triopoly) said manufacturers to charge effectively whatever they want for consumer RAM. And thanks to AI — to quote Tom’s Hardware and Counterpoint Research — NVIDIA is buying that LPDDR5X RAM at the scale of an Apple or a Samsung: The net result is pretty simple: every single consumer electronic of any kind is getting more expensive. Valve’s Steam Machine console debuted at a 30% higher price point than planned , Apple hiked the prices of its MacBooks and iPads and will likely have to do the same for its next iPhone . Nintendo , Microsoft and Sony increased the cost of their consoles, and the PS5 and Xbox Series now cost more today than they did when they first retailed, almost six years ago. On the Android front, Samsung has bumped the price of its Galaxy smartphones , and manufacturers in this space (which tends to have smaller margins than those enjoyed by Apple) are likely to limit the number of new devices shipping with 16GB of RAM, as well as re-introduce models with 4GB of RAM . Meanwhile, memory manufacturers are having record quarters, with Micron’s revenue quadrupling year-over-year in Q3 2026 and its gross margin improving by ten percent (from 74.9% to 84.9%) quarter-over-quarter, and Samsung’s profits growing from $38 billion to $59 billion quarter-over-quarter thanks to the spiralling cost of revenue caused by…well…the companies setting the price of memory at whatever they’d like. This is a problem caused by the fact that these three companies — SK Hynix, Micron and Samsung — produce more than 90% of the world’s RAM, which is why there’s a price fixing lawsuit against them , per Polygon: To be clear, HBM is more expensive to make than regular RAM, and takes up significantly more space ( about 4x more ) on the wafer, but because of the incredible demand for AI servers, Samsung, SK Hynix, and Micron can charge effectively whatever they want for it, much like they are for the regular RAM that’s in short supply. The same is becoming increasingly true for the solid state storage that these companies (and others like Sandisk) sell too. Now, you may think it’s a little rich to suggest that memory manufacturers are colluding to rig their prices, perhaps a little judgmental , and you’d be wrong because they’ve done it before. Quoting Polygon again : To be clear, I am not saying — nor can I prove — that there is any kind of price-fixing or collusion going on. Nevertheless, there are three companies that effectively make all the world’s RAM, all raising prices at the same time, all seeing record profits, all riding high at a time when everybody else is suffering as a direct result. The Wall Street Journal put it best : What makes this particular memory crisis so distinctly dangerous is that it isn’t a result of consumer demand so much as it is capital expenditures from very large companies making bets that don’t connect with reality. Microsoft, Google, Amazon, and Meta aren’t spending $765 billion in capex in 2026 because of rapid demand by consumers for AI services, but a desperation caused by a lack of hypergrowth ideas , circular financing with Anthropic and OpenAI , and a vague concern that if they stop spending that the other guy will do something as a result. As I discussed earlier in the week , nobody can make a compelling case for building more data centers other than “we must do so, because of AI.” Nobody is having trouble accessing ChatGPT, Claude or another major AI service because of a lack of compute, outside of Anthropic and OpenAI’s continual rapacious hunger for more compute that doesn’t ever seem to involve them turning away business. While price increases generally help moderate demand for goods or services, none of that matters when you have four companies willing to spend a trillion dollars a year on the off chance that they might get something out of it . As a result, Micron, Samsung, and SK Hynix can charge effectively as much as they want, and NVIDIA and others building black holes for AI capex can then pass those costs onto Microsoft, Google, Amazon, and Meta, who have given themselves a blank check to build whatever it is that they think will come out of the large language model era. Put another way, the capex spend of four of the largest companies of the world — all of whom are now funding their capex using debt — has now led to the single-largest increase in the price of consumer electronics in history, for the most part thanks to one company, NVIDIA, becoming the largest purchaser of HBM in the world because those four companies are buying so many GPUs. To give you an idea of how bad that is, NVIDIA takes up roughly 65% of all high bandwidth memory, with the other 35% (mostly) going to specialist ASICs from Google and Amazon, and AMD’s Instinct line of AI GPUs. This is a unique — and uniquely dangerous — bubble, because demand isn’t based on actual revenues or events happening outside of those in the imaginations of Sundar Pichai, Mark Zuckerberg, Andy Jassy and Satya Nadella. They didn’t start buying these GPUs because consumers demanded them. In fact, they did so without really checking whether consumers gave a shit, which is why I’m so worried about what comes next. Only 23% of total DRAM wafers are taken up by HBM , but it’s accounting for a remarkable chunk of revenues, at least for SK Hynix, where it took up 40% of all DRAM sales back in Q3 2025 , the most-recent number I can get. While I can’t find definitive numbers from Samsung or Micron, the situation is bad no matter which way you spin it. Either they’re increasingly-relying on HBM as a revenue driver to the point it’s crowding out the revenue from their other DRAM businesses (making them dependent on GPU and ASIC revenue), or their revenues are spiking because they’re able to crank up the cost of DRAM. This is setting everybody up for a dramatic and painful collapse, largely based on the strange nature of how memory is built and sold, unless cooler heads prevail and capex doesn’t accelerate based on hopium. What happens when hyperscalers reduce their capex, or when banks stop issuing data center debt ? NVIDIA stops needing all that HBM, which means any and all capex dedicated to expanding manufacturing infrastructure to produce more HBM — which is not particularly valuable outside of AI GPUs — will have been built to capture demand that doesn’t exist. While that capacity could be re-engineered to make useful DRAM with mass appeal, doing so will also drag down the profits of every memory manufacturer in the process, creating a supply glut the likes of which we’ve never seen in history. The memory industry has gambled its financial future on the idea that there’s near-infinite amounts of capital available for data center capex, adjusting its supply chains and fabs to focus on scooping up demand that’s increasingly only made possible by the availability of debt. Microsoft, Google, Amazon and Meta have turned NVIDIA into a single point of failure for the entire tech industry, creating a painful present for consumers and a brutal future for suppliers, all because they decided to spend more than a trillion dollars on a dead end industry. The longer it takes for hyperscaler capex to retract, the more expensive everything becomes. The more GPUs that get sold, the more capacity that gets put toward high bandwidth memory, and the more that Micron, SK Hynix and Samsung can charge for it, which makes it more expensive to buy AI GPUs, which increases the amount that hyperscalers are spending on AI capex for effectively the same amount of gear. The longer that hyperscalers sustain this pace, the larger the return needs to be, and at this point, none of them have disclosed their AI revenues, which heavily suggests there’s yet to be a dollar of profit. Yet the more they commit, the more committed they have to be. Pulling back at this point will prove to the markets that they’ve committed to too much capacity. Yet not pulling back means that hyperscalers will continue to turn their free cash flows negative in pursuit of an indeterminate goal. It’s a vicious cycle made worse by the fact that every spin of the capex wheel increases the price of just about every consumer electronic in the world , creating a market-wide inflation for what amounts to a speculative asset bubble. And If even one hyperscaler cuts their capex, the cartel-like memory industry is in for a nightmare scenario, one larger and uglier than any they’ve ever faced. In the end, it all comes down to whose problem this high bandwidth memory becomes. Will SK Hynix, Samsung, and Micron have already built the RAM and face waves of cancellations, resulting in a bunch of fallow inventory it can’t use or sell? Or will they already have shipped it off to NVIDIA and ASIC builders, only for it to sit in warehouses waiting for the day it can finally be melted down? Who will end up holding the bag? The cartel of horrible fab-gargoyles, Jensen Huang’s Wallet Inspection Firm, one of the four simpleton hyperscalers, Broadcom, or one of the Taiwanese ODMs? Just to be clear: everybody loses, unless the AI bubble continues in perpetuity. This is the Hater’s Guide To The Memory Crisis — and the terrible tale of the boom-and-bust memory industry.
The QuadRF (pictured above) a phased-array radio built around a Raspberry Pi 5 and an FPGA board with picosecond-level timing. It does advanced signal processing and beamforming. It can see WiFi through walls and track drones in flight. If the open source community can come up with something like this, just imagine what governments are capable of. When you plug a computer into a network, tools like Wireshark can show all the hidden traffic you might not even know is there. WiFi packets are the same, but those travel through the air, allowing snooping without physical access.
Earlier this year, I received an old PC for free from my teammate Kristjan Lepik. After confirming a few details, I understood that I could probably find an use case for it, especially given my unhealthy obsession with trying to make old hardware useful. Free tech tip: if a free PC has blue USB 3 ports visible, then it’s not completely obsolete yet! For most of its time, it sat idle. The components and case got shuffled around based on other project ideas and a desire to have a small gaming PC, but then it ended up back in its original configuration. One day, my trusty ThinkPad T430 that ran as a home server started encountering oddities around the network interface cutting out during periods of moderate to high load, and its “Power on with AC attach” feature was also flaking out on me, meaning that a prolonged power outage would result in a home server that doesn’t come back up again. That’s when I decided to make this free PC my home server. The machine initially came with these specs: Initially, the 8GB of RAM was quite limiting, but the board had three DIMM slots free, and by sheer luck, I found two different local listings for used Kingston memory, different revisions, but the same model and physical size! 30 EUR and a quick memtest later, I now had upgraded the machine to 32 GB of RAM. It’s DDR3 and I overpaid for it just to get a matching set of 4, but in this economy I’m more than happy with this arrangement. I moved over storage from my other builds. The OS lives on a 128 GB NVMe SSD, which is also bootable. The booting aspect is worth highlighting because when this motherboard was new, NVMe SSD-s in this form factor weren’t super common yet and booting from PCIe devices was not common. I also carried over two Samsung 870 QVO 4 TB SSD-s , and the two 18 TB white label Seagate drives. The motherboard does have six SATA ports, but with the NVMe SSD installed, only four of them are actually usable. Quirks and limitations like this are quite common on motherboards, so keep that in mind when planning your builds, especially with less capable hardware. Luckily this wasn’t a deal-breaker for me. After I caved and got a fancy gaming GPU for Forza Horizon 6 , I had an AMD Radeon RX 480 8GB model left over, the Sapphire Nitro version, which is arguably one of the best looking GPU-s out there. I plopped that in as it can still find use as a transcoding GPU, and it has been fun testing its capabilities with smaller language models that fit within its 8 GB of VRAM. Not bad for a GPU that’s almost exactly 10 years old, and I know that because the previous owner bought it in 2016 and had used it full-time since. Cooling is quite a limiting factor with this case, so I got a cheap Arctic case fan for it and set it to run in “Turbo” mode in UEFI settings. Dust will likely be an issue a year or two from now, but that’s better than overheating hardware. It doesn’t help with the GPU throttling under sustained loads, but at least the other components are fine. Thanks to running local language models, I got reminded of the power limit of my UPS. It’s 360 W, apparently. The case is just small enough so that I can put it on my infrastructure shelf. It hangs a bit over the edge, but it gets the job done. It’s noisy and the cheap and basic case makes hard drives audible, but given that it sits in a closet, I can’t hear it at all when the closet door is closed. Once I do open the door and the server is doing some heavy crunching, it does resemble the sound of a small data center. I’m aware that the bulk of the cost of this build is in the storage and GPU that I added on from previous builds, but I felt I needed to highlight the value of old equipment that someone else hasn’t used for years. Compute has become much less affordable, so going the second-hand route is all the more important and actually better for the environment, as long as the energy costs of operating the equipment isn’t too high. Ühe mehe vana on teise mehe uus. Intel i5-4690 with the stock cooler it’s a solid 4 core CPU with just enough performance for me this CPU is from 2014! ASUS H97M-PLUS it has an Intel gigabit network interface, which was a positive surprise for me! 8 GB of good ol’ DDR3 RAM NVIDIA GTX 750 Ti a basic Chieftec 500-ish W PSU, half-modular a basic PC case made of very thin metal
For a while I've been planning to put together a separate machine for local LLM training. Until now, I've been using my desktop PC, . I have an RTX 3090 installed, and can get useful training runs done (most recently, a 163M-parameter GPT-2 small style LLM in JAX ), but there are a couple of problems. And relatedly to all of those: the two-day limit to the training runs I've been doing is something I set because that's the maximum amount of time I'm willing to have tied up. It would be really interesting to try longer training runs! I also have longer-term plans; a multi-GPU box would be interesting to put together -- not just to have more power locally, but so that I could test larger-scale cloud multi-GPU training runs before starting to pay for expensive machines. US$15.92 an hour to rent a machine isn't a lot of money, but it adds up, especially if you're spending it while debugging parallelism issues. And finally, I've always been interested in putting together a custom water-cooling loop in a PC. I've been building my own machines since 1995 or so, but never got round to that side of things. It sounds fun! But despite all of those future plans, this is a fairly normal machine-building post -- how I repurposed an old PC, plugged in a second-hand RTX 3090 from eBay, tested it all, accidentally trained an LLM for 11 days, and almost cooked a CPU. Over time, I expect to be posting more -- and more interesting -- build details. Let's think of this as establishing the baseline. Back before I moved to Lisbon, we had a holiday home here. When we came over, I'd bring my laptop, but that was always somewhat unsatisfactory -- limited CPU power for work, limited GPU for my occasional gaming. During Covid, we started staying in the holiday home for longer periods -- and this became too big of an annoyance to ignore. So in 2020 I put together a small form-factor PC, which I named . The constraints were: The build was a bit fiddly, like all SFF PCs. You can see the component list and build notes here on PCPartPicker , but in short she had: She looked like this: (Gosh, I'd forgotten how... vivid our wallpaper was in that dining room.) For scale -- that case is slightly taller than two cans of coke stacked on top of each other. So, pretty small. When we moved to Lisbon full-time, I brought with me from London, and while he's been upgraded several times since (including adding an RTX 3090 in late 2023 ), he's been my daily driver since. So sat in the corner of my study, sad and unused :-( It was time to bring her out again. Initial plan: get her up and running in a new, larger case, with a PSU that could potentially handle three graphics cards. Initially, I found that she wouldn't switch on: a quick check suggested that the problem was the PSU. I'd had problems with SFF PSUs in the past, and given that the plan was to give her a new one, I just got one, along with a new, larger case -- specifically: A few days later, the parts arrived. Here's a family photo: is to the left, centre, sitting on top of her new case, and Cornélia (wearing her Flower of Shame) is to the right. For scale, Cornélia is quite a large cat. (I appreciate that that is not immensely helpful.) Time to put the old motherboard and the new PSU into the new case. Here's what it looked like: The Mini-ITX motherboard in a case designed for full ATX looks comically like a postage stamp. I switched her on, and luckily enough, everything worked! Must have been a PSU issue. The OS that she had was a more than three-year-old version of Arch, so I wiped the drives and installed the most recent version with my normal config, and it was time for a quick test. One of the nice things about having done all of this LLM training stuff recently is that you have a ready-made burn-in test for new hardware :-) I didn't have my JAX training code yet, but I did have the PyTorch one . Now, with her GTX 1660 Super GPU, was clearly not going to be able to train an LLM of the size I could with 's RTX 3090. I did some fiddling around with the model and training run parameters, and found that I could fit in a cut-down version of GPT-2 small with this setup: I trained it with a microbatch size of 4, gradient accumulation over 16 steps, and all other hyperparameters the same as my normal training runs on . The number of training tokens went down -- the model had 76,933,120 parameters, so I needed to train for just over 20x that -- about 1.5B instead of the 3.2B I've been training my other models on. I kicked that off, and out of interest, I kicked off another training run on with the same setup to see what happened. The training run went normally -- GPU running at full blast, 368W, and it completed in about 9 hours. That's less than 1/4 of the time my normal training runs take, which makes sense because time taken for this kind of thing scales roughly linearly with both the size of the model and the number of tokens, and both of those were about half the normal size. was a bit more interesting. In , the GPU usage showed up as 100%, but with an "effective" utilisation of 53%. The power draw matched the latter, being 67W out of a total possible 125W. I'm not quite sure what was causing that -- clearly there was a bottleneck somewhere. Not really worth digging into, though, given that I was going to replace the card shortly. Anyway, that took 963,257 seconds to run. That's 267.57 hours, or just over 11 days. What's kind of interesting there is that this training run not only took much longer (which is only to be expected), but that it used more electricity. 67W over 267.57 hours is just short of 18kWh, whereas 368W over 9 hours is about 3.3kWh. Buy an RTX 3090, save the planet! I decided to run my normal evals to confirm that what had come out the other end was sane. When asked to complete "Every effort moves you", 's model said: And 's said: Those were actually rather good, I thought! And looking at my normal loss test confirmed that the models really weren't that bad; 's got 3.855702, and 's 3.855981. That was actually better than the 3.943522 I'd got on before I went down my rabbit hole of optimising hyperparameters . So, that was an interesting test -- I was talking to ChatGPT about it at the time and it called it "maybe an art project", which I thought was amusing if a bit arch. Time to do something a bit more useful. Finding an RTX 3090 for a decent price from a trustworthy-seeming vendor is kind of hard right now. But it's still the sweet spot for price-performance if you're looking to train models locally, so I set up an alert on eBay, and eventually one popped up in Bulgaria. I bought it, and a few days later, this turned up: It's actually not as ugly as it looks in that photo -- it's considerably uglier. The stuff that looks a bit like crinkled aluminium foil is really white plastic with a kind of crystalline texture. Made me glad that I'd gone for the mesh-sided case rather than the glass one. Well, I hadn't bought it for the looks. I removed the old GTX 1660, and put in the new card, switched it on, and: Wow, a disco in my PC. Lovely. It was time to kick off another training run to see if it worked. This time, I did my normal GPT-2 small sized train with optimised hyperparameters. It ran for about ten minutes, and then switched herself off. That didn't look good. I spent some time digging around trying to work out why my new graphics card was broken, and then happened to be sending the video above to a friend, and spotted something. Check out the Noctua fan -- the beige and brown one you can see behind the cooler mount, above the graphics card. It wasn't spinning. That's the CPU cooler fan and should always be spinning, even if slowly, when the machine is on. I log basic metrics for all of my PCs to a central InfluxDB instance, so I checked that out and: A CPU temperature spike up to about 115°C! Not good. Clearly an emergency thermal shutdown from the CPU. I initially thought that I must have knocked the fan cable loose while plugging in the new GPU -- plausible, though they were quite far apart -- but unplugging then reseating it, then powering up the machine still didn't start the fan spinning. And it was not visible in the BIOS. I then zoomed out a bit in Grafana; I only keep 30 days' worth of metrics, and it had been more than a month since I did my original burn-in test, so I didn't have anything for that. But I did have this: had been idle for all of that time, and was averaging CPU temps of over 70°C. The dropoff prior to running the test was because she'd had a chance to cool down while I installed the GPU. Having spent ages setting up my InfluxDB monitoring stuff so that I have metrics for everything, I should probably actually look at them every now and then, because the fan had obviously not been doing anything for a month or so. Well, thank goodness for Amazon next-day delivery. I bought a new Noctua NF-A9x14 PWM (praying that the problem was the fan and not the header on the motherboard), and when it arrived, I put it in. This time, when I powered her on, the fan was spinning. Phew. I left her running for an hour, and the CPU temperature stabilised at 35.5°C. Next, I kicked off a version of my standard LLM training run with the number of tokens reduced so that it would run for an hour. During that, the CPU temperature went up to a moderately-toasty 76°C -- not ideal, but remember that with the broken fan, she was running that hot at idle. It seemed a bit odd that it was that hot at 10% CPU usage, but given that one core was running at 100%, it didn't seem totally off. The heatsink and fan are designed for SFF PCs anyway, and those tend to run somewhat hot. The GPU temperature also went up to 70°C and stabilised there, while power draw was stably about 368W out of 370W, and GPU utilisation at 100%. That was particularly pleasing because Nvidia cards throttle at 83°C or so by default, so if I was getting a lower temperature at full power, the fans clearly had some headroom for cooling. Once that was completed, it was time for another full training run for a burn-in. I kicked off my normal run. CPU and GPU temperatures stabilised at the same level as they had with the one-hour test, which was promising, so it was just a question of waiting... ...until I got this: About 40 hours, which is pretty much standard -- certainly the same as I'd expect from . The smoke test: Don't you just love it when your LLM tries to sell you something? 1 But anyway, loss on the test set was 3.548880, which is essentially the same as the same training run on too. So, now is a properly-configured training machine -- one RTX 3090, a CPU that runs a bit hot but at least doesn't do emergency shutdowns, and a case and a PSU with enough space for more GPUs. I think that the next step will be to move on to water cooling. In order to support more than one GPU, I'll need a new motherboard and probably a new CPU, so I don't think there's any point in watercooling the latter, despite its toastiness -- I'd just be buying a waterblock for it that I'd throw away in the not-too-distant future. Instead, I'll get the block for the GPU, and set up a loop to cool just that. Who knows -- maybe I can get rid of that horrendous RGB stuff at the same time! We live in hope. Also, that "expertise and expertise" tiny model smell. ↩ is my daily driver. If he's doing a training run, then everything is just a little bit sluggish as CPU and GPU alike are busy. Although I don't play games often, it's annoying to have the option ruled out for days at a time. While the GPU is busy with a training run, I can't do other experiments in parallel -- for example, to scope out what the next step might be. Small enough to fit in a carry-on bag. I was building the machine in London, and wanted to be able to bring her to Portugal easily, and to be able to bring her back if I wanted to. Portable enough to quickly move around the flat. In the holiday home, the dining room was my study, so I wanted to be able to keep there normally, but move her when we had guests for dinner. Powerful enough to be able to run the games I was playing -- at the time I was a big fan of Assassin's Creed Odyssey , which didn't need a flagship card, but wasn't lightweight either. An AMD Ryzen 5 3600 3.6GHz 6-Core CPU A Noctua NH-L9a-AM4 CPU cooler A Gigabyte X570 I AORUS PRO WIFI Mini ITX Motherboard 32 GiB Corsair Vengeance DDR4 RAM 2x Samsung 970 Evo 500 GB NVMe SSDs A Zotac GTX 1660 Super 6 GiB GPU A Lian Li PC-TU100 Mini ITX case A Corsair SF450 450W SFF PSU An ASRock Phantom Gaming PG-1600G 1600W , which would have power in spades -- an RTX 3090 goes up to about 370W at full draw, so that should hopefully handle three of them plus a CPU without problems even if one or two of the GPUs had power spikes. A Fractal Design North XL . was already in a North (not the XL variant) and I love the case; the XL one looked like a good option if I was going to be cramming more GPUs in there, and had plenty of space for water-cooling. Vocab size: 50257 -- this was fixed because I was using the GPT-2 tokeniser. Context length: down from 1024 to 512 Embedding dimensions: down from 768 to 512 Number of heads: down from 12 to 8 Number of layers: down from 12 to 8 QKV bias: no (different to GPT-2, but the same as my own best local model). Also, that "expertise and expertise" tiny model smell. ↩
The 'Special Value' Pi 4 pictured above is probably the rarest Raspberry Pi I own—even rarer than my blue special edition Pi . A Raspberry Pi reseller briefly listed a special 'value edition' Pi 4 . But the product page 404's now. While it was up, my curiosity got the better of me, and now I have two 'value' Pi 4s. What makes them a 'value'? They're only certified to run at 1.25 GHz (retail Pi 4s run at 1.8 GHz, and can usually be overclocked).
tl;dr: After the long and painful goodbye to my Star Labs StarBook Mk VI AMD , I caved and did what every Linux nerd eventually does, which is buying a ThinkPad . I left Team Red and chose the X1 Carbon Gen 14 Aura Edition with Intel ’s new Panther Lake Core Ultra X7 368H vPro , 32GB of (sadly soldered) RAM and the 2.8K OLED panel. It’s a sub-1kg, repairable carbon-fibre slab that runs Linux beautifully and that I can service (or get serviced) pretty much anywhere on the planet thanks to the widespread availability of parts and service points. Migration consisted of installing the latest Gentoo distribution kernel (to have all necessary modules available), pulling the SSD with my hardened Gentoo installation out of the StarBook , dropping it into the Lenovo , and booting the system. Plus one round of recompiling all packages for the new architecture, but that’s… details. Sadly there’s no Coreboot , the Intel Management Engine is silently plotting in the background, and you’re trusting a closed firmware stack from a vendor with an interesting past . If you’re looking for a fully liberated laptop, this sadly isn’t it. But then again, even in 2026, sadly almost nothing really is . As some of you who suffered through the last two updates already know, the first half of 2026 was, to put it mildly, a hardware massacre . Phones broke, a tablet got preemptively retired, head- and earphones died, and my primary workstation (the Star Labs StarBook Mk VI AMD ) suffered increasing stability issues and finally bricked itself during a firmware update . I wrote at length about why I ultimately decided to part ways with Star Labs , so I won’t rehash all of it here, but the short version is, that with the Star Labs laptop I loved the idea, I loved the design, but I could no longer rely on the hardware, and I needed a device that I could repair no matter where in the world I happen to be. I had been eyeing the ASUS ExpertBook Ultra with the X9 388H for a while, but it remained a paper launch, and after my misadventures trying to source ASUS hardware across the globe, I lost faith in the service and spare-part situation, so I did the boring, sensible, adult thing and bought the laptop that has authorised service centres and spare parts on every continent: A Lenovo ThinkPad X1 Carbon . Wait, weren’t you Team Red? , you might ask. I was, and in spirit I still am. For the better part of a decade I bought almost exclusively AMD. But as I ranted about previously , with AMD laptops it’s always something . The ports, the display, the chassis, the TDP, something always forces a compromise I don’t want to make at this price point. Panther Lake made enough of a splash, performance-per-watt-wise, that I was willing to give Team Blue another shot, despite Intel ’s long history of monopolistic behaviour, security holes and general d!ckhead-ish behaviour. And to be fair, AMD’s behaviour isn’t much better these days anyway . The ThinkPad X1 Carbon Gen 14 Aura Edition is Lenovo ’s 2026 flagship ultrabook. It’s the fourteenth iteration of a line that, at this point, basically is the archetype of the “business ultrabook” . The “Aura Edition” branding is an Intel co-marketing thing, and the single X7 sticker went straight into the bin. Speaking of which, yes, it’s going to get stickerbombed , but that’ll take some time. The interesting part however is not the age-old ThinkPad aesthetic, but what lies underneath, namely a brand-new Panther Lake chip, a redesigned repairable chassis, and crucially proper Linux support straight from the manufacturer. My specific configuration is the one I’ll be reviewing here, but keep in mind that Lenovo sells this chassis in a dozen permutations. These figures reflect my specific machine type ( ) and the official platform specs come from Lenovo’s PSREF spec sheet . Speaking of which, on Linux you can read the model, marketing name and serial straight from the DMI tables (handy for a PSREF lookup), and pull a broader hardware overview with / : The star of the show is Intel ’s Core Ultra X7 368H vPro , part of the Panther Lake generation. After years of Intel embarrassing itself, this is the most interesting mobile chip the company has shipped in a long while, and the first one in ages that made me, a committed AMD user, go back to Team Blue . It’s a 16-core, 16-thread unit, and no, there’s no HyperThreading here. The cores break down into: It carries 12.5MB of L2 and 18MB of L3 ( Smart Cache , shared), and Intel rates it at a 25W base (PL1) with an 80W maximum turbo (PL2). Lenovo configures it for roughly 30W sustained in this chassis, which is a step up from the ~17-20W that last year’s Lunar Lake Gen 13 ran at. What makes Panther Lake architecturally interesting is that it’s a disaggregated, multi-process design. The compute tile is built on Intel ’s own 18A node, while the GPU tile is fabbed by TSMC on N3E . Note: The X1 Carbon Gen 14 is offered “up to” the X7 368H , and only the X7 tier gets the 12-core Arc B390 iGPU. Every cheaper Core Ultra 5 / 7 option makes do with Intel ’s weaker standard integrated graphics. That GPU split is the whole reason I went for the X7, as it is, in my opinion, the only configuration worth buying, if you care about graphics at all. In Geekbench 6 the 368H lands at around 2,870 single-core and somewhere between 16,422 , 16,885 and 17,318 multi-core. These (along with the graphics and AI numbers below) were captured on a *cough* factory *cough* Windows 11 install on its 256GB SSD. For context, XDA measured the mid-tier Core Ultra 7 355 review unit at 2,610 / 11,263 in Geekbench 6 . And for comparison, my Star Labs StarBook Mk VI AMD scores 1,906 / 6,245 in Geekbench 6 , with an OpenCL score of 13,051 and a Vulkan score of 11,932 . Note: Despite having set the power setting on Windows 11 to Performance , the Geekbench report still lists the Power Plan as Balanced . For my purposes, however, the more relevant metric is real-world responsiveness, and the chip is quick . Cold-compiling ungoogled-chromium on Gentoo, juggling a few dozen terminal panes, a couple of browsers and the usual pile of background daemons and it still doesn’t break a sweat. On the StarBook would normally report something between 12 to 48 hours for ungoogled-chromium , depending on how many pre-compiled system libraries the specific release would be able to utilize without errors. On the X1 that number more than halved, with the average runtime being well below six hours. Here are the exact timings for a couple of the usual heavyweights, on the StarBook versus the X1 : The integrated GPU is Intel ’s new Arc B390 with 12 Xe3 cores clocked up to ~2.5 GHz, with hardware ray tracing included. The Xe3 iGPU scores 56,930 in Geekbench 6 ’s OpenCL test , and between 49,213 and 63,874 in Vulkan , which puts it roughly in the territory of a discrete desktop GeForce RTX 3050 . Unlike NVIDIA ’s hardware, however, the B390 is still backed by open-source, in-tree drivers. I’m not much of a gamer, but for the curious, here’s how a handful of titles fare on the B390 : So nothing that’ll trouble a discrete GPU, but for an iGPU in a sub-1kg ultrabook, playable frame rates in actual games at sensible settings is more than I’d ever have asked of integrated graphics a couple of generations ago. What surprised me the most out of all of this was the Cyberpunk 2077 result, since I would never have expected an iGPU sitting inside a lightweight ultrabook to hold somewhere between 40 and 60 fps at Ultra settings and a 1920x1200 resolution in what is still one of the most punishing games you can throw at a machine, and yet it does exactly that, with the frame rate only ever falling off a cliff the very moment I enabled one of the ray-traced lighting presets. The curious part, however, is that this drop isn’t a case of the hardware lacking the feature altogether, because the Arc B390 actually ships with native hardware ray tracing , carrying one dedicated ray-tracing unit per Xe3 core, so twelve RTUs in total. The question is whether the silicon can be fed fast enough to do ray tracing at a frame rate worth having, and the answer seems to be “nope” . Ray tracing, and BVH traversal in particular, generates an enormous amount of scattered, incoherent memory accesses, and unlike a discrete card that gets to service all those random reads out of its own dedicated, high-bandwidth GDDR , an iGPU like the B390 has no VRAM of its own and instead shares the very same LPDDR5x pool as the CPU, which leaves it to contend for a fraction of the bandwidth that a proper GPU would have. And once you throw in the fact that a dozen RTUs is a tiny number next to the many dozens you’d find on a discrete Arc , Radeon or GeForce , as well as the shared ~30W power budget that the GPU has to split with the rest of the SoC , ray tracing ends up being the one workload in which the gap between this little chip and an actual graphics card still shows. None of that really bothers me, though, since ray tracing on an iGPU was always going to be more of a party trick than something I’d lean on day to day, and for the rare occasions on which I actually do need that sort of horsepower , I can always just hang an external GPU off one of the Thunderbolt ports somewhere down the line. This appears to be a route that, judging by the various reports of people running eGPUs over Thunderbolt on previous X1 Carbon generations under Linux, all the way from a relatively tame Akitio Node with an NVIDIA card on a Gen 5 to a frankly unhinged dual- RTX 3090 contraption hanging off a Gen 9 running Fedora , appears to work well enough in practice. And while a fair share of those write-ups inevitably involve someone making their peace with NVIDIA ’s proprietary driver, that’s precisely the part I’d happily skip, because the far more appealing option for me would be to pair the laptop with one of the Radeon cards I already own (such as the RX 6700 XT that currently lives inside my other computer ). Thanks to the open, in-tree driver there’s no out-of-tree blob to wrangle in the first place, native kernel-level Thunderbolt hotplug is simply there , and on Wayland in particular, which is what my Sway setup runs on, the whole thing sidesteps the old X.Org gymnastics entirely. But it remains to be seen how good/reliable a setup like that can work. The Ollama version used here is and it was compiled using . The Vulkan version is and Mesa . Here are the results of the LLM benchmark : According to the results , the Ultra X7 appears to perform similarly to e.g. the AMD Ryzen 9 7900 12-Core Processor , the AMD Ryzen AI 7 350 with Radeon 860M , the 12th Gen Intel Core i9-12900H , and the AMD Ryzen 7 7700X 8-Core for the DeepSeek R1 8b model. Anyway, there’s also an NPU rated at 50 TOPS, which I still need to test. Here’s the first gripe with the Lenovo , which is the RAM. Sadly my model only comes with 32GB of LPDDR5x-8533 memory, and it’s soldered. On the X7 the memory should be able to run at the full 9600 MT/s, but for whatever reason Lenovo decided that, unless you’re willing to add another $1,000 on top, you’ll only be getting the “slower” RAM. And while the SoC theoretically supports up to 96GB, Lenovo will only sell you a maximum of 64GB. Swallowing a non-upgradeable 32GB config stung, especially in the current “AI” -driven hardware climate , in which most people (including myself) are looking at prolonged lifespans for their hardware. I gambled on 32GB being enough for a terminal-centric workflow for the foreseeable future, and so far it is, but I’d be lying if I said I was okay with not being able to change my mind later. Storage-wise the machine shipped with a bare-minimum 256GB M.2 2280 TLC Opal self-encrypting drive, which I promptly removed. The slot itself is PCIe Gen5 with sequential reads near 12,850 MB/s (with a Gen5 drive in it), but it only supports single-sided 2280 drives. Luckily my 2TB SK hynix Gold P31 ( ), which had been living in the StarBook since I upgraded it , is exactly that, so it dropped straight in. Yes, the P31 is only a Gen3 drive in a Gen5 slot, but it goes without saying that SSD pricing these days is absolute nonsense. Also, while the Opal self-encrypting drives are cool and all, I run my own full-disk encryption with rather than relying on the drive’s implementation. The 2TB I already owned is plenty, and I do not care that much about sequential SSD benchmarks that I’m unlikely to ever notice in practice. The 2.8K OLED panel is, frankly, the nicest display I’ve had on a laptop. It’s a 14", 16:10, 2880x1800 OLED running at 120Hz with variable refresh (it’ll drop as low as ~30Hz to save power), rated at 500 nits SDR and covering 100% of DCI-P3 . It also carries an HDR 500 True Black certification worth precisely nothing to me on Linux, but there it is. In proper ThinkPad fashion, the hinge lets the lid lay completely flat, which is something that my initial candidate, the ASUS ExpertBook Ultra , would not have been able to do. Critically for me, Lenovo ships it with an anti-reflective and anti-smudge coating, which means it’s matte enough to actually use in various lighting conditions. Coming from the StarBook ’s perfectly-fine-but-unremarkable 1080p IPS panel, the jump to a high-refresh OLED is the kind of upgrade you don’t think you need until you have it. Blacks are black, like, really black and text is razor-sharp, and at 120Hz animations are buttery smooth. My only real reservation is the usual OLED burn-in over a multi-year ownership period, especially with things like a Waybar that’s always there, not moving and barely changing any of the text it displays. I might need to tweak that part of my setup long-term. If there’s one thing one might complain about it’s the brightness ceiling. The panel tops out at 500 nits, which, for today’s standards is not a lot . However, personally I find the display bright enough and I tend to run it at around 50% brightness throughout the day while indoors, which visually is equal to the StarBook ’s display running at almost 100% brightness. As an added bonus, the OLED PWM dimming runs at a far higher frequency than older panels, so those of us sensitive to flicker can stare at it all day without the headache. The port selection is great, especially compared to the StarBook : Wireless duties are handled by an Intel BE211 Wi-Fi 7 card with Bluetooth 5.4, and my unit also has NFC because yolo . Lenovo additionally offers an optional 5G WWAN modem with a nano-SIM slot, which I skipped, because I’d rather use my dedicated router , and because Linux support doesn’t seem to be quite there yet anyway. The Intel WLAN card, on the other hand, is supported out of the box by the in-tree driver under Linux. The webcam is a 10MP RGB + IR module (with ImmerVision wide-FOV optics), a Time-of-Flight sensor for presence detection, and, most importantly, a physical ThinkShutter a.k.a. a way to physically cover it without the use of dot-stickers, which is a very welcome feature. The IR camera is there for Windows Hello , which is useless to me, but the -on-IR crowd will appreciate it. On my specific model (with the OLED display) the webcam has not been working , as of the time of writing this post. As for the keyboard, the following will probably earn me some a lot of hate, and while I agree that compared to every other laptop keyboard the ThinkPad ’s integrated one is a masterpiece with 1.5mm of travel, slightly concave keycaps, a sane arrow-key layout, spill resistance, and two backlight levels plus an auto mode, … I frankly still prefer typing on my own keyboard Sonshi-style . But yeah, don’t worry, if you’re the type of person that exclusively uses the ThinkPad ’s keyboard then you will be happy to hear that it’s a solid integrated keyboard, still. Also, don’t ever talk to me about keyboards. Note: Two Gen 14 tweaks that are worth mentioning are the key legends, which are now centred and spelled out in full ( “Backspace” rather than a glyph), and the power button, that has migrated into the top-right of the keyboard deck with the fingerprint reader built into it, right next to the longish Delete key. The red TrackPoint nub, however, is still superior to every touchpad I have ever operated (including the integrated one) and I’m happy that Lenovo is still holding on to it. One buying tip that I’m glad I caught beforehand concerns the touchpad configuration. Lenovo offers two different touchpads on the X1 Carbon , the good old regular touchpad with actual buttons on its upper border, and a haptic ForcePad , which technically seems to be the sleeker one. However, choosing it will cost you the discrete physical TrackPoint buttons that only the regular touchpad brings. If, like me, you actually plan to use the nub, the plain mechanical “diving board” pad keeps those buttons, and that’s the one I went for. Lastly, audio finally comes from a stereo system that the Space Frame now fires upward through the keyboard deck rather than down at the desk. It’s startlingly loud for a 14" laptop, though it’s still laptop audio, so better get headphones. That said, these sound like Bowers & Wilkins 603s in comparison to the bad speakers on the StarBook . This is one of the main reasons I picked the X1 Carbon over its alternatives. For Gen 14 , Lenovo completely redesigned the internals around what they call a Space Frame , which is a structural redesign that lets them mount components on both sides of the mainboard, shrink the internal footprint, and fit a 70% larger fan for better sustained performance. Materially it remains the classic X1 Carbon composition however. The device has a carbon-fibre lid over a magnesium (and aluminium) body, rated to MIL-STD-810H and starting at 0.977kg, which is absurdly light for a 14" machine. Lenovo did let it grow in one dimension though, as the Carbon is now a gentle wedge of roughly 7.7mm at the front to 17.6mm at the back. The 14th iteration is hence a notch chunkier toward the rear than the near-uniform Gen 13 , which is a deliberate trade to make room for the bigger fans. The footprint is otherwise unchanged, so existing sleeves will probably still fit. The soft matte finish feels great, but I will stickerbomb it nevertheless, in an effort to camouflage my workstation as a somewhat unhinged comic book that nobody in their right mind would ever try to steal. Going back to the Space Frame design, for someone whose past year has been defined by hardware failures, the Lenovo is ultimately a properly and easily repairable device, thanks to its new build. iFixit gave it a 9/10, all while, for context, the MacBook Pro 14" only scored a 4/10. And frankly on the X1 the score seems well-deserved. To get into the Space Frame you undo four screws, and the bottom comes off. The keyboard deck then lifts away magnetically, without the need for any tools. The battery comes out with a few screws and a connector that releases itself, while the SSD, the fans, the I/O ports and even the display assembly are all individually serviceable. Lenovo even publishes step-by-step repair videos with photos and difficulty ratings for each repair. After the StarBook saga, which ended with me hunting down a CH341A programmer and having to reach out to Star Labs directly to un-brick the thing, this properly documented Lego-brick serviceability, that actually has a replacement-parts market online and offline, is exactly what I wanted. The battery is a 58Wh cell that is barely up from the Gen 13 ’s 57Wh, as Lenovo is seemingly leaning on Panther Lake ’s efficiency rather than on capacity, and this is probably my second-biggest gripe. While it appears that in looping-video tests reviewers got anywhere from 9.5 to 14 hours (depending on configuration and brightness) my realistic mixed working day in browsers and terminals lands around 6 to 7 hours. The moment I’m starting to compile things, however, this figure takes a nosedive to something closer to 2 to 3 hours. 58Wh is definitely on the small side for a 2026 flagship. However, with higher-density battery cells becoming available, an added lightweight power bank could be a viable compromise for days on which the integrated battery won’t last long enough, while still accounting for a total weight below that of your regular T14 . Lenovo bundles a relatively compact 65W USB-C brick that rapid-charges the cell to 80% in about an hour, and because it’s bog-standard USB-C PD, any charger or a dock pushing >60W will run it at full performance. “You wanted repairable and Linux-friendly, why not a Framework?” , I hear you asking. It’s a fair question, and generally I would like the idea behind Framework ’s computers to succeed. I would like to see a future in which you can put together your laptop the same way you do your standard ITX build. I would love to see independent manufacturers producing parts for laptops like the Framework , that would allow you to, I don’t know, replace the default keyboard with an HHKB variant, or that would make it possible to pick which processor, which RAM and which GPU you’d like to have in your device. And while Framework kind of built this “ecosystem” for themselves, six years into their saga the third-party components are still nowhere to be found, with a handful of exceptions which, however, are clearly driven by Framework (think the Cooler Master case or the DeepComputing RISC-V mainboard). I don’t mean to rain on anyone’s parade here, but unless the ecosystem broadens significantly, so that users can find third-party expansion cards, and mainboards, and keyboards, and macropads, and graphics modules, and are not dependent solely on Framework (a company that might at some point enshittify ), I don’t quite see the point of putting up with a device that is significantly bulkier, has had an inferior build quality and comes with its fair share of issues . However, none of this would have been a true deal-breaker for me, if it wasn’t for Framework supporting a seventh-grade computer science project over actual Linux distributions, which cooled my enthusiasm considerably. Because let’s be real, when comparing purely the hardware itself, the new Framework Laptop 13 Pro seems like a legitimately good machine, despite its soulless Apple -esque aesthetic. The X7 Panther Lake option that comes with a modular LPCAMM2 RAM definitely beats Lenovo ’s soldered memory outright, and the brighter 700-nit display might also work better than the X1 in outdoor environments, despite it not being as beautiful to look at as Lenovo ’s OLED. Lastly, the 74Wh battery of the Framework packs significantly more juice into the 13 Pro , which is definitely a plus over the lightweight 58Wh of the X1 Carbon . Apart from that, however, I’d like to think that the build quality and specifically the weight-to-power ratio of the Gen 14 Lenovo remains superior to the Framework Laptop 13 Pro . And yes, this is subjective, but the X1 Carbon is simply the nicer device when compared to the Framework , with its expansion-card slots, visible seams and sort-of makeshift aesthetic. The ThinkPad , with its clean lines and total absence of visual clutter looks and feels like a finished, more premium product. And with around 400g less in weight than the Framework 13 Pro , which also happens to be noticeably thicker, the X1 is more of the type of device that I don’t mind carrying around . Now, as for Linux compatibility, it turns out that Panther Lake is, somewhat surprisingly, in excellent shape on Linux. Phoronix ran the X7 358H through around 300 benchmarks on Ubuntu 26.04 with the Linux 6.19 kernel and found it already “in very good shape for both performance and power efficiency, exceeding expectations […] relative to prior generation Intel laptop processors as well as the AMD Strix Point competition” . For a brand-new architecture, that is about as good a verdict as you can hope for, and it matches my experience with the newer 7.x kernels. A few things that I’ve stumbled upon during my first few weeks with the Lenovo that still need to be sorted out are … For anyone considering this machine for Linux, you’ll want a recent Kernel version. Panther Lake support landed and matured around Linux 6.19 / 7.x, so don’t try to run this on some ancient eNtErPrIsE LTS kernel and expect the Xe3 graphics or power management to behave. Speaking of which, the Xe3 iGPU uses the modern DRM driver and the Intel Mesa stack. On Wayland/Sway it’s been almost flawless and does everything, from hardware acceleration, to external displays. The actual switch from the StarBook to the ThinkPad was almost painless, which is the highest praise I can give it. With the hardened Gentoo that I’m running the “migration” consisted of basically 1. taking the SK hynix P31 out of the StarBook , 2. putting it into the ThinkPad , 3. and booting (and 4. recompiling the whole system *cough* ). The one sensible precaution I took was switching from my hand-rolled, hardware-specific kernel to Gentoo’s pre-built binary kernel on the latest Linux 7.x series for the move. A distribution kernel ships with essentially every important driver, so it doesn’t care that it suddenly woke up on completely different silicon. Once I’d confirmed everything worked, I could go back to trimming the kernel down at my leisure. My Sway/Wayland setup , my dotfiles and my entire terminal-centric workflow are deliberately system-agnostic , so beyond the kernel swap there was almost nothing to reconfigure. Where it did take a little while, though, was the rebuild. My system had been optimised for Zen 3 (the StarBook ’s Ryzen ) which means the entire thing had been compiled with . So I changed the flag to suit the new Panther Lake and rebuilt the whole system from scratch with the usual command, which amounted to somewhere around 1600 packages churning through the compiler before everything was once again native to the hardware it was actually running on. Note: The system ran just fine on the Panther Lake , despite having been compiled with Zen 3 architecture optimizations, with the exception of browsers ( Ungoogled Chromium , LibreWolf ). Those would suffer from crashing tabs all the time, with a corresponding in . However, it is nevertheless a good idea to rebuild the whole system, rather than only the obviously affected packages, to avoid any surprises down the road. On top of that there were some hardware-specific bits to sort out. I had to install additional firmware ( , ), and I had to migrate from to in for packages like and to use the Intel hardware, and I also needed the package. Now for the part that, as a privacy-focused user, is pretty bad. The X1 Carbon Gen 14 runs Lenovo ’s proprietary UEFI firmware, and the Intel Management Engine is present and active. There is no Coreboot port for this machine, and there almost certainly never will be. This was, hands down, the hardest pill to swallow. One of the few things the StarBook promised (even if Star Labs took actual years to ship the first version for AMD) was an eventual Coreboot path. On the Lenovo , however, you are trusting a closed firmware blob and a processor with a co-processor, engineered by a company that is partially owned by the US government , that you cannot audit, sitting below your operating system, with its own network-capable stack, that was built by a Chinese company . Lenovo specifically does not have a spotless record here. This is the company that shipped the Superfish adware with a self-signed root CA that actively broke TLS on consumer machines in 2015, and that same year was caught using the Lenovo Service Engine firmware mechanism (via Windows' WPBT ) to silently reinstall software from the BIOS. To be fair, both of those scandals hit the consumer IdeaPad / Yoga lines rather than the business ThinkPads , and they’re a decade old, but they’re a reminder of what this vendor can do when seemingly nobody’s watching. Of course this is not unique to Lenovo and the exact same IME -and-no- Coreboot reality applies to that Framework I was just comparing it to, to the ASUS I was chasing, and to essentially every modern x86 laptop you can actually buy and use as a daily driver in 2026. There is no liberated, Coreboot -running, ME -less machine with a current CPU, a 2.8K OLED and worldwide service. You either run a decade-old ThinkPad as a matter of principle, or you make peace with the fact that the firmware layer is a compromise and that you simply cannot guarantee to not be compromised . If a fully open firmware stack is a hard requirement for you, then this laptop, like nearly all of its contemporaries, will disappoint you, and it’ll likely not be for you. None of this is cheap, and the ongoing hardware crisis hasn’t helped. Pricing starts at around $2,000 for a Core Ultra 5 with the FHD IPS panel, a configuration like mine lands well above that, with maxed-out units sailing confidently past the $3,000-mark. I was lucky to get a good deal (relatively speaking) on my specific device, but ultimately paying top money for a 32GB, soldered-RAM machine still stings. However, as I explained , after the year I’ve had, reliability and serviceability were worth the premium to me. The ThinkPad X1 Carbon Gen 14 Aura Edition is not the laptop I would buy in a perfect world. In a perfect world I would get something with user-replaceable RAM, a bigger battery and an open firmware stack with no Management Engine lurking beneath it. All of that ideally designed and at least partially manufactured by a European company that could potentially tip the global scales away from the US/China duopoly. But we don’t live in that world, and given the options that actually exist, this is the most sensible machine that would fit my life right now. It’s astonishingly light, the OLED is gorgeous, Panther Lake is fast and efficient on Linux, the Space Frame makes it repairable, and there’s an authorised service centre for it on every continent I’m likely to find myself on. After the year of hardware attrition I’ve had, boring reliability and serviceability anywhere turned out to be the features I valued most. If the StarBook was the dreamy choice, that dream ended in continuous glitches and ultimately a CH341A programmer . This is now the pragmatic choice where the Lenovo is the tool that just works and it (hopefully) continues to do so for the foreseeable future. PS: Make sure to check future updates if you’re interested about the long-term experience with the Lenovo X1 Carbon . 4x Cougar Cove performance cores, up to 5.0 GHz 8x Darkmont efficiency cores, up to 3.8 GHz 4x Darkmont low-power efficiency cores, up to 3.6 GHz 3x Thunderbolt 4 (USB-C), with at least one on each side, so I can charge or dock from whichever side the cable lands on 1x USB-A (5Gbps), always-on so it’ll charge a device with the lid shut, although it’ll probably continue to permanently host my YubiKey 1x HDMI 2.1 1x 3.5mm headphone/microphone combo jack, although I’d wish it would be on the right side rather than the left … as mentioned before, the webcam that doesn’t seem to work yet and that reports as follows in : … some issue with the UCSI power supply code, which is reported in as follows: … some GPU engine resets every once in a while, reported as: … an audio issue where there’s a ton of noise over the 3.5mm jack as soon as any sound plays, but which instantly stops when the audio stops. I cross-tested this under Windows 11 and experienced the exact same effect, so maybe it’s not at all a Linux issue, but more like a hardware or firmware issue. Luckily, I can work around this issue by using my DAC or my audio interface .
Accelerating Stream Processing Engines via Hardware Offloading Zhengyan Guo, Mingxing Zhang, Yingdi Shan, Kang Chen, Jinlei Jiang, and Yongwei Wu SIGMOD'26 This paper describes a trick to offload partitioning from CPU to NIC via clever use of RSS. The context of the paper is distributed systems for processing streaming queries, but the trick seems applicable to databases in general. Hash partitioning is a common divide-and-conquer technique to implement joins and aggregations. Here are some posts about papers that use this partitioning: SPID-Join: Skew-Resistant In-DIMM Joins Breaking Through the Memory Wall of OLTP Systems with PIM High-Performance Query Processing with NVMe Arrays: Spilling without Killing Performance Efficiently Processing Joins and Grouped Aggregations on GPUs RSS is a NIC feature whereby the NIC hashes select fields from incoming packet headers and uses the result to determine which CPU core to send the packet to. This enables efficient load balancing across CPU cores without reordering packets within a given flow (i.e., connection). Here is a previous post describing a clever way to extract more value out of RSS in cloud VMs: Enabling Fast Networking in the Public Cloud If you have many nodes cooperating to process a query, then the hash partitioning may span many nodes. For example, node A could hash the join/aggregation key of each row and then forward the row to either node B, C, or D, E depending on the hash value. This enables the join/aggregation work to be split across nodes B, C, D, and E. This is all fine and dandy from the perspective of node A. However, nodes B, C, D, and E likely have multiple CPU cores. How can one of these nodes execute their join/aggregation in parallel? The answer is recursive: partition the incoming rows again (using a different hash function) and have each CPU core process one of these smaller partitions. The paper focuses on the cost of partitioning the dataset, which can cost just as much as the partition join/aggregation step that follows it. The key insight is that the partition algorithm looks a lot like the RSS load balancing algorithm present in the NIC hardware. Here is the punchline: establish multiple network connections (using different ports) between node A and each of nodes B, C, D, and E. When node A partitions rows, it determines a specific connection (not node) to send each row to. This doesn’t improve performance at the sender, but it dramatically helps the receivers. Each receiver configures RSS such that all connections are spread across the CPU cores on the receiver. The NIC then distributes received packets to the appropriate CPU cores without any partitioning work on the receiving nodes. The one downside to this approach is load imbalances that occur due to data skew. If some join/aggregation keys are more common than others, then some CPU cores may be assigned more work than others. The paper proposes to dynamically monitor load imbalance at each receiver and reconfigure the RSS settings of the NIC to move connections off hot cores. Section 5 of the paper describes synchronization necessary to move a connection between cores in the middle of the query. This is a good mitigation, but as we’ve seen in this paper , RSS configuration is not uniformly exposed on cloud VMs. Fig. 8 has performance results across a number of benchmarks: Source: https://dl.acm.org/doi/10.1145/3769754 Dangling Pointers The solution is great, but asymmetric. I wonder if there is a way to get similar benefits on at the sending node (send side scaling)? Thanks for reading Dangling Pointers! Subscribe for free to receive new posts.
Building your own keyboard is a rite of passage for those caught up in the ergonomic rabbit hole. So, it was only a matter of time before I went all the way and did so. However, as a complete noob when it comes to soldering, I had a rough time getting started. I hope that this brief guide saves you hours of anguish! After procuring all the parts required for our keyboards, my friend and I proceeded to get absolutely nowhere with our soldering. Little did we know that the tip of my usb C iron (TS80p) was oxidized. We thought it was because the iron wasn’t getting hot enough or staying at a consistent temperature, and I promptly went to buy a Weller soldering station (which I would also not recommend, reasons to follow). I also promptly oxidized the tip on this machine as the sponge they give you in the kit is a travesty and you should not do that. The very first thing I would say that would have saved me much anguish is not using a wet sponge. The fact that many soldering stations ship with one instead of what you should be using (a brass sponge/wire) is a head scratcher. Water (if not using de-ionized water) will very quickly oxidize a soldering iron tip, and the temperature difference (ambient room temperature vs 350-400C) is enough to actually cause the iron tip to crack over time. Use brass wool. No water. Get this thing and use it instead. The second thing I would recommend is to use flux when you are soldering. And, not liquid flux, but something a little tackier that won’t immediately vaporise when you hit it with your iron. The reason that I had no luck was that the tip of my iron was not tinned, and that is how you “dry out” your iron very quickly, causing black/grey oxidation to build up. So, tin the iron when you first turn your iron on AND AGAIN BEFORE YOU PUT IT AWAY. The consensus on the internet about soldering temperature is to keep the iron just above the melting point. When your tip is oxidized, you have to bump to 400 degrees C or higher (some usb irons max out at 400) and as such you will be having one hell of a time to get solder to melt. I use lead-free solder, so I shoot for around 360 C give or take. Many will say leaded solder is more forgiving and it very well may be, I just don’t have experience to compare. The TS80p is a pluggable tip with a 3.5mm TRRS jack. The Weller WE1010 station has a heating element that I will call “legacy” - it does not go all the way to the tip of the iron, and the thermometer is located away from the tip, giving wildly inaccurate temperature readings. In addition to the previous point, the iron stays heated at a certain temperature with no auto down-regulation (they’ll shutoff after 1-2 minutes if you have it in settings). So oxidization is more likely on a traditional iron. What you want is a JBC C245 or C210 compatible iron or clone station. You don’t have to buy the authentic tips, and there are videos online of the cloned tips from Aliexpress actually being just as good (or better!) than the authentic tips. I thought about getting a full station, but instead got a capable USB C iron that seems to very much hold up to the wired stations. It’s only 100W, with many stations being 220W - so take that with a grain of salt, but for a keyboard or two, it has held up just fine. I may consider a TC22 or Fnirsi D200 station in the future, but will cross that bridge when we get there. If you are interested in the iron I am using, it is the Fnirsi HS-02 . Most irons will ship with a conical tip. These are trash and put heat at a very small point. I recommend a knife/chisel tip as you can then manipulate the tip and have greater or lesser heat transfer with the rotation of your wrist. You probably don’t want to be breathing in soldering fumes, so get yourself a cheap desk fan to blow the fumes away from you. For hobby projects, a fume extractor is probably not necessary, but you can go all out on this and build your own if you so wish . I cannot have a soldering tip post without the classic Louis Rossmann meme : “HEAT THE BOARD!” I didn’t have issues with this as I remember the above, but when first starting, some think that soldering is about heating and applying solder. It is not. It is about heating the components to the point they will accept solder. This makes a massive difference. The more people that learn to solder, the more we can fight for repairability, and you start to see that no board is actually dead, it probably just needs a new chip somewhere. The “literacy” that comes with soldering and the ability to repair electronics can take you from a consumer to someone that actually understands the underlying mechanisms. As always, God bless, and until next time. If you enjoyed this post, consider Supporting my work , Checking out my book , Working with me , or sending me an Email to tell me what you think.
I’ve been thoroughly enjoying my new iPad , it’s pretty much replaced my personal laptop in my day-to-day. Surprisingly it’s also replaced my need for a desktop computer. Through the use of my USB-C dock and Apple wireless keyboard/trackpad, this little iPad works perfectly as a desktop machine. It drives my 32” Ultrawide perfectly, and the windowed multi-tasking is excellent. It can even use my webcam! The only downside I’ve really run into is my monitor is pretty old, so the refresh rate is much lower than the iPad making my mouse feel laggy when moving between the two.
From Nilay Patel, a recommendation for the best printer of 2023 : Here’s the best printer in 2023: the Brother laser printer that everyone has. Stop thinking about it and just buy one. It will be fine! The Brother whatever-it-is will print return labels for online shopping, never run out of toner, and generally be a printer instead of the physical instantiation of a business model. […] I am telling you to just buy whatever Brother laser printer is on sale and never think about printers again. Patel did the same in 2024 and 2025 – you should check them all out if you want to smile, because they’re genuinely funny, as are some of the comments: I’ve been using one of these for 6 years. The low toner indicator came on about 7 months ago. I bought new toner. Reader, I haven’t replaced anything. It still prints fine, the new toner is still sitting on a shelf somewhere. Least frustrating printer I’ve ever owned. Would buy again. I’m sharing these on this ostensibly software-related blog not only because printer enshittification happens primarily via software . I wanted to share it also because this feels very similar to me to the post about TextEdit – a simple and deserved desire to own technology that works without any strange machinations, forced updates, and stress. #enshittification #hardware
The last post about the Nothing Phone not buffering its button presses reminded me of something. Here’s IBM Selectric, a 1961 typewriter: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/1.1600w.avif" type="image/avif"> Past decades get compressed into a singular point in time, so we might all think of Selectric as “yet another old typewriter,” and I definitely did before learning about it. But the Selectric came 80 years after the first typewriters, and it packed so much user-benefitting innovation it really was an iPhone of its time. (Alas, I don’t believe there was a matching “are you getting it?!” keynote.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/2.1600w.avif" type="image/avif"> Selectric was, honestly, a triumph of engineering. It popularized swappable typewriter fonts , showcased good industrial design, enabled jam-free typing, and even invented – although that came a decade after its introduction – an actual destructive Backspace . Crucially, on day one, its typing experience was so fantastic that many of the keys on keyboards we’re using 60 years later are still in the same place Selectric put them. What’s even more impressive? Selectric was purely electromechanical . It had no software, no chips, and no electronics. Everything it has accomplished was expressed in the mechanical language of steel, grease, links, and levers. Here’s one problem that’s trivial in software, but hard in hardware: How do you prevent people from pressing two keys at the same time? This is a thing that plagued typewriters since day one, and IBM’s engineers came up with a smart solution: each key was connected to a bar (interposer), each bar had a little protruding notch (lug), and that notch would smoothly dip into a little horizontal row of steel balls (selector compensator tube). = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/3.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/4.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/balls-practically-to-the-wall/5.1600w.avif" type="image/avif"> The balls had just enough wiggle room for one notch, so if you tried to press a second key at the same time, the balls would now be packed tight, there would be no room to accommodate the second notch, and the key press would be blocked. I thought that was really clever, but it was even more clever than that. If you read my essay , you know it starts with the very notion that fingers overlap: as one is going up, often another one is already pressing down. If you were to block any second press before the first press was completely done, you wouldn’t be able to type very fast – and Selectric was meant to be a professional typing tool. Here’s where the choice of the carefully sized and arranged steel balls came into play. In practice, the second press was not completely blocked. The lug was able to slide just a little bit in between the adjacent steel balls. It was a half press – or, effectively, a half-character buffer . It was all fine-tuned just enough to not impede overlapping typing, while still offering protection from two keys at the same time. Now, if Selectric did this, in a universe where creating even a half-character buffer meant a little row of carefully machined steel balls, and added weight, and anticipating future wear and tear, and multiple pages in the maintenance manuals… what’s your excuse? #hardware #history #keyboard
I’ve been very happy with my Y1 MP3 player over the past 9 or so months. I take it with me everywhere! It’s a companion on my commute, it’s a focus tool in my open office, it’s a way to have a single-purpose device that doesn’t have the distractions of my glass Everything Rectangle and, as the phone ages, a way to mitigate its now-horrible battery life by using a different device with a different battery. As God confounded the language and scattered the people building the tower of Babel, I have confounded the functionality and scattered the responsibilities of the apps on my iPhone. My wife brought up a point that is completely fair: why am I using this $60 piece of crap when she, through great sacrifice, bought me a top-of-the-line iPod Classic 160GB for the same purpose? Sure, that was in 2012, but it was expensive . It’s still worth $350+ today, right? So what the hell, I dug it out of my Closet of Cables and Mystery. Plugged it in. Battery charged. It booted. My music was still in it, last addition to the library wa 2014. Fantastic! I bought a protective case, some new 30-pin USB cables because the ones I had remaining were all frayed and kind of scary, and I got ready to swap the Y1 with the iPod for a while as an experiment. Then my first hurdle: I wanted to add some songs to it. I know Rhythmbox , my player of choice 1 , has an iPod plugin on its list of installed plugins. I plug the iPod in, it shows up! Hooray! I try to drag music onto it: no dice. Checking I see some very threatening notices that HFS+ with journaling is not supported by Linux at all . So I know on Mac it’s a simple command line call to turn journaling off on a volume so it’s probably a trivial process, but I have no working personal Apple desktop machines. Have no fear: I found a chunk of unvetted C that directly alters the raw filesystem to do it for me on Linux! Boom! We’re in business! Back to Rhythmbox. Drag the music I want over to the iPod. It copies! Bingo! Only: no bingo! I disconnect the iPod and it says ’no music.’ The music is on the device, but the iPod’s music database got clobbered. Well crap. So now I know Gtkpod is purpose built for this. Apparently the iPod Rhythmbox plugin isn’t any good on these models, so let’s try that. No dice. It repeatedly hangs, crashes, and when it does work it still fails to correctly update the database. Still ’no music.' Maybe this is all because it’s still HFS+ and not FAT? It seems like most tools assume you’ve liberated your iPod and you’re using it in Windows mode, not Mac mode. So I attempt to wipe the drive, but can’t for the life of me figure out how to do it correctly with Gtkpod or just plain old partitioning tools. Looks like I need to restore the hardware from iTunes for this route. What about Rockbox ? I use it on my Y1. The annoying thing is that I have to manually update the database on the actual device, whereas the typical iTunes stock experience is one that updates the database iteratively as a matter of course of adding music. But the trade-off is no more struggling with Gtkpod and friends, which is higher friction than the drag-and-drop experience of putting music on my Y1 anyway. And I saw this totally cool skin on Reddit I want to try ! I already have the Rockbox utility on my machine from installing it onto my Y1. It sees my iPod but dies on an SSL handshake talking to rockbox.org while downloading resources. I don’t remember this happening last time I ran this. I downloaded and ran the utility on another Linux machine and got the same result. I gave up about 45 minutes into building the tool myself from source. Now I need a Windows machine to use iTunes in Windows to reformat the iPod. I have a debloated Win11 VM in Gnome Boxes, I fire that up and go in to iTunes, I plug in the iPod, then I go to set up USB forwarding so the VM can do its magic and – “USB Forwarding is Not Supported in the Flatpak version of Boxes.” So I uninstall the Flatpak and migrate my disk images from to somewhere less Flatpak-specific and install the dnf version of Gnome Boxes. I migrate the machine over, set up forwarding, everything seems to be working. Only USB forwarding forgets the device when it disconnects and I have to reconnect multiple times. It also doesn’t see the device when it’s in that raw flash mode, so it can’t forward to install the iPod firmware. This is a dead end. Okay, so I have one Windows machine in my house: my kid’s 2013 Intel Macbook with Boot Camp and a debloated copy of Win10 we solely use to play Minecraft Java together with. Only ever since I set up a local server with GeyserMC and Floodgate we’ve been playing mixed me-on-Java/him-on-iPad-or-Switch-Bedrock so the laptop is mostly neglected. So I install iTunes and wipe the iPod. Takes awhile, because I have to install a cascading series of drivers, but it eventually works. The firmware was the latest for the Classic, released 2009. Then I remember that 18 year old bit of early enshittification of iTunes: the iPod can’t simply be its own library you add/remove items from. I was falling out of love with Apple about that long ago , and I had forgotten how low and slow we’ve been dealing with the world of You Will Own Nothing enshittification that’s been inflicted on us. No wonder we’re so complicit, we’re pushing a quarter century of Everything Rental now. So to do iTunes proper I’d need enough storage on this laptop to hold the music in my library on it, be logged in, and sync a selection of it to the iPod. I remember this now: they made life harder and worse on purpose. And now we have Spotify, where we never had freedom or affordances at all. I remember thinking what an incredible act of charity it was that Spotify let your have an offline playlist on your device. I would have expected offline first as a matter of course in prior hardware/software cycles. Rhythmbox and Gtkpod still don’t sync correctly. Same database issues, so nothing I’d done with wiping the iPod had fixed the fundamental first issue. So I install the Rockbox utility on the Windows machine. I have to install some additional Windows components to get it to load, but it works. I flash the iPod. It doesn’t boot. I flash it again. It boots. Hell yes. And I have my cool theme. So I drag music over. 16000 tracks to start, takes 2 hours to copy. HDDs are slow . Afterward I have to manually update my database from Rockbox, which takes hours . I fall asleep as it runs. I can hear the physical spinning platters. It’s a very strange experience having a device with a real life magnetic disc hard drive again. The future we occupy today is strange in the UX of the iPod and its software feels modern enough but small aspects like an HDD feel anachronistic. The Rockbox experience is a lot nicer on the hardware it was designed for than the crappy Rockbox-in-emulation on an Android device that has absolutely no business whatsoever claiming it can run Android. It is responsive, it doesn’t crash, all the plugins work, etc. Next rabbit hole is investigating battery/storage upgrades. There are cheap and expensive options, I need to go through them. As is my wont, I do not need bluetooth on anything I own, but a modern USB-C connector might be nice? Do I want to go the SD card route or a proper SSD? That is for another time. Anyway, no normal person would inflict this experience on themselves willingly, and would likely give up at some point close to the beginning. It is a reminder that much like if you stay very quiet near a playing iPod you can hear the whir and rattle of the HDD. If you stand very quietly near me you can hear the fluttering and tapping of dozens of moths smashing their bodies against the inside of my skull in the space where a brain should be. I am not aware of any other MP3 player that can handle large music libraries this well and still have a presentable UI. TUIs usually suck, “new” apps are all super slow because of Wirth’s Law. ↩︎ I am not aware of any other MP3 player that can handle large music libraries this well and still have a presentable UI. TUIs usually suck, “new” apps are all super slow because of Wirth’s Law. ↩︎
Yesterday I published some benchmarks of Hardwood 1.0 on my Threadripper. Someone suggested I run the One Billion Row Challenge too, to see how it does, so here it is! Gunnar Morling ran the original benchmarks on an EPYC 7502P, Zen 2, 32 cores with 128 GB of RAM. The official challenge was on 8 cores (sequentially chosen) plus a bonus of all 32 cores. I chose to run the benchmark using 9 contenders from the published 8 and 32 core results. The 9 contenders I ran were Before we go through the results, let’s compare these two machines. Hertzner AX161 (EPYC 7502P, Zen 2): 32 cores / 64 threads 128 GB ECC DDR4 RAM disk configured for 1BRC Threadripper 9980X (Zen 5): 64 cores / 128 threads 256 GB ECC DDR5 6400 CL52 (lowered to CL48 with some minor secondary timing tweaks) Samsung 9100 PRO, 8TB (no RAM disk) Cooling: Silverstone XE360-TR + RAM cooling fans SMT disabled CPU Monkey reported the following Geekbench results Fig 1. Geekbench 6 scores, with the Threadripper over 2x better performance So we’re expecting the Threadripper to do a lot better. Threadripper results based on Ubuntu 26.04 and EPYC on Fedora 39. EPYC 7502P = 4:49 Threadripper = 1:15 Threadripper is 4x faster on the single-threaded baseline. Best: at 502 ms. Fig 2. 8 cores, sequentially selected This is roughly inline with the Geekbench results, with the Threadripper being 2.2-3.1x faster. Best 32 cores: , both at 203 ms ( at 204 ms) Best 64 cores: at 140 ms Fig 3. EPYC 32 cores, Threadripper 32 (selected sequentially) and 64 cores A much more varied result this time: and saw no improvement from 32 to 64 cores, whereas the rest saw a non-trivial improvement, with 1.5x being the best. , the only non-GraalVM entry in this list, saw a 1.8x speed up with the 32 core Threadripper test over its EPYC counterpart. saw basically no improvement on the Threadripper 32 core over its EPYC counterpart. The submission won on 8, 32 and 64 cores, with and just behind. Can I nerdsnipe anyone into trying to beat 140 ms? Hertzner AX161 (EPYC 7502P, Zen 2): 32 cores / 64 threads 128 GB ECC DDR4 RAM disk configured for 1BRC Threadripper 9980X (Zen 5): 64 cores / 128 threads 256 GB ECC DDR5 6400 CL52 (lowered to CL48 with some minor secondary timing tweaks) Samsung 9100 PRO, 8TB (no RAM disk) Cooling: Silverstone XE360-TR + RAM cooling fans SMT disabled EPYC 7502P = 4:49 Threadripper = 1:15 and saw no improvement from 32 to 64 cores, whereas the rest saw a non-trivial improvement, with 1.5x being the best. , the only non-GraalVM entry in this list, saw a 1.8x speed up with the 32 core Threadripper test over its EPYC counterpart. saw basically no improvement on the Threadripper 32 core over its EPYC counterpart.
I recently started getting into 3D printing , but so far I've spent most of my time getting setup and learning the ropes. I've now completed my first little project with the 3D printers and I'm really happy with the result. As a biker of many years I have a number of helmets lying around. This is because you're supposed to replace a helmet every 5 years, because the protective foam inside degrades over time. So I have a small collection of lids and nothing to really do with them. So, I decided to print myself some helmet stands and mount them in my office. There were 3 helmets I wanted to display. A reasonably well rated helmet stand on Amazon costs around £11 . So for the 3 lids, I'd be looking at £33 (~$45). Instead of handing over 33 of my finest pounds to Jeff Bezos, I decided to have a nose on Maker World and found this helmet stand that was very well rated. So I downloaded the files and set my printers to work, and a day or so later I had these little beauties: They feel really solid and have no problem holding a helmet on the wall. Better yet, they only cost me around £2.50 ($3.30) each in filament (~750g of filament in total), so way cheaper than the Amazon option. Today I finally had time to mount the lids to the wall, and I think they look great! Sure, I could have pissed about making toy dragons or whatever, but I think these are a far better use of my 3D printers, and really why I bought them. I'm so glad that the printed results are good enough to be useable. I already have some ideas of things I want to create next, but I'm going to have to start familiarising myself with FreeCAD for that project. We'll see how that goes... Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️ You can reply to this post by email , or leave a comment .
In 1982, the videogame Yars’ Revenge for the Atari 2600 needed to show a “neutral zone” in the middle of the screen. The console was so primitive – an entire great book was written about this – that it didn’t have any video memory. Any cheap effect would do, even random noise… but something as simple as generating noise was also too much for the underpowered system. So the creator of the game decided to do something that in any other situation would mean at the very least trouble, if not a downright security disaster. He crossed the wires and output on screen… the game’s own source code: The source code looked noisy enough, and the problem was solved. (Somewhat recently, Retro Game Mechanics Explained analyzed it carefully in this YouTube video , to make sure it’s not just a myth.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/noise-as-information-and-information-as-noise/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/noise-as-information-and-information-as-noise/yt1-play.1600w.avif" type="image/avif"> A similar approach was used in a Nintendo GameCube game Metroid Prime , at a moment when the protagonist’s visor needed to appear disrupted. It was two decades later, but the team still bounced off of hardware limitations, this time around memory : The GameCube only has 24MB of RAM, so every texture has to be carefully considered. If we used a low resolution texture (64x64) to save memory the “static” would be blurry and not crisp. One engineer on the team came up with a great idea: what if we just use the memory holding the Metroid Prime code itself! We quickly tried it out and it looked amazing. When you see Samus’s visor affected by electrical “noise” in game, you’re actually seeing the bits and bytes of the Metroid Prime software code itself being rendered on the screen. Turns out machine code is sufficiently random to work great as a static noise texture! This is how it looked: A few years later, in 2008, people working on Xbox 360 were testing a new interface for their entire console. It was called NXE – New Xbox Experience – and in the bottom-right corner it showed delightful ripples: …or, not just delightful. While NXE was tested internally, the ripples actually encoded the serial number of the console, to prevent leaks . Apparently, it was built specifically so that Microsoft only needed just two images to find out the entire serial number. A less surreptitious version of this idea exists today – for example, setting up a new Apple Watch shows a pretty pattern… …that also happens to encode enough information to identify the specific one watch. It really appears to be nothing more than an obfuscated QR Code, and “boy, have they patented it .” I know concealing a message inside another message is called steganography . I don’t think all of these fall under that umbrella, and I don’t even know all the above can be called “hacks.” I just thought they were interesting examples of information masquerading as noise, and noise pretending to be information. #games #graphics #hacks #security #youtube
After my last post , I pulled the trigger and went with an iPad Pro 11” with Apple Pencil Pro and Magic Keyboard case. Thankfully I got it the night before the massive Apple price hikes (although it still cost way too much). I gotta say, I love this thing! Obviously it’s a huge upgrade, I jumped forward 6 years in tech from my last iPad. The form factor is much nicer as well, the 12.9” was simply too big. 11” is perfect for getting work done, sketching, gaming and using it as an e-reader. I’m planning to sell off my Kindle Oasis and Supernote Nomad, the new iPad has easily replaced both. In addition to the iPad, I super splurged and grabbed a new lens for my Sony camera. Both purchases are in preparation for our trip to China in August. My goal is to pack light, since we’ll be traveling with two kids. The iPad replaces the need for a computer + e-reader + game console (hey, it’s a long trip)! The camera lens is significantly smaller and less bulky than my other lenses, increasing the likelihood I’ll carry the camera and snap more photos. I’ve already tested out photo editing on the iPad with Pixelmator Pro and the RAW files from my Sony. The experience is excellent, especially with the Apple Pencil in the mix. The M5 processor rips through any task I throw at it (it’s funny my iPad is now significantly more powerful than my MacBook Pro). Outside of our trip, I expect my traditional computers (desktop + laptops) will see a lot less usage. At this stage in my life, the iPad does 90% of what I need. For example, my entire blog publishing flow is now possible on this tablet. I can connect my SD card, edit photos with Pixelmator Pro, write the post and upload a draft with iA Writer, then attach the photos and publish via the Micro Blog website (yes, I changed again in preparation for the trip). I’m excited to use this setup in the “field”. I’ll have to find a nice cafe in Baotou to write and edit photos from 😜.