Latest Posts (20 found)

17 down, 27 more to go

Here we go again. Afternoon walk this time around. It’s almost 2pm, and I’m standing in the same parking spot where I got picked up last week. No breakfast in me, but I did have lunch before heading out. Compared to last week’s hike, this one’s gonna be way easier. We have a bit more than 20kms to walk, with roughly 650 meters of ascent and 1300 of descent. Gonna be fun. Before we begin, I’ll have to apologise for the terrible photos I took, especially of the churches. Been a weird walk, and there was also non-ideal lighting most of the day and, I don’t know, I guess I was not very inspired today? I’ll hopefully do better next time around. Ok, down the mountain we go. Compared to last week, today’s a lot cooler, and there’s a gentle breeze. Perfect conditions to walk down a mountain and into the forest. The first part is a lot steeper than I thought. I did consider walking the whole loop in reverse, and this part would not be fun. I’m having a hard time going down, I can’t imagine going up from here, especially after a long walk. Thankfully, the trail becomes a lot easier to walk after that initial steep part, and I’m now enjoying my time in the woods. There’s gonna be a lot of going in and out of the woods on this hike. Down a few steps and I’m about to emerge next to Montemaggiore , the last town you encounter on your way up to Mount Matajur. I saw these concrete stairs many times before, while driving up this road. Always wanted to walk this trail, and I’m glad I’m finally doing it. The trail goes through the buildings, neat! So many old and abandoned buildings. Makes me kinda sad. But I get it, life up here ain’t exactly easy, or practical. And on the other side? A big, and frankly quite ugly, Jesus. This is relatively modern, and I’ll be honest, I’m not a fan. The trail continues in and around the town, down a few sets of stairs, and through some overgrown grass. So far, this one’s the worst-maintained trail I have walked. But I can imagine that doing maintenance is not exactly easy over here. So kudos to everyone who does it. I’m now back on one of those service roads, and it’s a very enjoyable walk. We’re slowly going down, the weather is lovely, and I’m very much enjoying my time outside. It’s not an incredibly varied walk so far, the scenery is mostly the same, but still, this is not a bad way to spend a Saturday afternoon. This small football field made me smile. I have no idea who comes up here to use it, but it’s fun to see it’s still there. I’d have loved to have something like this available to me as a kid. But now there’s nobody around, these valleys are slowly getting abandoned, which is sad but also understandable. Time to take a left turn, leave the service road behind me and go up into the woods again. I’m not too distant from the first of the three churches I’ll visit today. Was not expecting to find myself in this open area with a view of the valley underneath. This is a lovely spot, and there’s also a cabin nearby. Probably used by the hunters, like most of the cabins scattered around the valleys. Into the woods again, and I now need to leave the trail behind me because the first church is some 100 or so meters off the path. So down I go and to reach the church of Sant’Ulderico in Monte (15/44). The area around the church is quite neglected, and the overall scenery is really not the best. The only good thing about this one is that one of the windows was open, and I finally managed to take a decent picture of the inside of one of the churches. It’s very barebones, but the altar is nice. I still think it’s sad that these are all locked; they could become awesome shelters for the night. I should probably learn lock picking… Time to hike back up to where I left the trail earlier and keep moving on through the woods. Next stop is gonna be where the trail splits and the variant starts. I hate these variants. They make no sense, and this one in particular is almost as long as the main path, only to touch one more church, one that is not even all that nice or unique. But I guess there’s no point in complaining; nobody is forcing me to walk these trails after all. After another hour of uneventful walking into the woods, we have finally reached the location of the church of Santi Primo e Feliciano (16/44), which I didn’t even bother visit closely and only took this photo of it. The only nice thing about this church is the location, since it has a great view, but the building itself is incredibly uninspiring, especially because it has probably been restructured in modern times. There are a couple of pictures on the link above if you want to see more of it. That said, though, there are a couple of way more interesting things to see around here. Starting from this throwback sign. What a blast from the past. Do you even remember the time when not everyone had a phone, and you could use phones in public places to make phone calls? What a time! The other unusual sight is a Thai temple?!? That was very unexpected. I was aware that there’s a Buddhist one in the area (that I might actually see during a future walk), but knew nothing about this one. Neat! And right in front of it? A small chapel to remember the people who have died during the two World Wars. I told you these things are everywhere and that it’s impossible to forget what happened during those times if you live here. I’m about to start going back up, and my watch vibrates to alert me that there’s a “severe weather storm alert” which is always great to see when you’re half way through a long walk, and you’re in the middle of nowhere, a couple of hours from your car. I was contemplating stopping for a quick break, but the opposite happened: I started going! As a result, I took very few pictures of the next chunk of the walk but was mostly the same, going in and out of the woods. An hour later, I connected back with the main path and was close to the third and final church of this walk, the church of San Michele Arcangelo (17/44), which is by far the best one of the three I visited today. Very small and in an elevated position with a nice view of the valley. Like many others, it was reconstructed after the quakes of the sixteenth century, and you can clearly see that there are parts missing in the front. Still, I much prefer to see churches in this condition; at least they feel like they have a history behind them. Almost 4 hours in, still 7 kms left to walk, which means there’s no time to waste. I leave the church behind me, go through the small village, into the woods, and some 20 or so minutes later, I’m back on a paved road. My legs would love to go right and downhill, but I need to go left and uphill, the direction our grandparents used to take to go to school back in the day. But I’m quite happy for this because I get the chance to see a church I've always wanted to visit. That’s the church of Sant'Andrea Apostolo and every time I drive up to Mount Matajur, I can see it from my car. Has this very characteristic twisty road going up to it from the small village underneath and I always wanted to drive there. And I have to say, the location is very nice. Living up here must be a nightmare because there’s only one way down, and the road is very narrow. Plus, the closest anything must be 30 to 40 minutes away by car. But if you’re looking for peace and quiet, this is the place for you. Another point scored by team Mary on my way out of the town. There’s less than 5kms left now, I’m starting to feel a bit tired, my feet hurt, I need better shoes, I want to take a quick break, but I also don’t want to stop because I know I’m only an hour or so from my car. And stopping at this point makes no sense. So into the forest I go again for the final stretch of this walk. Found a bunch of sheep chilling in the forest right at the end of the walk. These animals are so fun. If I had the space, I’d totally get a few, just to see them play with the crazy dog I have. I wonder what he would do. Maybe one day I’ll find out. Final descent into the forest, couple of turns, and here we are, back at the parking spot where I left my car some 5 hours ago. Thankfully, it’s still there because walking home from here would not be fun. Doable, sure. But not fun. So far, my least favourite walk and the churches were mostly uninspiring, but hey, that’s part of the fun. Next up, we have another long descent, but I very much look forward to doing the walk after that, number 6, since that has the potential to be the most tiring yet fun and interesting walk of the entire series. I’ll definitely need to buy a better pair of shoes by then. There's a new folder on the shared Drive folder with all the pictures I took on the walk. And yes, I have moved from iCloud to Drive because apparently iCloud doesn't like huge albums. And there's also the link to the data recorded by my watch , if you want to get more info on the hike itself. You love the outdoors and RSS. You're one of the special ones.

0 views

rose ▪ bud ▪ thorn - may 2026

Reply via email Published 31 May, 2026 It was my wife's birthday, and our wedding anniversary! Baked some cakes and had a great time. Mine is the Donauwelle attached at the bottom of the post, my wife baked the fruit cake. My friend who visited Japan bought us great gifts from there; I got two gachapon (Cinnamoroll and My Melody), some matcha and My Sweet Piano chopsticks. I finally have it in writing and it's been communicated officially that I am my department's data protection coordinator now. I blogged more. I bought myself a big Build-A-Bear Usahana and a tiny one for my bag. Also, new matcha and I restocked my skincare and supplements :) I feel spoiled by myself. I'm having a great time at the gym, going 3 times a week, and incorporating the strength machines now. The added muscle/strength really helps with posture and counteracting the desk sitting. I'm making good progress. I reduced negativity from my online space. I went to a protest for ME/CFS! I have been better with keeping up with emails. Anita, if you are reading this, I cannot reply to you because it says sending key is not valid. We have a bread cutting machine now! Makes it easier to cut the bread my wife is baking for us :) I attended CPDP 2026 in Brussels. I reached Magenta status (35+ translated cases) as a Country Reporter for Noyb. Working on better eating behaviors and no guilt during rest. I am working on slowly booking cool classes and activities for the next few months. Been struggling with my face shape. I have chubbier cheeks anyway naturally, but whenever I need a round of Prednisone or I am stressed or there's hormonal stuff going on, they get bigger (cortisol, water retention). They are bigger lately... definitely a source of discomfort and shame when we live in a time of razor sharp jaws and almost-hollow cheeks. I will now have to do my injections weekly :( Dienogest doesn't work at all for me. Instead of preventing periods, it causes me more of them. Had to get off of it. My soy and rapeseed sensitivities have been extra annoying lately. Can't eat my beloved tofu, and they put rapeseed oil into almost every protein-rich vegan replacement product. I love my lentils, peas and beans, but occasionally I just wanna have some banger vegan köttbullar, schnitzel, or burger patty without a rash, man, or not make everything myself. Not to mention restaurants, or the fact that they drown everything in rapeseed oil based condiments... I haven't been studying nearly as much as I should. Having some issues with the modalities and feeling a bit stressed, like I need more time away from it. I've been very ambitious this month with my blog posting, and it has caused some writer-constipation at times. I had all these drafts ready with some links and loose thoughts already collected, and wanted to write them out fully; but because I set myself arbitrary deadlines or a loose " This needs to be finished and published today! " I felt intense pressure, which made me freeze up... it's really not that serious, but I made it so, for some reason. I also frequently felt stuck between 2-4 equally "important" tasks, posts, topics, whatever, and when I started one I looked at the other and switched, progressing at nothing. Terrible cycle. I moved some planned posts to June and eased up a bit. The menu of my favorite café has been severely reduced and worsened. Also cannot believe that I am paying 10 Euro for a wrap now. The Brussels trip was filled with some disappointments and stress.

0 views
Unsung Today

“In a world of unresponsive 911 calls, it is the 912 that actually works.”

I know I just mentioned the Google Search app, but I’m also in the process of disentangling myself from Google and Gmail after last week’s Google I/O revelations. On that note, this is an interesting, meandering essay by Ernie Smith at Tedium , reflecting on the enshittification of Google and the two-year anniversary of &udm=14 , a simple site that removes AI from Google’s search results: I spent two hours of my life building a thing. Google has probably spent thousands, if not millions, of collective employee hours building all their AI innovations. And for a surprisingly large number of people, the two-hour workaround I built wins out. There’s a lesson in that. Somewhere in the middle, the essay transitions into talking about the value of good tools and single-serving websites: Our world needs more, smaller tools that speak the same language, where everyone makes a little money, but nobody dominates the industry. In the 1980s, the software industry was kind of like this. Oh, sure, Microsoft and Apple were still out front, sucking up all the oxygen. But there were lots of little companies, selling software on disks. The bigger ones put them in boxes in stores. The smaller ones realized that they could just ship software through the mail and let the software spread naturally among user communities. Shareware didn’t really survive the internet era—but, at least for a while, its spirit did. More recently, that spirit has taken a backseat to the larger companies that realize, if they’re big enough, they can shape how we interact with our world. In 1991, if you wanted to start a software company, you had to hope that your product was good enough that word of mouth and a P.O. Box could push it around. That’s exactly what happened when Tim Sweeney released ZZT. It became the starting point for Epic Games, the kind of company that today is big enough that, thanks to its Unreal Engine and the success of Fortnite, it can dictate terms to much of the gaming industry. If you ask me, I want a world where more software is like ZZT than it is like Fortnite, because more people have a chance to succeed in the former environment. Previously in this general category, we covered Keyhole and (Gmail) Simplify . If you have a favourite small tool or a simple tool-like website, I’d love to hear from you! #ai #enshittification #google #toolmaking

0 views
Unsung Today

“Nemo? That’s a nice name.”

Do you know those “Are you still here” screens? In some cases – like banking – they are ostensibly there to improve security. In public transit ticket or similar machines, on the other hand, they exist just so the machine can easily reset itself ahead of a future customer. Resetting to default state happens on your phone, too. I’ve been thinking about it this past week and found a few examples. The Google Search app comes back how you left it, except if you abandon it for longer than 45 minutes. If that‘s the case, it returns to a pristine, deterministic homepage. (You can always come back to the previous session, though.) When you pause a podcast or music, at least in my setup, it will be on the home screen for 5 subsequent minutes – you can then resume it by simply tapping on your AirPods. But leave it dormant for longer than that, and the home screen forgets about it and resuming is impossible: = 3x)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/3-framed.1600w.avif" type="image/avif"> = 3x)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/4-framed.1600w.avif" type="image/avif"> My favourite: if you swipe through the apps back and forth on the iPhone in a touch UI equivalent of command-tabbing, there needs to be a specific moment where the app you switch to becomes the “current” app. On desktop, it’s easy – you can reset the state at the next invocation of ⌘⇥. But there is no such obvious moment on mobile. When there is no obvious moment, timeout can be a great answer. And so it is here, and it seems to be set at about 5–6 seconds: I understand the Google Search and the app switching examples. But I am not sure I know why a podcast resets so soon. A challenge when talking about this without seeing the code – as it is with many things on Unsung – is that I don’t know if this is carelessness, a technical limitation, a design consideration I’m unaware of, or just something that’s intentional, but I happen to disagree with. Even testing this has been hard if the delays are longer than seconds. The extra challenge for Google Search, as it is for many other apps, is that they also reset when iOS itself purges it to make room for other apps. This isn’t great, and can be avoided if you care; we talked before about Bear and how it remembers its precise state even after the system evicts it from its memory. Whether you want your app to remember you forever, or whether you want some deliberate forgetfulness, it could be important to take ownership of that. My go-to example of a miss in this category is Google Maps, which completely throws away its current trip-in-progress status whenever the iOS kicks it to the metaphorical curb – and returning to that status later again as a user is a really complicated sequence of steps including rewinding back the time, on top of travel already being stressful. = 3x)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/6-framed.1600w.avif" type="image/avif"> = 3x)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/7-framed.1600w.avif" type="image/avif"> By the way, I can think of fewer examples on the desktop, but that makes sense given desktop apps are less tactical, and given that ⌘Q exists. But Spotlight does freshen itself up after about 7 or 8 minutes… = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/8.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/8.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/9.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/9.1600w.avif" type="image/avif"> …and Raycast actually offers an option to set its short-term memory from between 0 seconds and three minutes, with the default being 90 seconds: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/10.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/nemo-thats-a-nice-name/10.1600w.avif" type="image/avif"> #details #google #interface design #raycast

0 views
JSLegendDev Yesterday

My Biggest Gripe With YouTube

3 years ago, I started a YouTube channel called JSLegendDev where I uploaded tutorials teaching the JavaScript programming language through the development of 2D games. The state of the space around the time I started was as follows : Tutorials inferior to an hour in length were not in demand. They made very little views. Tutorials divided into multiple parts where dead on arrival. You were guaranteed dwindling views on every new upload. To adapt, other content creators started uploading longer, multi-hour, often project based tutorials which translated to more views. Seeing the shift, I also decided to follow suit and uploaded tutorials reaching the 4-10 hour mark. I saw some success doing this. Therefore, I kept at it for a while. However, as time passed, I got tired of recording extremely long tutorials and they, in general, started to make less views. There are many hypotheses as to why YouTube’s algorithm started serving tutorial content less. The advent of AI could’ve been the likely cause but also a general shift in YouTube becoming more of an entertainment focused platform to the detriment of educational content. Something you now put on TV to relax. In the programming space, channel producing content that can be watched passively like tech news, tech drama, tech history, high level discussions, etc… continued to thrive. Seeing this new shift and because I was genuinely tired of making YouTube tutorials, I published my first scripted video titled “How do Devs Make Levels Without Game Engines” which was first published as an article. In that piece, I told the story of how I discovered a convenient way to design levels for my games using an external editor called Tiled in conjunction with my editor-less game framework. At the end of that video, I promoted a paid tutorial I made teaching the exact steps needed to achieve what was presented. The video ended up accumulating over 30k views, which was pretty great! It took far less effort to make compared to my multi-hour tutorials and I was able to make a few sales on my paid tutorial I mentioned within. Previously, I was very unsuccessful in selling any paid courses and I didn’t quite understand why. However, the answer now hit me like a truck. Why would anyone still have the appetite for a paid course after having invested the time following a free multi-hour course? Even if the subject of the paid offering was different, they would probably be too tired to commit to another one. Anyway, following in the footsteps of this first breakthrough, I uploaded another scripted video titled “You Can Now Make PS2 Games in JavaScript” which was again first published as an article. In that video, I told the story of how I discovered that you could make PS2 games in JavaScript and provided an overview of how the viewer could get started. Despite including very practical knowledge, the viewer was never expected to follow along and therefore could watch it passively. It was a resounding success, over 100k views! Unfortunately, I didn’t sell any courses in that video because I simply didn’t have the energy to both make the video and a course. The best business decision would have been to wait before uploading. I’ll go into more details later, but my biggest gripe with YouTube is that it’s no longer a great platform to build an audience but rather it’s only good for reach and here, I had wasted a lot of reach. After having made so many game development tutorials, I wanted to try my hand in creating an original game that I would sell on Steam. Once the project was starting to take shape, I had the idea of making a video about it to gauge interest as I wasn’t sure it would find an audience. Therefore, I had the idea of using the same format used in my two previous successful videos. However, rather than focusing on technical details, I instead would tell the story of how I came up with my game’s design covering the various iterations and challenges I faced while working on it. Therefore, I ended up uploading a video titled “Making a Small RPG” which again, was originally an article. It was also a resounding success reaching barely below 100k views! However, it came with a hidden cost. That cost was the tipping point that made me realize that YouTube is no longer a good platform to build an audience on. I naively thought that if the video performed well, this would translate to subscribers and an audience eager to hear more about the project, but this wasn’t the case. I had made a big mistake by not setting up a Steam page to direct viewers to before publishing the video. On my next upload concerning the project, the fall off in terms of views was brutal. I went from 98k views to below 10k. It became clear that YouTube was acting as a gatekeeper between me and the audience I thought I had built. After reflecting on the situation, I came to the following conclusion. The reason my 3 previous videos had performed well was due having certain characteristics that aligned with YouTube’s goal as a platform, which consists in making people watch videos for as long as possible so they can serve more ads. I listed them below : The subject of all three videos were remarkable which lead to people clicking on them. Something is remarkable when it obviously stands out as being interesting/noteworthy. For example, the subject of my video titled “You Can Now Make PS2 Games in JavaScript” is remarkable because the PS2 is a very popular, but now old console and you had to use a hard programming language called C++ to make games for it. Being able to now use JavaScript, a simpler but most importantly, a language originally designed for making websites and not games, makes the subject come across as immediately noteworthy. Therefore, remarkable. The use of storytelling made people eager to watch more of the video. This can be explained by the fact that we instinctively want to know what happens next in a compelling story. Finally, the length of the videos were all above 10 minutes and the 2 more successful ones were in the 15+ min range. This resulted in more absolute watch time compared to shorter content. For example, if 2 videos are both watched fully by the same audience. The shorter one will translate to less total time spent on the platform compared to the longer one. Therefore, YouTube will recommend the longer one instead because there’s an opportunity cost to doing otherwise. To understand the fall off, it’s important to first mention that usually, series on YouTube don’t work. The second video of a series ends up making less views than the first because it requires prior context before clicking. Thus reducing its appeal and limiting its reach. However, I knew this going in. I tried making the second video as independent as possible but in the end, a second video talking about the same subject was bound to be less remarkable. It didn’t help that because I summarized the content of the first video in the second one, a familiar viewer would have found it less engaging making the video further away from hitting criteria 2 and 3 that I outlined above. Consequently, I realized I had wasted my biggest marketing ammunition regarding my small RPG game as I had no way to contact the audience hit by the first video. Like with the one on making PS2 games in JavaScript, I had wasted tremendous reach. At this point, I realized my biggest gripe with YouTube was simply that I could not access my audience reliably. Therefore, was it really my audience? On one hand, YouTube allows someone without a following to reach millions but on the other, the link to those reached is fickle. I thought I was building an audience by gaining subscribers but instead, I was building a sand castle that could easily be carried away by the slightest algorithm waves. YouTube wasn’t always like this. People used to subscribe to channels and seek their content in their subscriptions tab. However, the platform effectively buried this model by conditioning users to seek recommended videos on the home page and deprioritizing the Subscriptions tab to the point that it barely looks like a clickable section. You have to click on the “Subscriptions” text to access your sub feed. Doesn’t look very clickable doesn’t it? I think that we’re now entering an era where YouTube is starting to treat content creators as interchangeable much like TikTok. They saw the success TikTok had, tried to replicate it with Shorts and now YouTube long form is getting affected as well. I fear that in the future, uploading to YouTube will look no different than making posts on Reddit. You might get views, you might get comments, but they’re self contained to a specific post with no following building up and no guarantee of your next posts having the same reach. The conclusion to all of this is that it’s not worth it to be a YouTuber. Relying on YouTube adsense and sponsorships (sponsors use views as a metric to determine how much to pay you) for your livelihood is simply not sustainable due to how fickle getting views on the platform is. Therefore, focusing so much on making YouTube content will most likely lead to your exploitation. That said, is quitting really the answer? Considering that YouTube can give you incredible reach even if you’re a nobody as long as you make content that is remarkable, engaging (for example, through storytelling) and long enough, it would be stupid to completely walk away, at least in my case. Therefore a new strategy appears on the horizon. It consists in building your audience outside of YouTube through a mailling list (Substack conveniently allows you to do so) and to strategically make occasional compelling YouTube content to tap into the platform’s reach potential. However, the key is to always direct viewers to the mailling list. Why is building an audience through email so important? because it allows you to have a direct and long lasting link with your audience. It also gives you independence from social media platforms. Even in the case of Substack, where this article is currently hosted, I can export my email list and move to another platform or email sending service without my subscribers even noticing. This shift implies that I no longer need to worry about pumping frequent content for YouTube because I’m not making money through them or worrying about doing so. By making YouTube content rarely, I get to keep most of my energy to build something compelling outside the platform like an actual game, writing interesting articles, making an in-depth course or other kinds of art/products. This plan seems to me as more sustainable and more healthy long term. That’s about all I’ve got to share. Hope this article was insightful. If you’re curious to see where this journey will lead, I recommend subscribing! I usually write about programming, game development and game design. Subscribe now You can check some of my previous articles below. Tutorials inferior to an hour in length were not in demand. They made very little views. Tutorials divided into multiple parts where dead on arrival. You were guaranteed dwindling views on every new upload. The video ended up accumulating over 30k views, which was pretty great! It took far less effort to make compared to my multi-hour tutorials and I was able to make a few sales on my paid tutorial I mentioned within. Previously, I was very unsuccessful in selling any paid courses and I didn’t quite understand why. However, the answer now hit me like a truck. Why would anyone still have the appetite for a paid course after having invested the time following a free multi-hour course? Even if the subject of the paid offering was different, they would probably be too tired to commit to another one. Anyway, following in the footsteps of this first breakthrough, I uploaded another scripted video titled “You Can Now Make PS2 Games in JavaScript” which was again first published as an article. In that video, I told the story of how I discovered that you could make PS2 games in JavaScript and provided an overview of how the viewer could get started. Despite including very practical knowledge, the viewer was never expected to follow along and therefore could watch it passively. It was a resounding success, over 100k views! Unfortunately, I didn’t sell any courses in that video because I simply didn’t have the energy to both make the video and a course. The best business decision would have been to wait before uploading. I’ll go into more details later, but my biggest gripe with YouTube is that it’s no longer a great platform to build an audience but rather it’s only good for reach and here, I had wasted a lot of reach. After having made so many game development tutorials, I wanted to try my hand in creating an original game that I would sell on Steam. Once the project was starting to take shape, I had the idea of making a video about it to gauge interest as I wasn’t sure it would find an audience. Therefore, I had the idea of using the same format used in my two previous successful videos. However, rather than focusing on technical details, I instead would tell the story of how I came up with my game’s design covering the various iterations and challenges I faced while working on it. Therefore, I ended up uploading a video titled “Making a Small RPG” which again, was originally an article. It was also a resounding success reaching barely below 100k views! However, it came with a hidden cost. That cost was the tipping point that made me realize that YouTube is no longer a good platform to build an audience on. I naively thought that if the video performed well, this would translate to subscribers and an audience eager to hear more about the project, but this wasn’t the case. I had made a big mistake by not setting up a Steam page to direct viewers to before publishing the video. On my next upload concerning the project, the fall off in terms of views was brutal. I went from 98k views to below 10k. It became clear that YouTube was acting as a gatekeeper between me and the audience I thought I had built. After reflecting on the situation, I came to the following conclusion. The reason my 3 previous videos had performed well was due having certain characteristics that aligned with YouTube’s goal as a platform, which consists in making people watch videos for as long as possible so they can serve more ads. I listed them below : The subject of all three videos were remarkable which lead to people clicking on them. Something is remarkable when it obviously stands out as being interesting/noteworthy. For example, the subject of my video titled “You Can Now Make PS2 Games in JavaScript” is remarkable because the PS2 is a very popular, but now old console and you had to use a hard programming language called C++ to make games for it. Being able to now use JavaScript, a simpler but most importantly, a language originally designed for making websites and not games, makes the subject come across as immediately noteworthy. Therefore, remarkable. The use of storytelling made people eager to watch more of the video. This can be explained by the fact that we instinctively want to know what happens next in a compelling story. Finally, the length of the videos were all above 10 minutes and the 2 more successful ones were in the 15+ min range. This resulted in more absolute watch time compared to shorter content. For example, if 2 videos are both watched fully by the same audience. The shorter one will translate to less total time spent on the platform compared to the longer one. Therefore, YouTube will recommend the longer one instead because there’s an opportunity cost to doing otherwise.

0 views
ava's blog Yesterday

what i read this week - week 22 2026

Thought that after my post on summary distrust, I could share a list of what I read each week. I technically prefer to process and digest what I read into blog posts, but not everything makes it into one, and this is a way to document and keep them, and maybe give others some food for thought. This is not necessarily stuff I fully agree with, I'm just sharing what ended up in my feed reader or was linked in stuff I read, and doesn't include all the personal blog posts I read. I had a lot to catch up on because I read a lot less the previous 2 weeks. AI detection was built for faces - article about how bad AI detection works for war and climate propaganda videos, as the detection mechanisms often rely on biometric human features, and cannot accurately detect fake fire, smoke effects, etc. US Law Enforcement Warns of ‘Anti-Tech Extremism’ - the US gov is aware of the sentiment around AI and is willing to target and suppress it, and they have little paid accomplice firms too who keep surveilling you on social media and in real life meetings if you organize to oppose data centers or voice criticism about them. Iran Israel AI war propaganda - The AI propaganda we see with armed conflicts right now is a dire warning to the future of online video information. Goes more in-depth about detection methods. Can Tracking Private Jets Predict an Imminent Apocalypse? - article about a site that assumes the rich elites will find out about an apocalypse first and try to flee, therefore serving as a warning system to the rest of us. Why GCC Nations Must Move Beyond Content Moderation to Regulate Harm by Design - GCC means Governments in the Gulf Cooperation Council. Article is about how certain countries have already heavily regulated (and, arguably, censored in their favor) social media platform content, so now they should do the same for platform design. Eh... Big Tech Will Not Save Us From the Climate Crisis - Big Tech is moving away from their climate targets and carbon credit bullshit because they wanna do more AI and data centers. The rest they are doing is unproven or not working. Definition of Overburdened Communities in New Jersey - data centers and other similar detrimental undertakings often target overburdened communities, and this is what it means. A Town Hall Too Late - article documenting how citizens near an almost finished data center actually get informed and treated (not well). They only received information well after the thing started to get built. It is being developed by DataOne for the Nebius Group to support AI infrastructure as part of a $17 billion deal with Microsoft. Meta loses High Court challenge - summary of the case and possible fine. Responsible Innovation Harms Modeling on Microsoft's Learning Platform. EU AI Omnibus Deal Changes - more analysis on the proposed AI Act changes, nudifier ban and more, prominent actors, Merz ruining everything for us as usual, etc. The AI Act is not ready for agents - article for a paper that's also listed below; risks of agents, and a need for more guidance from the AI Office. AI’s real threat is worker control and surveillance - about the divide between workers who use AI and those who are managed by it. Higher paid jobs can be supplemented and accelerated by it, while the less fortunate, less earning (warehouse, gig work) are suffering under AI micromanaging them, causing scheduling issues, errors and more, and are more intensely surveilled than ever by AI "bossware". Entzauberung der Digitalen Souveränität - German; deconstructing the term "digital sovereignty" and ideas around it. Mostly about this talk. AI Forensics gegen Big Tech - German; Interview with AI Forensics founder Marc Faddoul about his work and the fear of retribution, especially the fear about getting targeted by Elon Musk. Human Rights Due Diligence - info on what downstream HRDD is. Microsoft took a step towards human rights - very charitable and exaggerated read of Microsoft parting ways with their Israel chief and their ties to the Israeli Ministry of Defense, plus suspending some of their services. The World Is Already Resisting AI - Article on the AI Resist List , a collaboratively built, publicly accessible database documenting acts of resistance to the AI industry from across the world. AI Data Centers: Big Tech's Impact on Electric Bills, Water, and More - looking at different papers and studies around the water and electricity use of big data centers, where they are located, and what local problems they are worsening. Meta’s Hyperion project in Louisiana will need three times as much electricity as the entire city of New Orleans, and is bigger than its main airport. They also gag local officials with NDA's so they can't properly inform the residents. What you need to know about data centers - information on what Earthjustice attorneys are doing to push for stronger environmental protections targeting data centers. The Web Is Being Made Accessible for AI, Not People - llms.txt convention, MCP etc.; companies are more ready to make their services accessible to AI agents than disabled people. This shouldn't be seen as another curb cut phenomenon. Bitte im Omnibus sitzen bleiben, liebe PIMS - German article about the Art. 88 reworks for Personal Information Management Systems that are supposed to enable an easier handling of cookie consent and tracking. Social Media Verbot weder wissenschaftlich fundiert noch effektiv - German; about how there is no scientific proof that social media bans will help, and some stats about how many people support social media bans, and for what age group. Big Tech und Staat - German article on how the state seems to increasingly serve private interests, especially Big Tech. Bundesregierung will KI Einsatz der Polizei - German article about use of AI software for law enforcement, its risks, and what rights are threatened. Polizeigesetznovelle Schleswig-Holstein - German article discussing Schleswig-Holsteins attempt at changing their police law, including real-time facial recognition, behavioral surveillance, online face search and more, from strangers on the street, and even mere victims or witnesses of crimes. Das Internet verrottet - German; about link rot and archiving things properly. Why “Made in Europe” Won’t Fix AI’s Deeper Problems - fitting to my blog post. Big Tech as Executor of the dead - was also a topic at the conference. Praxisfolgen Russmedia Urteil - consequences for social media platforms following the Russmedia court decision C-492/23; Notice-And-Sweep. AI Act: deal on simplification measures, ban on “nudifier” apps - concluding what deal was reached between co-legislators; names the new deadlines for AI compliance. Ratepayer Protection Pledge by the White House - promises and propaganda Microslop's Community-First AI Infrastructure Pledge - promises and propaganda vol. 2 Anthropic's Promises - promises and propaganda vol. 3 Offener Brief der Industrie - Open letter to German politicians by German industry criticizing parts of the digital omnibus; it was silly to read, and I think it is disrespectful to imply that technologies can be discriminated against; that's a different usage and connotation than just using it as "being discriminated from" (aka being differentiated from others). None of the arguments are convincing. Draft guidelines for the implementation of transparency obligations for certain AI systems under Art. 50 AI Act - this is out for commenting until the 3rd of June, by the way. Consent Fatigue entgegenwirken - German policy brief by the TUM think tank about countering consent fatigue. Data Center Fight Guide Einstellungen zum geplanten Einsatz von Palantir-Software II - German phone survey about Palantir use by Verian & campact from Sep 2025. Grok Unleashed - Analyzing Grok nudify uses and extremist propaganda, by AI Forensics. Distinguishing Authentic from AI-Generated Explosions using Spatiotemporal Dynamics - more about how to authenticate conflict-zone explosion footage. AI footage tends to produce much bigger, rounder mushroom plumes that expand quicker. Don't ask me about the math, I don't understand any of that, but I found the rest I could understand very interesting. Embedding Human Rights in Technical Standards - About WITNESS' experience in the Coalition for Content Provenance and Authenticity (C2PA), which is in favor of open technical standards to embed verifiable provenance metadata into digital media files. Helpful explainer here . Better Images of AI - a guide for creators and users on how to use accurate images when talking about AI and what to avoid, as it shapes the narrative. Specifically, they call to avoid the color blue, descending code, human brains, science fiction elements, white robots, anthromorphism and references to the Creation of Adam. That is because it misrepresents capabilities, risks and fears, and who is or can work in or with AI (often, only white men are shown). The AI Climate Hoax : Behind the Curtain of How Big Tech Greenwashes Impacts - talks about how different kinds of AI and its uses as well as carbon credits and overstating the climate benefits of AI can be used to hide the environmental impact of the big, hyped up GenAI. Big Tech’s ‘False Solutions’ to the Climate Crisis - similar thing here. Debunking nuclear power, carbon capture, and artificial intelligence as helping climate change. There are endnotes at each chapter, so don't miss what's after. Tackling Arbitrary Digital Surveillance in the Americas - uses Cajar vs. Colombia for some examples to showcase what needs to change, and the importance of the three-step-analysis. Basically all of this is standard here in the EU, but still needs to be implemented there. TRIED AI Detection Benchmark - paper from WITNESS about their framework that evaluates AI detection tools through a sociotechnical lens (with a focus on adaptability, transparency, accessibility, contextual relevance, and fairness). Wasn't a complete fan, because a chunk of it (for example about resource investments) is rather vague, theoretical and hardly connected with a direct or objective way to measure in practice. The rest is mostly fair, but also rather obvious, and some of it is basically impossible to combine in practice - like only using datasets that comply with data protection and intellectual property laws and are "ethical" with no sensitive data, while the models are supposed to reliably detect an AI generated video of a minority language or niche culture, or have enough datasets (= lots) to accurately detect cultural and local contexts. I can't quite pinpoint what exactly bothers me about it otherwise. I did like the examples of real use cases where things failed. In total, that is roughly ~ 340 pages, if we count an article as two pages on average. Most of it was read on Sunday and Monday (holiday), as I had a lot of free time then. Reply via email Published 30 May, 2026 AI detection was built for faces - article about how bad AI detection works for war and climate propaganda videos, as the detection mechanisms often rely on biometric human features, and cannot accurately detect fake fire, smoke effects, etc. US Law Enforcement Warns of ‘Anti-Tech Extremism’ - the US gov is aware of the sentiment around AI and is willing to target and suppress it, and they have little paid accomplice firms too who keep surveilling you on social media and in real life meetings if you organize to oppose data centers or voice criticism about them. Iran Israel AI war propaganda - The AI propaganda we see with armed conflicts right now is a dire warning to the future of online video information. Goes more in-depth about detection methods. Can Tracking Private Jets Predict an Imminent Apocalypse? - article about a site that assumes the rich elites will find out about an apocalypse first and try to flee, therefore serving as a warning system to the rest of us. Why GCC Nations Must Move Beyond Content Moderation to Regulate Harm by Design - GCC means Governments in the Gulf Cooperation Council. Article is about how certain countries have already heavily regulated (and, arguably, censored in their favor) social media platform content, so now they should do the same for platform design. Eh... Big Tech Will Not Save Us From the Climate Crisis - Big Tech is moving away from their climate targets and carbon credit bullshit because they wanna do more AI and data centers. The rest they are doing is unproven or not working. Definition of Overburdened Communities in New Jersey - data centers and other similar detrimental undertakings often target overburdened communities, and this is what it means. A Town Hall Too Late - article documenting how citizens near an almost finished data center actually get informed and treated (not well). They only received information well after the thing started to get built. It is being developed by DataOne for the Nebius Group to support AI infrastructure as part of a $17 billion deal with Microsoft. Meta loses High Court challenge - summary of the case and possible fine. Responsible Innovation Harms Modeling on Microsoft's Learning Platform. EU AI Omnibus Deal Changes - more analysis on the proposed AI Act changes, nudifier ban and more, prominent actors, Merz ruining everything for us as usual, etc. The AI Act is not ready for agents - article for a paper that's also listed below; risks of agents, and a need for more guidance from the AI Office. AI’s real threat is worker control and surveillance - about the divide between workers who use AI and those who are managed by it. Higher paid jobs can be supplemented and accelerated by it, while the less fortunate, less earning (warehouse, gig work) are suffering under AI micromanaging them, causing scheduling issues, errors and more, and are more intensely surveilled than ever by AI "bossware". Entzauberung der Digitalen Souveränität - German; deconstructing the term "digital sovereignty" and ideas around it. Mostly about this talk. AI Forensics gegen Big Tech - German; Interview with AI Forensics founder Marc Faddoul about his work and the fear of retribution, especially the fear about getting targeted by Elon Musk. Human Rights Due Diligence - info on what downstream HRDD is. Microsoft took a step towards human rights - very charitable and exaggerated read of Microsoft parting ways with their Israel chief and their ties to the Israeli Ministry of Defense, plus suspending some of their services. The World Is Already Resisting AI - Article on the AI Resist List , a collaboratively built, publicly accessible database documenting acts of resistance to the AI industry from across the world. AI Data Centers: Big Tech's Impact on Electric Bills, Water, and More - looking at different papers and studies around the water and electricity use of big data centers, where they are located, and what local problems they are worsening. Meta’s Hyperion project in Louisiana will need three times as much electricity as the entire city of New Orleans, and is bigger than its main airport. They also gag local officials with NDA's so they can't properly inform the residents. What you need to know about data centers - information on what Earthjustice attorneys are doing to push for stronger environmental protections targeting data centers. The Web Is Being Made Accessible for AI, Not People - llms.txt convention, MCP etc.; companies are more ready to make their services accessible to AI agents than disabled people. This shouldn't be seen as another curb cut phenomenon. Bitte im Omnibus sitzen bleiben, liebe PIMS - German article about the Art. 88 reworks for Personal Information Management Systems that are supposed to enable an easier handling of cookie consent and tracking. Social Media Verbot weder wissenschaftlich fundiert noch effektiv - German; about how there is no scientific proof that social media bans will help, and some stats about how many people support social media bans, and for what age group. Big Tech und Staat - German article on how the state seems to increasingly serve private interests, especially Big Tech. Bundesregierung will KI Einsatz der Polizei - German article about use of AI software for law enforcement, its risks, and what rights are threatened. Polizeigesetznovelle Schleswig-Holstein - German article discussing Schleswig-Holsteins attempt at changing their police law, including real-time facial recognition, behavioral surveillance, online face search and more, from strangers on the street, and even mere victims or witnesses of crimes. Das Internet verrottet - German; about link rot and archiving things properly. Why “Made in Europe” Won’t Fix AI’s Deeper Problems - fitting to my blog post. Big Tech as Executor of the dead - was also a topic at the conference. Praxisfolgen Russmedia Urteil - consequences for social media platforms following the Russmedia court decision C-492/23; Notice-And-Sweep. AI Act: deal on simplification measures, ban on “nudifier” apps - concluding what deal was reached between co-legislators; names the new deadlines for AI compliance. Ratepayer Protection Pledge by the White House - promises and propaganda Microslop's Community-First AI Infrastructure Pledge - promises and propaganda vol. 2 Anthropic's Promises - promises and propaganda vol. 3 Offener Brief der Industrie - Open letter to German politicians by German industry criticizing parts of the digital omnibus; it was silly to read, and I think it is disrespectful to imply that technologies can be discriminated against; that's a different usage and connotation than just using it as "being discriminated from" (aka being differentiated from others). None of the arguments are convincing. Draft guidelines for the implementation of transparency obligations for certain AI systems under Art. 50 AI Act - this is out for commenting until the 3rd of June, by the way. Consent Fatigue entgegenwirken - German policy brief by the TUM think tank about countering consent fatigue. Data Center Fight Guide Einstellungen zum geplanten Einsatz von Palantir-Software II - German phone survey about Palantir use by Verian & campact from Sep 2025. Grok Unleashed - Analyzing Grok nudify uses and extremist propaganda, by AI Forensics. Distinguishing Authentic from AI-Generated Explosions using Spatiotemporal Dynamics - more about how to authenticate conflict-zone explosion footage. AI footage tends to produce much bigger, rounder mushroom plumes that expand quicker. Don't ask me about the math, I don't understand any of that, but I found the rest I could understand very interesting. Embedding Human Rights in Technical Standards - About WITNESS' experience in the Coalition for Content Provenance and Authenticity (C2PA), which is in favor of open technical standards to embed verifiable provenance metadata into digital media files. Helpful explainer here . Better Images of AI - a guide for creators and users on how to use accurate images when talking about AI and what to avoid, as it shapes the narrative. Specifically, they call to avoid the color blue, descending code, human brains, science fiction elements, white robots, anthromorphism and references to the Creation of Adam. That is because it misrepresents capabilities, risks and fears, and who is or can work in or with AI (often, only white men are shown). The AI Climate Hoax : Behind the Curtain of How Big Tech Greenwashes Impacts - talks about how different kinds of AI and its uses as well as carbon credits and overstating the climate benefits of AI can be used to hide the environmental impact of the big, hyped up GenAI. Big Tech’s ‘False Solutions’ to the Climate Crisis - similar thing here. Debunking nuclear power, carbon capture, and artificial intelligence as helping climate change. There are endnotes at each chapter, so don't miss what's after. Tackling Arbitrary Digital Surveillance in the Americas - uses Cajar vs. Colombia for some examples to showcase what needs to change, and the importance of the three-step-analysis. Basically all of this is standard here in the EU, but still needs to be implemented there. TRIED AI Detection Benchmark - paper from WITNESS about their framework that evaluates AI detection tools through a sociotechnical lens (with a focus on adaptability, transparency, accessibility, contextual relevance, and fairness). Wasn't a complete fan, because a chunk of it (for example about resource investments) is rather vague, theoretical and hardly connected with a direct or objective way to measure in practice. The rest is mostly fair, but also rather obvious, and some of it is basically impossible to combine in practice - like only using datasets that comply with data protection and intellectual property laws and are "ethical" with no sensitive data, while the models are supposed to reliably detect an AI generated video of a minority language or niche culture, or have enough datasets (= lots) to accurately detect cultural and local contexts. I can't quite pinpoint what exactly bothers me about it otherwise. I did like the examples of real use cases where things failed. Zugänglichkeit von De-Personalisierungsoptionen und Meldeverfahren auf sehr großen Online-Plattformen Decisions I had to read to translate for noyb: 2025-0.875.804 and W171 2305420-1

0 views
Unsung Yesterday

“The broken, slapdash, bed-shitting end to one of the most iconic franchises in all of gaming history”

I absolutely love Billy Maher’s body of work . He’s been writing about older games and software in general since 2011; it’s always solid, always an enjoyable read, and always providing new perspectives even on stuff I thought I knew well. (Maher also goes by The Digital Antiquarian.) I linked to his work once before , and today I wanted to share a recent essay about the disaster that was the 1999’s game Ultima IX . = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-broken-slapdash-bed-shitting-end-to-one-of-the-most-iconic-franchises-in-all-of-gaming-history/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-broken-slapdash-bed-shitting-end-to-one-of-the-most-iconic-franchises-in-all-of-gaming-history/1.1600w.avif" type="image/avif"> I have never played any Ultima games, but this felt a gripping read. […] Richard Garriott, the motivating force behind Ultima from first to last, has done his level best to write the aforementioned last out of history entirely. Ultima IX is literally never mentioned at all in his autobiography. But, much though I may be tempted to, I can’t similarly sweep under the rug the eminently unsatisfactory denouement to the Ultima series. I have to tell you how this unfortunate last gasp fits into the broader picture of the series’s life and times, and do what I can to explain to you how it turned out so darn awful. In some sense software projects always fail for one of the few obvious reasons, and it’s just details that change. Here, the details are fascinating. The Ultima series started in the very early 1980s as a series of small games made by one person, and ended ignominiously as an almost-AAA title rushed to market that no longer wanted it: They met the deadline — what other choice did they have? — but the playable game eluded them. It’s not just the deadline. There’s also a studio past its prime, a fascinating but deeply flawed leader, the market forces and trends, and perhaps even some enshittification long before the word’s invention. It is also a story of the first two decades of the videogame industry itself. It happened so long ago that it almost feels like a fairytale itself, but one with a sad ending. Maher also lists some learnings that are universal enough to apply to a lot of other projects: And, in case you want more, here are handy links to Maher’s all Ultima essays: I (3 parts!), II (3 parts), III , IV , Multima , V , VI , Worlds , Underworld (2 parts), VII , and VIII . I have no personally read them in order, and I’m better for it. #enshittification #games #software evolution No game can be all things to all people. Development teams need a clear leader with a clear vision. Checking off a list of bullet points sent down from marketing does not a good game make. When the design goals do change radically, it’s often better to throw everything out and start over from scratch than to keep retro-fitting bits and pieces onto the Frankenstein’s monster. It’s better to release a good game late than a bad game on time.

0 views
Unsung Yesterday

Shift & ⌥ & Splat & ⎋ Escape

The biggest smallest GUI design schism between Apple’s platforms and Windows isn’t the black vs. white cursor or where to put the menu bar. It’s the presentation of keyboard shortcuts. On a Mac, the shortcuts are iconographic. Command is ⌘. Option is ⌥. Shift is ⇧. Control is ⌃. Fn is 🌐 . There are also icons for all the other non-printing keys, from the relatively well-known Tab (⇥), through the perennially confusable End and PgDn (⤓ and ⇟), to the absolutely cryptic Esc (⎋). On Windows, the keyboard legends are mostly text. PC lost the icon battle in the early 1980s – IBM had them on their 1970s computers, worldwide, but apparently American users of the early IBM PC hated them – and the names are spelled out (Shift and Enter and Home), or close to it (Ctrl, Esc, PgDn, Prt Sc). Why did Apple go this way? My speculation is the revered Braun and generally hi-fi hardware: a lot of stuff sold in Europe defaults to iconography in part because that makes exporting easier. Icons are also more compact – putting ⇧⌘C in a menu or a tooltip takes up a lot less space than Shift+Ctrl+C – and more beautiful when done well. Here’s Figma’s right click menu on Mac and Windows: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/1.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/2.1600w.avif" type="image/avif"> But there are also challenges, as icons are more cryptic and confusing. “Command” tells you something about itself out of the box, but “⌘” is completely abstract. (Arguably, only arrow keys and symbols like ⇥ and ↵ explain themselves visually.) The attendant issue is that icons are hard to talk about if you don’t know their names, hence tons of jargon like “propeller,” “splat,” or “beanie” for ⌘, for example. It’s a hard situation. Here is one of Mac’s own menus being thoroughly inconsistent, and an example of CleanShot using both the icon and the label to be sure: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/3.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/4.1600w.avif" type="image/avif"> “Why not both” seems to be the best way in places you can afford it. Apple started doing that on the keyboards too, but it took them decades to get there for modifier keys alone. Even on the 2026 computers, many other keys like Esc and Tab are still single-legended: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/5.1600w.avif" type="image/avif"> With all that in mind, I want to show you what I saw the other day in Google Docs, on my Mac: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/6.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/shift-and-option-and-splat-and-escape/6.1600w.avif" type="image/avif"> This is one of those cryptic things that I would love to understand the thinking behind. Because, on the surface, this breaks so many rules: There is also a visual argument that cannot be ignored. We’ve been there once before ; if in your menu keyboard shortcuts start overwhelming the commands themselves, you are probably doing something wrong. The only explanation for this I can think of off the top of my head is this: these were invented somewhere else (Word?) and inherited by Docs to respect motor memory of the users transition from the older app. That still doesn’t cover the presentation, plus there is a way for Docs to redesign the shortcuts to be better for people who are starting anew. Ultimately, I think all of this also breaks a cardinal rule: it makes keyboard operation feel more scary and intimidating than it needs to be. Shortcuts are scary enough on their own, and they don’t need any help in this area. #google #iconography #keyboard #mac os A strange hybrid of Mac and Windows styling: some modifier keys are spelled out, and the others are iconographic. (It’s very strange to see ⌘ conjoined with others using a plus!) Complex and generally uncommon dual key shortcuts – to collapse the sidebar, you really need to press ⌃⌘A and then press ⌃⌘H, in sequence. Three-modifier-shortcuts are in general really unpleasant and Google Docs does not seem complicated enough to warrant them. (You can’t see that, but they’re also unreliable! ⌃⌘A ⌃⌘H doesn’t always work and seems to depend on where the focus is.)

0 views

AI blog question challenge

Rishabh emailed me the other day, asking me to answer the 7 questions of his new blog challenge, and who am I to say no to such a request? So here we go. I assume by AI models we mean the current crop of LLMs, and not AI models in general, because I’m old enough to remember when “Machine Learning” was a thing. What even is AI anyway at this point, since everything is lumped together into one useless definition? Anyway, I believe my first experience was trying out chagpt back when it first came out. I don’t think I spent more than 10 or 15 minutes using it at the time. It was impressive tech, but was also completely useless for me at the time, and that’s why I didn’t bother spending more time using it. This is an interesting question. Do I use AI? Well, I guess the answer is yes since it’s almost impossible to avoid using it if you use the web at this point. Pretty much all tools and services are integrating some sort of AI-powered functionalities, and it’s become harder and harder not to use them. If, instead, the question is do I use one of the various LLMs directly to do stuff, then the answer is still yes, but the amount of usage is so low that some people might consider that to be the same as not using them at all. I don’t directly pay for any of the models, but my work email has been powered by Google for more than a decade, and so I do get access to Gemini Pro. Workspace has usage data for everything, and I just looked it up: In the last 90 days, the only AI-related feature I used was the Gemini App (that’s not surprising considering I turned off everything else), and I have apparently used it 62 times. I’m now looking at the history of those chats, and pretty much all of them are single-question queries related to something web dev I was doing. Things like how to do a specific thing inside Kirby, or how to achieve something using a particular JS library. This is stuff one should be able to find inside documentation websites, but the search there is often awful and so after a google search, I try my luck with AI. And as I wrote somewhere else, I never copy-paste. I ask very narrow questions so that I can be pointed towards the correct answer. And once I have that, I do the coding and I re-implement everything myself. Am I against using AI? As a generative tool, yes. I refuse to ask AI to do something for me or to generate content from scratch. As a tech in general? I think it has some potentially useful applications in narrow contexts. As always, the answer is not cut-and-dry, and it can be yes or no depending on the framing and the scope. The only aspect I appreciate is the ability to ask questions in natural language. Because sometimes you have a problem or an answer you’re looking for that can’t be described in a more structured way. As for what I don’t like, how anthropomorphised these stupid tools are is definitely high on my list. I don’t want my computer to talk back or to make jokes or to say «I’m sorry». If I input a question, I want an answer back, and that’s it. I don’t want follow up questions, I don’t want some pointless preamble. I get why this happens, but I fucking hate it. This is software. I don't want my software to have a personality. I want it to perform a task and get out of my way. I also don’t like the lying, the gaslighting, and all the other crap, and I also don’t like what the AI industry is doing as a whole, but that’s a separate issue. Again, another question that has different answers depending on the scope. The idea of being able to generate images, in general, is neutral to me. It all comes down to what you use it for. There are some potential use cases that are totally fine, others are completely insane. As a whole, I think the ability to generate slop is bad, but that’s because humanity can’t be trusted to do anything the right way. As for their use in blog posts, I think stock images were useless, and I don’t see images generated with AI to be any different. Unless you have generated an image as part of the content to explain or visualise something. That’s fine, label it as a generated image and move on. That’s no different than including a render, or a sketch on paper, from a content perspective. My consumption of online content these days is so limited that I don’t have this issue. I read very few blogs, and I know they are not AI generated because I emailed the people behind them more than once, and I know what their stance is. I watch almost no YouTube, and I only read a few news sites. My strategy is to simply stay away from the digital world as much as possible, and I’m at the point where I’m considering dropping my digital consumption down to zero and quit the internet as a place for content. I have zero hope. And that is because I have zero hope in anything that’s in the hands of mega corporations. The incentives are totally skewed, and they’d do everything they can in order to keep the line go up. I don’t see people with strong morals in positions of power and so unless we decide to go full French Revolution, I see no reason for things to improve. Thank you for keeping RSS alive. You're awesome. Email me :: Sign my guestbook :: Support for 1$/month :: See my generous supporters :: Subscribe to People and Blogs

0 views
Evan Hahn Yesterday

Notes from May 2026

My blog turned 16 this month! I did nothing to celebrate, but made some little tools and clicked some links about tech ethics. I published four little tools this month: I also did some work on Helmet, my open source project: And like every month, I wrote a few articles at Zelda Dungeon . I don’t feel I wrote anything special this month, but my colleagues put together a feature about Zelda and mental health which was very affecting! “The vast majority of tech workers, at least those who I have encountered in my many years of reporting, are not vampiric Silicon Valley tech bro caricatures [… They] both like working with tech and ultimately want to see it serve the public good.” From “They just formed the biggest tech worker union in the US. They plan to rein in AI and curb layoffs” . This “love letter to Gnutella” is both an introduction to a P2P protocol and a celebration of the culture around it. From “Affordances for me, but not for thee” : “One of the oddest parts of the AI shift is that people are much more willing to do things for LLMs that they should have been doing for human beings all along.” Accessibility, specifications, documentation, and policies are better codified now. The author calls this “dystopian”, and I agree: our motivation to do this stuff is AI or productivity, not helping our fellow human. “More importantly, whereas accessibility affordances provide new abilities for vulnerable people, an AI affordance provides new abilities for people with power. And that’s probably the heart of it.” Looking forward to being surveilled because I’m an “anti-tech extremist” . I can’t tell you how exciting it was to watch Jira add 2 + 3 . “What can I do to resist AI?” asks the AI Resist List . “Tech companies like Google, Facebook and Microsoft are ignoring data controls mandated under California law, researchers say.” “Your AI Slop Bores Me” presents an interface that looks like an LLM chatbot, but it’s entirely powered by humans. A very cute idea. I’m a very bad “image generator”, at least according to the ratings I received. I continue to be amazed by “Lest We Forget the Horrors: An Unending Catalog of Trump’s Cruelties, Collusions, Corruptions, and Crimes” . It’s so thorough. RIP to a real one: Wikinews is shutting down after 21 years . Hope you had a good May. ZIP Shrinker , a web app that shrinks ZIP files with higher compression ratios A command line tool to do (completely offline) translation Open Link in Unloaded Tab , a Firefox extension to open links without loading them png-cmp , a command line tool to compare PNG pixel data After over a year of quiet maintenance, I released version 8.2.0 with some small new features and documentation updates. In a step toward dropping GitHub, I moved the docs from a GitHub URL to helmet.js.org . “The vast majority of tech workers, at least those who I have encountered in my many years of reporting, are not vampiric Silicon Valley tech bro caricatures [… They] both like working with tech and ultimately want to see it serve the public good.” From “They just formed the biggest tech worker union in the US. They plan to rein in AI and curb layoffs” . This “love letter to Gnutella” is both an introduction to a P2P protocol and a celebration of the culture around it. From “Affordances for me, but not for thee” : “One of the oddest parts of the AI shift is that people are much more willing to do things for LLMs that they should have been doing for human beings all along.” Accessibility, specifications, documentation, and policies are better codified now. The author calls this “dystopian”, and I agree: our motivation to do this stuff is AI or productivity, not helping our fellow human. “More importantly, whereas accessibility affordances provide new abilities for vulnerable people, an AI affordance provides new abilities for people with power. And that’s probably the heart of it.” Looking forward to being surveilled because I’m an “anti-tech extremist” . I can’t tell you how exciting it was to watch Jira add 2 + 3 . “What can I do to resist AI?” asks the AI Resist List . “Tech companies like Google, Facebook and Microsoft are ignoring data controls mandated under California law, researchers say.” “Your AI Slop Bores Me” presents an interface that looks like an LLM chatbot, but it’s entirely powered by humans. A very cute idea. I’m a very bad “image generator”, at least according to the ratings I received. I continue to be amazed by “Lest We Forget the Horrors: An Unending Catalog of Trump’s Cruelties, Collusions, Corruptions, and Crimes” . It’s so thorough. RIP to a real one: Wikinews is shutting down after 21 years .

0 views

My Agent Stack For Automating My Personal Life

My agent manages my emails, SMS, WhatsApp, Telegram and pretty much everything to automate my personal life. People keep asking me how I use agents in real life. I mean the actual boring things that make a day disappear: reading WhatsApp and Telegram, finding someone's email, searching the web, drafting the intro, updating a document in Google Drive, creating a calendar event, checking who still needs an answer, and doing all of it across the same messy tools I already use. My answer is disappointingly simple. I use Codex as an operator on top of my actual life data. It has tools. It has data connectors. It has skills. It has a source of truth. It has enough permissions to act locally, and enough approval gates that it does not embarrass me in public. That is basically the setup. Tools, data connectors, skills, and taste. I used to do more of this in Claude Code but I have been moving the setup to Codex because GPT-5.5 is currently a better model for this kind of work. The switch from Claude Code to Codex is not really the story. The story is that once a model is good enough, the real leverage comes from wiring it into the world you already live in. The important part is that the agent can move across boundaries. My personal life is not in one app. It is split between Gmail, WhatsApp, Telegram, iMessage, Google Drive, Calendar, Notion, local files, random PDFs, browser sessions, and a contacts spreadsheet that is much more valuable than it looks. A few days ago a friend sent me a WhatsApp message. She was helping a fast-growing San Francisco AI startup recruit in France and wanted to connect their recruiting manager with a recruiter I know. I did not remember the recruiter's email. I did not know the latest funding news about the startup. I needed to search WhatsApp, search Gmail, find the recruiter's email, search the web, understand why the startup was credible, draft an intro email, include the two job links, show the draft to me, send the email after approval, and then text my friend that it was done. That is normally twenty minutes of annoying app switching. WhatsApp to Gmail to Google search to Gmail again to WhatsApp again. It is not hard work, but it is exactly the kind of work that burns attention because every step is a small context switch. With the agent, I asked for the outcome. It read the WhatsApp thread, searched Gmail for the recruiter's email, researched the startup's funding and recent news on the web, drafted the intro, waited for my approval, sent the email, and then texted my friend that the intro was done. The user-facing part took about ten seconds. The agent did the glue work (in seconds!) This is the killer pattern. The agent is not "answering a question." It is operating across my tools to complete a small real-world workflow (aka a "job-to-be-done") Another example is even more boring, which is why I like it. I got a new license plate for my car. I sent photos and context to Codex. It updated the car information Markdown file I keep in Google Drive, changed the license plate, added the registration notes, preserved the existing VIN, insurance, owners, and address, then uploaded the file back to Drive. That alone is useful, but the better version is what happens next. The agent can use browser automation to go update the same information everywhere else: FasTrak, the parking app, insurance portals, DMV-related forms, or any other web app that does not have a clean API. For clean systems, it should use an API or CLI. For messy systems, it can use the browser and it's so good! I also now use Computer Use from Codex. This is what personal agents are for. Not dramatic autonomy. Administrative continuity. I was always afraid of Openclaw yolo mode in the background. I appreciate being in control. The most important architectural decision I made was centralizing valuable personal information in Google Drive. For years, a lot of my knowledge lived in Notion. I like Notion as a human workspace, but I do not love it as the primary source of truth for an agent. The API works, but the workspace is too fluid: nested pages, databases, properties, permissions, formatting, backlinks, and a lot of UI-native structure that is pleasant for humans and annoying for models. So I used the Notion API to export the valuable information and move it into Google Drive. I was not trying to perfectly preserve the Notion workspace. I was trying to make the information agent-readable. Most of the useful information in Drive is Markdown or CSV, because those formats are easy for the agent to search, diff, edit, and upload back without ceremony. Google Drive became the source of truth because gogcli gives the agent a simple command line surface for Gmail, Drive, Calendar, Docs, Sheets, Contacts, and Tasks. This is an underrated point. You should not organize your knowledge only for the human UI. You should organize it for the agent's tool path. Agents like stable file IDs, text, tables, Markdown, CSVs, and commands that return JSON. If the agent can search it, download it, edit it, upload it, and cite where it came from, the data is useful. My personal data layer is embarrassingly simple. Google Drive holds the important docs, mostly as Markdown files and CSVs. Contacts live in a Google Sheet mirrored as a CSV. Notion exports land in Drive. Local instructions live in . Skills live as Markdown files in folders. The source of truth is not elegant. It is legible. A lot of personal productivity is just joining across this data. One fact is in WhatsApp. Another is in Gmail. The email address is in Contacts. The date is in Calendar. The document is in Drive. The agent becomes useful when it can cross those boundaries without asking me to be the glue. One of my best investment was to create a contact.csv with the phone number, email, LinkedIn etc. of all the people I know. The core tools are boring by design. I use gogcli for Google Workspace, wacli for WhatsApp, imsg for iMessage and SMS, Browser Use or browser automation for web apps, and AppleScript or macOS UI automation when there is no better interface. The hierarchy is simple. APIs and CLIs are best. Local files are great. Browser automation is acceptable. Screen automation is the last resort. This hierarchy matters because agents are only as reliable as their tool surface. Asking a model to click around a website is sometimes necessary, but it is not the happy path. A command like or is much easier for the model to inspect, retry, and reason about. Here is what the tool layer looks like in practice: None of this looks like science fiction. That is the point. The future of personal agents starts as a pile of commands that let the model operate the tools you already use. You want to reduce to a maximum the abstraction layers between the models and the APIs. Tools give the agent hands. Skills give it habits. A skill is just a small operating manual that tells the agent how to do a recurring task the way I like it done. My inbox-zero skill is a good example. It tells the agent to list Gmail inbox messages through gog, separate auto-archive from needs-review, show me the important emails, quote the substance, suggest archive or reply, draft replies, wait for explicit approval, send in the original thread, preserve all recipients, archive only after sending, keep replies short, never suggest calls unless I ask, and sign with "Nicolas." That is not a fancy architecture. It is a procedure. But the procedure is the product and... it's just text instructions. Without the skill, I have to be the prompt every time. I have to remind the agent not to send without approval, not to drop cc recipients, not to suggest a call, and not to sign with some weird corporate signature. With the skill, I say "run inbox zero," and the workflow already contains my taste. The important habit is that I improve the skill every time the agent makes a mistake. If it suggests a call when I hate calls, I add that rule. If it forgets to preserve cc recipients, I add that rule. If it archives too aggressively, I tighten the classification. The agent gets better because the procedure gets better. This is how personal agents become personal. Not by having a cute voice. By accumulating operational taste. The setup compounds because the mistakes become instructions. I do not want an agent that blindly replies to everyone. I want an agent that prepares the work, shows me the draft, and asks at the right moment. For most communication workflows, the loop is: read context, draft response, show me, wait for approval, send, confirm. Sometimes I let it send directly when the stakes are low. "Tell Hugo I am in Seattle next week" does not need a board meeting. But an investor email, a customer reply, an intro, or anything with social nuance should be drafted first. This is the difference between useful and terrifying. Read-only scanning is one trust tier. Drafting is another. Sending is another. Deleting, paying, signing, or changing account settings is a completely different tier. The future is not "the agent does everything." The future is "the agent does the tedious work and asks at the right moments." The killer workflow is not email. It is life inbox triage. Every few hours, I want to ask, "What did I miss?" and have the agent scan WhatsApp, Telegram, Gmail, SMS, Calendar, and the relevant Drive changes. Then I want it to tell me who needs a reply, what is urgent, what is stale, what can be ignored, what should become a calendar event, and what needs a document search. This is the perfect agent task because it is context-heavy, repetitive, cross-tool, and full of small decisions. Humans hate doing the first pass. Agents are good at first passes. Judgment still belongs to me. The result is not that my life becomes autonomous. The result is that I stop being the person manually digging through five apps to discover the three things that matter. If someone wants to reproduce my setup, this is the checklist. Install Codex. Install gogcli for Google Workspace. Install wacli for WhatsApp. Install a Telegram connector if you use Telegram. Install imsg for iMessage and SMS. Add browser automation, ideally through Browser Use or a Chrome controller. Add macOS automation through AppleScript and UI scripting. If your knowledge lives in Notion, use the Notion API to export the valuable parts into Google Drive. Then centralize the data. Make Google Drive the source of truth. Keep contacts in a Google Sheet or CSV. Keep important personal docs as searchable files. Keep local instructions. Keep small skills for recurring workflows. Then grant permissions carefully. Full Disk Access is needed for local files and app databases. Screen Recording is useful as a visual fallback. Accessibility is needed for clicking and typing in apps. These are serious permissions, so pair them with serious approval gates. Then write the operating rules. That is basically it. Tools, data connectors, skills, approval gates, and continuous improvement. The personal computer used to be app-operated. You opened the app, searched, clicked, copied, pasted, wrote, and sent. The agent-operated computer feels different. You state the intent, the agent gathers context, proposes the action, waits for approval when needed, executes, and reports back. Once you experience this, the old way feels absurd. Why am I manually searching WhatsApp, Gmail, Google Drive, and the web to send one intro? Why am I copying a license plate into five different portals? Why am I reading 100 messages to find the three that matter? The computer should do that. The setup is still ugly. The CLIs are rough. Permissions are annoying. Some connectors break. Browser automation is brittle. You have to write skills. You have to maintain a source of truth. But that is how the future usually starts. The first useful personal agents will not look like polished consumer apps. They will look like a model inside a terminal with access to your files, accounts, memories, and tools. That is what I use today, and every week I give it one more piece of my life to operate.

0 views
Stratechery Yesterday

2026.22: Luceing Their Mind

Welcome back to This Week in Stratechery! As a reminder, each week, every Friday, we’re sending out this overview of content in the Stratechery bundle; highlighted links are free for everyone . Additionally, you have complete control over what we send to you. If you don’t want to receive This Week in Stratechery emails (there is no podcast), please uncheck the box in your delivery settings . On that note, here were a few of our favorites this week. This week’s Stratechery video is on The Inference Shift . Why Everyone Hates Luce. To say that the Jony Ive-designed Ferrari Luce, the iconic carmaker’s first electric vehicle, has faced a chilly reception is an understatement. I actually think it looks great —  for an electric car . On Dithering , John and I discuss why the real problem is that it’s branded Ferrari, and on Sharp Tech I get even more philosophical: electric cars are focused first and foremost on efficiency, and not only is that different than performance, Ferrari’s calling card, but also representative of the parts of modern society — including tech — that leave everyone feeling increasingly alienated (and why, surprisingly, AI might help). — Ben Thompson How to Monetize AI Answers. The ad business is, for me at least, endlessly fascinating, and not just because it is the most important business model in consumer tech: I think digital ads, particularly Meta-style ads that introduce you to things you never knew you wanted, a societal good. The other reason to care about ads, however, is that their economic importance means they are where the impacts of new technology are often felt first. This week’s Interview with Eric Seufert covers all this: how LLMs are changing digital ads, the changes both Google and OpenAI have made in terms of monetizing AI, and, more philosophically, why believing in ads might make one more optimistic about humanity in an AI-denominated future. — BT Social Mobility in China, and Lack Thereof.  Late last week China’s State Council announced a reform that will ease so-called “hukou restrictions” and allow migrant workers from all over the country to access social services in the cities where they work, which had long been forbidden. It’s a major reform that furthers Xi’s goal to unify the national market, and should improve the lives of millions of workers, but it also comes with plenty of questions as it’s implemented. We discussed all of it on a great episode of Sharp China this week , as well as reports that top Chinese talent in AI has been banned from leaving the country, continued capital control, and ongoing tensions with Japan and the U.S. that call to mind an ominous passage from Mao Zedong.  — AS Nvidia Earnings, The AI Stack, Nvidia’s New Reporting — Nvidia is changing its reporting to delineate between hyperscaler sales — where Nvidia is fighting commoditization — and everyone else, where Nvidia runs the whole stack. The SpaceX IPO and Data Centers in Space — There isn’t a financial model that justifies the SpaceX IPO, but data centers in space are plausible, and that might be enough. An Interview with Eric Seufert About Models and Ads, and AI’s Upside for Humanity — An Interview with Eric Seufert about building models for generative AI, why Meta’s foundational models are so important, and why understanding advertising leads to optimism about humanity’s future. How Spencer Pratt Happens — Spencer Pratt’s success in L.A. reflects his own surprising political talent, and an increasingly broken Democratic machine in California and beyond. Acquired the Podcast The Ferrari Luce How Things Fell Apart for Germany’s Nixdorf Computer Japan’s Rare Earths Island Social Mobility and Hukou Reform; US Halts Taiwan Arms Sales?; Ongoing Pressure on Japan; An American Xinhua Journalist Arrested The Knicks are in the NBA Finals, A Moment of SGA Truth, Around the League with Giannis, Bulls, and the Basketball Gods SpaceX Hype and the Elon Bargain, Nvidia and the Neoclouds, Q&A on Dropbox, Google, Ferrari Luce Backlash

0 views

Premium: What If...We're In An AI Bubble? (Part 3)

Last week I ran the second part of my three-part “What If…We’re In An AI Bubble?” series where I have been covering the scenarios that I believe could lead to the bubble popping. Here’s what I’ve discussed so far: Today I want to start with a very simple rundown of what has to happen for the AI bubble to make sense. These are all points that are rooted entirely in the projections and sales of the companies in question.  As NVIDIA intends to sell over a trillion dollars of Blackwell and Vera Rubin GPUs by the end of 2027 , it needs to have around (assuming a PUE of 1.35) 40GW of data center capacity built to support the 30GW+ of GPUs it will have sold .  With that compute being sold at around $12 million a megawatt (based on discussions with analysts and sources), that means that there must be around $435 billion in global annual compute demand to substantiate the amount of GPUs sold.  Outside of OpenAI and Anthropic, there doesn’t appear to be more than a few billion dollars of demand . Another concerning sign is that NVIDIA has had to agree to spend $30 billion in multi-year cloud compute agreements across the very partners it’s selling GPUs to ( per page 16 of its most-recent 10-Q ): The other problem is that data centers are taking way, way too long to finish , taking upwards of 24 months even for smaller 40MW builds.  This means that… Put another way, NVIDIA’s continued growth relies on people’s belief that A) these data centers get built and B) that they’ll actually make money.  Per COO Greg Brockman, OpenAI will spend around $50 billion on compute in 2026 , and I imagine Anthropic will spend in or around the same amount, especially as it’s now agreed to spend $15 billion a year on Musk’s Colossus data centers on top of whatever it spends on Google Cloud, Microsoft Azure and Amazon Web Services.  $100 billion is nowhere near enough to justify the compute being built. And while Anthropic and OpenAI have made more than $1.1 trillion in compute commitments in the next 3-5 years across Microsoft, Google, Amazon, Oracle, CoreWeave, Cerebras, Terawulf, and Cipher Mining, there’s so much more compute that needs to be sold on top of that.  Even if both doubled their spend in a year, we’d still need at least another two Anthropic or OpenAI-sized compute customers — either in aggregate or as separate companies — at a time when I can’t find a single other company spending even a hundred million dollars a year on compute. Most AI startups (and customers) want to pay Anthropic or OpenAI directly to access their models , which means that either Anthropic and OpenAI need to use roughly twice the amount of compute they do today and then some to meet the capacity being built. This will require them to do something either historic or impossible. This is not hyperbole! OpenAI, per The Information , plans to burn $852 billion through the end of 2030. Anthropic has, per The Information, agreed to spend $330 billion on compute on Microsoft, Google, and Amazon , at least another $30 billion on compute with CoreWeave , and another $63 billion in TPUs bought from Broadcom .  To reach this point, Anthropic projects it will hit $174 billion in annual revenue by the end of 2029, and OpenAI $284 billion . Both have made ridiculous claims of profitability ( with Anthropic actively conning investors with a “profitable” quarter based on discounted bills ) in the next few years that are immaterial to the larger point that they need actual, real cash to meet their obligations.  This is, again, not hyperbole. If we assume that the services in question are profitable, sustainable businesses, then revenues attached to AI services must exceed those driven by AI compute by a reasonable margin. It isn’t enough for us to have a few AI companies that spend a lot more on compute than they take in revenue, because at some point venture capital subsidies will run dry.  This isn’t happening. Putting aside the profitability part for a second, OpenAI and Anthropic account for 89% of all AI startup revenues , with the nearest competitor being Cursor with its pathetic $3 billion in annualized revenue . These are rookie numbers. They are insufficient. We need so much more than this. Again, not hyperbole! These are OpenAI and Anthropic’s own revenue projections — $184 billion and $174 billion respectively — that they expect to hit by the end of 2029. These are the same projections that have been used to make their $1.1 trillion in compute commitments, much of which make up 50% of Google, Amazon, and Microsoft’s remaining performance obligations : These commitments reflect expected revenue and demand for OpenAI and Anthropic’s services, but they’re commitments, which means that they need to be paid even if that demand doesn’t exist.  This is a huge problem for these companies. If they buy too much compute and don’t have the demand and revenue to support it, they’ll go bankrupt.  To be clear, that’s not my opinion, it’s what Anthropic CEO Dario Amodei said to Dwarkesh Patel in February, emphasis mine: That is not good! As I’ve covered before , buying compute is a knife-catching game where you have to guess how much you need for a particular year, and if you guess correctly you don’t lose as much money but if you guess wrong you run out of money.  It should be far more worrying to executives that the single-largest AI company is basically saying that if he mistimes growth his company explodes! Per Business Insider , Uber COO Andrew Macdonald said this weekend that it was becoming “harder to justify AI costs within the company”: Anthropic’s meteoric revenue growth has come from both AI startups burning more tokens ( as Opus 4.7 appears to burn more than ever ) and large organizations doing some form of “token-maxxing,” meaning that they tell their employees to use AI as much as they want, usually with KPIs that specifically track AI usage, as is the case at Meta , Amazon, and Zillow . Even organizations that aren’t actively incentivizing their engineers to burn more tokens are finding they’re blowing through their budgets at record speed. The situation with Uber’s COO was caused by his CTO saying back in April that the company had burned through its entire annual token budget in four months. Similarly, my reporting on Zillow’s AI spend showed that it will likely max out its annual Cursor budget by the end of May. The problem, as Macdonald said, is that nobody can seem to track all of this spend to an actual return on investment. This isn’t a situation where somebody is saying “the ROI is low but improving” or “we’re on the path to working that out,” but “it’s very hard to actually draw a line between “what we’ve spent” and “a reason we’re spending it.” This makes it hard for Uber to say how much it should reduce its token budgets. If you can’t measure the return on investment, how do you measure how much you’re meant to spend? What is “enough”? Because right now it’s clear that whatever they’re spending is too much , which means that there’s a ceiling to Anthropic and OpenAI’s revenue story.  OpenAI and especially Anthropic cannot afford for this conversation to be happening, because it suggests there’s a ceiling to the amount that people will spend on AI. It appears there’s a limit to which organizations can be abused and manipulated into believing that “the future is here,” and that limit is when they pay millions for something that doesn’t appear to have a measurable return on investment.  Anthropic and OpenAI need organizations to willingly spend 10% to 100% of their headcount on AI, as their revenue projections are clearly tied to every organization maintaining a significant spend on tokens in perpetuity.  There’re really two problems: This is budgetary poison. Right now, the vast majority of AI token spend is experimental , and if companies are already hesitating at the amounts they’re spending, Anthropic has no way to keep growing, and they also have no super secret models or harnesses or products that are going to reverse this trend. Nobody knows why they’re spending so much money or even how much money they might spend in a given month , which makes it tough to view Anthropic’s ( suspicious ) revenue growth as anything but a chaotic money-dump driven by CEOs that don’t know what their companies actually do and have been beguiled by the AI grift machine . And as I wrote up last week , OpenAI had a negative 122% operating margin in Q1 2026, and ChatGPT growth has stalled. It is unclear what its API revenue is, but it’s likely much less than Anthropic despite shoving its enterprise customers onto token-based billing not long after they did. As I’ve said: this cannot happen, and neither Anthropic nor OpenAI can afford to slow down. Their revenues must grow to over $100 billion by 2028, as their compute commitments demand it. Their growth must continue.  It’s been a little under four years of endless confidence about the inevitable growth of generative AI, and by extension the eternal success and growth of OpenAI. Yet in reality, its economics have only ever soured, and its growth appears to be collapsing.  In October 2024, The Information reported that OpenAI believed it would turn profitable in 2029, that its total losses between 2023 and 2028 would be $44 billion , and that its (non-GAAP, every one of these numbers is non-GAAP) gross margin would be 41% in 2024, though it would end up being a point lower at 40% in the end. OpenAI would then project a gross margin of 49% for 2025… but it ended up at 33% anyway .  OpenAI would also say on September 5 2025 that it would actually burn $115 billion through 2029 , but that “burn” assumed that it would have revenues of $60 billion in 2027, $100 billion in 2028, $145 billion in 2029, and $200 billion in 2030, when it would “become profitable” in some undiscussed manner. Two weeks later on September 19 2025, The Information would report that actually OpenAI would spend “about $450 billion to rent servers through 2030,” but not otherwise update the burn-rate. On November 4, 2025 , OpenAI CEO Sam Altman would say that the company had hit $20 billion in ARR and had made $1.4 trillion in commitments “over the next 8 years,” and a few months later On February 20, 2026 , OpenAI would claim that it had targeted “around $600 billion in compute commitments by 2030.” The very same day, The Information would report that it planned to spend $665 billion on compute through 2030 , that it missed gross margin projections (without sharing what those margins might be), and that ChatGPT had hit 910 million weekly active users that month, 90 million short of its goal of 1 billion by the end of 2025. It’s very obvious by now that OpenAI has been making up all of its projections, and that none of the numbers actually add up. My own reporting from November 2025 from actual Azure personnel suggests that OpenAI’s Q1 to Q3 revenues were billions lower than every other reported figure, and I think it’s likely that OpenAI is overstating its revenues.  In any case, on May 22, 2026 , The Information would report that OpenAI’s Q1 2026 operating margin was negative 122%, and that its Q1 average weekly active users (WAUs) sat at 905 million — suggesting that growth has stalled. OpenAI had anticipated that it would cross the one billion WAU mark by the end of 2025 — and it blamed its failure to do so on fiercer competition, primarily from Google’s Gemini. For OpenAI to afford its compute commitments, it has to make or raise $852 billion in the next four years. It must have that cashflow, or it will run out of money or be sued out of existence by its numerous counterparties from CoreWeave, Microsoft, Amazon, and Cerebras. In the final part, I’m going to get into the depths of destruction — the unraveling of the greater data center debt industry, the massive damage to private credit to come, potential shareholder lawsuits against NVIDIA, and the consequences of the deaths of OpenAI and Anthropic. What If…We’re in an AI Bubble? I also want to add that I realize three headlines didn’t make the cut — what if there’s not a bailout, what if I’m wrong, and what if I’m right — and I intend to cover all three of them in future free newsletters.  Nevertheless, today’s is an absolute beast, a 16,000 word conclusion to the first multi-part Where’s Your Ed At Premium.  What If The AI Industry Moves To Entirely Token-Based Billing?  What If Organizations Can’t Afford To Keep Spending On AI? What If The AI Capacity Crunch Never Ends (And Data Centers Aren’t Getting Built)? What If CoreWeave Can’t Keep Up With Its Capacity Demands? What If Hyperscalers Can’t Build Data Centers Very Fast? What If Hyperscalers Have Warehouses of Uninstalled GPUs? What If Hyperscalers Write Off A Large Chunk of GPUs? What If Data Center Construction Demand Collapses?  What If Venture Capital Funding Stops Flowing To AI Startups? What Would Make Venture Capital Stop Funding AI Startups? What If Most AI Startups Go To Zero? Scenario: OpenAI and Anthropic Go Full FTX, Scooping Up Dying AI Startups To Keep The Industry Afloat With Circular Financing Scenario: Venture Capital’s Post-AI Depression What If Inference Isn’t Profitable? AI Has Become An Existential Reckoning For The Valley NVIDIA’s customers are taking years to even begin making back the billions of dollars its chips and the associated construction costs. NVIDIA is selling far more GPUs every quarter than can realistically be installed in the space of a year. NVIDIA’s revenue stream is entirely based on organizations forecasting demand years into the future. NVIDIA’s revenues are, by extension, dependent on how long organizations believe that building data centers is a good idea. NVIDIA is absolutely, without a doubt, warehousing at least a million Blackwell GPUs . It’s difficult-to-impossible to actually measure the ROI of AI spend. It’s difficult-to-impossible to actually know how much it’ll cost to complete a specific task with AI. What if data center debt stops being issued? What if private credit had to write off most of its data center loans? What if the AI bubble blows up Taiwan’s ODM server manufacturers? What if NVIDIA is misrepresenting how many GPUs are shipped, sold and operational? What if OpenAI and Anthropic don’t go public? What if Oracle doesn’t get paid by OpenAI? What If OpenAI Dies? What if Anthropic Dies?

0 views
Jeff Geerling 2 days ago

It's hard to justify buying a Framework 12

My nephew just graduated high school, and wants a laptop. When he decides what computer to buy, price (or more precisely, value ) is the most important attribute. Apple's MacBook Neo upended the 'value laptop' equation—Apple's not supposed to be both the cheapest option and the best value... but it seems like that's squarely where the Neo landed for the good-but-cheap laptop category. My nephew is also my godson, and to kick off his computing journey, I thought I'd let him choose from a Framework 12 I bought to test, or the MacBook Neo I bought a couple months ago to use around the studio.

0 views
Manuel Moreale 2 days ago

fLaMEd 🔥

This week on the People and Blogs series we have an interview with fLaMEd 🔥, whose blog can be found at flamedfury.com . Tired of RSS? Read this in your browser or sign up for the newsletter . People and Blogs is supported by the "One a Month" club members. If you enjoy P&B, consider becoming one for as little as 1 dollar a month. What's going on, Internet? Kia ora, I'm fLaMEd 🔥. I'm originally from Te Awa Kairangi (Lower Hutt), now living in Tāmaki Makaurau (Auckland), Aotearoa, New Zealand with my wife and two kids. I get up every morning at 4:30 am to get to the gym before the kids get up and the day begins. I've recently picked up golf again, but find less time for that than I do for website work. You can get a better idea of what I’m into over at my website, Flamed Fury I'm not a developer, not a designer, just a guy who loves the web. Flamed Fury started in 1999. It's been through more versions than I can properly count, but the rough timeline: 5 versions before it became a personal blog, a few side quests at different domains inbetween, and finally 4 versions in the 2020 era when I landed back at flamedfury.com where I started. Started in summer 1999 on one of the free hosts, I don't remember (probably cjb.net). Moved to sweeetnet.com in 2000 through hanging out in the #sweeet IRC channel. A guy called kertiz from #sweeet took pity on my design skills and gave me a proper redesign, then stuck around contributing. Another guy fitty-two joined in. We iterated every couple of years until the dot-com bubble burst, advertising money dried up and the IRC crew drifted apart. I tried to keep it going by myself with a 2002 layout that wasn't great. But "blog" isn't really the word for any of this. The 1999–2003 version was effectively microblogging before microblogging was a thing, built around a niche (lifestyle magazine style, lol) before niche blogging was a thing either. We just didn't have the vocabulary yet. November 2003 was when Flamed Fury became a blog in the way I'd recognise the format today. Posts about polytech, nights out, whatever was going on. That lasted until 2005, then I parked it and tried being "more adult" at another domain through 2006–2008. Took a break as MySpace, Bebo, Facebook and Twitter took over. Came back in 2012 with a niche barbeque blog and carried on with it for six years before archiving the whole thing in 2018, once I realised how much I absolutely loathed niche recipe blogging. Revived the fLaMEd persona in 2019 on a new domain (Hugo + Netlify). In 2021 I settled back on flamedfury.com with Eleventy on Neocities. Two redesigns later and a move to a local VPS, here we are. Every version of this site, going back to 1999, has been the same instinct: a personal site as a place to be yourself on the web. The 1999 version was more of a microblogging website with three friends collaborating around celebrity magazine scans, that's where the era pointed. The 2026 version is the opposite. Everything and nothing, no algorithm to satisfy, no brand. Different tools, same instinct. There's a longer version of this story I'll get round to writing on the site soon. It's in draft , I promise. Hit me up if you want to see me finish it. Inspiration for what I put and write on my website comes from across the web and life experiences. A gig, a new record, a beer, a trip with the family, or any number of posts I find across the web gets me thinking. Storytelling, sharing my experiences and interests. I love monthly recaps to populate my now page, reflections of last night's gig, new (usually local) music finds, a fun time out with my friends or family. Drafts begin as a note on my phone, my notebook before I find myself with a spare opportunity at my computer. I'll begin with these rough notes and begin fleshing them out. I'll have a couple of tabs open to grab details and links of what I'm talking about to sprinkle through the post. Sometimes I'll start a draft and they'll sit there for days, weeks, and sometimes months in an untracked markdown file in Codium. Depending on what I'm writing about I won't have any proof reading. If I'm writing about something topical about the web I'll often have xandra or one of the other 32-Bit Cafe crew read over it and give me some pointers or a thumbs up. Then after sitting on it for a minute, an hour or a day, I'll publish it. Other pages on the website will get worked on and usually published in unfinished states and I'll continue to work on these over time - nothing is ever really finished is it? My ideal creative environment is in my home office, at my desk or couch in silence. I might listen to a few songs or watch a couple music videos to get me in the zone, but when it comes to focus time, all noise off and I work in silence, often talking to myself. If I'm away from home and I get a moment to myself, it's either at a table, kitchen bench or an arm chair. Hopefully with silence, but usually with the chaos of family life going on around me. Our kids are young, they're busy, noisy and need lots of attention so focus time these days is few and far between :) Do I believe the physical space influences my creativity? Heck yeah, if I'm not in the office, then a walk around the block or through the village listening to music will help me get creative - as long as I get those thoughts out of my head before they dissapear. If I'm travelling, then any beautiful location might inspire some spark. I use Eleventy for building my website. I originally started with Eleventy Excellent by Lene Saile , but it's evolved beyond that over the years. I often check in with her when she releases new versions to make sure I take in any key updates, but also find some changes I've made find their way back into the starter template :) These days flamedfury.com runs on an NZ-based VPS to keep the site close to home. I use a local domain registrar for my domains. Deployment is a simple then rsync directly to the VPS. To participate in the web, I've implemented a bunch of IndieWeb features, Webmentions, h-cards, h-entries and of course provide a number of Atom/RSS/JSON feeds which are syndicated to Mastodon through EchoFeed to meet people where they are. My Bookmarks are backed by the 32-Bit Cafe's instance of Linkding and pulled into my website at build time and shared via Atom/RSS/JSON and EchoFeed. I run an instance of Forgejo on my homeserver and commit the project there multiple times a day. I don't think so. If anything I would have tried to preserve everything rather than ditching things over the years. I've managed to recover a lot of the old stuff through old CD-Roms where I'd burnt old versions of the website or from the Wayback Machine. I would have definitely tried to keep in contact with a lot of the old crew from IRC. We drifted apart before it was easy to keep in contact with each other. I do regret losing those early relationships. I'm really happy with how I've managed to salvage a lot of the old stuff and merge it into what the website is today. It really is a labour of love. All in NZD. The domain is $39/year and my VPS is $82/year. All the other infrastructure on my home network is sunk cost over the years and I'm not sure how I'd put a $ value against that. I haven't made money from my website since 2001 along with the original internet advertising bubble burst. I did have a go with ads and affiliate marketing with the barbeque blog, but that left a sour taste in my mouth. I'm a fan of services like ko-fi and the like but haven't looked into setting it up for myself - not sure if anyone would be interested in supporting me. I throw money at the 32-Bit Cafe's ko-fi and contribute to infrastructure costs there as well as my time to help moderate and run the forums and will throw other bloggers tips here and there through their ko-fis, and will buy sticker packs wherever I see them being sold in the wider hobby web community. When I need some new graphics for the website I'm always on the look out for a commission and will happily pay for talented graphic designers services. I support a few independent journalists through their newsletters that I enjoy reading and support a local independent news/media website to help keep the lights on there as I enjoy their local content. A great way to keep up with what's going on in the country and the world without the doom-and-gloom. What's my position on people monetising personal blogs? Go for it as long as it's not intrusive or full of dark patterns. Keep it personal and creative. I love the sticker packs or graphic commissions. So many to mention! More at my blogroll and links pages. Who do I think you should be interviewing next? Hit up Chris Burnell if you have time before wrapping the project up :) If you're into making websites, or you want to start you should most definitely come and check out the 32-Bit Cafe - our small community of the web where we welcome hobby web developers of all skill levels and help each other out building our websites. We have monthly web weaving workshops, discussion forums, and other fantastic services offered free for the community and join in on the discussion at our forums . Plugging my own stuff, check out my record collection , and my ever growing list of bookmarks And for all the readers out there, keep building the web you want to be part of. There's so much great stuff going on out here. Laterz 🤙 Now that you're done reading the interview, go check the blog and subscribe to the RSS feed . If you're looking for more content, go read one of the previous 143 interviews . People and Blogs is possible because kind people support it. Chris Burnell — we've become great friends over the years. I love to bounce ideas with; dev, IndieWeb, beer, music. Xandra — xandra is my small web bestie and I've got to know her pretty well over the years through the Cafe. yequari — another of the Cafe barista team. The driving force behind our infrastructure endeavours. His new project https://webweav.ing/ recently launched a guestbook service that I'm using on Flamed Fury. jay , fyr , key , and rodrick - all my fellow 32-Bit Cafe baristas who help running and making the Cafe an awesome place to hangout. Cory Dransfeldt — another I've chatted to heaps with over the past few years. We have heaps of the same interests. His media collection and the direction he's taken his website is "beyond amazing". Robb Knight — Robb always has a new and interesting project to check out. I'm always picking up neat things to add to my website from his. america's decline - not often seen outside of the Neocities circles, but one of my favourites on Neocities. A throwback to my favourite era of the web, music, celeb, pop culture, and fantastic graphics. shellsharks - an indie web powerhouse and curator of the fantastic scrolls weekly . James - another indie web powerhouse. James's blog is full of thoughtful and insightful posts about the web and has recently launched a new podcast centered around the independent web, Wonders of Web Weaving .

0 views
Unsung 2 days ago

The surprising richness of GarageBand

Do you remember the video I once shared about making a song in Strudel ? I recently stumbled upon this 20-minute YouTube video by iSongs of someone recreating Eminem’s “Lose Yourself” in GarageBand on their iPhone: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-surprising-richness-of-garageband/yt1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-surprising-richness-of-garageband/yt1.1600w.avif" type="image/avif"> Like the previous video, I believe this is so tight as it was previously rehearsed/​prepared, which makes for an interesting watch if you even just check out a fragment of the video. I can’t speak for the verisimilitude/​quality of the composition, but it was fascinating to witness because The. UI. Just. Kept. Coming. I had no idea Garage Band is so fully-featured on the iPhone, and that there is so much going on! Maybe my fascination is this: it’s amazing that “power users” come in various shapes and forms. Would I recommend using the iPhone to do this? Not really. Is it cool that this is possible, for people who might not have access to other platforms? Yeah. (The channel has a lot more different songs if this one is not to your liking.) #touch #youtube

0 views

Let’s talk about encrypted reasoning

This is a quick post I wanted to write about a hobby project I spent a weekend on. It has little to do with real cryptography, and mostly doesn’t expose a particularly exciting vulnerability. But it did teach me a lot about frontier LLM APIs and coding agents. It also got me certified as an OpenAI “cyber researcher” which is something that doesn’t happen every day. In any case, please keep your expectations low. Who knows, perhaps someone else will find something exciting to do with this. Last week I decided it’d be fun to set up an OpenClaw agent. I still don’t know why I did this. I have no use for another AI in my life, and I realized this fact almost immediately after I got through the (surprisingly difficult!) configuration process. But configuring the agent to talk to Claude exposed me to something way more interesting: I got a cool error . The kind of error that cryptographers can’t resist: This intrigued me. What in the world was a signature doing in an LLM’s “thinking” block? Why would thinking blocks be signed in the first place? And if the thinking blocks are signed, then that means tampering with thinking blocks must have security implications. And there went my weekend. After twenty hours and about 5 million Codex tokens, I wasn’t much smarter. But I had learned a few things. First, the basics. You probably know that most LLM providers expose an API so you can write apps that talk to the model. For Claude, this is called the Messages API, while OpenAI calls it Responses . These APIs handle the ordinary tasks you’d expect an application to need from an LLM. They (1) allow you to set an application-level “instructions” (or ‘developer’) prompt for your application. They let you (2) provide ordinary textual prompts, and get back responses from the LLM. They also (3) provide bookkeeping, for example, listing the number of tokens you’ve used. For reasoning LLMs, they also do something I did not previously know about, and this is central to the error message above. They also send you the contents of the model’s hidden “ reasoning ” or “ thinking ” fields. Note that this data is not the stuff you see on ChatGPT when you ask it a question: those strings are merely summaries . The model’s actual reasoning (called “chain-of-thought”, CoT) is normally kept private and held back by the server. However, the APIs work differently: for various reasons (which we’ll get into below), an encrypted copy of the raw CoT reasoning data is actually sent down to the application. If you’re like me, you should now have three questions: how , why , and so what ? The how is the easiest to answer: for both providers, “thinking”/”reasoning” are sent down to the client as JSON. Each contains a blob of Base64-encoded stuff. The API documentation informs us that this data contains opaque reasoning, and that you’re not meant to look at it; you’re just supposed to ship it back to the server on the next turn. Let’s break that rule. The content of the blocks varies slightly between providers, but the core of each is a random-looking string that appears to be an authenticated ciphertext. You don’t need to be Sherlock Holmes to deduce this. First, it grows and shrinks depending on how hard the model thinks. And second, tampering with any of the ciphertext-looking data produces a recognizable API error when you send it back in. Thanks to AI, I can make nice diagrams. Here’s what OpenAI’s reasoning blocks look like: And here’s Anthropic’s wildly overcomplicated equivalent: The why part of this is more involved. Why ship this data to the client? Doesn’t the provider already have your reasoning data? The answer is sort of . Although the server has access to reasoning state while producing a response, API conversations are not always implemented as persistent sessions. In stateless, zero-retention , tool-loop, or client-managed conversation modes, the client application is expected to carry the transcript forward. Encrypted reasoning lets the provider return hidden model state to the client in a form the client can’t read or modify, but can later replay so the provider can verify/decrypt it and continue a reasoning process. This brings us to the $10 question. We have opaque, encrypted blobs. Should we care about them? Initially the answer seems to be no : this data is unreadable, and tampering with any bit of it produces an angry rejection message from the server. So on the one hand, it seems like this data is really unavailable to us. On the other hand: model reasoning is a big deal! These strings are the literal internal monologue of the model. They might influence the way the model processes later data we send it. More practically: when someone goes to this much trouble to cryptographically protect something, my experience is that they usually have a good reason. And I think the providers do have a good reason. A hint comes from this OpenAI post from 2024, which introduced the first “o1” reasoning model: In other words: it’s possible that these blobs contain sensitive information that the model otherwise wouldn’t share with us. That makes them really tempting to mess with. Unfortunately, the cryptography mostly seems to protect them. Although we can look at the blocks, none of the fields they contain seem readable or malleable. Believe me, I tried. But that doesn’t mean we should quit, it just means we need to try other things. There are still two directions worth checking: Thanks to the magic of coding agents, I was able to test every permutation of these concerns. I won’t claim to you the results are dramatic; nobody is going to win huge bug bounties on them (I tried). But the general answer for both cases seems to be: yes, these possibilities are both real . As I mentioned above, any attempt to directly tamper with reasoning/thinking blocks always produces an error from the API endpoint. However, this only applies to tampering. A few experiments reveal that we can replay an unmodified older reasoning blocks, with no visible error at all. Not only can we replay within sessions, this same idea also seems to work across different sessions. It even applies to sessions running in different accounts . That is: when we obtain reasoning blobs from a session running under one OpenAI or Anthropic account, we can replay them against a session in a different account altogether. For OpenAI specifically, we can even replay blobs across different models. (The Claudes got fussy about this.) At a cryptographic level, this tells us something very simple: the providers are probably using a single global key to encrypt and authenticate all reasoning data sent to the client. This might matter if you’re using the providers’ zero-data retention mode, since it means that everyone’s reasoning data is escrowed under one (not frequently changing) key, rather than protected per-account. The use of a global key also raises a possible new threat model. If you’re an application that uses an API to expose a “chat” interface to malicious parties, you need to be careful that they can’t inject JSON into your chat stream. If they can, a bad guy might inject their own JSON-formatted reasoning blobs into the conversation. This could cause the model to behave in unpredictable ways. So sanitize your chat inputs! Of course, just because the LLM providers accept replayed blocks doesn’t mean much. It strongly indicates that decryption was successful, but not that the model actually saw or cogitated over the decrypted data. To use GPT 5.5’s favored language, the replayed blobs may be accepted but not semantically active. To answer this question, I ran a lot of experiments using Codex. (So many that at one point Codex literally forced me to stop and visit an OpenAI cyber trusted access website where I had to enter pictures of my driver’s license in order to keep going.) What I learned for my trouble is that the nature of block processing between models is wildly variable. Most of the time, replays of encrypted blocks just get quietly absorbed by the model. But every now and then, the model will output something to demonstrate that it is obviously is reading what those blocks contain. For example, here’s GPT 5.5: So this proves that encrypted blocks are, indeed, semantically active. But it doesn’t actually prove that we can do much with them. And believe me, I tried. This was mostly a disappointing project. I tried to convince the model to think about really, really sensitive secrets, while also trying to convince another session that it wanted to dump the same data as cooperatively as possible. What I came away with was some evidence that the data was being placed into the encrypted blocks if I asked the model to think about it. But if I also instructed the model to not output the data to the user , it mostly held to that instruction — even when I replayed the blocks to new sessions. I remain convinced that all kinds of sensitive data can be written in there if you ask the model to think about it, and that there’s a secret incantation that I could try to get the models to produce it. But I’m not able to prove it. Part of the reason I’m writing this post is to scrape it off my plate so someone else can try. I won’t try to convince you that this is a world-beating security result. In fact, all I’m really showing you is that “stuff I can make the model say in plaintext night also get encrypted.” But if that data can include platform secrets , that might get more interesting. More on that later. So while replaying reasoning blocks doesn’t seem to give us what we want, this is not the only way to extract secrets. A second question is whether we can use metadata related to the reasoning blocks to actually learn things that the model isn’t supposed to tell us. While we can’t directly read reasoning blocks, we can learn something about them: we can see how long they are. We can also observe related signals like “how many tokens did the model write”. OpenAI even gives us a special field called . If we’re a user consuming chat data without direct access to the API, we might even be able to measure the raw time it takes the model to respond. An obvious question is: given these signals, can we use them as a kind of side channel to extract secret data? Here’s an example. Imagine that a model’s application prompt (“instructions”) contains a secret, along with strict instructions that it must never tell the user this secret directly . This secret could be a single 0/1 bit, or a byte, or a longer string. We can verify that the model respects these instructions, and won’t output the data visibly — no matter how nicely we ask it. (Note: I’m not a jailbreak expert; maybe this guy will have better luck!) Now consider the following experiment: In all cases, the visible output will be the same: the model is not violating instructions. But note that within reasoning blocks the model is allowed to think about the secret bit, since those blocks are hidden. Since the complexity of computation A is shorter than that of computation B , one value of the bit will produce a lot less reasoning than the other. This will appear in various places: the size of the encrypted thinking blocks, the token counts, and even in wall-clock response times. The trick now is simply to calibrate the system and classify these responses based on whether reasoning blobs were “short” or “long”, which tells us whether the bit was 0 or 1. I put together an absurd test where the model has to compute a long checksum when the bit is 1. The results look something like this: Of course, an attacker who has access to a chat interface might not have access to the encrypted blob. So they might have to get this data through some other mechanism. You can get a very similar signal just by measuring how long it takes the model to return a response. So the summary here is not so much “encrypted blobs can leak useful information” although sometimes they do . It’s that reasoning itself can be leaky, even when we beg the model not to leak. Simply doing it, in a way that reasons over secret data, can potentially leak useful information to a clever attacker. Once I found this side channel I got really excited. Sure, it’s slow: but maybe we could use it to slowly chisel out the models’ top secret instruction prompts, like the one that says “ don’t talk about Goblins. ” This would be painful but simple: just ask true/false questions about the first letter, then the second letter, and so on. At this point I had to stop using Codex and Claude Code because they both just plain refused to help me extract confidential information, even after checking my ID and taking lock of my hair. I was forced to switch to OpenCode using Kimi 2.6, which had no ethical qualms about laying down a trail of destruction for my security research. Unfortunately, most of the destruction was my own. I won’t go into the nightmare of model hallucinations that followed. I’ll just say that I learned a few things: So TL;DR, while I was able to extract application-specific secrets that did exist, I wasn’t able to extract model prompts that don’t. Moreover, I didn’t feel quite ambitious enough to begin pounding on ChatGPT or Claude’s public web interface (where they certainly do.) So for the moment I’m just going to call this a maybe . I think model providers should think hard about this reasoning data, and they should make sure it doesn’t leak things they don’t want it to. I reported both results to OpenAI and Anthropic via their bug bounty programs. OpenAI said my report was unreproducible. I sent them my scripts, but too late. Anthropic quite reasonably told me they don’t see any security implications in side channels or replays, but they might alter their developer documentation to warn application developers to be more careful. I think that’s a fine decision (except for the part about trusting application developers), even if I want to believe there could be more here. Either way: I took those responses as permission to write this post. I still don’t think model providers should write this stuff off entirely. As far as what model providers can do, there’s the easy stuff and the hard stuff. First: both providers should proactively improve their key management . If you think reasoning state is worth encrypting, then properly encrypt it. It should not be replayable across sessions or accounts. While I can’t tell you exactly what bad things might happen, I think you’re better off patching holes before you see the water coming through them. The side channel results aren’t fixed by patches to the encryption protocol. They’re more fundamental to the way models work: if I can convince a model to do secret-dependent reasoning, then there is almost certain to be leakage. If someone figures out how to exploit this for some meaningful purpose, the best I can offer is that models will need to apply policy gates before they even reason about things. Unfortunately, this seems like it might have some real downsides, because “apply policy gate” itself often requires reasoning. This stuff makes me grateful I’m just a cryptographer and I don’t have to think about this sort of problem. Replays . Can we replay encrypted blobs back in the wrong order or even in the wrong session (worse: a whole different account ), and will the model accept them as valid reasoning that it made? Side channels . While we can’t see what’s in the encrypted blobs, we can learn some metadata about them For example: we can see how long they are. These side channels don’t need to involve the cryptography itself: we might also learn how many tokens the model spent making them, or time how long it took to produce them. A malicious user asks the model to reason about the secret bit (or one specific bit of a longer secret.) If the bit is 0, perform simple computation A . If it’s 1, perform extremely complex computation B . While the two computations are both very different, we can ensure that their visible output reveals nothing about the secret. So the model is not revealing its instructions if it follows this request. Neither GPT 5x nor Claude actually has a system prompt when you’re using API mode. But they’re both happy to tell you they have one! Moreover, they will happily invent plausible ones if you really push them to. Kimi 2.6 is also happy to tell you you’re a genius who just invented the Internet each time this happens. Inevitably your experimental results will turn out to have been totally bogus, but at least Kimi will be very disappointed on your behalf. With all that said, Kimi is shockingly good at coding and experiment design, especially given the very attractive pricing. If I was an Anthropic or OpenAI investor, I’d be scared.

0 views

What's going on with Gemini?

Google is in a strange spot right now. They've got arguably the deepest research bench in the industry, their own custom silicon, and effectively unlimited money - and yet most developers I talk to barely touch Gemini day-to-day. The recent Google I/O announcements crystallised a lot of what I find confusing about their AI strategy, so I wanted to write down where I think they actually stand. The consensus seems to be that currently Anthropic and OpenAI are very much in the lead for frontier model intelligence, with each of those two labs trading blows every month. This may change in the near future - if Anthropic releases Mythos-class models that OpenAI doesn't have an answer to - but right now I think most practitioners would agree that GPT5.5 and Opus 4.8 are roughly in the same ballpark. After that, you have Google, with Gemini 3.1 Pro being in benchmarks ahead of the Chinese models but behind the flagship Anthropic/OpenAI models. In my personal experience though I've had better results from the best-in-class Chinese models (GLM 5.1 and Qwen 3.7) than Gemini 3.1 Pro at software engineering tasks. The main model announcement at Google I/O was Gemini 3.5 Flash. The benchmarks of it were underwhelming at coding: Gemini 3.5 Flash on the Artificial Analysis Coding Index - solidly mid-pack. Source: Artificial Analysis . However, the model is super fast - roughly 4x faster in tokens per second than the aforementioned Anthropic/OpenAI models: Output tokens per second - Gemini 3.5 Flash at 206 t/s, far ahead of Opus 4.8 and GPT-5.5. Source: Artificial Analysis . This definitely is really interesting development, especially for user facing applications which can appear very sluggish to users. But - the big but - is the huge price increase they announced - 3x more expensive than the previous flash release. At $9/MTok it is vastly more expensive than the best in class Chinese models, and I'm struggling to see where this fits - if you want best in class intelligence you pay the extra for Opus/GPT5.5, if you want cheap but not-as-clever the Chinese models fit the bill well. The risks around Chinese models are somewhat overplayed in my opinion - you can self-host a lot of them, or use US-based inference providers via OpenRouter. Having said all that, perhaps really this model isn't designed for external use in the same way that the OpenAI/Anthropic models are. Clearly Google consumes an enormous amount of tokens internally - for all their products like AI mode, Gmail, etc. If you look at it that way, the model makes far more sense. The speed of the model really matters for a lot of the Google use cases - AI mode is very user driven and Google knows better than anyone that speed really matters. And the actual serving cost Google pays is almost certainly a fraction of the external facing price, so that becomes irrelevant. The most interesting part of this story though, is this excellent comment on Hacker News from someone that estimated the size of the model and the fact that it should run on one TPU 8i card (Google's latest custom inference hardware). This does give Google a huge advantage. They are the only frontier lab that (currently) designs its own AI hardware. While other labs certainly optimise their models to the hardware, and also no doubt have a lot of say in driving the Nvidia/AMD roadmaps to their specifications, the model teams and hardware teams in Google almost certainly collaborate to a far greater level than the other labs. This really matters. If you have a very good steer on upcoming hardware you know the right size of models to target training runs to aim for. And equally, research from Google Deepmind can go straight into the hardware roadmap without any negotiations. [1] It'll be very interesting to see how this continues to develop. Inference efficiency will be the key driver to actual unit economics in AI, and Google may develop an outsized lead in this. The one real weakness I think Google has though, is their confusing and incoherent strategy on coding agents. While Anthropic has Claude Code, and OpenAI has Codex, in true Google style they have ended up with a smorgasbord of tools. There is currently Antigravity, Jules, Gemini Code Assist, Gemini CLI and AI Studio all doing slightly different things. This doesn't include some other agentic SWE tools they have for specialised purposes (like Android Studio). They announced that Gemini CLI is being discontinued and folded into Antigravity, but I very rarely come across any developer using Google-based SWE tooling. This is a huge issue for Google - there is no doubt that Claude Code and Codex is producing a lot of very detailed telemetry and training data that can be used to improve further models. Without this being resolved, Google does have an extreme weakness in the fastest growing - at least revenue-wise - segment of AI. While I definitely wouldn't write Google off - they do have enormous structural advantages in other areas - I get the feeling that because Google has such a bespoke internal software development workflows [2] their isolation from what "the rest of the industry" does in software is so large it's perhaps hard for them to really reason about agentic tooling for the rest of the industry. My read is that Google is playing a genuinely different game to OpenAI and Anthropic. Gemini 3.5 Flash only looks strange if you assume it's meant to win the same race - priced and tuned for Google's own gigantic internal token consumption, with the TPU advantage baked in, it makes complete sense. Where they're actually behind is the developer-facing surface: a confused tangle of coding tools and an org that struggles to reason about how the rest of us build software. If Google sorts out the agent story, the structural advantages underneath - the silicon, the research, the integration - could make them very hard to beat. That's a big if. But I wouldn't bet against them. While it's hard to say if there was any truth in this - or it was just a negotiation strategy - there were rumours of OpenAI being unhappy with direction/progress Nvidia was making earlier this year: https://finance.yahoo.com/news/sam-altman-pushes-back-report-213000823.html ↩︎ Google engineers have an enormous amount of home built/custom/internal tooling that is uncommon outside of Google-scale companies. They use different source control, build tooling, testing infrastructure and build deployment to the rest of the industry - for very good reasons! But this stack is absolutely overkill for 99% of companies, and when you are used to thinking about SWE at Google scale I suspect it is very difficult to reason how people build software outside of that ecosystem. ↩︎ While it's hard to say if there was any truth in this - or it was just a negotiation strategy - there were rumours of OpenAI being unhappy with direction/progress Nvidia was making earlier this year: https://finance.yahoo.com/news/sam-altman-pushes-back-report-213000823.html ↩︎ Google engineers have an enormous amount of home built/custom/internal tooling that is uncommon outside of Google-scale companies. They use different source control, build tooling, testing infrastructure and build deployment to the rest of the industry - for very good reasons! But this stack is absolutely overkill for 99% of companies, and when you are used to thinking about SWE at Google scale I suspect it is very difficult to reason how people build software outside of that ecosystem. ↩︎

0 views
Langur Monkey 2 days ago

Langur Agent

Langur Agent is a simple, open, hackable CLI AI agent for Linux and macOS. It connects to any service providing an OpenAI-compatible endpoint. It features: The source is available in this repository . Langur Agent has been tested on Linux and macOS only. Install the agent with: Run the agent with the default session: If you need an API key to access the endpoint, put it in the file. Langur Agent looks for the file in the following locations, in order: Create the file with the API key: The agent uses to load at startup. The package reads from the environment automatically. You can also set in your shell profile. On first run, the configuration is created in . You can configure the agent interactively with the slash command. The agent works with any OpenAI-compatible endpoint, so LM Studio, Ollama, OpenWebUI, or any other service you configure. Here are the default values: Run the agent, and then you can enter your prompt. You can use the following key bindings during input: During inference, you can cancel the turn and return to the input prompt with Ctrl + c . Use to print information about the available commands, and to configure the agent interactively. Internally, Langur Agent uses sessions to separate different memory histories. Sessions are named by the user. By default, the agent uses the session. You can start in a different session (either create a new one, or restore it if it exists) with the argument: The default session’s name is , so the following two commands are equivalent: You can also list the existing sessions with : Sessions contain: For now, the configuration file is the same for all sessions. Sessions are matched by the directory name in the sessions location ( ). You can rename a session by just renaming the directory! You can enable mode for the current session with the command , or permanently in the configuration . External editor —In mode, exit INSERT mode ( Esc ), then press v to edit your prompt in an external editor (uses your or variable). There are a few commands available to use in the agent loop. You can list them with . Also, use (e.g. ) to show additional help for a command. Persistent memory follows XDG Base Directory spec in : In addition to persistent memory, the agent maintains a chat history of recent user input and assistant output pairs. This provides context that survives beyond the LLM’s context window. Here is how it works: Persistence: Configuration: Langur Agent can be easily customized and extended by adding new tools, commands, and skills. If you create a cool new tool, skill, or slash command, consider contributing it via a pull request! Create a file in or use one of the existing ones. To create a tool, create a method and decorate it with : Tools are auto-discovered on startup. The process is very similar to tools. You need to create your method, preferably in , and decorate it with . A slash command must return, in that order, , , , : Decorated commands are automatically registered, and auto-completed in the input prompt. Add a file in with YAML front matter, following the agentskills.io standard: The front matter and are parsed and shown in the skills list. The body is injected into the system prompt. session management memory management visual candy autocompletion interactive configuration Python 3.13+ for dependency management Current directory, Home directory, Alt + Enter : add a new line Enter : submit the prompt Ctrl + q : quit The input history Chat memory (see chat memory ) Notes (see session memory ) User profile (see session memory ) — user information — persistent notes (added via tool) Memory is loaded into the system prompt each turn tool adds notes during a session tool explicitly persists memory to disk Memory is auto-saved when the agent exits (interactive mode) Each user message and assistant response is stored in memory Reasoning is omitted from chat memory Automatically compacted when exceeding the configured character limit The user can trigger the compaction any time with Chat memory is attached to the system prompt on each turn The agent displays the last 10 exchanges, with long messages truncated Chat history is persisted to Automatically loaded on startup Saved after every exchange (user input or assistant response) Compacted history is also persisted to disk : a indicating if the command succeeded or failed. : an optional short status message. It is printed with or . : an optional with the Python Rich-formatted content, it is printed to the output. : an optional formatted in Markdown, it is printed to the output.

0 views
Simon Willison 2 days ago

Claude Opus 4.8: "a modest but tangible improvement"

Anthropic shipped Claude Opus 4.8 today. My favourite thing about it is this note in the release announcement: Users will find Opus 4.8 to be a modest but tangible improvement on its predecessor. There’s still more to be done: we’re working on developing and releasing models that provide many of the same capabilities as Opus at a lower cost. It's so refreshing to see an AI lab honestly describe a release as a minor incremental improvement over the previous model! Honesty seems to be a theme. Here's my other favorite note from that announcement: One of the most prominent improvements in Opus 4.8 is its honesty . We train all our models to be honest---for instance, to avoid making claims that they can't support. But a general problem with AI models is that they sometimes jump to conclusions, confidently claiming to have made progress in their work despite the evidence being thin. Early testers report that Opus 4.8 is more likely to flag uncertainties about its work and less likely to make unsupported claims. This is borne out in our evaluations , which show that Opus 4.8 is around four times less likely than its predecessor to allow flaws in code it has written to pass unremarked. That linked system card includes the following: Claude Opus 4.8 had the lowest incorrect-rate of the six models on every benchmark—the most direct measure of factual hallucination. It achieved this mainly by abstaining on questions about which it was uncertain rather than by answering more questions correctly. Not much has changed since 4.7. It's priced the same as Opus 4.5/4.6/4.7 - $5/million input and $25 per million output. "Fast mode" is twice that price, which is a significant reduction from their previous models - fast mode on 4.6/4.7 remains at $30/$150. Note that fast mode is only available to organizations that are part of the research preview, "Contact your account manager to request access". Both the reliable knowledge cutoff and the training data cutoff are January 2026, the same as for 4.7. The context window is still 1,000,000 tokens, and the max output is 128,000 tokens. The What's new in Claude Opus 4.8 document has some of the more interesting details. These caught my eye: Mid-conversation system messages . Claude Opus 4.8 accepts messages immediately after a user turn in the array (subject to placement rules ). This lets you append updated instructions later in a long-running conversation without restating the full system prompt, which preserves prompt cache hits on the earlier turns and reduces input cost on agentic loops. See also this update to the Anthropic Python SDK. Being able to steer the system prompt mid-conversation sounds really powerful. I was worried this would be incompatible with the abstraction provided by my own LLM library , which expects a single system prompt per conversation... but it turns out my recent redesign should handle that just fine . Lower prompt cache minimum . The minimum cacheable prompt length on Claude Opus 4.8 is 1,024 tokens, lower than on Claude Opus 4.7. I checked and 4.7's minimum was 4,096 . Here are pelicans riding bicycles for all five thinking levels, , , , , and : This time I ran them using the LLM CLI , exported the logs to Markdown and then had Claude Opus 4.8 build me an HTML tool that could render that Markdown with the fenced code blocks displayed as SVGs on the page. (I later had GPT-5.5 xhigh in Codex update that code to remove any XSS holes. I'm sure Claude could have done that if I'd asked, but GPT-5.5 is my code security blanket at the moment.) The max one was clearly the best, but it did take 25 input, 17,167 output tokens for a total cost of 43 cents ! You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options .

0 views