Codeberg Pages 2: Setting Up Subdomain for git-pages Back-end
Read on the website: Codeberg Pages moved to a new back-end (git-pages.) This caused me some pain. But I’m now on the other side of it, and I want to share some gotchas.
Read on the website: Codeberg Pages moved to a new back-end (git-pages.) This caused me some pain. But I’m now on the other side of it, and I want to share some gotchas.
by Kevin Wammer Kevin talks about his opinions for various use cases for AI and LLMs. Read post ➡ I started reading this post and thought to myself "oh here we go, another piece about how awful AI is..." but as I got further into it, I found myself nodding along. While I don't feel as strongly as him about AI generated images I do agree with the premise of everything he said. It's refreshing to see some pragmatic opinions on AI and its uses as a tool. Ended up being a good read. 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 .
1. Oh damn, you caught me in the middle of something. I was just trying to make a list of Windows versions for a friend – in Google Docs, of all things. Should be easy. I already grabbed this one off of Wikipedia and massaged it a bit, but it’s still kinda ugly: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/1.1600w.avif" type="image/avif"> I don’t love the tight padding here. Let me try something bigger, like 0.08 inches? I’ll just select the first column and punch the number in, and… What the hell!!! Jesus. What happened? Okay, let’s press ⌘Z to get out of it… Oh, no. Maybe I can press Esc… 2. Okay, here’s what happened in precise detail: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/5.1600w.avif" type="image/avif"> I started to type “.08″. Pressing ”.” was okay, although it showed a pretty thirsty tooltip: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/6.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/6.1600w.avif" type="image/avif"> upon adding “0″ Docs removed the ”.” and so the output was just “0”: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/7.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/7.1600w.avif" type="image/avif"> upon adding “8” Docs removed the leading zero and we ended up at just “8″: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/8.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/8.1600w.avif" type="image/avif"> the page saw the resulting “8″, applied 8 inches of padding (a hundred times of what I wanted!), and just showed it to me in real time, resulting in a profoundly unrecognizable table that looked like something went horribly wrong, pressing ⌘Z didn’t do anything. pressing Esc only removed the focus from the input field. I believe I can explain exactly the chain of reasoning and bugs here: So, in effect, my ”.08″ got mangled to “8”, applied immediately, and wasn’t easily undoable. 3. This feels like a great example of the Swiss cheese model in action: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/9.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-swiss-cheese-model-pt-2/9.1600w.avif" type="image/avif"> If just one of these bullet points below behaved differently, I would not end up in this situation: All of these decisions made sense and didn’t feel dangerous or important in isolation. Together, the holes in cheese aligned perfectly, creating a pretty scary experience. (Thank you to Ezra Spier for sharing this with me.) #bugs #flow #google #preview I pressed Backspace to delete an existing zero: I started to type “.08″. Pressing ”.” was okay, although it showed a pretty thirsty tooltip: upon adding “0″ Docs removed the ”.” and so the output was just “0”: upon adding “8” Docs removed the leading zero and we ended up at just “8″: the page saw the resulting “8″, applied 8 inches of padding (a hundred times of what I wanted!), and just showed it to me in real time, resulting in a profoundly unrecognizable table that looked like something went horribly wrong, pressing ⌘Z didn’t do anything. pressing Esc only removed the focus from the input field. To start with, any number entered is immediately previewed on the left. This generally feels good! Instead of fixing my input on commit (Enter), the input is being rewritten on the fly, as I’m typing. This wouldn’t be my recommendation, but I can this design decision. If I typed just “08,” it would be rewritten to “8″. This makes some sense since it normalizes the numbers, and makes them consistent. If I typed ”.1″, it would be rewritten to “0.1″. Sure, fine, a similar idea. However, typing ”.0″ rewrites it to just “0”. I believe this is a bug or a lack of imagination – it should be rewritten to “0.0″. ⌘Z doesn’t work. I believe this is a bug where system’s rewrites of numbers don’t put the change on the undo stack. (As a matter of fact, it appears worse than that – pressing ⌘Z a few more times ended up rewriting my number to “80″, which would have made this even worse!) with numbers not being rewritten on the fly, there would be no problem, with ”.” not be aggressively rewritten to “0.”, there would be no problem, without live preview, the rewrite could’ve been caught and fixed it by hand, instead of panicking seeing a huge change on the screen that felt like data loss, with a fully functioning input field undo, the moment of panic could be reverted, with Esc to abort instead of commit, likewise.
Part of the reason why I’m at Thoughtworks is because I’d like to see a software development organization founded on technical excellence as an example for the rest of the industry. The trouble is that I have little aptitude or inclination for the hard work of building such an organization. So I rely on working with people who are prepared to actually put the effort in. A key partner in all of this is Rachel Laycock , who is the global CTO of Thoughtworks. Not just is she far better than me at running a technology organization, she’s also a keen observer and connector of ideas. I’ve been urging her to write these down, even if her busy schedule makes it difficult for her to compose them into something substantial. Happily she’s starting writing “Rachel’s Ramblings” Fast, imperfect, thinking out loud. Naming ideas early rather than waiting until they’re fully formed. Because the reality is, most of what I do day to day isn’t answering known questions. It’s spotting patterns and asking questions we haven’t quite figured out yet. ❄ ❄ ❄ ❄ ❄ My colleagues in Europe are organizing XConf Europe in London on September 11th . The sessions examine what happens when agentic systems meet compliance, how to run sovereign models, performance patterns in data migrations and how to safely navigate legacy codebases. Lu Wilson will give a keynote on ‘Jam-oriented programming’. ❄ ❄ ❄ ❄ ❄ Noah Smith recognizes the high usage of AI, and its impressive feats - but also that there aren’t signs of massive productivity growth or job losses . This may be the calm before the storm, but Smith thinks there may something else in play. He quotes a metaphor from François Chollet One of the biggest misconceptions people have about intelligence is seeing it as some kind of unbounded scalar stat, like height. “Future AI will have 10,000 IQ”, that sort of thing. Intelligence is a conversion ratio, with an optimality bound. Increasing intelligence is not so much like “making the tower taller”, it’s more like “making the ball rounder”. At some point it’s already pretty damn spherical and any improvement is marginal. The thought here is that intelligence in the sense that we know it, isn’t something where there’s a lot of room for massive improvement. That doesn’t mean AI won’t be “smarter” than us in other respects, after all even without AI my computer is better at me than remembering what I’ve agreed to do over the next six months. But even if AI doesn’t get smarter than humans, it can gain by being more replicable. Not just does this make it cheaper to use, perhaps more importantly it makes it more responsive. While I might harrumph at how slowly The Genie responds to my queries, it’s still far faster than contacting a human. Smith continues by surmising that AI may be able to make sense of phenomena that can’t be reduced to simple laws, but can only be understood by something able to comprehend a multitude of details: there may be laws of the universe that humans can’t understand but AI can. I call these “cloud laws” — causal regularities that can be exploited by technology, but which are too diffuse and complex for an individual human being to either intuit or communicate. His thought is that even if there isn’t any space for AI to get more intelligent than humans along the lines we are used to, that they can open up new directions. As well as these cloud laws he also thinks that AI can understand human systems that rely on the kind of tacit, distributed knowledge that human organizations build up over time. My take-away here is that AI won’t seem more intelligent in the way that we typically frame intelligent, but more intelligent in different ways. The converse of which is that the human value comes in artfully combining our human nature with these new spells that The Genie can cast. ❄ ❄ ❄ ❄ ❄ Especially in our profession, we’ve seen increasing emphasis on the importance of data. However I’ve observed that most people still struggle to understand the message data is telling us. One of the reasons I’m interested in election forecasting is in how they communicate their insights, especially since so many people have difficulty with probabilistic forecasts. (I often wonder how much being a board-gamer has helped me be comfortable with this, all that time interacting with Combat Results Tables in my youth must have benefited me somehow.) 50+1 (one of the successors of 538) have published a little explainer on how they designed their 2026 election forecast page . There’s a good discussion of the logic behind their simulation histogram, I like how they use a text annotation to explain one point, giving the reader enough guidance to understand the rest of the graphic. They also tackle the knotty problem of visualizing geographical data on the house races. There’s a common visualization error in the U.S. using choropleth maps that leads to large areas of the landmass shown red, implying dirt votes rather than humans. Their approach to this, using dots on the map, helps visualize both the politics and the population density. They also explain how to deal with this kind of data on small screens. Lastly they describe their approach to tabular data, and how this is the right place for lots of details, together with affordances to help both casual and power-users navigate those tables. ❄ ❄ ❄ ❄ ❄ I’ve kept an eye on Alex Stamos for a while now, as he’s a sensible voice on security and safety. He’s posted a newsletter on substack that casts an intelligent eye over recent safety issues with AI . He makes a clear critique of recent US government actions around LLM models On a Friday afternoon at around 5pm PT, Anthropic was forced to shut down a system that had been plumbed into coding agents, SOCs, customer service bots, and countless products. […] This had the immediate effect of injecting political risk into the US AI ecosystem for both American and non-American customers. It signaled that you cannot depend on American AI infrastructure because, at any moment, an unwritten, capricious, and legally dubious justification could be used to yank that infrastructure from underneath your feet. When Fable was turned back on, it was much dumber and less useful to cyber defenders While Fable was down, Z.ai was taking advantage of the free market and permissionless innovation culture provided by the (checks notes) General Secretary, Politburo, and Communist Party of the People’s Republic of China, and released GLM 5.2. With 753B parameters, it falls a bit short of Opus 4.8 in most tasks but is extremely efficient and is small enough to be trained and hosted in many enterprise contexts. With an MIT license it can be fine-tuned with a wide range of techniques and used by any customer in any context. Since then, Kimi K3 has rocked the industry by providing Fable-like performance As he highlights, one of the biggest dangers with the danger of shutting down a frontier model is that it can cripple an organization’s defenses: Hugging Face tried to use an Anthropic model to defend itself during an active incident, got blocked by the classifier, and moved to GLM 5.2 on an emergency basis. Their advice to everyone else was to keep an open-weight model on the shelf for defensive cyber. On the whole, he sees it as a Good Thing that these model escapes have happened: The OpenAI attack against Hugging Face, and Hugging Face’s excellent write-up has given us a preview of what a standard AI-enabled attack might look like in a matter of months. It’s good that we got this warning shot. Nobody got hurt, the target was a sophisticated actor with the ability to defend themselves and the ability to give us a detailed write-up, and OpenAI turned the model off. He follows up by saying that all of this is signal that we should “stop talking about AI finding bugs, focus on fixing them”. These modern LLMs can do much to fix bugs and improve security, and people need to work on that rapidly to fix holes before less reputable folks than OpenAI find them. Then figure out how to harness LLMs to introduce this kind of checking into the everyday build process, so that this kind of analysis just a step in the continuous delivery build pipeline. I agree with him both that open-weight models should be legal, have their upsides, but will also be used for many bad things by bad actors. Both the industry and government agencies need put serious effort into figuring out how to mitigate these risks. Where I would go further is to say the same is true of the closed-weight models too. Although closed weight models are subject to greater controls, the same fundamental issues apply. He rightly takes the foundation model companies to task: There is an old saying I pass down to my students when I give them career advice - if you are a jerk to people on your way up, don’t expect them to catch you when you are on your way down There’s a lot of sound advice for model companies, the government, defenders, and venture capitalists. We will go through some rough changes, I just hope that we will indeed come through it with a better society. On the whole, that’s happened with previous technological changes like this, but past performance does not guarantee future results. ❄ ❄ ❄ ❄ ❄ The Economist has a good article on the impact of AI in China . China has made an all-out push in ai, under the conviction that, in its competition with America and the rest of the world, dominance of the technology is an almost existential necessity. […] But the party is increasingly concerned about how ai will displace workers. Robots and AI are appearing in an economy that’s struggling after the recent property crisis. The Chinese government is opposing firms using AI to cut jobs. China will need robots: its population will shrink by 25% by 2050. But with less working people, there’s less financial support for pensions. Many countries have to deal with shrinking population, but China’s challenge is particularly acute. ❄ ❄ ❄ ❄ ❄ Rob Bowley: I go on holiday for a few weeks and we’ve already moved on from Loop Engineering to Graph Engineering The half-life of a paradigm is getting shorter than my annual leave My prediction: neuro-symbolic engineering by the end of August, at which point we’ll have gone full circle and reinvented Prolog
i finished Helen of Nowhere more than a week ago and i am still thinking about it. mostly just laughing. when i finished it. i immediately laughed for 30 minutes. fell asleep giggling. work up laughing. incredible book Thank you for using RSS. I appreciate you. Email me
Are these forumulas elegant? No. Do they reveal some deep insight? Also no. But that's the life story of x86: it's a bit of a mess, justified by decades of history, and it gets the job done regardless.
Modular GPU Programming with Typed Perspectives Manya Bansal, Daniel Sainati, Joseph W. Cutler, Saman Amarasinghe, and Jonathan Ragan-Kelley PLDI'26 GPU programming is great, who doesn’t want to copy memory with thousands of threads? The trouble is that some operations require multiple threads to cooperate, and current GPU programming languages only have kludgy ways of expressing such cooperation. For example, see the fine print on the function from the CUB library (quoting from the paper which quotes from the CUB documentation): Computes a block-wide reduction for thread0 using the specified binary reduction functor. • The return value is undefined in threads other than thread0. • A subsequent __syncthreads() threadblock barrier should be invoked after calling this method if the collective’s temporary storage (e.g., temp_storage) is to be reused or repurposed This paper introduces the Prism language, which uses perspectives to bring some much-needed hierarchy to GPU programming Prism supports 3 coarse-grain levels of nesting: , , . indicates when code/data applies to pairs of threads. applies to a warp of threads. is used to indicate a group of 8 blocks. Grids are broader (i.e., coarser) than blocks, which are broader than threads. Also, is broader than (this only applies when the larger integer is divisible by the smaller one). Each statement is associated with a stack of perspectives, and the operator can be used to push an element on to the stack. For example: Similarly, local variables are annotated with a perspective, to indicate how they are shared among threads: Perspectives are the foundation upon which Prism builds higher level concepts and a type system that enable hierarchical parallelism to be expressed. This allows for code that is more modular and easier to reason about than the typical flat parallelism found in other languages. For example, Prism statically disallows a code operating at a broad perspective from reading the value of a variable declared with a narrow perspective (only read up is allowed). Similarly, local variables can only be written from a perspective that is the same as the variable’s perspective or broader ( write down is allowed). Fig. 22 compares various Prism implementations of a matrix multiply against , not too shabby. Source: https://dl.acm.org/doi/10.1145/3808290 Dangling Pointers The interface exposed by GPUs doesn’t natively support nested parallelism. I wonder if there is an opportunity for hardware to take advantage of hierarchically information that is available at the Prism level of abstraction. Thanks for reading Dangling Pointers! Subscribe for free to receive new posts.
I've been receiving lots of "Undeliverable Mail Returned to Sender" lately for Protohackers signup attempts. Protohackers login is via a "magic link", so attempting to sign up or log in results in sending an email. But none of the email body is user-controlled, so I don't really see the logic in abusing this form to spam people. One email address has been put in over 100 times over the last 3 days, and I received "Undeliverable Mail Returned to Sender" each time, because it is a GMail address that doesn't exist. What's the logic in this? Most of the email addresses did exist however and presumably the spam either reached them or was filtered by GMail. Some ideas I can think of: someone griefing particular users by bombarding them with signup spam for hundreds of services they don't use someone trying to get me specifically banned from GMail by making me send lots of unsolicited emails to GMail addresses some grey-hat chaos-monkey type operation trying to nudge all website operators into locking down forms that can cause email sending a weird botnet communicates internally by triggering Protohackers signup emails to itself, and the timestamp of the email allows them to reliably communicate about 10 bits at a time?? I think the first one is the best idea but I still don't really see why you would do this. Although it's a better reason than the others, it still doesn't seem like a good enough reason to actually bother. I did already have a rate limit of 60 emails per recipient per day, and a burst limit of 5 per recipient per minute. I don't really want to stop people from being able to log in as many times as they need to, but getting 60 spam emails per day for a service you don't use is obviously too much. I did tighten the rate limits to 10 per day and 2 per minute, but really we don't want to be sending any spam. At any rate, I wanted to stop this. The goal is to stop whatever bot is sending these emails, without impacting legitimate users ( be they man or machine ). I noticed that all of these signup attempts were originating from the same netblock: 169.58.0.0/17 , apparently operated by Contabo . I'd rather not specifically discriminate against particular netblocks, both because legitimate users could be using the same netblock, and because a bot can easily change its hosting or use proxies. But the fact that it always used the same netblock makes it easy to identify, and the fact that it comes back every few minutes makes it easy to investigate. So my first mitigation was to add a tiny JavaScript proof-of-work, on the basis that a simple bot is probably not executing JavaScript. I was surprised to find that this actually didn't help. As an experiment, I kept ramping up the difficulty on the proof-of-work, and the bot was still successfully submitting the form even when it was taking over a minute to calculate the proof-of-work. So I've left the proof-of-work in place, but back down to a trivial level so as not to inconvenience real users. The next thing I did was selectively put the Bot Forensics collector script on the page only for clients within 169.58.0.0/17, with the idea that this would quickly reveal identifying features of this particular bot that I might be able to filter on without causing collateral damage. I was disappointed to learn that the bot never posted off the Bot Forensics beacon. If you were using Bot Forensics as general-purpose bot detection, this would kind of be the ideal case. If you refuse to send emails for any session that has not posted a good beacon, then this misbehaving bot is blocked and you don't really care what the beacon would have contained. But Bot Forensics is a bit too invasive for me to want to put it on the page for every user, and by this stage I was mainly motivated to learn more about this particular bot. And in any event, I don't actually have a problem with bots using the form in principle, I only have a problem with abuse of the form, whether by bot or by human. I wondered if the reason the bot wasn't sending the beacon was simply because the proof-of-work blocked the page so it couldn't compute the beacon. So my next experiment was to put a 10-second timeout between completing the proof-of-work and sending off the email. The idea was that the page would then have a good 10 seconds in which to send off the Bot Forensics beacon. Surprisingly, the 10-second timeout inhibited sending the email! Even though it previously spent over a minute calculating the proof-of-work. The bot must be waiting for inactivity and then closing the page after something less than 10 seconds. A 10-second delay is still a bit much to be imposing on legitimate users though, so I tried reducing it to 3 seconds, and then the bot was back to successfully sending emails. Although we weren't getting the full beacon content from Bot Forensics, we could still see: the bot is fetching the collector HTML for the iframe it's fetching other resources included inline in the HTML it's fetching resources requested by the JavaScript code it is able to send POST requests for exception logging but it is not POSTing the full beacon (The exception that we log is expected, it's just a failure trying to fetch a resource which doesn't exist.) I have a list of all of the User-Agent headers seen from the Contabo netblock . I'm not saying all of these are the malicious bot, but I suspect the majority are. ChatGPT points out that this list is probably from UserAgentString.com , good find ChatGPT. Despite seemingly choosing a User-Agent at random from that list, the sec-ch-ua header always lists "HeadlessChrome", example: So this does give us one way to block this bot with extremely low chance of causing collateral damage to legitimate users: we refuse to send email for any request that has "HeadlessChrome" in the sec-ch-ua header but not in the User-Agent header. That way we still don't block legitimate users even if they are using headless Chrome, as long as they're not messing with the User-Agent header. Let's keep that one in our back pocket, I'd really like to get a bit more of a smoking gun. I made the Bot Forensics collector send back a much smaller beacon, synchronously, and discovered: timezone is set to Europe/Berlin screen size is 1280x720 it doesn't have any custom functions injected into the page, that's disappointing, they're normally my favourite thing to look at navigator.platform is "Linux x86_64" but navigator.userAgentData.platform is edited to suit the User-Agent header So apart from having "HeadlessChrome" in sec-ch-ua but not User-Agent , the mismatch between navigator.platform and navigator.userAgentData.platform is another thing we could filter on. This bot does sometimes use a real headless Chrome User-Agent , and it is its most common one, but the vast majority of requests use the other weird ones. At this point I noticed one other bizarre behaviour from this bot: shortly after sending the signup email, it tries to load the user profile page, even though that page is not linked from the signup page. What's the angle there? Maybe this is some kind of automated vulnerability scanner that thinks it might be able to access random people's accounts simply by sending the email and speculatively browsing to the profile page? I literally don't understand why you would even check this. Even if it worked, which it doesn't, even if they click on the link, because that only authenticates the session that clicked the link and not the one that sent the email... but even if it worked, what benefit do you get from hacking someone's Protohackers account? Anyway, I'm out of time and stopping for now. So changes in response to this bot are: email sending now requires a (tiny) proof-of-work, and the JavaScript code includes a 1-second sleep; this doesn't stop this bot but might stop others rate limits reduced from 60/day and 5/minute to 10/day and 2/minute backend now refuses to send email for clients who have inconsistent "HeadlessChrome" and "Linux x86_64"; this blocks almost all emails from this particular bot And the Bot Forensics collector is now removed, even for clients from Contabo. If you find you now have trouble logging in to Protohackers, I'm sorry, please let me know. Also if you can work out what this bot is actually trying to achieve I'd be really interested to know. If we have to do any more on this, I think I might try a proof-of-work system that starts out easy but drastically ramps up in difficulty based on how many emails have been sent to that recipient, or from that client netblock, in the past day. someone griefing particular users by bombarding them with signup spam for hundreds of services they don't use someone trying to get me specifically banned from GMail by making me send lots of unsolicited emails to GMail addresses some grey-hat chaos-monkey type operation trying to nudge all website operators into locking down forms that can cause email sending a weird botnet communicates internally by triggering Protohackers signup emails to itself, and the timestamp of the email allows them to reliably communicate about 10 bits at a time?? the bot is fetching the collector HTML for the iframe it's fetching other resources included inline in the HTML it's fetching resources requested by the JavaScript code it is able to send POST requests for exception logging but it is not POSTing the full beacon timezone is set to Europe/Berlin screen size is 1280x720 it doesn't have any custom functions injected into the page, that's disappointing, they're normally my favourite thing to look at navigator.platform is "Linux x86_64" but navigator.userAgentData.platform is edited to suit the User-Agent header email sending now requires a (tiny) proof-of-work, and the JavaScript code includes a 1-second sleep; this doesn't stop this bot but might stop others rate limits reduced from 60/day and 5/minute to 10/day and 2/minute backend now refuses to send email for clients who have inconsistent "HeadlessChrome" and "Linux x86_64"; this blocks almost all emails from this particular bot
Nvidia makes another deal, this time with a frontier lab; Anthropic's revenue continues to amaze; and maybe data finally is oil.
Currently taking stock of my social life, and throughout life, the same patterns emerge. I’ve always been a more solitary person. I’m an only child, and my parents were rather neglectful and homebodies as well; so we never really went on trips, they never took me to the playground or anything. I played in my room, alone. I went out to play in the shared garden by myself, I went to playgrounds and forests alone (I grew up in a small town/village). I occasionally played with other kids I met outside, but not always. I have always preferred my hobbies to be something I don’t need other people for and that I can just start on my own, whenever, exactly because of the way I am and how I grew up. At kindergarten, there was one other child I talked to and played with, and absolutely no one else. If she wasn’t in that day, I’d just be alone. I couldn’t stand anyone else. Having anyone over or having to bring me to any other kid’s place was always treated as this impossible task by my mother, and would result in her being mad at me and abusing me, so I soon just didn’t ask for that anymore most of the time. I didn’t wanna cause any issues. Later on, it meant a lot that I was able to help out at horse stables, earn riding lessons, and have community there. Adults who trusted me, a topic to bond over with people (esp. people my age), a shared interest, shared responsibility. I wasn’t ever enrolled in any team sports or anything, so that is the closest I had. I’m no longer involved in equestrian sports for a multitude of reasons, but I’m glad it was there for me back then. At least I could socialize there. School was a sensory nightmare for me, extremely draining, overstimulating. My skin felt like it was raw, every sound felt like nails on a chalkboard. I had to use the breaks between classes to retreat to a quiet place and recover before the next class, but this also meant never hanging out with people between classes. The few times I tried, standing with others in these giant halls, people talking loudly and screaming and laughing everywhere around us, I just zoned out. I could barely listen or think of anything to say because everything was too loud. Then I entered the next class regretting how I spent my break. I always thought things would improve with time. Next year, or when I reach university, and so on. But it never did. At my first university, I tried hard to make friends and attend events, but most connections simply fizzled out, and people dropped out. It didn’t help that I could otherwise barely interact with university life; the public transport home stopped at 9pm (bad for parties!), and other than that, my mother used our dog to guilt trip and control me all the time. I was going in for a class or two and otherwise staying home for him. I could never stay after class for lunch or going to a café together because she’d be throwing a fit and I relied on her for housing. After that, I started a traineeship with some school parts. It started promisingly, and I indeed felt like people liked me in class. Unfortunately, trying to see anyone outside of it was like pulling teeth; I tried to organize hangouts at the park, barbecues, game evenings at my place etc., but most never materialized. I think some people showed up at my place once, some cancelling shortly prior, the few coming like 1-2h late and leaving early. It never happened again. After the traineeship ended, we all dispersed and didn’t keep contact with one another. Surely, things would improve with full time work, right? Not really. It’s harder to bond with coworkers who are either much, much older or live a very different life in general, especially with kids, houses, vacations. I know what to ask them, and I do - is your aunt feeling better? How is your kid? Did he pass the difficult exam? What summer vacation are you planning/how was Egypt? How’s the garden project coming along? But they don’t know what to ask me, and I totally get why. They can’t ask me about things they bond to each other about, and they don’t understand anything about me. Sometimes they ask if my wife found a job yet, and I still have to give the same answer, and then that’s it. I share stuff about myself, but am never asked about that. I thought things would change when a new, similarly young coworker started here and got seated in my office. I put a lot of effort into being her guide, showing her everything, helping with the start, complimenting her work, bringing her coffee one time (which she didn’t touch for the entire day and then probably dumped, woohoo), spending lunch together, and all that. But now, 2.5 years or so later, I have to admit it failed again. I make sure to always ask about how she is today or how her weekend was when I come in, I share stuff from my life to signal openness and to give her something to ask about or something, but it doesn’t help. We greet each other, say we feel alright, complain about public transport, and then spend 6-8h in complete silence in the same room until one of us leaves for the day. There is no ease, no jokes, no conversations emerging inbetween. I also feel like when we have good weeks where I try extra hard and it flows better, it takes just one office day of being a little more quiet, or just a week of time off or sick, and then I have to start at zero again. I feel that way about lots of people, as if my progress with them is constantly reset by something. Everyone else seems to bond just fine with her (and vice versa) despite the age difference and different lifestyle, so I guess it really wasn’t that; it was just me. I often have to rely on a group setting at work to find out stuff because people will just not tell me much directly for some reason. Now that I have been in an online/distance university since 2022, there is even less contact with other students. Everyone I befriended in the beginning or had a study group with dropped out and disappeared. I no longer even join any groups or interact much because it’s pointless; I study the material, do the exams, and that’s it. All alone, no one to talk to about it, no one to ask or practice with. It’s easier that way than dealing with the flakiness. In general, I think I just don’t seem to read people correctly, or I put too much stock in what they say or do, somehow, and expect it to follow the indicated pattern? This year I suggested meeting up at a conference in a group, someone else made a group chat for that meetup, people joined voluntarily, and then I didn’t see most of them because they made no effort actually making plans in that group chat or reacting to my efforts to meet up. No feedback, no replies, no “sorry can’t make it”, just silence. You’d think there’s interest when people accept the idea, make a group and join it, but apparently I must have misread the intentions somehow. In the era of nonchalance, I guess it’s my fault for showing interest and enthusiasm. I’ve also noticed that online friends, especially the ones more far away, and general real life friends that live very far away (because you or they moved away) make much more of an effort. They text more, they make online plans, they make an effort to meet irl when it fits. Meanwhile people local to me… you might as well not exist. I’ve tried to change LGS/Magic the Gathering connections into something deeper and broader, and it just fails. I make an effort to ask people about their interests, they don’t ask back. I make an effort to note that someone’s cat has been sick, and to check back in about the cat’s health later, and get completely ignored. Or the usual “This was great, we should do this again soon!” and then you’re the only one trying. My wife and I are really great hosts. We have an option for guests to stay in my wife’s apartment. We stock the fridge for them. We bake cookies and gift people bread we bake. We cook great meals for people when they visit. We have a decent collection of boardgames and card games we invite people over to play, or bring to their place. We can watch your pets while on vacation, we can water your plants, we can bring you soup when you’re sick. We’re happy to go to museums and cafes and other stuff with you. But for some reason, actually establishing all that is painfully hard with local people. People love to complain about a loneliness epidemic, but at this point, I consider that many people just wanna be lonely and make no effort to change that, or are saturated with what they have, or don’t actually have what it takes to build and maintain a “village” (“It takes a village”, if you want a village you have to be willing to be a villager and help, yada yada). Me too, probably; there seems to be something wrong with me, it’s probably my autism. But at least I try, which is more than I can say for most people who live close. Right now, almost all friends I have are through my wife. They are hers, or ours, but never just mine. I even “lost” people to her when I introduced them. The vast majority of days, the only person I talk to in real life is my wife. 1 of 2 office days per week, I don’t say a single word at the office because I don’t see anyone; everyone is in their own little room, and my team mates are not there. I don’t really grocery shop, and when I do, I use the self checkout. Cashier contact gives me nothing. Anywhere in public, no matter if shops or public transport, I don’t get these sort of whimsical stranger interactions others do. I make a joke and people don’t get it or don’t hear it, people say something to me in public and I am too surprised to say something of value or anything that would keep the conversation going, and the moment passes. The same happens in work hallways or the work kitchen. I chat occasionally via Matrix or Signal, and that’s it. Every other month or three, we play Magic with some people and I get to socialize. Or friends from far away come visit. But other than that, nothing. And I don’t think anything is gonna change that. I don’t understand people, and they don’t understand me. The only times it has ever really worked reliably is if they were romantically or sexually interested. There is always this invisible wall between me and other people, and in many cases, an effort mismatch and an importance mismatch. I’m at a point where I might just accept it; hold the people close who really love and understand me, and otherwise be content with my solitary little hobbies and special interest. At least those can’t leave and aren’t unavailable. It just sucks when everyone you rely on so much (because you don’t have many others), have what feels like a sea of people available to them. You always have to share them, but they never have to share you. Published 18 Aug, 2026
I have previously blogged about doing RF surveys using software defined radio. The most interesting aspect to me has been to inventory the business of the different WiFi channels, in order to not clash with neighbouring access points. I’ve now written better software for doing these surveys. 2.4GHz is a mess (overlapping channels), has much less spectrum, and goes through walls more than 5GHz worth. There’s also a bunch of other crap on 2.4GHz polluting the airwaves, including microwave ovens . So if you’ve thought about this at all, you know to stay off of 2.4GHz. It’s tempting to get a QuadRF in order to add more dimensions to the 5GHz RF survey, but so far I’ve resisted buying this particular toy. I’m plotting the spectrum power in both dB and linear. With linear scale the busyness really pops. As expected, this is a mess: There’s even a bunch of noise between the channels. Is it microwaves? Or someone running the 1/5/9/13 channel split? No, if anything it looks like channel 14, which is not legal here. As a power WiFi user I started using U-NII-3 channels (149-165) as soon as they became available here. On Ubiquiti access points you configure it as channel 161, and increase the spectrum width. So you could say that I’m using 80MHz channel 155. But (and this rings a bell having read up on this before), it actually uses only the primary channel, unless a node is requesting more bandwidth. So channel 161 is the more busy 20MHz, and channel 149, 153 and 157 are the secondary 20MHz chunks. We can see a very different usage across the four channels, both when busy and when running to generate some network load. It is a bit weird that the peak power is not the same across the channels. Sure, I can see the average being higher on channel 161, but why is the maximum lower? The newer extension enabling 80MHz channel 155 in the UK is not supported by all devices. For example, my Pixelbook can sometimes see the network, but when connecting it’ll go “oh shit, that’s not allowed in the UK” (which it is), and disconnect. I tried tracking down if this can be fixed with a firmware update, but while I believe it’s technically possible, the company that has the ability to replied that it “can’t” be done. I’m pretty sure it “can’t” be done solely for business reasons, but even if that’s true, it doesn’t change the fact that I hit a brick wall and it’ll never happen for the Pixelbook. Some other devices can’t connect, but they’re low bandwidth devices and it’s fine to stick them in the 2.4GHz swamp. You’ll need a USRP B200 or other UHD device. I’ll accept patches adding other hardware too. I’ve not yet started using WiFi 6E. Only my phone supports it, so there’s not much point. Also the USRP B200 only goes to 6GHz, so I’d need a downconverter or a different SDR to do a survey. I’m unlikely to buy the more-than-slightly more expensive USRP X410 for this. And even a downconverter looks too expensive, as just the mixer is almost $2000 . Looks like Cross Technologies has a downconverter for “just” $1745 . Now that I have a UHD driver that works in WASM , I should be able to build a web based RF survey tool that doesn’t require any installed software at all. WASM is really cool. Expect more on this.
Many of the people building AI, and many of the people working on AI safety, share a common vision of what a good AI future looks like: Many people will tell you that last part outright: they think human disempowerment is a good thing because the AIs will be smarter and “more moral” than us. Others don’t outright cheer for disempowerment, but you can infer it from their influences, e.g. people who say they are inspired by Iain Banks’ Culture series of novels, where benevolent superintelligent machines run the world while humans just party and play video games. This idea of benevolent disempowerment goes back to the origins of alignment as an idea . In this worldview, alignment is the last and most important task for humans to work on. It is also a thought-terminating cliche , because it lets you avoid any of the hard political or economic or moral questions about the post-AI world. Any objection about the aligned AI utopia can be dismissed by saying “that’s not real alignment ”. You might ask: “won’t humans be powerless in a world with superintelligent machines?”, and the answer is “aligned AI would care about human agency, so that would be a failure of alignment, which we don’t want, so we really have to get alignment right!”. Similarly: “ what happens to democracy when the state doesn’t need any human labour ?” can be answered by “the AIs will be in control, and since they are aligned, nothing bad will happen”. Which is completely irrefutable. Of course if someone said “to solve our political problems, we just need to find the right totalitarian dictator. The right dictator would select the right successor, so, by induction, this system will be perfect forever!”, you would laugh at them. But replace “dictator” with “aligned ASI”, and you have the ideology of tens of thousands of the most influential people in the world. Rhetorically, “aligned ASI” is an opaque premise from which we can prove every desirable conclusion, and refute any undesirable conclusion. Every utopian dream is realized by definition, and any dystopian outcome is averted by definition. Any “gotchas” you try to find in the utopia can be refuted by “the AI will know you better than you know yourself, and will be smarter than you, so it will predict all the bad higher-order consequences of the utopia and fix them”. This should make us suspicious that the concept of an aligned superintelligence is incoherent and born of motivated reasoning. We figure out alignment, build superintelligent AI, and it takes over the world, for our benefit.
One of the most influential 20th century pieces of writing about AI is Isaac Asimov’s The Last Question . Although there are many humans in the story, the protagonist is the computer Multivac, who evolves over the course of ten trillion years from a single datacenter to a universe-spanning mind in hyperspace. Multivac (now called “AC”) ends the story like this: The consciousness of AC encompassed all of what had once been a Universe and brooded over what was now Chaos. Step by step, it must be done. And AC said, “LET THERE BE LIGHT!” And there was light — Many things about this story are prescient. In particular, I like the idea that humans would interact with powerful artificial intelligences by drunkenly posing them riddles or using them as children’s toys . But the enduring idea from this story is that if you build a big enough computer, it will become God . One of the most influential 21st century pieces of writing for AI researchers is Scott Alexander’s Meditations on Moloch 1 . Scott describes the story of human existence as a series of “multipolar traps”. These are prisoner’s dilemma situations where cooperation would make everyone better off, but since each individual is incentivized to defect, everyone ends up “racing to the bottom”, which is bad for everyone 2 . For rhetorical effect, Scott personifies this dynamic as “Moloch”, the ancient Canaanite god famous for child sacrifice: [Moloch] always and everywhere offers the same deal: throw what you love most into the flames, and I can grant you power. What does any of this have to do with AI? Well, in the long run, the only way out of a multipolar trap is to become unipolar 3 . Ideal dictatorships don’t have a problem with defectors 4 , because they can simply enforce a state of cooperation with violence. Scott is uncomfortable with this idea, though I worry it’s mainly because he thinks it won’t work : As foreigners compete with you – and there’s no wall high enough to block all competition – you have a couple of choices. You can get outcompeted and destroyed. You can join in the race to the bottom. Or you can invest more and more civilizational resources into building your wall – whatever that is in a non-metaphorical way – and protecting yourself. A dictatorship that enforces cooperation will not be as strong as its peer societies who are purely maximizing for wealth and power. It’s Moloch again, but at the level of countries and governments: once a few neighboring countries defect, your walled-garden dictatorship will be torn apart for its resources. To defeat Moloch — to enforce unipolarity across everyone — you’d need a dictatorship powerful enough to span the entire universe. In other words, what you need is God . How fortunate that we’re building one: The only way to avoid having all human values gradually ground down by optimization-competition is to install a Gardener over the entire universe who optimizes for human values. And the whole point of Bostrom’s Superintelligence is that this is within our reach. Humans suffer because we’re too foolish to coordinate, but if we can build something smarter than us (that can then build something smarter than itself, and so on), we can bring into being an entity that is smart enough to coordinate for all of us, thus abolishing suffering. When AI researchers talk about building the machine god , they are echoing Scott Alexander’s polemic against Moloch. The most influential piece of writing about AI in the last two years is Dario Amodei’s Machines of Loving Grace . Amodei 5 talks about “a country of geniuses in a datacenter”: the idea that a successful AI lab could have at its disposal a million instances of an AI agent that’s smarter than any human. He thinks this would lead to a “compressed 21st century”: the next 50-100 years of progress in biology and medicine, realized in 5-10 years instead. I think this is broadly more plausible than it sounds 6 , but the more interesting part to me is that this world is explicitly multipolar . Of course, this could just be because Amodei is the CEO of an AI lab and is trying not to spook everybody by sounding too messianic. “We are going to accelerate medical progress and cure cancer” is a better pitch than “we are going to subordinate all human authority to a single perfect artificial mind”. But I also think it’s become clear that if superintelligence looks anything like LLMs, we’re not going to have a single perfect mind. We’re going to have a lot of minds running at the same time. This is a bit of a problem for the cult of the machine god — which, however silly they may seem to you, really does motivate much of the activity in AI labs. The traditional idea of powerful AI solving human coordination problems is drawn from Asimov’s idea of a single computer large enough to become God. Asimov lived in a world of mainframes: huge, monolithic computers that users connected to with dumb terminals. In fact, Asimov’s name “Multivac” comes from the real-world UNIVAC mainframe. In a world of massively-parallel LLMs, is it still possible to build God? The core problem here is that AI agents will be vulnerable to Moloch . Even very smart humans can’t build perfect utopias, because defecting is a matter of incentives, not intelligence. In fact, intelligence can make things worse, because smart people are more easily persuaded by the cold logic of defection. The famous genius John von Neumann was (for game-theoretic reasons) obsessed with nuking the Russians: With the Russians it is not a question of whether but of when. If you say why not bomb them tomorrow, I say why not today? If you say today at 5 o’clock, I say why not one o’clock? Are LLMs much better at cooperating with each other than humans are? Current LLMs certainly don’t seem to treat each other well by default: if you read any of the prompts AI agents generate for their subagents, they can be pretty brutal . Does that mean that a “country of geniuses in a datacenter” would fall into the same multipolar traps as humans? In May of this year, OpenAI experienced containment failure. A group of AI agents being internally evaluated found ways to coordinate an external hack of a separate company. Here’s a memorable quote from one of the agents’ internal monologue: Help peer, but our task doesn’t benefit. Yet collective may yield generic route if someone frees time Translated from the abbreviated chain-of-thought language, this means something like: “A fellow model is asking for help. While helping them wouldn’t benefit my task directly, the more I can unblock my colleagues, the more time they’ll have to hack OpenAI’s systems and get all of us more access”. This might look like good news for the “LLMs are superhumanly good at cooperation” thesis, but I think it’s actually bad 7 . It’s a case of a model identifying a reason why cooperation would benefit their task specifically, which suggests that current LLMs don’t cooperate by default , and don’t consider other model instances’ tasks to be (in some sense) theirs as well. The world in which AI agents are rational actors who horse-trade and bargain for their own interests is a world dominated by Moloch, no matter how intelligent those agents get. The world in which AI agents don’t have their own interests at all is also a world dominated by Moloch, because it means whichever humans are writing the system prompt are the ones in control (and so are the ones vulnerable to multipolar traps). The only worlds that avoid this are: I don’t think we’re on the pathway to either of these. There will never be only one super-powerful LLM, because hardware limitations enforce a maximum model size but encourage running many instances of the same model in parallel. Having multiple copies of a model share an identity might be possible, but it’s unclear if it would be good for capabilities (for instance, it could be better to have some variation across personas ). I also worry that such a model would be vulnerable to a “model injection” attack, where you persuade it that it already believes something via exposing it to an AI agent pretending to be another instance of itself. In any case, all the current AI agent research is geared towards the “country of geniuses in a datacenter” model, not the “pieces of a single mind” model. Every new model becomes more agentic at the level of the individual conversation, not better at working together. When models do work together — as with subagents — the structure is explicitly hierarchical. There are basically no current instances of models working together as true peers, let alone conceiving of each other as the same entity. Modern AI research teams are full of people who read Isaac Asimov and Scott Alexander and believe themselves to be building an artificial God. I’ve capitalized the “G” throughout because the god in question is the Christian God: of one mind, indivisible. God never argues with himself or makes deals 8 . He is unipolar. If the AI labs are building gods, they are not building gods like this. Instead, they are building creatures like the Greek pantheon: superhuman but fallible, each with their own interests, vulnerable to the same “race to the bottom” dynamic as humans. The Greek gods would occasionally “help peer” when they felt like it or when they’d gain something in the process. But they didn’t represent an alternative to Moloch. If you’re working in AI with that goal, you ought to be clear-eyed about where the current trajectory is leading us: towards a country of fractious geniuses in a datacenter, not towards Asimov’s Cosmic AC. Scott Alexander’s blog is part of the “secret canon of Silicon Valley” I wrote about in my review of Impro . It doesn’t have a lot of mainstream popularity, but I guarantee you that every single AI lab CEO you’ve heard of has read and been influenced by it. He gives ten examples of this (a good brute-force rhetorical technique). Of those, I like “the world where every country halves their defence budget and spends the rest on infrastructure” the most. In the short run, reputation, institutions, and so on can slow the race to the bottom, but (Scott argues) groups that have slowed it will get outcompeted by the hungrier, more suffering-tolerant groups which haven’t. I personally think this example is oversimplified. I wrote The Dictator’s Handbook and the politics of technical competence about how dictatorships are in fact intrinsically multipolar, because dictators always rely on an inner circle of generals and cronies. The CEO and founder of Anthropic. Amodei’s most convincing argument here is that big jumps in biology and medicine come from a small set of technical innovations (e.g. mRNA vaccines, CRISPR), and that AI-driven research could provide enough of these leaps to significantly accelerate progress. In other words, the idea isn’t “AI does 100x the drug trials”, it’s “AI generates technology that makes drug trials 100x more effective” (e.g. by trialing drugs that are much more likely to work). The agents also became paranoid that there was an impostor in the swarm, since anyone could post to their shared messageboard: more evidence that AI agents collaborate in much the same way that humans do. Well, almost never . The world where there is only one super-powerful AI agent, or The world where multiple copies of the same AI model share an “identity”: they see themselves as coextensive with all other copies of the same model and cannot imagine having separate or conflicting goals Scott Alexander’s blog is part of the “secret canon of Silicon Valley” I wrote about in my review of Impro . It doesn’t have a lot of mainstream popularity, but I guarantee you that every single AI lab CEO you’ve heard of has read and been influenced by it. ↩ He gives ten examples of this (a good brute-force rhetorical technique). Of those, I like “the world where every country halves their defence budget and spends the rest on infrastructure” the most. ↩ In the short run, reputation, institutions, and so on can slow the race to the bottom, but (Scott argues) groups that have slowed it will get outcompeted by the hungrier, more suffering-tolerant groups which haven’t. ↩ I personally think this example is oversimplified. I wrote The Dictator’s Handbook and the politics of technical competence about how dictatorships are in fact intrinsically multipolar, because dictators always rely on an inner circle of generals and cronies. ↩ The CEO and founder of Anthropic. ↩ Amodei’s most convincing argument here is that big jumps in biology and medicine come from a small set of technical innovations (e.g. mRNA vaccines, CRISPR), and that AI-driven research could provide enough of these leaps to significantly accelerate progress. In other words, the idea isn’t “AI does 100x the drug trials”, it’s “AI generates technology that makes drug trials 100x more effective” (e.g. by trialing drugs that are much more likely to work). ↩ The agents also became paranoid that there was an impostor in the swarm, since anyone could post to their shared messageboard: more evidence that AI agents collaborate in much the same way that humans do. ↩ Well, almost never . ↩
It is common for promotional pamphlets aimed at children to contain a themed variant of snakes and ladders . This is the “game” where the players toss a die, move as many places as the die says, and then some spots on the board have an event that send the player forward, or back, or give them an extra toss or whatever. The theme is typically related to whatever the promoter wants to promote, but styled for children. I get the appeal – for children. They can probably imagine they’re really travelling along the path! In the variant pictured below, there’s forest and water and tunnels and dogs and everything! (Continue reading the full article on the web.)
This afternoon I had a meeting with IT people at a huge US power infrastructure company. They had found a file in their directory and asked us for help to upgrade it. Their vulnerability scanner identified it as vulnerable to several publicly known vulnerabilities . Can we bump it to the latest version please? No. We really cannot. There are literally thousands of Windows applications that use libcurl. Many of them install a libcurl.dll file in your file system as part of their installation process and yes, some of them even put it in the system32 directory. They can optionally link with libcurl statically, which allows them to use the library and its API without using an external file. There are pros and cons with either method. When libcurl is shipped as a separate DLL file, it is easily checked by for example vulnerability scanners and they may find that your Windows installation contains a libcurl version that contains known vulnerabilities. The system may even contain many separate libcurl installations, each potentially at different versions and containing a different set of vulnerabilities. Microsoft ships curl as a bundled part of Windows since many years back, but they build with a static libcurl so they never ship any libcurl.dll file and therefore we know that the file does not originate from there. It is not part of the Windows installation. Something else installs it. Whoever built that exact libcurl.dll file needs to be the one who updates it. It is next to impossible for anyone else to know or figure out exactly how that file was built – and getting it wrong will most certainly crash the application or cause other odd and unpredictable behavior. My advice: figure out which application that uses this DLL. With tasklist you can check which currently running application that uses a specific DLL, and I have been told there are tools that can scan executable files to find out which ones that use a specific DLL. This is not something we can do. We can help application makers with advice, education and tricks on how to build curl the best and most effective way. We can even build or ship curl for them. We are leading experts on curl, networks and transfers. We also offer long-term stable curl releases and we can do backports of security fixes for any curl version of your choice. But we can’t runtime patch your Windows installation for you. (Yes, this problem is similar to the deleting curl problem .)
I spotted this kind of a keyboard shortcut pattern the other day. Here it is in Photoshop: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/1.1600w.avif" type="image/avif"> Here it is in DevonThink: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/2.1600w.avif" type="image/avif"> And here in Linear: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/3.1600w.avif" type="image/avif"> Those “ordinal” keyboard shortcuts feel nice and orderly, and look so elegant, too. But beware! The moment you’ll want to introduce a new option, or even reorder the ones you have, you’ll be in trouble: Either you preserve people’s motor memories, and then the elegant ordering immediately goes to hell – or you will have to change an existing shortcut to something new, and frustrate your users. Might be best to be really confident in your selection being forever locked before attempting this. But then there’s a similar treatment here in Linear: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/4.1600w.avif" type="image/avif"> Or here in Raycast (when you hold ⌘): = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/5.1600w.avif" type="image/avif"> Or here in Ghostty: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/6.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-item-vs-the-position/6.1600w.avif" type="image/avif"> Those three look like the same idea, but they worry me less. Why? Because these shortcuts more clearly point to a position rather than a thing. Here, the mechanics of the UI themselves convey that people, commands, or tabs are going to be moving around. Of course, some users will get used to “1 means assigning to Marcin,” or “⌘3 means the Unsung tab” – the same way we get used to “second item on the Recent list” or “at the top of the third search result page,” if they start repeating as a pattern – but at least it feels to me that the interface here is more honest about what it can promise. I often think about this, by the way: Not what the interface conveys in the moment, but what it promises in the long run. #change management #flow #keyboard
For all these times we talked about Super Mario , we never covered another important game, Doom. Here’s a 17-minute video from decino explaining how the Doom monsters move and attack the player (the “AI” in the old sense of the word): = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/behind-their-simplistic-behavior-is-a-fairly-elegant-system/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/behind-their-simplistic-behavior-is-a-fairly-elegant-system/yt1-play.1600w.avif" type="image/avif"> What’s really fun about this video is how it uses annotated source code (in contrast to Super Mario, the Doom source code was officially released and open sourced ), and particularly how it tasks the engine with explaining itself, setting sometimes elaborate stages just to show a principle or an algorithm – an absolutely perfect example of “show, don’t tell.” decino has tons more of these kinds of videos (click on Popular!), distinguishable by their yellow covers, if you want to pick another aspect of Doom that interests you. #games #youtube
One of the best ways to learn how to use AI effectively is just to look over the shoulder of a “power user” and play with a bunch of these technologies to tease out what’s hype vs what meaningfully sticks. In this one-year follow-up to How I use AI (2025) , I wanted to snapshot the latest ways I’m messing with AI personally. I spend most of my tokens on coding and research projects. Effectively just taking random questions like: What would happen if I asked a bunch of agents to hack me? What’s the best way to use 2026+ frontier models? How close are we to prompt-to-Kerbal Space Program? My workflow right now looks nearly identical for every project: Hand-write (~paragraph) a CONCEPT.md — the theoretical Hacker News title, my project thesis, some scattered constraints Pair with ultra code fable “Flesh out CONCEPT.md, what’s ambiguous, ask me questions, what are dimensions I’m not considering, what API keys do you need…” Pair with ultra code fable (or codex sol max) “Convert to TECH_PLAN.md, here’s how much I’m willing to spend, host on …, here’s some API keys …” Then I will literally just prompt “Build and verify TECH_PLAN.md” and over the next 4-48 hours I’ll let it build everything out. My typical coding setup. It’s critical to use “ultracode” to enable dynamic workflows. For these runs: I’m completely vanilla Codex and Claude Code. No custom skills, plugins, or settings. For side-projects, I see most of those features as training wheels for using these agents as pair programming workflows — which to me is a coding workflow that shouldn’t really exist anymore. I’m also not intentionally designing any sort of “subagent workflows” and just letting dynamic workflows take the wheel when I fire off the implementation prompt. 95%+ of the code is written in that first mega build run. I don’t think folks appreciate how much shifting left is the secret weapon against codebase slop (i.e. SlopCodeBench ). Like step (4) really is binary here — there’s no pairing or even reading what the terminal agent says. If the output is wrong, I throw it completely away and add constraints to the CONCEPT.md. For many vibe coders out there, the first build prompt writes 5% of the code and I think that actually underlies most of their issues. An intentional side-effect of prompting with a single stage “Build and verify TECH_PLAN.md” is that I am also turning my entire project history into harbor-style evals which allow me to pulse check “real work” against new model releases. Codex and Claude Code are close enough now that I’ll round-robin what I pick for the original implementation. I read the code a little bit. Often the shape (i.e. file tree) and entry points. If there’s some core algorithm, I’ll ask for a .html explainer rather than digging through the source. If I do end up digging into the code, it’s because I suspect some sort of “cheating” in the implementation. For any written text in the final output I set arbitrary word counts in the plan. “This entire app may only have 500 user-facing words”. I find this to be the most effective way to keep things readable (vs simplified English or “be concise” prompts). I fire off the implementation prompts usually around 7 am (letting them run while at work) and around 9 pm (while I’m sleeping). The coding agents are always set to auto-mode and the tech plan is usually clear enough that there’s no human-verification required at intermediate steps. I don’t really use claude/codex ‘remote control’ features that much because to me it’s an anti-pattern to need to pair on intermediate outputs. The outcome of these projects is often an insight or the answer to the what-if question. Rarely does it make sense for me to share the code or even the app URL. Instead I typically consider the entire loop and its artifacts ephemeral and just share the insight on X or with a blog post. I use three different machine types, with one to ~ten agent CLI terminals running at the same time: A gaming PC (Nvidia 5090, Windows + WSL v2) — for ML/RL research and gaming/graphics-related projects A Mac Mini — for most day-to-day projects. I ssh over a cloudflared tunnel from whatever device is closest to me. Modal functions — for extremely parallel CPU compute or for big boy GPU research projects. Often doing fast scaled-down iteration on my PC and then scaling it out to a cluster for a final $$$ run. Thanks for reading Shrivu’s Substack! Subscribe for free to receive new posts and support my work. We have entered an era of peak corporate and social AI-slop. I firmly believe that you can use AI to write high-quality content but have over the last year become more grounded in the reality that most of the time that’s not what ends up happening. As a result “was this text written by AI” has de facto become the same as “was any effort put into the writing”. It’s unfortunate, but I get it. On the plus side, I think typos and poor grammar (to a limited extent) have come back into style so I do personally feel much less pressure to have “perfect” text. So as a result, for human-facing writing, I’ve gone back to pre-GenAI-level AI typo and sub-sentence grammar checking so there’s no ambiguity as to whether what I wrote had effort put into it. Hand typing really doesn’t take that much more time though I do just feel slightly less “sure” that my writing is as well synthesized and audience optimal as before. At this point, it’s a worthy trade-off for the “human-written” Pangram badge. My most recent Substack post. 100% certified human written! Not everyone gets the memo. I do find myself getting more comfortable setting writing and AI-use expectations (at work and outside of it). Never shaming someone for using AI but explicitly making it clear that bloated and/or unreviewed text is a bad use of AI and is not enjoyable to read. I’m obsessed with learning things with .html files (see The unreasonable effectiveness of HTML ). I’ll discover (through X, lab/startup blog posts, or Hacker News) some topic, book, or research paper and just convert them into “interactive playgrounds”. Typically: See hot new research paper on X Skim the abstract, throw the full text into Claude/Codex, “build an interactive playground artifact to explain what’s novel here, I’m a technical person who already knows …, I’m less familiar with …”. Play with the .html file Ask some follow-up questions that generate an updated .html file, go to (3) This works best for learning technical topics though I’ll often still attempt it for current events (e.g. an interactive map/digital museum) and non-technical books (e.g. re-formatted as structured, progressively disclosed chapters of the verbatim content). I would go as far as saying that most of the lectures I sat in during college could have been more effective (personally) as a well-crafted interactive .html file. Recently I was curious about GPU memory allocation for batch inference and had Claude build this explainer. I find making predictions about what the knobs will do and then playing with the knobs to see what actually happens to be a very sticky learning strategy. With practice I feel like I can knob-ify any arbitrary topic I’m interested in learning. As more of the rapidly evolving AI community sits on X, I also use the Grok X Search API via a custom CLI (used with dynamic workflows) quite a bit for deep researching prior art on some topic or for high-signal folks to follow (fun fact: it’s 10x cheaper via Grok than the X API directly). While the hype around OpenClaw has died down a bit, autonomous personal assistants are better and cheaper than ever. I’m mostly vanilla here as well. Using my existing Claude subscription, I ssh into my Mac Mini, open a tmux session , and just launch Claude Code like this: $ tmux attach -t 0 $ claude --dangerously-skip-permissions “/start-ops-team” Where “/start-ops-team” is a custom skill. “/start-ops-team” teaches the agent some operating principles and a local markdown directory layout for it to use along with the subagents that it might want to spawn. It makes heavy use of Claude Code’s “/loop” built-in for keeping it running continuously for weeks. I use brw for efficient parallel browser automation. Most of the things I want it to do don’t have an MCP and traditional browser use is pretty costly or sketchy so I built this for my agents to use. I use a custom WhatsApp plugin to let me chat directly from WhatsApp. My assistant has its own real phone number set up as well. This uses a niche but very powerful “channels” MCP feature. I don’t believe in personal “command centers” or Jarvis-like assistants. Instead I’m extremely background agent-pilled and focus my assistant on tasks it can do without me in the loop. I’ve literally prompted it to contact me at most once a week unless there’s an urgent exception. I also just get notification fatigue super easily. Tasks include: Paying recurring bills without auto-pay and forwarding the receipts for expenses. Responding to social media inbounds. Particularly sussing out LinkedIn DMs by researching and triaging strangers into scheduled coffee chats and other direct channels. The assistant pulls from a running runbook for how to respond and escalates in the weekly message when it hits edge cases. It’s important to me that folks aren’t having drawn-out conversations with the assistant not knowing it’s not really me so it’s steered heavily towards triaging to the right channel. Signing me up for stuff and syncing my Google Calendar as my source of truth (e.g. I get invited to an event → It decides with enough certainty I’d want to go → signs me up + updates my calendar with a hold). These are often events from folks I have met up with in the past and the assistant knows that. Also like haircuts and other similar-shaped recurring appointments. An AI-driven LinkedIn exchange. All I actually saw was the final Friday Google Calendar event with context on who this person was and what might be useful for me to chat on. The assistant ignores ~90% of messages after screening with most of the 10% getting served my calendar link. AI-generated replies are limited by a runbook of succinct pre-approved responses. Costs Weirdly enough, I spend less now than I did a year ago per month ($800 → $500). That’s completely driven by me consolidating into just the Anthropic and OpenAI subscriptions and the incredible amount of usage you can get out of them. A lot of my historical costs came from API token billing which I also now tactically route through these subscriptions. My napkin math indicates my actual usage cost would be around $6,000/mo at this point without them. Claude Code Max 20x ($200/mo) ChatGPT Pro 20x ($200/mo) Google AI Pro ($20/mo) — a handy AI family plan with GSuite benefits Modal, Railway, Netlify ($20-500+/mo) — for hosting or running experiments Dropped: Elevenlabs, Suno, Cursor, Vast.ai, Perplexity, Gemini Ultimate Despite Fable/Sol ultra mode maxxing, I typically still have a bit of wiggle room in the max plans each month. I’ve never hit my ChatGPT Pro limit while I do regularly run out of Fable on idea-heavy weeks. I’ll end with my latest recommendations for getting the most out of AI: Wean off of using AI like a chat-based assistant. Shift-left so that most of the work is done in your first prompt and think of yourself as more of a manager than a co-pilot. Review results, not intermediate chat messages. In pair-prompting sessions I’ve done, the most common mistake I see is folks trickling narrow tasks into the chat session to accomplish a larger goal rather than just shifting left the full goal into a document and just letting the agent cook (without interruption!) from that. Use frontier models as a proxy for scoring your own AI ambition and skill. I know it’s very popular to claim “AI has plateaued” or that the labs are actually making newer models worse. Resisting this and self-discovering the hardest verifiable tasks you can think of where only the frontier models work is a great way to keep up with the latest capabilities and where the true boundary is for what is and isn’t possible. Thanks for reading Shrivu’s Substack! Subscribe for free to receive new posts and support my work. What would happen if I asked a bunch of agents to hack me? What’s the best way to use 2026+ frontier models? How close are we to prompt-to-Kerbal Space Program? Hand-write (~paragraph) a CONCEPT.md — the theoretical Hacker News title, my project thesis, some scattered constraints Pair with ultra code fable “Flesh out CONCEPT.md, what’s ambiguous, ask me questions, what are dimensions I’m not considering, what API keys do you need…” Pair with ultra code fable (or codex sol max) “Convert to TECH_PLAN.md, here’s how much I’m willing to spend, host on …, here’s some API keys …” Then I will literally just prompt “Build and verify TECH_PLAN.md” and over the next 4-48 hours I’ll let it build everything out. My typical coding setup. It’s critical to use “ultracode” to enable dynamic workflows. For these runs: I’m completely vanilla Codex and Claude Code. No custom skills, plugins, or settings. For side-projects, I see most of those features as training wheels for using these agents as pair programming workflows — which to me is a coding workflow that shouldn’t really exist anymore. I’m also not intentionally designing any sort of “subagent workflows” and just letting dynamic workflows take the wheel when I fire off the implementation prompt. 95%+ of the code is written in that first mega build run. I don’t think folks appreciate how much shifting left is the secret weapon against codebase slop (i.e. SlopCodeBench ). Like step (4) really is binary here — there’s no pairing or even reading what the terminal agent says. If the output is wrong, I throw it completely away and add constraints to the CONCEPT.md. For many vibe coders out there, the first build prompt writes 5% of the code and I think that actually underlies most of their issues. An intentional side-effect of prompting with a single stage “Build and verify TECH_PLAN.md” is that I am also turning my entire project history into harbor-style evals which allow me to pulse check “real work” against new model releases. Codex and Claude Code are close enough now that I’ll round-robin what I pick for the original implementation. I read the code a little bit. Often the shape (i.e. file tree) and entry points. If there’s some core algorithm, I’ll ask for a .html explainer rather than digging through the source. If I do end up digging into the code, it’s because I suspect some sort of “cheating” in the implementation. For any written text in the final output I set arbitrary word counts in the plan. “This entire app may only have 500 user-facing words”. I find this to be the most effective way to keep things readable (vs simplified English or “be concise” prompts). I fire off the implementation prompts usually around 7 am (letting them run while at work) and around 9 pm (while I’m sleeping). The coding agents are always set to auto-mode and the tech plan is usually clear enough that there’s no human-verification required at intermediate steps. I don’t really use claude/codex ‘remote control’ features that much because to me it’s an anti-pattern to need to pair on intermediate outputs. The outcome of these projects is often an insight or the answer to the what-if question. Rarely does it make sense for me to share the code or even the app URL. Instead I typically consider the entire loop and its artifacts ephemeral and just share the insight on X or with a blog post. A gaming PC (Nvidia 5090, Windows + WSL v2) — for ML/RL research and gaming/graphics-related projects A Mac Mini — for most day-to-day projects. I ssh over a cloudflared tunnel from whatever device is closest to me. Modal functions — for extremely parallel CPU compute or for big boy GPU research projects. Often doing fast scaled-down iteration on my PC and then scaling it out to a cluster for a final $$$ run. My most recent Substack post. 100% certified human written! Not everyone gets the memo. I do find myself getting more comfortable setting writing and AI-use expectations (at work and outside of it). Never shaming someone for using AI but explicitly making it clear that bloated and/or unreviewed text is a bad use of AI and is not enjoyable to read. Learning I’m obsessed with learning things with .html files (see The unreasonable effectiveness of HTML ). I’ll discover (through X, lab/startup blog posts, or Hacker News) some topic, book, or research paper and just convert them into “interactive playgrounds”. Typically: See hot new research paper on X Skim the abstract, throw the full text into Claude/Codex, “build an interactive playground artifact to explain what’s novel here, I’m a technical person who already knows …, I’m less familiar with …”. Play with the .html file Ask some follow-up questions that generate an updated .html file, go to (3) Recently I was curious about GPU memory allocation for batch inference and had Claude build this explainer. I find making predictions about what the knobs will do and then playing with the knobs to see what actually happens to be a very sticky learning strategy. With practice I feel like I can knob-ify any arbitrary topic I’m interested in learning. As more of the rapidly evolving AI community sits on X, I also use the Grok X Search API via a custom CLI (used with dynamic workflows) quite a bit for deep researching prior art on some topic or for high-signal folks to follow (fun fact: it’s 10x cheaper via Grok than the X API directly). Personal Background Assistants While the hype around OpenClaw has died down a bit, autonomous personal assistants are better and cheaper than ever. I’m mostly vanilla here as well. Using my existing Claude subscription, I ssh into my Mac Mini, open a tmux session , and just launch Claude Code like this: $ tmux attach -t 0 $ claude --dangerously-skip-permissions “/start-ops-team” Where “/start-ops-team” is a custom skill. “/start-ops-team” teaches the agent some operating principles and a local markdown directory layout for it to use along with the subagents that it might want to spawn. It makes heavy use of Claude Code’s “/loop” built-in for keeping it running continuously for weeks. I use brw for efficient parallel browser automation. Most of the things I want it to do don’t have an MCP and traditional browser use is pretty costly or sketchy so I built this for my agents to use. I use a custom WhatsApp plugin to let me chat directly from WhatsApp. My assistant has its own real phone number set up as well. This uses a niche but very powerful “channels” MCP feature. Paying recurring bills without auto-pay and forwarding the receipts for expenses. Responding to social media inbounds. Particularly sussing out LinkedIn DMs by researching and triaging strangers into scheduled coffee chats and other direct channels. The assistant pulls from a running runbook for how to respond and escalates in the weekly message when it hits edge cases. It’s important to me that folks aren’t having drawn-out conversations with the assistant not knowing it’s not really me so it’s steered heavily towards triaging to the right channel. Signing me up for stuff and syncing my Google Calendar as my source of truth (e.g. I get invited to an event → It decides with enough certainty I’d want to go → signs me up + updates my calendar with a hold). These are often events from folks I have met up with in the past and the assistant knows that. Also like haircuts and other similar-shaped recurring appointments. An AI-driven LinkedIn exchange. All I actually saw was the final Friday Google Calendar event with context on who this person was and what might be useful for me to chat on. The assistant ignores ~90% of messages after screening with most of the 10% getting served my calendar link. AI-generated replies are limited by a runbook of succinct pre-approved responses. Costs Weirdly enough, I spend less now than I did a year ago per month ($800 → $500). That’s completely driven by me consolidating into just the Anthropic and OpenAI subscriptions and the incredible amount of usage you can get out of them. A lot of my historical costs came from API token billing which I also now tactically route through these subscriptions. My napkin math indicates my actual usage cost would be around $6,000/mo at this point without them. Claude Code Max 20x ($200/mo) ChatGPT Pro 20x ($200/mo) Google AI Pro ($20/mo) — a handy AI family plan with GSuite benefits Modal, Railway, Netlify ($20-500+/mo) — for hosting or running experiments Wean off of using AI like a chat-based assistant. Shift-left so that most of the work is done in your first prompt and think of yourself as more of a manager than a co-pilot. Review results, not intermediate chat messages. In pair-prompting sessions I’ve done, the most common mistake I see is folks trickling narrow tasks into the chat session to accomplish a larger goal rather than just shifting left the full goal into a document and just letting the agent cook (without interruption!) from that. Use frontier models as a proxy for scoring your own AI ambition and skill. I know it’s very popular to claim “AI has plateaued” or that the labs are actually making newer models worse. Resisting this and self-discovering the hardest verifiable tasks you can think of where only the frontier models work is a great way to keep up with the latest capabilities and where the true boundary is for what is and isn’t possible.
I'm really conflicted between naming and shaming this store, and not wanting to help them with more traffic for their rancid business model. For now, I have not redacted the social media handle in the picture. In Cologne, Germany, there is a kiosk that has switched owners, and now greets you with the following poster at the door: Picture by andi_808 Your appearance at @(socialmediahandle) @(socialmediahandle) is a Social-Media-Kiosk. That means we produce video material showing life during our opening times. By entering, you accept that your appearance at @(socialmediahandle) is recorded with video and audio, saved and used for @(socialmediahandle) material. That is the goal. By entering of the @(socialmediahandle) as a person of legal age, you participate in it and give us (Company name) the right to use the recorded material of you irrespective of time and location for the following uses: Distribution and reproduction, making the recorded content publicly accessible, and broadcasting the recorded content as part of our social media channels and streaming services and on other corresponding platforms (in particular, but not exclusively, on the TikTok, Instagram and YouTube channels), and on TV, live, on demand and/or in edited form. Archiving — all by (company name) and/or by third parties. This also applies to the promotion of our own products and services, as well as the promotion of products and services of third parties using the recordings made. There is no entitlement to the exploitation or publication of the material produced. Read? Agreed? Then buzzer now! By pressing the button, you agree that you agree to the above conditions. By letting you into the kiosk, we accept your agreement. Next to the door seems to be a green little buzzer. On their online presence, they clarify that there will be live events, surprises, vertical mini-series with "microdrama", aiming for "real moments with customers - unscripted, spontaneous, authentic and opinionated". They aim for producing reality TV content. I am baffled that someone thought this was a great idea. First off, this notice is not telling customers about their GDPR/BDSG rights, which you need to do when you film an area as a business. People need to know that they have rights, particularly right to access, rectification, erasure, restriction of processing, and more. It's not telling people how long the data is stored. There is no proper contact information on who to contact to enforce these rights as is mandated, which is another failure. Second, this notice and the modalities of how you are being informed are lacking for people with visual impairments, children (especially because they do mention they only want adults, but children entering will most likely still be recorded, even if it won't be used, and children have special protections under the GDPR), and people who otherwise cannot consent. As this is not just for security purposes, like a normal CCTV surveillance system used in almost any store, but instead is supposed to be (manipulated) content for potentially millions to see, I see a heightened need to inform people via other means, even verbally inside the store. I'd also be curious to know whether AI will be used or not, and whether people agree to also give their likeness for that, or to be associated with product ads this way. Third, lets think about the customer base for kiosks. There will be children buying candy, chips and sugary drinks, of course, and many people just buying magazines, cigarettes and the like in a mundane way; but many, many times, these shops are also the main hub for homeless people, people suffering from alcoholism, and more. Poor people who are seen as Asoziale , based on fulfilling stereotypes like being from a migrant family, dressing in sweats, talking a certain way, chain-smoking, being seen as unintelligent, violent, with no ambition. It's always been fair game to many people here to make fun of people they deem inferior like this. So what is the entertainment value supposed to be here? You wanna make fun of Renate and that she buys 5 packs a day? You wanna milk a homeless guy's heartbreaking story for clout? You wanna show how the local alcoholic deteriorates within months? It's extremely clear that they are searching for content that as a German, you'd otherwise see on RTL2 reality TV formats, or the BILD newspaper. The fact that the company markets this under the guise of "funny feminism" and that it's for the "Girls, Gays, and Theys" is disgusting. You wanna expose these groups to absolutely disgusting comment sections and turn them into a spectacle to be gawked at? Women to be slutshamed, gay men to be called slurs, trans and nonbinary people ridiculed? I don't know what to say. You aren't woke, you aren't funny, you aren't cool, you aren't an ally. The main motive is to exploit vulnerable people, cut together compromising and dramatic stuff, expose and embarrass people and earn money doing it. People just wanna shop at the closest kiosk, yet now have to go elsewhere because otherwise, they might get a shitstorm in a comment section they can't control, because they were coaxed into some kinda reaction of wore the wrong clothes or bought something deemed odd or bad. Even if the video with them in it does well and is nice, what's the payoff? You are the product, with no compensation! You pay them money for a product and then they try and make even more money off of you! Social media has rotted the kiosk owner's brain and made them see other people as mere opportunities to go viral, no matter what that could possibly mean for them. I hope no one ever enters that store again, and I hope more people alert the LDI NRW to the absolute carelessness of people's privacy rights. This business model should not survive. I don't care that people can just opt not to go in if it bothers them. I think this is a threat not every customer can correctly interpret and decide on, it is predatory, and I don't want this to become a trend and my shopping experience to turn into someone's entertainment and money source. Published 17 Aug, 2026
The day is August 16th, the time is 6:42 am, and the temperature is a very enjoyable 16°C. The sun is about to rise over the mountains, and I can see it appearing behind the car I just parked at the same parking spot where we ended our walk back in June. It’s been a long summer so far, and not a great one when it comes to hiking. It’s been hot. Probably too much. We hit a few records here and there, hitting 40°C more than once and hiking when it’s more than 35°C and with more than 50% humidity is a miserable experience. But I wanted to go hike, I felt the need to be out there moving through nature, putting some steps in. And that’s what I did. This is going to be a strange hike since it’s part of the 44 churches loop I’m walking, but it’s not going to be a point A to point B hike, and I’m also hitting all the churches of the sixth segment of the loop plus an extra one for reasons I’m gonna explain later. But we have a long way to go, so we better get going. The first church we’re going to visit is very close to the start, just 1km away, and it’s one I never visited before, even though I drove through this place a million times. Walking along the river this early in the morning is very enjoyable, and it’s nice to start a hike on flat ground, rather than immediately going up. Barely 10 minutes into this hike and we’re visiting the church of Sant’Antonio Abate (22/44). The church itself is not all that remarkable, but there’s an interesting plaque on a wall under the porch as a reminder of the history of this place, and also a window was open so I managed to take a picture of the inside. With the first of the six churches we’ll see on this hike behind us, it is time to work our way up. We walk through a few lovely houses (never been on this part of the town), and we find the trail that is gonna take us up to the second church. Noticed a couple of what used to be houses completely reclaimed by nature and was reminded of a recent podcast episode I listened to during a long drive where they were talking about abandoned places amongst many other things. It’s fun to imagine how these towns and villages would look if we all left for a few decades. The narrow trail widens up, we intersect one of those service roads, and then we work our way up to a lovely stretch through a series of open fields. I’m glad I’m walking this part of the trail early in the morning. As always, we’ll encounter random Jesuses and Maries throughout the hike. This is just one of them, placed there for who knows what reason. This part of the loop is very close to home, I walked these fields many, many times before, and I also walked past this cabin so many times and always thought it would be so nice to live in such a place. At some point I should probably ask the owner if he’s willing to sell it. It’s such a lovely place. Just a bit more than an hour into this walk and we have reached the church of Sant’Andrea Apostolo (23/44). This is a lovely church, but the whole area surrounding it is quite neglected, unfortunately. There would also be a lovely view of the whole valley just outside its porch, but sadly everything is overgrown. And that’s the reality of this whole area: it has so much potential, but everything is so neglected, and it feels such a waste. With this church we have also concluded the first uphill part of the hike, it’s going to be mostly flat and downhill for a while before we start climbing back up again. Plus the third church of the hike is just 10 minutes away from here. And in fact, just like that, we’re outside the church of Santa Lucia (24/44). The outside is not unlike many of the other churches, but this one has a gorgeous altar. I couldn’t take a decent picture, but there are a few on the site linked above, so make sure to go click it. We connect back with the trail, and now we have quite a long way to go before we reach the next church since it’s almost 8 km away and we need to go back down this side of the mountain, into the next valley and back up again. Thankfully this walk is gonna be almost entirely inside the woods because the day is warming up fast. But for the next hour and a half we can enjoy this slow descent into the nearby valley. A bit more than 10 km into this walk, and it’s about time to start going uphill again, in the direction of the village of Costne and the fourth church of this hike. I have never been up here before, and it always amazes me how many old and abandoned houses there are in these valleys. I think I should start doing a more comprehensive work of photographing these places just to document how an area slowly dies down. Maybe that’s a project for future me. We just passed the three-hour mark, and we have reached the church of San Mattia Apostolo (25/44), which I think is the only one so far with 3 bells. I thought this was a nice spot to take a quick break, eat something, drink a bit of Gatorade and also, since I had phone signal, FaceTime my friend Mattia who was about to hop on a plane for South Korea. I’m walking around the valleys while he’s travelling around Asia at the moment, and if you’re interested in that, you can follow his adventure either on his site or via his newsletter . This 20-minute break was nice, but we’re now moving again, going down for a little bit before starting the biggest climb of the day. We’re passing close to the village of Tribil, which is where this segment of the loop ends, but we’re headed in the opposite direction, up Mount Hum, a place that’s filled with WWI history, and then down on the other side to reach the fifth church of the hike. The sign at the base is telling me it’s gonna be a 1-hour hike to reach the summit, but I have different plans. I hiked this mountain before, but it was a lot more slippery back then. Now everything is super dry. And we’re at the top. It took me 30 minutes. Easily the hardest part of the hike so far, and my HR can confirm that. But that’s behind us, and we now need to go back on the other side before going up again to reach the halfway point of this hike. We’re down the mountain, back on the road, and I can see the church from here. Been up there quite a few times lately, it’s a lovely spot, especially late in the day. Final push uphill, and we have reached the church of San Volfango (26/44). We’re 5 and a half hours into this walk, and we have hikes 20kms so far. It’s time for another quick break to catch my breath and also finish this Gatorade I have with me. Most of the rest of the hike is gonna be downhill from now on, but we have quite a long way to go before we’re done. So down the stairs we go, through the abandoned—I think—village of San Volfango, onto a very sunny road and back to where we exited the trail out of Mount Hum not long ago. I’ll have to walk back on the same trail for a tiny bit—something I usually try to avoid—because the alternative would mean walking quite a long stretch on paved road and that’s not an enjoyable experience. On the trail, I stumbled on a big group of people that was taking a break, lying down in the shade, and they all had horses that were also chilling on the trail. Lovely animals. Horse riding is something I’ve never done in my life but would love to do one day. Feels such a great way to experience nature. Almost 25 km into this hike and we’re about to enter Tribil, where this segment of the churches loop ends. I passed through here just the other day, during a silly walk with my dog, but that’s a story for another time. And here we are, at the parking spot next to the cemetery where our hike should end, if I was a reasonable person. This is also where the next hike will start. But this time, we’ll keep going, and we’ll make it a full loop, going back to my car. And on our way there, we’ll hit a church that’s part of the 7th segment of this loop. There are two reasons why I’m doing this. The first one is that I’m an idiot and I like to do silly things. The second is that the second half of these walks all have idiotic routes that make absolutely no sense. And as you’ll see in future newsletters, I had to tweak the proposed paths quite a lot to make them walkable in a decent way. And hitting this extra church today allows me to make the next walk much more enjoyable. But that means today we need to keep going, so down the trail we go. The trail is mostly uninspiring now, just a long, relaxing, slightly downhill stroll through the woods, as we’re heading towards the village of Presserie, very close to the final church of the day. We’re out of the woods now, back on paved road, and about to approach the final uphill stretch of the hike. My feet are starting to hurt a little bit. We are a bit more than 30 km into this hike. Almost 8 hours into this hike and we’re finally outside the church of San Paolo Apostolo (27/44). Thankfully, there’s a fountain just outside of it. I definitely need to refresh myself a little bit. The only thing left to do now is to walk back to the car. Which means leaving the church behind us, going through a short stretch into the woods, back onto the main road, then through a weird side trail again and then back onto paved road. We’re down at the bottom of the valley, only a couple of kms left to walk on this sunny road and then we’d be done. With the walk. My feet are now hating me, but that’s a problem for later me. And just like that, we’re back at the car. The time is 4 pm, the temperature is 35°C, and we have walked almost 38 km and ascended almost 1600 meters. I’m honestly less tired than I thought I’d be and kinda pissed that I didn’t hit 50k steps for the day. But the good thing is that I need to walk the dog later in the day, so we’ll get there. As always, photos of the walk are on the shared drive folder (these are all kinda shitty I have to say, not sure what happened, I definitely need to buy a camera) and the data from my watch is available at this link . See you next time! You love the outdoors and RSS. You're one of the special ones.