Latest Posts (20 found)

35 down, 9 more to go

We’re down to the final four segments, but we only have three walks left to do. The plan for today is to walk segment number 7 and also attach to it the beginning part of number 8. 23km, 870m of ascent, 1250m of descent. Next time, we’ll finish 8th and attach 9th to it, but that’s a problem for future me. I’ll be honest with you, I’m kinda tired of these walks. Especially because this second half stretches across trails I walked countless times before. But I also want to walk the whole loop and visit all these churches, so we won’t stop here. But we’ll move fast this time around. There’s no point in taking a million pictures at this point. The scenery is mostly the same, the overall area is still the same, so we might as well use this as an opportunity to do some cardio training. The humidity is very high early in the morning, but it’s gonna get warm fast. The trail is gonna take us down for a bit, then back up, then all the way down next to the Slovenian border, all the way back up again, and the final stretch is gonna go down again, to the final church of today’s walk and also my car, since it’s parked right next to it. First stop is gonna be the church of San Giovanni Battista (29/44), and on our way there, we see the church of San Paolo Apostolo far in the distance. It would be part of this segment of the loop, but we visited it on my previous walk, as I was walking all the way back to my car. The church of San Giovanni Battista is in an amazing location, and out of the 44, this one’s probably the one I’ve seen the most throughout the years. There’s a lovely short loop that I often walk with the dog, and the view from up here is great. Almost exactly an hour in, and we have reached the first POI I have marked on the map. I’m pleased with the pace so far; this is enjoyable. I’m starting to walk down the trail I mentioned a moment ago when all of a sudden a formidable foe blocks my path: a herd of goats. Well, maybe herd is a bit of an exaggeration since it’s only 6 of them. But these were just out on their own—and were shitting everywhere—and not only did they have no intention to move away from the trail, one of them was not in the mood to let me pass. Love goats, they’re fun. But can also be jerks, and the last thing I need is to find myself fighting a bunch of goats on a rocky trail. Plus, there’s a very convenient alternative trail just around the corner, so better to leave these alone. Down, and down, and down we go, through the woods, without ever encountering a single soul. That’s honestly the best part about walking these trails: it is incredibly rare to see people. It’s just me and nature. And goats, I guess. Through a couple of small villages we go—not a single human being in sight—and around the second church of the day, the church of San Bartolomeo Apostolo (30/44) that sits maybe a few hundred meters from the Slovenian border. We’re just a bit more than 2 hours in, and we have already walked half the distance. But we still have most of the uphill part to walk, so we’ll see if we manage to keep up the pace. Up, and up, and up we go. And up and up the heartbeat also goes. But on our way up with pass next to the third church of the walk, the church of San Tommaso Apostolo (31/44). There’s a house for sale literally right next to the church if you’re interested. Also another one for sale maybe 30 meters before it. If you like quiet places, this is the location for you. In the middle of absolutely nowhere. We’re not even a quarter of the way through this uphill section, so we better keep going. Less than three hours into this walk—and almost 16.5km—we have reached the fourth church of the day, the church of Sant’Antonio da Padova (32/44). This is another one I have visited a bunch of times before, so no point in spending time here considering we still have the last uphill stretch to finish. I knew this was the last challenging part, so it was fun to keep pushing, and I think I peaked at 168bpm. But it’s gonna be almost entirely downhill from now onwards. We take a quick detour to hit the fifth church of the day, the church of San Nicolò (33/44). I wrote about this one in a previous edition of From the Summit . Another one of those churches I visited a lot over the years because it’s another place I walk often with the dog. This would have been the final church of the day, and the normal route would take me west. But we’re going east, and then cut down through the forest to reach what would be the first church of the 8th segment. As predictable, this alternative path takes me through a trail that is overgrown but, oh well, who cares. And just like that we have reached the sixth church of the day, the church of Sant’Abramo Eremita (34/44). Wonderful location, with Mount Matajur always in the background. I have to admit that a few of these churches are placed in lovely locations; this is like the perfect spot to just chill and read a book on a sunny day. I might come up and do that soon; I ordered a bunch of new books just the other day. Final stretch, only a bit more than 1km left to walk and then we’re done for the day. Risked falling on my back on a very slippery and steep part of this final stretch but thankfully I still have good reflexes. A bit more than 4 hours in and we have arrived at our final destination, the church of San Leonardo Abate (35/44). I have to say, going fast made this walk a lot more fun. I might do it again. I’m glad we’re down into single digits; I can smell the end of this loop. And after that, we can focus on walking other places and see things that are not churches! As always, if you want to stalk my walk, here is the data recorded by my watch . See you next time. You love the outdoors and RSS. You're one of the special ones.

0 views

2026-10-17 11:37: We had a Hotpoint engineer come out to repair our washing machine yesterday. While replacing...

We had a Hotpoint engineer come out to repair our washing machine yesterday. While replacing the machine, he forgot to connect the waste pipe and we came down to this mess this morning. 😡 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 .

0 views

The NIST Elliptic Curves Seeds Bounty Has Been Claimed

We now know how the seeds of the NIST elliptic curves were generated: they’re not the hash of some saucy sentence, but the output of drand48 seeded with the time, which was indeed in 1997–98. John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini, and Steve Weis from Anthropic solved the riddle and on October 15th, 2026, at 01:07:51 UTC, claimed the full bounty I announced three years ago . They chose to donate the prize to ISRG , the non-profit that operates Let’s Encrypt, tripling its value to $36,864 (36 Ki$). Thank you to Amir Omidi, Chris Palmer, Colm MacCárthaigh, David Adrian, David Anderson, Jeff Hodges, Matt Green, Matthew McPherrin, Paul Kehrer, Ryan Sleevi, and Soatok for contributing to the bounty. This helps fill out a page of cryptographic history, and reinforces our confidence in these critical cryptographic primitives. The NIST elliptic curves (P-192, P-224, P-256, P-384, and P-521) were published by NIST in FIPS 186-2 in 2000. They were generated at random according to ANSI X9.62 by taking an arbitrary seed, hashing it with SHA-1, and using the output to derive some of the parameters. Until this week, we had no idea how those arbitrary seeds were picked. The lore was that Dr. Jerry Solinas, who passed away in early 2023, generated them in 1997 by hashing some English sentences that he later forgot. You can read more in this article by Steve Weis or in the original bounty announcement . Turns out memory can play tricks on everyone: we now know they were instead generated with the POSIX-standard drand48 random number generator. The algorithm is as simple as passing the then-current UNIX timestamp to and then producing one byte at a time with drand48. Each sequence of 20 bytes is tried as a seed following ANSI X9.62 and rejected if the resulting curve is not valid. Some timestamps are used to generate multiple curves, by continuing to try seeds after accepting the first one. I reimplemented the algorithm in Go to verify the claim. Read more in Anthropic’s writeup . There are two additional undocumented criteria beyond the ANSI X9.62 ones, one fairly clear and one that still escapes us. If the bit length of the order n of the resulting curve is more than the bit length of the base field p of the curve, the seed is rejected. (The condition is not the stricter n < p , because prime239v2 has p < n < 2²³⁹.) This leaves us with roughly twice as many valid seeds as were published. We explored a number of explanations for this last bit, and found no good fit. Maybe the same RNG was used to validate seeds, consuming RNG output and skipping some potential candidates, although the “gaps” are not regular. Maybe there was just a bug in one of the algorithms that returned the wrong result half the time; these calculations, which we can now do with off-the-shelf software in minutes, were still very much state-of-the-art in 1997. What does this mean for the security of elliptic curve cryptography based on the NIST curves? Well, even before this discovery there were no serious concerns among practitioners. In Section 3.1 of their 2015 paper “A riddle wrapped in an enigma,” Koblitz and Menezes make a convincing argument that it’s implausible that the NSA could have selected a seed to exploit a weakness that escaped more than 15 (now 25) years of cryptanalysis. However, as reported in a later version of that paper, Daniel Bernstein and Tanja Lange described to Koblitz and Menezes in 2017 a technique that could have exploited 70 bits of freedom in selection of the seed to target a hypothetical class of 2⁶¹ weak prime-order curves. (Bernstein is the author of a competing elliptic curve design, Curve25519.) This contributed to enduring conspiracy theories, which had significant appeal among the non-specialist public (although many have since moved on to other, adjacent, conspiracy theories). All this speculation harmed confidence in robust cryptographic systems and was part of my motivation for the bounty. This week’s findings completely rule out the technique described by Bernstein and Lange. Even if the NSA had been free to pick any timestamp in 1997–98 and any of the first 16 prime-order candidates (which generously accounts for the unexplained rejections), they would have had barely 30 bits of freedom. Not enough to intentionally target a hypothetical small class of weak curves, not enough to embed any kind of NOBUS backdoor. Along with deterministic and hedged ECDSA signing algorithms, formally verified field implementations , and the 2015 complete addition formulas by Renes, Costello, and Batina , this nicely completes the “rehabilitation arc” of NIST elliptic curve cryptography, which I would now personally recommend over Curve25519/Ed25519/X25519. Just in time for them to be retired in favor of post-quantum signatures. P.S. The Anthropic team also figured out how the seeds of the NIST B-curves (the ones over binary fields) were generated, but no one uses those, so who cares. In a FamilyMart in Taiwan I found this delightful dice set. A full roll carries log₂(6²⁰) ≈ 51.7 bits of entropy. Rolling them twice can make a pretty robust cryptographic key! I thought it would be funny to label them as Geomys FIPS 140-3 Entropy Sources (which of course they are not, though we do have one of those) and hand them out as swag. However, I found no way to order them online, so I simply visited over a dozen FamilyMarts and brought home 50 packs. Speaking of swag, I am 100% making stickers with the seeds, and t-shirts for the Anthropic team and the contributors to the bounty. I accept suggestions for other seed-based swag. If you want to catch some, follow me on Bluesky at @filippo.abyssdomain.expert or on Mastodon at @[email protected] .

0 views
Stratechery Yesterday

2026.42: Home At Last

Welcome back to This Week in Stratechery! As a reminder, each week, every Friday, we’re sending out this overview of content in the Stratechery bundle; highlighted links are free for everyone . Additionally, you have complete control over what we send to you. If you don’t want to receive This Week in Stratechery emails (there is no podcast), please uncheck the box in your delivery settings . On that note, here were a few of our favorites this week. This week’s Stratechery video is on Apple and a Hacker’s Future . What is Apple Doing? On last week’s Dithering, John and I bemoaned Apple’s exit from home appliances in the 2010s; now the company is back and John doesn’t see the point . I think a big problem was Apple’s marketing video; after I explained what Apple was trying to accomplish on Sharp Tech Andrew was almost persuaded to go all in on HomeView. — Ben Thompson SpaceX Continues Eating and Expands Its Appetite.  Elon Musk and SpaceX have continued their spectrum buying spree, and in Tuesday’s update Ben broke down the implications of both the latest deal, as well as recent deals that mobile carriers (and airlines) have done to avoid reliance on SpaceX. This market’s dynamics are fascinating to me, and for SpaceX, what once looked like a play to become the de-facto provider of emergency satellite coverage among mobile providers now looks like a company that’s coming for primary cellular coverage. Come to read about the methods that could make that path viable, and stay to appreciate challenges that make it a quintessential Musk strategy.  — Andrew Sharp Titles, Takes, and the Washington Wizards.  The NBA season begins next Tuesday, and if you want to have a good time preparing this weekend, we’ve got you covered. First, Greatest of All Talk makes the case for eight different potential title winners (although I must warn you that our Knicks repeat case was extremely unconvincing) and runs down our favorite highlights from the preseason. Then, for Friday’s Sharp Text , I played the most dangerous game of all and expressed confidence the Washington Wizards (for the first time in a full decade) while also offering 18 more takes and predictions for the rest of the league. — AS SpaceX Buys More Spectrum, Musk and Market Structure, Distributed Cellular — SpaceX’s mobile strategy is becoming clearly with its latest spectrum purchase, and it might work. Apple HomeView, The New Apple TV, The App Story — The Apple Homeview is official, and the question is how big is the addressable market for expensive devices based on subpar AI. A Conversation With Ari Emanuel About Entertainment and AI — A conversation with Hollywood super-agent Ari Emanuel about his memoir, the impact of AI on Hollywood, and the power of a phone call. A Wizards Public Service Announcement and 18 More NBA Takes — Optimism in D.C. for the first time in a decade, plus predictions, a giant wild card, and Bet Your Mortgage Locks. Meanness and Claude ASML’s New Multibeam Inspection Tool is Familiar IGBTs Took Silicon Power to the Next Level Brussels and Beijing Make a Deal; Weak Holiday Spending Data; Xi’s Reported Rest Breaks; Peak Dove? Tell Me Why They Will, Preseason Highlight Digest, Sizing Up a Loaded Northwest Division Apple Enters the Uncanny Valley, The SpaceX Play for Cellular, Q&A on The Ringer, Smartphones, AI Parenting

0 views

Premium: Venture Capital Is Killing Itself

Soundtrack: Spinnerette — A Prescription For Mankind About fourteen years ago, the government made a mistake that would allow tech companies and venture capitalists to conspire to legally scam millions of retail investors, simultaneously depriving them of good information and spuriously inflating the valuations of every major tech IPO of the last 14 years. On April 5, 2012, President Obama signed the Jumpstart Our Business Startups (JOBS) Act under the auspices of it being “too difficult” for small businesses and startups — though overwhelmingly the latter — to access capital, all while reducing reporting requirements in ways that mostly helped venture capitalists fund and startup founders run businesses in reckless and destructive ways, all sold as a good thing for society.  In simple terms, while the JOBS Act (which was passed with rare bipartisan support) allowed companies to raise more money from more people, it also incentivized companies staying private for longer by eliminating a rule from the 60s that required companies of a certain size — above 500 shareholders and $10 million in assets — to report as if they were public. Per Casual Finance :  As Casual Finance notes, this is the rule that pushed both Facebook and Google to go public — because if you’re going to have to report like a public company, you may as well have access to the public markets: The JOBS act, amongst other changes, made it so that you could have up to 2,000 shareholders (but no more than 499 “ unaccredited ” investors) and, crucially, changed the rules so that employees were no longer counted in the calculation, effectively removing any chance that most startups would ever have to deal with reporting like a public company ever again. The rationale was that having to report like a public company required audited accounts, adding an "unnecessary burden” to fledgling companies, even though “fledgling” here meant “companies worth hundreds of billions of dollars on paper” that absolutely could afford an auditor. Those pushing for the bill also believed that these requirements unfairly punished companies for awarding stock grants, and that public reporting was tantamount to “exposing trade secrets,” as if there was literally no amendment that could’ve been made to anticipate these problems other than “removing reporting anything of any sort.” However minor this change might have seemed at the time, the net result was one of the largest private valuation bubbles in history, because there was (and is) no longer any incentive for a company to go public before it’s “ready,” with “ready” defined as “as much value has been drained from the company as humanely possible.” As Casual Finance noted, when Microsoft went public, it had a market cap of around $500 million, Google $23 billion, and Facebook $100 billion, with their total market capitalization as of writing this sentence sitting at around $10.29 trillion. Anyone investing in any of these IPOs in the first five to ten years of their existence had a chance to multiply their money, because you were able to invest before the companies became massive multiconglomerates with multi-trillion dollar market caps, in turn creating value for millions of households that “took the risk” on investing on an earlier-stage company. These three companies are used as the poster children of why you should invest in a new tech stock — that you’re getting in on the ground floor, with the reward for the risk being that you’d have the chance of a massive multiple. Except that doesn’t really work if the companies wait as long as humanly possible to go public. The reason that Microsoft, Google, Meta, Amazon and all the other famous names in “big IPOs that made early investors a lot of money” was that they had to go public before they’d reached the height of their valuation.  And crucially , their valuations are decided by market forces which, while deranged and emotional, at least are somewhat guided by the underlying financial picture of the company. Today’s startups have their valuations defined entirely based on the whims and fancies of a venture capital sect that makes up a multiple they’re comfortable investing at. That’s how Instinct, a zero-revenue “AI agent” that you text to do stuff, is somehow worth $10 billion — because investors from Sequoia Capital, Benchmark, and Coatue had been willing to give it $1 billion for 10% of the company.  These inflated valuations drain the vast majority of potential opportunity that any investor might have, effectively transferring all the risk for the company’s future onto the public markets while offering very little in return. The days of thousand-percent-or-more returns are long dead, despite every single IPO selling itself on this eventuality , like SpaceX did when it proposed it had a $28.5 trillion total addressable market.  Anthropic’s upcoming IPO has the company demanding a $2 trillion valuation, equivalent to both Meta and SpaceX, based on flimsy promises of $200 billion in annual revenue years in the future and a $30 trillion total addressable market. It is, to quote New Constructs , presenting risks and is positioned to be a far bigger ripoff of the US capital markets, and exists only as a liquidity mechanism so that early investors can multiply their dodgily-valued early investments by selling their shares under the scummiest possible terms. Anthropic and OpenAI’s IPOs pose a genuine threat to any investor that dares entangle themselves with unprofitable, unsustainable AI companies promising the world (or the world’s destruction), all sold under the auspices of potentially buying into the next Facebook, Google or Microsoft. In reality, the kind of growth you’d need from these companies to reach anything close to the returns of those early-stage tech investments would require them to have trillions of dollars a year in revenue and market capitalizations of $20 trillion or more — an impossibility that nobody seems to want to discuss. Yet these rotten incentives have also led to a massive valuation bubble in startup valuations writ large, with the AI bubble being the inevitable result. By allowing private companies to avoid the reporting strictures of the public markets, financial regulations incentivize a kind of venture welfare, keeping companies that cannot borrow money or otherwise sustain themselves through cashflow — you know , bad companies — alive for longer than is natural, never forcing them to become real companies that can survive , with every trip to Sand Hill Road bumping the valuation up further, making any IPO or acquisition much harder to stomach. This wasn’t as much of a problem when venture capital was pumping up software companies and flogging them to the markets or dimwitted private equity firms , but has become a critical situation for the legions of cashflow-negative AI companies with aggressively-inflated valuations.  In a pre-JOBS environment, many of these companies would’ve wilted in sunlight, and, I’d argue, been forced to run businesses that could stand on their own two feet. Instead, as I discussed in last year’s Enshittifinancial Crisis , these companies are more venture-dependent than any other hype cycle in history, and because venture is so excited about the potential , they’re investing at bigger and bigger rounds, creating the largest valuation bubble in the history of technology, including the Dot Com Bubble. Today I am going to aggressively advocate for reforms — if not an outright repeal — of the JOBS act, and call for serious legislative efforts to bring the private markets to heel.   My argument is simple: the current system is built to incentivize rich and powerful people inflating private assets with spurious valuations, harming retail investors, reducing the available capital to good startups, and incentivizing the continued development of bad, unsustainable companies. Venture is no longer a trustworthy vehicle for investment, nor can venture capitalists be trusted to value startups any further. The JOBS act did the literal opposite of what it intended to — fewer tech companies went public, and those that went public did so at oversized valuations pumped up by venture capital, using retail investors as exit liquidity under the flimsy pretense of “getting in on the ground floor.” We are placing outsized trust in a handful of extremely rich and disconnected people and their ability to pick winners, despite the fact that the majority of venture capitalists are fucking terrible at doing so. For over a decade, venture capital has inflated the value of startup after startup, then been surprised again and again as these companies didn’t work out, with the vast majority of “successes” — SpaceX, Snap, Airbnb, and Uber — mostly existing to dump their horrid bags on an unsuspecting public. And by repeating the same cycle — inflating companies based on hype and ever-growing valuations — venture capital is setting itself up for a collapse. Today I’ll explain how it’s happening, and how we might fix what’s left in the end.

0 views

Fitness challenge: what’s next?

Back in early June I blogged about my summer fitness challenge. The two main goals were to lose some weight—from 89.6kg to 85.3kg, the oldest measure I had on record from late 2015—and also to get back into a better shape than I was a decade ago. The weight goal was easily quantifiable; I still have the same exact scale I was using 10 years ago and so it was only a matter of jumping on it every morning and track the progress. As for losing weight, I didn’t really have much of a plan other than not eating like an idiot and moving more. And I guess it worked. I’m now hovering around 82kg, going up or down depending how much I decide to eat—or not to eat—any given day. Last time I was this light I was probably in my late teens. And I think this is the perfect weight for my lifestyle, so I’m planning to stay at this level for the foreseeable future. As for being in better shape, that’s a bit trickier to evaluate. My legs are definitely not as strong as they were back when I was in my mid-20s, but I was also playing A LOT of basketball back then, while now I play exactly zero. I do walk and hike a lot more though, and I overall feel much better. So, success! Both goals achieved. Now what? Now it’s time to start another challenge, and this time it will span 12 months. And that’s because even though I do feel better, I’m nowhere near satisfied with myself and my body. There is so much room for improvement, and I realised that I need to have stupid challenges to keep myself motivated. So this is what’s on the menu for the next 12 months. First, I need better cardio. I have never trained it in my life, and my cardio sucks. The realistic goal I currently have set for myself is to run a 5k in under 25 minutes and with a < 150 HR. There’s also a trail I hiked recently that I’ll go hike again next year, and the goal there is to do the first part in less than an hour. It took me almost two last time. Next, I need to build at least some upper body muscle mass. I hate training upper body, especially because none of the activities I enjoy doing involves upper body strength, but it’s nice to have a balanced body and so I need to take care of that. This is a goal that’s harder to track, but I do have a reference body I’m aiming for, and I am taking progress photos at the beginning of the month, so at the end of the 12 months we can compare and see if I managed to get there. Lastly, I want to improve overall flexibility. I am doing some stretching regularly, but I’ve always had a goal in mind, going back years, and that was to manage to get in full lotus position . So we’re aiming for that in the next 12 months. This is gonna be fun. I don’t plan to constantly write about this because there’s not much to say on a regular basis, but if there’s anything you’re interested in, feel free to email me and ask. Thank you for keeping RSS alive. You're awesome. Connect via email :: Sign my guestbook :: Support for 1$/month

0 views
David Bushell Yesterday

Cloudflare killed Deno and look I’m on TV!

“Didn’t you already say goodbye to Deno? Get new material!” I know, I know, but not even a week after declaring my friendship over with Deno they actually killed Deno! The runtime is going away, and sorry call me pessimistic, but I highly doubt a community fork of any value will survive for long. We will support the Deno runtime for another year with monthly releases containing bug fixes and security updates. After that year we will end our development of the Deno runtime. Deno is joining Cloudflare - Ryan Dahl There’s even a Fireship video on YouTube! Guess who gets a namecheck? I’m not going to risk embedding Google cookies so here’s a link: “The runtime wars are over… and Node won” (YouTube) . I also found my way into the lead story of JavaScript Weekly . It’s sad but telling that negative opinions and news around Deno has received the most attention. I have nothing new to say (until my Cloudflare exposé) but I do want to look back on my journey with Deno. People who’ve only read my recent posts on Deno assume I was just a hater. Far from the case! I was all-in on Deno and wanted it to succeed. While it’s true that my disdain for what the tech industry has become leaked into my criticism, I’d say it was fair and accurate. The Deno runtime was truly ahead of it’s time. It felt like using Node from the future (now Node today). The runtime was forgotten in favour of whatever tech start-ups do. My doubts grew by mid-2024 but I regained brief optimism with the Deno 2.0 relaunch. I didn’t realise I’d written this many posts: You may have noticed my interest in Bun in my earlier writing. That was before I learned it was not a serious project. We don’t use vibe-coded fash-tech in my house. Deno was my platform for fun side projects (and Advent of Code ). I experimented with many silly ideas. A few turned into something practical that I still use today. The SMTP adventure was a disaster, but technically it worked! My private git LFS server has been rock solid. I actually found a use case for the HTTP proxy (blog post to come). For reasons (sigh), I’m losing interest in publishing open source code and writing tutorials. My self-hosted journey has stalled because I can’t afford anything anymore. Tech sucks now. But I’m finding enjoyment in fighting for an open web (for humans). I’m having fun too blogging more non-technical topics and getting back into design. I am no longer a JavaScript bro and that’s probably a good thing! Thanks for reading! Follow me on Mastodon and Bluesky . Subscribe to my Blog and Notes or Combined feeds. Built with Deno (Mar 2021) Deno Builds on Netlify (Jul 2021) JSR: First Impressions (Feb 2024) JSR: Second Look (Mar 2024) The Deno Package Paradox (Aug 2024) JSR and Deno: Final Review (Aug 2024) Hey! Deno 2 looks fun! (Oct 2024) Deno’s Decline (6 Regions and Falling) (Apr 2025) JSR & Deno One Year Later - Malware?! (Jun 2025) Ditching Deno KV (Jun 2025) 404 Deno CEO not found (Mar 2026) Friendship ended with Deno, now Node is my best friend (Oct 2026) Deno Stream Deck (Oct 2022) The one where I used Deno’s foreign function interface to manage a USB peripheral. SvelteKit and Deno with OAuth and Deploy (Jun 2023) The one where I built and maintained a Deno Deploy SvelteKit adapter. Get in Line, Deno! (Oct 2023) The one where I used Deno’s streaming APIs to efficiently seek lines. Git Granary (Jul 2024) The one where I built a git large file storage server that I still use today. HTTP Tunnel and Proxy in JavaScript (Oct 2024) The one where I piped two streams together to create a simple HTTP proxy. I Let The Emails In (Sept 2025) The one where I wrote a bare bones SMTP server with Deno.

0 views
Robin Moffatt Yesterday

🏃🚶 The unofficial Current San Francisco 2026 Run/Walk 🏃🚶

It’s been a few years since Current (and before that, Kafka Summit) was in San Francisco, but here we are—on November 4 & 5 we’ll be there, and I’m excited to continue a tradition that started back in 2019 with a run over the Golden Gate Bridge .

0 views

PostgreSQL in the 2026 Ruby on Rails Community Survey and Book Giveaways

84% of 1,800 surveyed Rails developers use PostgreSQL in production. While PostgreSQL is less popular than Oracle, MySQL, and Microsoft SQL Server today, the gap is shrinking. Win a signed copy of High Performance PostgreSQL for Rails, see below for details. The 2026 version of the Ruby on Rails Community Survey results are now live. Two things caught my eye: how dominant PostgreSQL use is and the learning resources developers found to be most valuable. Among relational SQL databases, 84% of respondents use PostgreSQL in production . That’s wild! The next one is MySQL at 23%. 84% of nearly 1,800 surveyed Ruby on Rails developers use PostgreSQL in production This reflects a multi-year trend not only in the Ruby on Rails community but also in the broader industry among relational databases. According to the DB-Engines Ranking Trend , Oracle, MySQL, and Microsoft SQL Server are all still more popular than PostgreSQL, but declining. In the graph below we can see the growing popularity of PostgreSQL and this trend line implies it may surpass Microsoft SQL Server. MySQL could be next. Popularity of Oracle, MySQL, Microsoft SQL Server and PostgreSQL per DB-Engines Books hold a smaller but steady percentage among learning resources. 37% of respondents in their first two years of learning felt reading whole books was most helpful, while 10% have read parts of a book and found that best. What worked best among respondents was building and deploying their own applications. This makes sense! That’s how it’s always been for me too, nothing beats building something yourself and becoming an owner and operator. Documentation, learning videos, podcasts, books, and blog posts all help support developers looking to improve their skills. I was happy to see High Performance PostgreSQL for Rails ranked #12 among recommended books . Thank you! The book has been published for 2 years now and isn’t being actively promoted. I’m grateful to occasionally hear from readers at events like Rails at Scale Summit that they’ve found the book helpful. Seeing that reflected in the survey results was very fulfilling. High Performance PostgreSQL for Rails ranked #12 among recommended books To celebrate the survey results and the book having been published for 2 years, I’d like to sign and give away a couple of copies. If you’re in the contiguous U.S. and would like to enter, please send me a message through my site in the next couple of weeks. That’s it. I’ll draw two winners at random and ship them their copies. Good luck! Please check out the full 2026 Ruby on Rails Community Survey Results .

0 views
Kev Quirk Yesterday

2026-10-16 13:51: The amount of AI generated sales emails I get these days is astonishing. If you...

The amount of AI generated sales emails I get these days is astonishing. If you can't be arsed to write your own sales pitch, why the fuck should I be arsed about your product? 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 .

0 views
マリウス Yesterday

Razer Basilisk V3 Pro 35K Phantom White Edition

In 2024 I replaced the Logitech MX Master 3 that I had been using since 2021 with a Razer Basilisk V3 Pro and Razer’s Mouse Dock Pro. The Basilisk did what the Logitech never managed to do, namely work without connection stutters, lags and dropouts. It also charged wirelessly on its dock and came with the same free-spinning scroll wheel that I had gotten used to on the MX Master, while being lighter and not covered in rubber that got quite disgusting to touch over time. Since then it has been my mouse at most desks , as well as on the road, where I bring it on almost every trip, even though my setup is mostly keyboard-driven. There was nothing wrong with the V3 Pro that I had. The main difference between it and the Basilisk V3 Pro 35K, which Razer released in October 2024, is the newer Focus Pro 35K sensor that replaces the Focus Pro 30K. However, I really like the transparent tech aesthetics of the 2000s, and when I came across the 35K in Razer’s translucent Phantom White edition at TSUKUMO eX. in the Akihabara district of Tokyo, I bought it anyway. I want to see more companies move away from the boring, muted look of today’s hardware and bring back the transparent tech look. This post is a review of the Phantom White from the perspective of someone who had used the regular V3 Pro for two years. It covers what Razer changed between the two, the engineering inside, and where Linux compatibility is at. Disclosure: I paid for the mouse with my own money and have no relationship with Razer. The opinions in this post are entirely my own. Razer introduced its Phantom collection in June 2025 with translucent green versions of the Basilisk V3 Pro 35K, the BlackWidow V4 75% keyboard, the Barracuda X Chroma headset and the Firefly V2 Pro mouse mat. In October 2025 the same four products followed in translucent white, together with a Kishi V3 controller for phones, under the name Phantom White. In Japan the Basilisk went on sale on November 7, 2025, at a suggested price of ¥28,980, which is ¥2,000 more than the black and white versions of the 35K. In the US the difference is $10, with the Phantom White at $169.99. Not only is the shell translucent, but so are the side grips, the cover on the underside and even the housing of the wireless dongle, which Razer refers to as color-matched components . The shell, however, isn’t as clear as Razer’s product renders make it look. The top in particular has a milky finish that is half white and half see-through, and the internals show through it as faint shapes instead of in detail. It’s apparently the same for the green version, with the interior only faintly visible through a shell that isn’t fully clear. Making a mouse translucent takes more than swapping the plastic. Razer’s Global Head of Design, Charlie Bolton, explained in an interview that the products in the Phantom collection weren’t designed to be transparent in the first place, and that Razer had to redesign a lot of their internal structure. Razer’s own marketing speaks of reengineered internals and meticulous wiring without going into detail. The only differences that I could find documented are that the Phantom editions have only 12 individually programmable LEDs instead of the 13 of the black and white 35K, and that Razer publishes a separate firmware updater for them. Which of the lighting zones was dropped, and why, Razer doesn’t say, but my assumption is that the 13th LED is the one which, on the non-translucent versions, illuminates the Razer logo on the back of the mouse. With the lighting turned on, the shell spreads the light of the underglow and the scroll wheel through the body of the mouse. This makes whatever lighting effect is running impossible to ignore, which, as I’ll explain further down , is a bit of a problem in my case. Translucent and white plastics tend to yellow with UV exposure over the years, and since the Phantom editions have only been around for about a year, I haven’t found any reports on how they age. I guess this is something that I’ll be able to report on in a few years, if yellowing should actually occur. It also remains to be seen whether the rubber on the side grips will wear after a few years as has been the case with my black V3 Pro, but I strongly assume that it will, at which point it’ll be interesting to see how that will look on the translucent material. Aesthetics are subjective, and I can understand anyone who prefers the stealthy look of the black version and finds the Phantom White to be a bit too much. I, for one, like it a lot. It reminds me of the translucent gadgets of the 2000s, and it turns the mouse, which is usually one of the most boring objects on a desk, into something that is quite interesting to look at. * At launch the V3 Pro supported 4000 Hz with the Mouse Dock Pro or the HyperPolling Wireless Dongle. Razer raised that to 8000 Hz with a firmware update in November 2023. ** Razer lists 11 programmable buttons for both mice, but its product page for the 35K also speaks of 13 customizable controls. The 14 controls of the Basilisk V4 Pro further down are counted the same way. The weights are Razer’s, without the cable and the dongle. If you put the 35K on a scale it will probably measure around 113g, and with the wireless charging puck installed, my Phantom White weighs around 118g. The different battery figures for the original V3 Pro are not a typo. Razer rated it at 90 hours when it launched but lists 110 hours today. I couldn’t find an explanation for the extra 20 hours, as I doubt that Razer actually changed the battery and I’d assume that it’s a value that they might have achieved using purely software optimizations. I haven’t taken apart the 35K so far, and it seems like nobody else on the internet has either, but if we assume that the internals are identical to the V3 Pro’s, then it’s likely to have the same Nordic Semiconductor nRF52840 at its core, which is an ARM Cortex-M4 system on a chip with 1 MB of flash and 256 KB of RAM, and a radio for both Bluetooth and proprietary 2.4 GHz protocols like Razer’s HyperSpeed. The lighting then probably also has its own RGB driver, maybe even the exact same W3635, and the 600 mAh battery is probably also wrapped in foam and mounted on a plastic frame above the sensor, into which the scroll wheel assembly slots as well. I also assume that the battery is soldered to the board, and that replacing it requires a soldering iron. Not great for a mouse that costs as much, and whose battery is likely the first part to wear out. Going by the V3 Pro’s design, the buttons on the top shell would then also be on a separate PCB that connects to the main board with a 5-pin connector, while the LED strip for the underglow and the scroll wheel connect via ribbon cables. Three magnets in the base would then align the mouse on the Mouse Dock Pro. Presumably the 35K also uses Razer’s third-generation optical switches for its main buttons, which register a click when the plunger interrupts an infrared light beam instead of when two metal contacts touch. They don’t need a debounce delay and aren’t prone to the double-clicking that mechanical switches tend to develop over time. Razer rates those at 90 million clicks. The other buttons, however, probably use ordinary mechanical switches. Some online sources state that the switches of the side buttons and the sensitivity clutch are ChangFeng parts, others that the side switches are Huano, and that the two buttons on top, the wheel click and the tilt inputs use unbranded tactile switches. The teardowns of the original identify the Focus Pro 30K sensor as a PixArt PAW3950. The Focus Pro 35K Gen-2 was reportedly developed together with PixArt as well, but Razer hasn’t said which part it’s based on. The Focus Pro 35K Gen-2 raises the maximum resolution from 30,000 to 35,000 DPI, while the tracking speed of 750 IPS and the maximum acceleration of 70 G stay the same. The more useful change is that the sensitivity can now be set in steps of 1 DPI instead of 50, which is probably important to people who want to match the sensitivity they’re used to from another mouse, and for whom Razer hence added a DPI Sensitivity Matcher to Synapse. The other features carried over from the 30K, namely Smart Tracking, which adjusts the tracking to the surface and offers three lift-off distances , Asymmetric Cut-Off, which sets the lift-off and landing distances separately across 26 levels, and Motion Sync. The new sensor seems to be fast and accurate across soft, hard and glass pads, but in practice indistinguishable from the old one, at least to me, who is not a professional eSports player. I’ve read about measured lift-off distances of 0.6, 0.8 and 2.0 mm for the low, medium and high settings on a bare surface, while some users saw slight jitter at 8,000 DPI and more above that, which is irrelevant to anyone, including myself, who doesn’t use such settings. I use the mouse for desktop work, meaning websites and applications like VMs that are cumbersome to use with the keyboard alone, and for that the difference between the two sensors is entirely academic. The included HyperSpeed dongle polls at up to 1000 Hz, and so does the USB cable. For 8000 Hz, the mouse needs either the HyperPolling Wireless Dongle or the Mouse Dock Pro. The dock launched in 2022 with a 4000 Hz transceiver and is listed with 8000 Hz today, and the original V3 Pro got 8000 Hz with its firmware update in November 2023, so 8000 Hz isn’t new to the 35K either. Once the mouse is paired with the dock, its own dongle obviously isn’t needed anymore and can be stored away inside the mouse. Independent measurements put the click latency of the 35K at 1.8 ms at 4000 Hz and 1.6 ms at 8000 Hz. These are good numbers, however, the gains over 1000 Hz are marginal, but the cost in battery life isn’t. At 8000 Hz Razer rates the 35K at 28 hours, down from the 32 hours of the original, which is a fifth of what the mouse gets at 1000 Hz. The scroll wheel was one of the main reasons I went with the Basilisk back in 2024. Like the MX Master, it can switch between a notched, tactile mode and a free-spinning mode, but the two do it in different ways. Logitech’s MagSpeed wheel uses an electromagnet, while Razer’s HyperScroll Tilt Wheel uses a small DC motor that, via a plastic gear, either presses a lever against a toothed disk for the tactile mode or pulls it back for the free spin. The rotation is read by an optical encoder , an LED and two photodiodes looking at a segmented disk. The mechanism is so precise that seemingly even a single human hair stuck in between, blocking the encoder’s light, can lead to a jittering wheel. Anyhow, the mode can be switched with the button below the wheel or automatically with Smart-Reel, which goes into free spin when you scroll fast and back to the tactile mode when you slow down. Smart-Reel isn’t new, because the original V3 Pro had it as well, but what’s new on the 35K is that the speed at which Smart-Reel switches can be set across five levels, and that Synapse offers a scroll acceleration that speeds up scrolling the faster you spin the wheel. Unfortunately, the acceleration is implemented in Synapse and not in the mouse, and it hence doesn’t exist on systems that don’t run Synapse. Every switch between the two modes comes with an audible click from the motor. Razer barely touched the shell, and the 35K is the same 130 mm long, 75 mm wide and 42.5 mm tall right-handed mouse with a thumb rest that the original was. Hence, the ergonomics are the same good ones that the original Basilisk had. In a palm grip the thumb rests on the ledge, with the sensitivity clutch right underneath it and the two side buttons above it. At 112g the Basilisk is heavy compared to the lightweight mice that are popular for shooters. For my use, however, it isn’t heavy by any means. Compared to the MX Master 3 that I used before, the Basilisk is still more than 20g lighter, and its weight is distributed well enough for it not to feel heavy in the hand. The feet are made of PTFE and glide well on a mouse pad, but they’re small and can scrape across a hard desk. Razer rates the 35K at 140 hours on the 2.4 GHz connection at 1000 Hz and at 210 hours on Bluetooth, compared to the 110 and 150 hours that it lists for the original today. Razer doesn’t say where the difference comes from, and as long as nobody has opened up a 35K, it’s unclear whether it’s the battery, the sensor or the firmware. However, the lighting matters quite a lot for battery life and might almost halve the runtime when set to peak brightness. So far, the battery life for me has been phenomenal even with the unicorn puke turned on at 10% brightness. My previous Basilisk had become a little weak with regard to its runtime after two years of daily use, and while I’ve only had the 35K for a short time, it feels like it can go weeks on a single charge. The cover on the underside of the mouse closes off a compartment for storing the dongle, and it can be swapped for Razer’s Wireless Charging Puck. The puck twists in, connects to the mouse through contact pads, and turns it into a Qi device that charges on the Mouse Dock Pro and, if the coils line up, on other Qi chargers. The Mouse Dock Pro includes a puck, otherwise it’s $29.99 or ¥3,288. Charging on the dock is slower than via the cable, with about 0.1 A on the dock compared to 0.33 A via USB-C on the original V3 Pro, which however doesn’t matter with the mouse on the dock overnight. Sadly, there doesn’t seem to be a wireless charging puck that is also transparent. Razer sells the Wireless Charging Puck in a single color, which is black, and it’s the same puck that comes with the Mouse Dock Pro. Hence, in order to use the mouse with my Mouse Dock Pro, I have to use the original black puck. It’s a bit sad, but then again, it’s not visible as long as you don’t lift the mouse to look underneath it. The dock itself has a built-in 8000 Hz transceiver and RGB lighting that shows the battery level of the mouse while it’s charging, from green through yellow to red. On October 8, 2026, Razer announced a successor, the Mouse Dock V2 Pro, which lists the 35K as compatible and is supposed to arrive in Japan in November for ¥11,980. Like with the original V3 Pro, Razer doesn’t offer any software for Linux. Synapse, Razer’s official malware software, runs on Windows and, as a preview, on macOS. Pairing the mouse with the dock, updating its firmware and the firmware of its receiver, and changing settings like the lighting timeout all require Synapse. Hence, I set up a Windows 11 VM on KVM, passed the dock through to it, unpaired my old Basilisk V3 Pro, paired the 35K, updated its firmware and adjusted its settings. Razer has started offering a browser-based version of Synapse, Synapse Web, which could in theory work on Linux. As of now, however, its list of supported devices contains a single mouse, the Viper V4 Pro. The on-board profiles, which include settings like the polling rate, work without Synapse. Sadly, just like with my previous Basilisk, the lighting still doesn’t seem to be stored on-board, at least not in a way that persists without Synapse running in the background. Synapse doesn’t run on Linux, and for using the mouse through the dock there doesn’t seem to be a working FOSS implementation yet that can properly set its lighting, which is why my Phantom White currently displays its typical spectrum cycling effect, also known as unicorn puke . OpenRazer has supported the Basilisk V3 Pro 35K since version 3.10, and the Mouse Dock Pro since version 3.12. Unfortunately, the latter covers only the dock itself, namely its own lighting, while a mouse that’s paired with the dock doesn’t show up as a device. The dock relays the mouse’s input to the computer, so the mouse works, but its DPI stages, its polling rate and its lighting can’t be changed from Linux as long as it’s connected through the dock. A report about OpenRGB not detecting the Basilisk V3 Pro through the dock has been open since 2024. Pull request #2817 , which was opened in May 2026, adds pairing, unpairing and a scan for nearby mice to OpenRazer’s driver for the dock. It also exposes a mouse that’s paired with the dock as a device of its own, with the same settings and effects that OpenRazer supports through the mouse’s own dongle. Testers report that the Basilisk V3 Pro 35K works through the dock with it, including static colors, and a follow-up pull request adds the 8000 Hz polling rate. As of now, however, the pull request is still waiting for a review by the project’s maintainers, and I’m waiting for it to be merged, so that I can finally configure the mouse through the Mouse Dock Pro via OpenRazer. If you own a Basilisk V3 Pro, there’s little reason to replace it with a 35K. The sensor is newer, but in practice indistinguishable from the old one, at least unless you’re an eSports professional, and the remaining changes are a longer rated battery life and a few settings in Synapse. I’d recommend the original, which these days often sells at a discount. Unless, that is, you care about the way it looks, which, admittedly, is why I bought it. As a mouse, the 35K Phantom White is as good as the V3 Pro was. The ergonomics are the same good ones that the original Basilisk had, the scroll wheel is as versatile as ever, and the battery life has, so far, been phenomenal. The translucent shell is a welcome change from the muted look of most hardware today, and the premium of ¥2,000 or $10 over the regular versions is not terrible. The downsides are the ones that the original had as well, namely (for some people) the weight, the price, a battery that’s probably soldered in, and software that doesn’t run on Linux, plus a charging puck that doesn’t match the rest of the mouse. Note: Shortly after I bought the 35K, at the beginning of October, Razer announced the Basilisk V4 Pro, which is supposed to arrive in Japan in November for ¥27,980. It’s 12g lighter and has 14 instead of 13 customizable controls, a new scroll wheel with an additional, finer tactile mode and a Focus Pro 50K sensor. It also supports 8000 Hz in both wireless and wired mode and is rated at 200 hours of battery life, but it has only 7 lighting zones, and Razer hasn’t announced a Phantom edition of it so far. If you don’t care about the translucent shell, the V4 Pro is probably the better buy. I do, and I’m happy with the Phantom White.

0 views
Brain Baking Yesterday

What Is A Man? (Laptop Stickers Part Deux)

A miserable little pile of secrets. But enough talk! Have at those stickers! is what Dracula would say when encountering my now completely screwed up laptop. In fact, his image—including the iconic quip—is placed prominently in the middle. What started with just four stickers, mostly Emacs (Lisp) related quickly spiralled out of control after the arrival of my Redbubble order. I’m sorry, I tried neatly arranging them, I really did. But the end result is, as my wife called it, chaotic 1 . But in D&D, chaotic alignments can be good as well, right? Minsc is chaotic good? Sarevok can turn into being chaotic good if you treat him well in Throne of Bhaal ? So here’s my chaotic good laptop: The 2020 MacBook Air covered in gloriously weird stickers. Now it’s just a matter of time before a conversation is sparked. It will depend on the sticker they choose to discuss whether they’ll become besties. While Ton chooses not to apply stickers to avoid a conversation about their meaning, I am actively trying to provoke it. Dear students, if you’re reading this: surprise me! Why don’t you try to guess which is which? I’ll hand out a few hints for each sticker and reveal their true nature in a spoiler tag below. From the top left to the bottom right: Perhaps I went a bit overboard with the (retro) gaming-related stickers. I had more but ran out of space. I realised too late that I was missing a music-related one. The biggest challenge was fixing a few overlapping edges that looked bad, where I had to rip off and redo a part of some stickers. The extra fine nib tip is already getting loose… I think she called it messy but since I’m not a big fan of football I decided to use the word chaotic instead. Get it? Messi? No?  ↩︎ Related topics: / stickers / By Wouter Groeneveld on 16 October 2026.  Reply via email . Big black cloudy square: FSF. Pixelated weirdo in long darkblue coat: an old pirate. Mini round foil sticker: a certain Paw that needs to be Patrolled. Big green skull: think old French adventure game. What is a man: I think I already spoiled that one; but which game? Next level round one: fantasy console Pixelated kid dressed in green clothers holding up a sword: does this really need a hint? Warning: this product may contain trace amounts of Lisp: an alien! Feeling Extra Fine: a fine writing implement A shocked skeleton: what’s the opposite of Mario? A towering purple tentacle: travel in time to find out Green pixelated asparagus: just food A round white : the logo of an editor I’m using right now Mini round foil sticker: has a little brother called George A sink overflowing: GNU Emacs is literally on it We Rise At Dawn frog: what’s inside the jar? Small pixelated bug: involving grid-based tactical manoeuvring An old wizard with long beard sitting on a chair: related to the green skull Small pixelated bug: see 17 Menacing looking black bearded fellow with hat: looking for that pirate Big black cloudy square: The Free Software Foundation. Pixelated weirdo in long darkblue coat: Guybrush Threepwood in Monkey Island 2 . Mini round foil sticker: A Paw Patrol sticker representing my youngest kid. Big green skull: The main antagonist, Amoniak, in Gobliins 2: The Prince Buffoon . What is a man: Castlevania: Symphony of the Night Next level round one: UFO 50 Pixelated kid dressed in green clothers holding up a sword: The Legend of Zelda: a Link to the Past Warning: this product may contain trace amounts of Lisp: The Lisp Alien Feeling Extra Fine: just a silly Extra Fine nib representing my love for fountain pens. A shocked skeleton: Wario in a shocked state after touching electricity in Wario Land 3 A towering purple tentacle: Day of the Tentacle Green pixelated asparagus: really, just food! I love green asparagus! A round white : Emacs Mini round foil sticker: Peppa Pig representing my eldest kid. A sink overflowing: GNU Emacs We Rise At Dawn frog: the frog is holding a baked loaf of sourdough bread and in another hand a jar of sourdough starter. Small pixelated bug: Into the Breach An old wizard with long beard sitting on a chair: the wizard Tazaar that guides you in Gobliins 2 . Small pixelated bug: Into the Breach Menacing looking black bearded fellow with hat: LeChuck in Monkey Island 2 I think she called it messy but since I’m not a big fan of football I decided to use the word chaotic instead. Get it? Messi? No?  ↩︎

0 views
iDiallo Yesterday

This video is 2 minutes long

As I mentioned before, it takes me way too long to edit a single video . So I am releasing it in chunks. If I never finish it, well then at least I'll have a few videos out. What is the video about? Well, it is about the future we were promised, versus the one we are actually living in. It's not dystopian, but it seems like the goal of tech is supposedly to automate the tedious and mundane, so we can have more time to do the things we love. But along the way came the word productivity. The goal of productivity is not to get free time. It is to produce more in the same amount of time. Not produce more in less time. Read this a couple times for it to stick. Click the image to load The first one was 1 minute long . Today's will be two minutes . And the next will be 3 minutes long. Then I'll have to think about Fibonacci.

0 views
./techtipsy Yesterday

Restoring my Fiat 126 BIS

This is an ongoing project that will get continuously updated whenever I have made some progress. Check in once in a while for updates! You probably have a lot of questions. Let’s begin. It all started back in 2021. A guy from Australia that did videos about restoring and upgrading old iPods set up a car channel, and that was when I got introduced to the glorious Fiat 126. These videos really do feel like a few ol’ mates fixing a car together, and that got me hooked. You can get a more historically accurate version from Wikipedia or anyone in Poland that’s old enough to remember these, but long story short: these were produced in large numbers in Poland under a license from Fiat proper, and due to the affordability, got super popular in Poland. It’s the car that put Poland on wheels. The Fiat 126 is an absolute nugget. It’s loud, slow, and makes funny smells sometimes. It looks dorky. It weights about 600-620kg, depending on how rusted it is. Its electrical circuit diagram fits on a single A4 sheet of paper. It’s me, but in car form! And that’s why I love it. With the help of my brother, I was on the lookout for one in Estonia. Most variants that were on sale were usually a different color or outside of my pay range, about 2000-4000 EUR usually. There were no guarantees that they were in good condition either. Then there was one for sale for 800 EUR. Not started for 10 years, as it got stranded due to a mechanical failure. It has a gearbox leak. Lots of things that are probably not working due to the fact that it stood for 10 years. A proper project car. That was back in Spring of 2026. I didn’t jump on it yet, as I was quite tired already and didn’t feel like I had the time and energy for a project car. On 1st of August 2026, an event named “Retrokulgurite päevad” took place. A lot of people with old cars joined the event, and we went to check it out. It was nice, there were lots of unique cars there that you don’t see every day, and a whole trolley-bus that was fitted with a diesel-electric engine to generate power for it, with it being fully street legal. But it had no Fiat 126 models on display. Bunch of Audis and soviet era cars, sure, but no legendary nuggets. That was the tipping point. Soon after that, we checked out the 800 EUR option, and deemed it worthy of restoring. This model is different from most Fiat 126 models, as this one has modern features that the old ones don’t, such as ✨ water-cooling ✨ . The engine is still in the butt of the car, but lower, and more compact. This also means that you have a small amount of trunk space, and if you fold the unusably small rear seats down, you actually have a decent amount of space for luggage, making it ideal for a summer car trip with two people. Except during any kinds of warm weather, this thing does not have anything resembling air conditioning. The transport was quite convenient, as the guy helping with the sale offered to transport it near my home for a good price, as he had some family around here. My goal: take part in this event in 2027, including the parade, with a fully street-legal Fiat 126 BIS. I’m not a car guy. Whenever a mechanic explains what needs to be done or what the issue was, I nod, while not understanding a thing they say. I may use the wrong terminology, the wrong tools, and make mistakes. But that’s fine, this is a learning experience for me. I have some help along the way from family members who know cars. I’ll do my best with the legitimately dangerous things. We had a lot of work to do, but on a high level the plan is: The first job I took on were the brakes. The front wheels were absolutely seized, and that made it impossible to push around. The goal: take them all apart, observe the carnage, work on the easy known issues and figure out the next steps. After the first session, I also realized I am lacking tools and liquids, so I got myself a starter kit for doing car things, with all sorts of bits and two ratcheting thingies. I love ratchets. This was also the time to check around the car for surprises and to do the easy bits. This thing desperately needed new wipers. These ones have this bayonet-style end on it, flat surface, with a small circular bump actually holding things together. 330-350mm should be good enough for this car. The right door window was a known issue, it would not go up and down, and a replacement window regulator part was already ordered for the car and came with it. But that was not the only issue with it. Turns out that the frame that holds the window had broken due to corrosion. While fixing the window regulator, we found what these odd cables were that went to the door. Turns out someone had attempted the installation of central locks for this Fiat. Just one problem. Anyway, after that fun discovery I got help from a family member with a welder, and fixed the point where the window holder connects to the regulator cable. Worked like a charm. A solid amount of rust-proofing agent was applied to avoid a repeat of this issue. It will happen again at some point due to the seals around the window not really existing any longer after having disintegrated, but hopefully not in a few years. Around this time I was looking into assembling a big list of parts that I now need to order, and finding sites that specialize in these cars and comparing the results against more mainstream car parts stores. One thing that became very obvious is that you really need to check what you have first before ordering any parts. Your version may have modifications, different replacement parts, and sometimes you just don’t know what you need before you take a look at things. The latter makes parts shopping especially painful if you don’t want to keep making small orders and pay for shipping, but it’s a fact of life, I feel, when working on cars. Based on my research and my location in Estonia, here’s what I’ve more-or-less settled on. This does not serve as an endorsement, it’s just taken verbatim from my personal notes. Specialist shops: higher prices, but much easier to navigate and less chances of getting the wrong parts: For more common and generic parts, such as brakes, fuel hoses, batteries and tyres, just go with whatever you have locally. In Estonia, I’ve found these places to be cromulent for this: Somewhat surprisingly, Google AI mode and Claude were quite useless for making a proper list, and you had to rely on your own measurements, knowledge of the car, Polish Fiat 126 manuals, and specialty shop listings to get the right parts. Enough about that, the work must go on. After dealing with the carnage, the car finally rolled around with ease when pushing it manually. Again, only ~620kg, so I could do it alone. With brakes removed, it was clear that the parts list had to grow to include the hydraulic cylinders. The existing ones were stuck and full of gunk that was definitely not supposed to be there, plus the rubber bits were cracking and leaking brake fluid. I still had some time, so I started tackling some other items based on whatever I felt like doing. I finally also made progress on the window regulator, but annoyingly the new part seems to have an issue, the mechanism works, but it’s crunchy-feeling and makes odd clicks. But it works. We now had the opportunity to move the car under a shed, which is optimal in September weather and doing work on the car. My brother joined in for a day to evaluate the situation and to try to do something useful with the car. Equipped with some 15W40 engine oil, green G11 coolant, wire, an empty plastic canister, fuel hoses and a lot of hope, we got to work trying to get the car doing car noises. While that was going on, I installed new side mirrors. Bling-bling! Now we’re up to two, which is the correct number. Then we started it. Engine go brrrr! It was now time to approach the slightly annoying/scary work. It’s time to install new brake hydraulic bits, but first you need to get the old ones off. That proved to be tricky. It’s also the time I learned about flare-nut wrenches, never realized that these were a thing. So far, I have only managed to get one off, with the rusted brake line also snapping, so yeah, new brake lines have entered the to-do list. Since it was clear that brakes are a total pain, I did additional investigative work on the rear lights to check what’s the situation there. The rear brake lights work and stay on constantly, which is luckily just a sensor fix near the brake pedal, but the fog and reverse lights were iffier. With the reverse light, the reflector bit just fell to bits, so that will need to be renewed. Behind that, I found lots of corroded bits and wires whose metal connectors have snapped. That’s a problem. The plastic covers on the rear lights were screwed in using the plain old screws that had corroded, and when taking them off I learned why additional washers were used, as the screw holes in the plastic had worn and there wasn’t any plastic to attach to. Buying these parts new is also possible, but I may try to fix these properly. After getting very frustrated on that one nut that I simply could not get off, I got frustrated and decided to quickly paint the rusty drum brake covers on the outside with some anti-rust paint that I had bought for testing. There is no good reason to do this, I just did it for fun. At this point, life happened, and my other cars demanded attention as well, with things like broken rear window wiper arm and a slow leak in the front left tyre. With winter on the horizon, I suspect I won’t make too much progress, but that’s a good opportunity to start researching and ordering all the parts that I need now. get it moving so that we can push it in a shed fix the known issues look around for unknown issues get the engine running do all the tricky parts to get it street legal Axel Gerstl Fiat 500, 126, 600 spare parts, tuning and accessories Arnold Classic Shop Aero Motors Baltic Bolt (not to be confused with the other Bolt )

0 views
Unsung Yesterday

“Traditional, but puzzling”

In the 1990s, users of some Unix-based operating systems would sometimes see a peculiar error. It happened occasionally when sending an email to a person you might have already sent email to before, and in addition to the error being confusing, the message itself was particularly bewildering. Let’s say you wanted to send an email to “MWichary.” Instead of a confirmation, you would see this: As many strange errors tend to be, this one was at an intersection of four different things. The cause of the error was something many of you will recognize – code being anal about lower- and uppercase. Behind the scenes, a piece of software called sendmail always assumed lowercase user names, which was true early on. “MWichary” was quietly changed to “mwichary” – a user that didn’t exist – and the program reported the literal outcome, instead of its chain of reasoning. The second part was a sort of a meta-error in the error handling routine. Sendmail correctly reported back “User unknown,” but then reflexively added whatever the system error value reported, for extra debugging color. These are usually helpful, reporting things like “Host is down” or “No space left of device” – I bet you’ve seen some of the very distinctive strings if you ever did anything adventurous in the terminal. In this particular context, however, the system error was pretty useless. “Not a typewriter” meant basically “this is a program being run in the background; it’s not meant to accept any user input or write anything for the user to read.” It’s not an error as much as a condition , and is true for a lot of programs quietly doing the operating system’s bidding. But… why was the message phrased this way? That’s just history. Computers were originally connected to typewriters as input/​output. Some of these typewriters were local, attached to the front panel, or console . Others were remote typewriters, or tele typewriters, often shortened to teletype or even tty. If you recognize these terms, that’s because they are still with us today! = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/1.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/2.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/traditional-but-puzzling/3.1600w.avif" type="image/avif"> You can see how “This doesn’t have input/​output I can do something with” can become a terse “Not a typewriter” in an era when every character feels costly , and a typewriter is your only option for input and output. Then, the string was simply kept a few decades too long, even after typewriters were replaced by teletypes, terminals with screens, and eventually Terminal and Console apps. The fourth piece was fun with grammar: the simple choice of joining the two messages by a colon made it feel like the user was supposed to be a typewriter. The message was eventually renamed. If you encounter it today, it will say “Inappropriate ioctl for device,” which I guess is an improvement. But its code remains . It’s entirely possible it will still be named that decades from now, even after we all forget what typewriters were. (The title of the post comes from the explanation in the manual for the Solaris operating system .)

0 views
Anton Sten Yesterday

Where decisions live

One of the more useful changes I’ve made to how I work has nothing to do with Figma. I’ve become much more deliberate about where different kinds of project information live. The problem wasn’t that there wasn’t enough documentation. Usually the opposite. There were Slack threads, meeting notes, design comments, tickets, personal notes, and decisions scattered across all of them. Everything existed somewhere, but finding out what had actually been decided was still harder than it should have been. Agents help with this to some extent. I can ask a question across a lot of context now instead of manually searching every thread. But that only works if the agent has access to the sources, and if those sources contain enough chronology to make sense of what changed when, because a decision without a date can be surprisingly dangerous. Maybe it was made yesterday. Maybe it was made six weeks ago and has since been reversed. Maybe it was a suggestion that everyone discussed but nobody actually agreed to. Search makes information easier to retrieve. It doesn’t automatically make it trustworthy. So I’ve ended up with a fairly simple model. Slack is for discussion. Meetings are where a lot of things get resolved, and I use Granola heavily because I don’t want to rely on memory for what someone said or why we landed somewhere. Inside each project folder in my private repo, I keep two other files: and . They sound similar, but they do very different jobs. is chronological. It contains observations, questions, things I’ve tried, details that might matter later, and thinking that is still changing. It is allowed to be messy because it reflects the work as it happens. is much stricter. It’s the record of where things landed, with the newest decisions at the top. Some of those decisions are team decisions. Others are design decisions I’ve made while shaping the experience and may never need a meeting or Slack announcement. That separation has been a huge unlock. If I want to understand how we got somewhere, I look at the running notes. If I want to know what is currently true, I look at the decisions. An agent can use both, but the distinction matters, because without it every old thought carries roughly the same weight as a current decision. You end up asking an agent a question and getting back a perfectly sourced answer to something nobody believes anymore. I think this is one of the less discussed parts of making agents genuinely useful in product work. We talk a lot about giving them more context: access to Slack, meeting transcripts, repositories, design files, tickets. More context is good, but context also needs structure. The agent needs some way to distinguish exploration from commitment, old information from current information, and a team decision from one person thinking out loud. That is partly why timestamps matter so much. A decision log with dates gives you something close to version history for the product’s thinking. If a decision changes, I don’t delete the old one. I add the new decision above it, which lets both me and the agent see that something changed instead of pretending the previous state never existed. The same applies to running notes, where chronology makes it possible to understand whether a question is still open or whether later work resolved it. I don’t think every team needs my exact setup. The useful principle is that different places should have different jobs. Discussion can be messy. Meetings can be conversational. Notes can capture uncertainty. But decisions need somewhere durable to land, otherwise the team keeps paying for the same decision twice: once when they make it, and again six weeks later when nobody can remember what they decided. Agents make that problem easier to solve, but they also expose how much discipline the underlying information needs. A searchable mess is still a mess.

0 views

Calendear

If I were to (as the story goes) get a job at Google, fix one bug, and quit, this is the bug I would fix: the same event should only be shown on your Calendar once, even if you can see the event on multiple calendars. Calendear also lets you paste an image to add a calendar entry. The models that Apple Intelligence ships are good enough to OCR the image and parse some dates out, so this can be done locally. I went through the motions, and it's out in the App Store . Not in Europe. The price can't be beat.

0 views
Jim Nielsen 2 days ago

We Need All the Disciplines

From where I sit, figuring out what to build, building it, and shipping it are all part of the art of making software. Many disciplines have emerged through the years to facilitate this work: product, design, engineering, devops, etc. We need all these disciplines to make great, dependable software (granted, in different doses). Each brings different values and judgments; each sees things the others don’t. And including all might mean going a bit slower. Human collaboration may seem less “efficient” than handing the work over entirely to the machines. But inefficiency may be the cost of collaborating with humans, rather than extracting an output from a machine. We gain not only from their judgment and expertise in a particular discipline, but from the relationship, trust, and shared understanding that blossoms from making something together. As the old proverb says: “If you want to go fast, go alone. If you want to go far, go together.” Reformulated for today: If you want to go fast, go with the LLM. If you want to go far, go with your fellow humans. Reply via: Email · Mastodon · Bluesky

0 views
daniel.haxx.se 2 days ago

OSI approved the curl license

curl started out GPL licensed, as direct inheritance from its httpget days, but in October 1998 we switched to the Mozilla Public License (MPL). In 2001, we added the MIT license as an additional license to optionally use in addition to MPL. We made curl dual licensed because clearly the MPL license caused problems for some users – primarily because it was deemed not compatible with GPL. In 2002 we dropped the MPL option and curl was from then on licensed only under the MIT license. Kind of. Because of reasons we cannot recall anymore, I decided to ever so slightly edit the language in the MIT license text around that time. (I strongly discourage anyone else from doing this, and if my time machine was functional I would go back and correct this decision.) The license text we then kept referring to and thinking about as an MIT license, was in fact not exactly MIT anymore. No one objected at the time. I can’t remember anyone really considering the implications at the time. Maybe because not that many people noticed or cared. It was in essence still the MIT license. Decades later, the SPDX project quite correctly and ruthlessly made the distinction between a proper MIT and a modified MIT matter: they created a separate and unique identified to the license curl uses. It may be almost like MIT but they deemed the differences big enough to say that the curl license is a special beast. It is since then known as the curl license. I have over the years casually kept referring to the license as MIT since it helps users understand even though it is technically incorrect. Open Source people in general tend to know the MIT license and the implications of using it. A drawback with having our own license is that it was not immediately recognized and known as Open Source or Free Software; not acknowledged and verified by FSF nor OSI. On April 17, 2026. The Open Source Initiative approved the curl license . It is since then officially arguably slightly more Open Source than before. I don’t think anyone ever doubted or that it was actually much of a drawback in adoption or usage, but it feels good to finally have this checkmark. I write about this now (many months after the fact) because I totally forgot that this was happening and I only recently realized OSI approved it back in April.

0 views
Martin Fowler 2 days ago

When Software Meets Hardware

When software meets hardware, engineering principles remain largely the same, but the sensible defaults often change. Kuldeep Singh describes our experience modernizing a large IoT fleet of battery-powered sensors. Our familiar principles remained important; what changed was how we applied them. These practices emerged through experiments, failures, and operational experience—each challenge helping us replace a reasonable assumption with a more sensible default.

0 views