ℹ️ TL;DR I taught my software test suite to record training videos. They star the real application, they narrate themselves with captions, and when the app changes, I rebuild them with one command instead of re-filming anything. The system was invented in an evening to teach one person her own custom software; the next night it made a forty-nine-video library for LocallyGrown.net. This is the story; a companion post has the technical details. Modern software developers write automated tests for…
ℹ️ TL;DR The technical companion to part one. If your web app has a Playwright end-to-end suite, you already own most of a training-video studio. This post walks through what it takes to turn one into the other: a small helper vocabulary, an injected overlay, honest fixtures, and a build pipeline, with the lessons I picked up at each step. Part one told the story; this post is the how. The pitch, one more time for the people who came straight here: I generate silent, captioned training videos…
This is how I'm grabbing optional keyword arguments in MiniJinja with a fallback to a default if the arg doesn't exist. Rust Cargo.toml[package] name = "get_optional_keyword_arg" version = "0.1.0" edition = "2024" [dependencies] anyhow = "1.0.103" minijinja = { version = "2.21.0", features = ["custom_syntax"] } src/main.rsuse anyhow::Error as AnyError; use minijinja::syntax::SyntaxConfig; use minijinja::{Environment, Error, Value, context}; fn main() -> Result<(), AnyError> { let env =…
♠ TIL: brew pin. For reasons to be elaborated in another post, I am currently prevented from upgrading LogSeq to its latest version in homebrew: % brew outdated [...] logseq (0.10.14) != 2.0.1 [...] LogSeq v2 introduces breaking changes to my workflow. I found this out the hard way. As put by Valodim in HN: And now after several years of complete stagnation, the supposed improvement is a database format to fix their technical issues, so I can no longer keep all my data as markdown files? At a…
✨ In This Edition ✨ 📟 Short-Form Content: Slopified grad ceremonies, Stochastic slot machines, RIP Google search, and spookiness long before Halloween. 📰 Long-Form Content: Two pieces! Alternatives Pt. 2 - Social Networking; and On Bill C-22, which I Lovingly Refer to as Bill C-an We Not-22. 🌞 Good News!: A lot of resistance - against AI, random tech bros deciding the future of a country, and Bill C-22. 📯 The Post-Script: Take care of yourselves! Also, no-AI lofi. 📟 Short-Form ContentChatbots…
Last week we found the first indications of support for phones as linked devices in the source code of Signal for Android. The new functionality allows users to use their Signal account on an additional Android phone, without registering a separate phone number. The linked Android phone synchronizes chats and messages with the primary device, allowing users to access their conversations from multiple phones. Source: Signal allows Android phones to be linked as secondary devices (beta) Finally.…
AI;DR – This blog post and the debug memory manager it describes were developed with significant help from Claude. If you don’t want to read “AI slop”, stop reading now. I recently added a new import functionality to the GExperts Code Librarian. During the test phase I found a nasty (preexisting) bug: After deleting a folder branch, the whole file became corrupted. On the next open it failed with a “Stream Read Error”. Deleting the branch had shown no error at all. From the user’s point of view…
This is so inventive!I’m reading a book in the Crosspoint e-reader: I select
TL;DR: wp2shell chains an unauth SQLi that can be used to obtain the admin password and then login to upload a vulnerable plugin for RCE. This can then be chained with a myriad of privilege escalation bugs to obtain root on the WP server.WordPress is one of the most common platforms out there for blogs and general sites, which is what makes it a prime target for researchers and adversaries alike. The codebase is mostly written in PHP and is on the 7th version with sub-versions and beta…
✨ In This Edition ✨ 📟 Short-Form Content: AI CV's: (Some of us) are damned if we do, damned if we don't; Is it AI, or is it a security liability!?, Is AI profitable?, and why the AI bubble is not like the internet bubble. 📰 Long-Form Content: The Alternatives Pt. II post on Social Networking has gone BearViral (I think) 🌞 Good News!: Protest works (a] vs AI data centres, and b] vs Not So Good bills); the EU Commission is bullish on Open Source; more politicians and comedians are speaking out…
For years the filament roll for my 3D printer has just been hanging from the front of my Lack tower. As I also often have long stretches of time where I don't use much filament, it tends to draw moisture from the air. This reduces print quality, so it's recommended to keep the filament dry. So I finally decided to upgrade my printing situation by adding an air-tight container for the filament roll, with a bowden tube running to my direct-drive extruder. The 3D printed coupling mount on the…
“The Fitbit Air is a really nice wearable—it’s thin, unobtrusive, cheap. But its app, Google Health, has problems. It gives you paragraphs of AI-generated text multiple times a day as long as you have premium features turned on, and it’s missing simple things like the ability to see your stats from yesterday. Fortunately, the iPhone app Bevel is now compatible with Google Health, which means you can replace the app entirely.” Bevel is now free to use, and it has a few features that Google…
I updated my Uses page. While updating it, I had fun considering the items I no longer use. A lot has changed!
I love this demonstration from Ghost Font: The Anti-AI Font Only Humans Can Read. Your browser does not support the video tag. The explanation is very clear and as a proof of concept it works well. However like the newsletter that sent me there, I do wonder, how long will it continue to work.
Here are two Mac friction points: It's been 16 years since Mission Control was released, and "Desktop 3" is still "Desktop 3." Apple's API doesn't expose Space naming to any third-party app — there's no system-level hook to hang a label on. Screen Time gets activated when an app launches and stays that way as long as the app is open; the clock keeps ticking even if the app is minimized or buried six windows deep on your desktop. To me, that makes it practically useless. There's an app that…
I discovered Mole in May, and it has become an instant favourite.
After implementing support for light/dark themed MermaidJS graphs in my CI engine of choice, I was pretty happy with the solution. But after a few more months of iterating on drafts through my deployment chain I got tired of the time it took – often more than 5 minutes per build! Time to fix that.
A while back I shared a small tool for styling Bear blogs without wrestling with DevTools overrides: bear.css.observer. I've improved the UI a bit since then. The panel is cleaner, the editor is easier to live with, and the overall flow feels less like a hacked-together demo. The bigger update: you can share themes with anyone now. Hit Share, pass a quick check, and you get a link. Whoever opens it can unlock the theme and load it into their own playground, including the Bearblog subdomain you…
One of my favourite tiny details in this website is my non-breaking spaces. I have code that looks for phrases like “5 cm”, “New York”, or “Objective‑C”, and inserts a non-breaking space/hyphen so they’ll never be split across multiple lines. This is the sort of typographical nicety that would be handled by a professional typesetter if I was writing a printed book with a fixed layout, but that’s not how websites work. My website is viewed at lots of different sizes, and browsers choose where to…
Somewhere in the last year, a bunch of us who hadn’t shipped real code in years quietly started shipping again. Not reviewing it. Not architecting it in a doc and handing it off. Actually building it. And loving it.
Most influencers, creators, and professionals use Instagram to offer some service or product to their audience. In order to attract a wider audience, these individuals write a certain keyword at the end of their post(e.g., INTERESTED) and ask their audience to mention that keyword to avail themselves of the offer. Oftentimes, it has been observed that they are not able to reply to each and every person individually due to the influx of comments. Impatient commenters start leaving negative or…
Sub-processor lists publicly leak the SaaS stack of any B2B company. Learn how to read them to uncover the tools your competitors use - and get alerted when they switch.Want to know what SaaS stack a B2B company runs on? You don’t need a data leak or an insider - the company publishes it for you. Look at their sub-processor list. Most B2B companies are contractually required to disclose every third-party vendor that touches customer data. These sub-processor pages are public, they’re kept up to…
Sayid 0.8 is out! It’s the third release since I brought Sayid back from the dead a couple of weeks ago, and it has a clear theme: making the tool easy to pick up. The revival releases were mostly about the engine - bounding the recording, consolidating the API, getting the data out. This one is about the experience. If you’ve ever bounced off Sayid because you couldn’t figure out what to press, or what it was trying to tell you, 0.8 is for you. It started with a bug report Shortly after the…
This week I had the pleasure of attending Software Should Work (2026), henceforth SSW. This was my first time attending a conference and it was really fun so I thought I would write about it. Firstly, a huge thank you to the organizer, Isaac Van Doren, for making it happen. I'll be going through the days and their talks and anything interesting that happened outside of talks. I won't be trying to summarize the talks but what I took away from them and will be handing out made out demerit points…
Today I sent this email to orders@firstmfg.com, the customer support email address for First Manufacturing Co., which sells motorcycle riding gear, most notably vests and jackets: Today I received marketing spam from info@leathernewyork.com. The email address to which the spam was sent, [elided], which is also the address from which I am writing to you, is a unique, privacy-protecting email address which was only ever given to First Manufacturing Company, specifically when I placed orders…
Projectile 3.2 is out!1 That’s the third Projectile release this month, and by now you probably see the pattern - a whole lot of nothing for a couple of years, then everything at once. Where 3.0 was the big cleanup and 3.1 the pile of long-standing feature requests, 3.2 is a focused release with one clear theme: search and replace. Plus one bonus feature I’ve wanted for ages, but more on that below. Replace, but with a preview projectile-replace has always been one of those commands that…
The answer is in economics, not talent. The biggest hurdle for an Indian company trying to develop frontier model is that right from the get go, it has to compete with Anthropic and OpenAI free plans + all Chinese open weight models. Chinese models mostly flourished due to the demand from their domestic market which OpenAI/Anthropic couldn’t meet as they’re unavailable in China. This unmet demand created space for innovation. China knows this story well, but here in India, we like unfettered,…