Latest Posts (20 found)
Unsung Today

“Why pay for an orchestra when your computer can do it all?”

A delightful 24-minute video from ToffeeBun about sampling in videogame music and how it changed over the years: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/why-pay-for-an-orchestra-when-your-computer-can-do-it-all/yt1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/why-pay-for-an-orchestra-when-your-computer-can-do-it-all/yt1.1600w.avif" type="image/avif"> The video helped me understand the difference between tunes purely synthesized from soundchips, those sequenced with samples (e.g. MIDI or sound trackers), and those that are completely “streamed” (e.g. MP3). It’s stuff in between that’s the most interesting – it always is – with really surprising sources of samples (and, surprising samples!) needed to “perform” sequenced music. The video itself is frenetically edited, and the opposite of “dry” (which I mean as a compliment). #games #sound design #youtube

0 views

computers, privacy and data protection conference 2026

I attended the Computers, Privacy and Data Protection Conference (CPDP) in Brussels for the first time. The conference has lots of different rooms mostly in the same building where multiple panels, workshops and other things are happening at the same time in specific slots, so you gotta choose what you participate in (was difficult at times!). Next to that, you have some fun rooms, some quiet working spaces and spaces to just hang out and talk. Based on the programme, the focus this year was definitely on age verification/youth 'protection', human AI relationships, consumer rights and marginalized groups. Lots of different groups and people present; people from the EU Commission and Parliament, AlgorithmWatch , Bits of Freedom , noyb and Max Schrems, IGLYO , EDRi , Equilabs , Equinox Initiative for Racial Justice , INTITEC , the EDPS and Wojciech Wiewiórowski, Privacy International , the International Committee of the Red Cross , the Office of the United Nations High Commissioner for Human Rights , the European Consumer Organization (BEUC), Future of Privacy Forum , AIRegulation.com , data protection authorities of different countries (CNIL, BFDI, etc.), ALTI , European Disability Forum , d.pia.lab , AI Now Institute , OECD , the IAPP , and all kinds of universities, plus companies like Mozilla, Mastodon, Signal, Wikimedia, Microslop, Uber, TikTok, Google and more. I was there for the opening remarks, then went on to visit: My takeaways/new things learned: Microsoft co-wrote parts of the EU's Energy Efficiency Directive , which allows data centers to keep their energy use confidential under the guise of business secrecy. The draft literally had paragraph's of Microsoft's proposal copied in unchanged. The Dutch government used racial/ethnic profiling via algorithms in the assessment of childcare benefit applications, which led to false allegations of fraud against thousands of families, particularly affecting those from ethnic minorities. I heard about this before, but learned more about it that day. To contest it all and defend democracy, we all need to train our AI literacy skills , support and have good tech journalism that questions and exposes it all (404media is, imo, a good example of what they meant), crafting and changing the social media narrative around AI and Big Tech, listening to affected people, demanding transparency via standards and audits etc. We cannot forget that officials know ; many of the effects we criticize are not accidents or side effects, they are the entire point. Like when tech predominately negatively targets marginalized communities, this is a bonus to people in power, and nothing to be fixed. Workers can resist by reminding their leaders of the liabilities and legal risks, strategic issues, money issues etc. that AI brings; demand specific definition of the needs that AI will fulfill at the workplace, instead of letting AI become the purpose instead of the tool. Age verification is racist and migrantphobic : Many people have issues with their ID, or have none, or are undocumented, and age verification in their country requires them to have contact with officials, police, etc. Age verification is transphobic : Relying on ID means many trans people are forced to reveal their deadname or are forced to come out, as it reveals they are trans if the ID is not or cannot be updated. The platforms are harmful, but we have so many ways and ideas against that that doesn't take away important spaces and support groups or bar entire groups of people. Age verification makes it possible for platforms to avoid working on their problems and becoming better, enables avoiding legislation and regulation, and enables control and surveillance by them; meanwhile, the truth is that you don't suddenly turn 16-18 and know how to handle porn, gore, harassment and all other negative parts of social media. The negative sides to social media that are named as the reason for age verification and banning of social media for specific age groups also affect adults negatively . We need to put more effort into education on how to handle these things. Yes, we can protect children's privacy by banning them off of platforms, but this also affects their other (digital and offline) rights, and privacy rights don't trump all . Children and teens should learn and be encouraged to control their own spaces and moderation via FOSS : Matrix, Mastodon, etc. where they can also seclude from adults and aren't reliant on Big Tech. Age verification and banning would take this away from them and also make it harder for FOSS projects. If children only ever enter the political discourse as victims, the only response can be rescue; that it why we have to make sure they enter as participants. Protection is not (just) space away from the risk, but confronting the systems that cause harm and eliminating them. 16-18% of US citizens report having engaged romantically with a bot, 45% of them said it made them feel more understood, 36% said it gave them stronger emotional support than their human partner. Problem: Current version of AI Act doesn't cover romantic and sexual use, no guidance for safeguards for emotionally responsive AI systems that protects around the risk of suicide, crimes, distress when service slows down or shuts down or model changes, discrimination as you get more if you pay etc.; drafts mention some of it now in Art. 50. With all the talk around becoming emotionally dependent on AI, nudging into harmful behaviors, etc. we cannot forget that you are also vulnerable on other services and in human romantic relationships, where the same routinely happens (weak argument, but to be fair, I also often forget this). We also cannot forget that it is not always a replacement - it often just supplements social life, and there are also surprisingly many people who just don't want or need romantic or sexual relations with a human ; they want bots specifically , and only bots. Disclosure agreements (meaning: labels everywhere that this is just a bot and not real) are most often useless, because people know and intentionally seek it out (exception for Insta/Snap DMs etc.) The latter about Human-AI intimacy was extra interesting because it had someone on the panel who directly works with people who use bots for romance and sex, and her experience has been mostly positive and that it helps her clients. Afterwards, I sadly was too overwhelmed, exhausted and in pain to continue and went back to the apartment to rest. Unfortunately, all the stress around the apartment and the generally more exhausting day triggered my digestive tract badly (Crohn's disease), but within the first few hours, all toilets in the venue were out of service due to an issue outside the venue or the organizer's control, and the alternative toilets were much further away. I didn't wanna have to deal with that with upset intestines. I missed the ' Designing Fairness ' Workshop, and the ' Consumer Rights at the age of acceleration' panel. Didn't meet anyone that day. Look at this ridiculous Gemini Photobooth they had that I saw no one use in the entire 3 days. This day, I managed to attend everything on my list, thankfully, as I felt a bit better. I attended: My takeaways/new things learned: The digital omnibus is mostly there to enable AI made in Europe to aid sovereignty and be competitive with US and China; AI here needs a framework to access data without much regulatory risk - that is what the EU Commission person said. Enforcing the law and and making it sharper is actually leveling the playing field and furthering innovation, because there is a massive power concentration of a handful companies that can do what they want, barely pay fines, have the fines suspended because of the US government bargaining with the EU, or who see them as a cost of doing business. Competition is impacted this way, as small companies are hit harder than the big ones. If the omnibus goes through with changing definitions of personal data etc., it will take years for case law, literature, standards etc. to catch up, it wastes money in companies who need to re-do everything to comply; so it doesn't simplify anything and makes praxis harder. You may set ChatGPT/Claude/Gemini etc. to not send feedback or training data in your settings, but when you react thumbs down/up to their request of whether the output was good or not, or choose between two different versions, the entire chat log until then gets sent for training and potential human review. So, these popup feedbacks override your settings . I need to read more papers by Theodore Christakis. Here is one of them. US and UK discovery and disclosure laws/principles go directly against EU data minimization principles; as long as data is relevant to a case it should be accessible, which is why in their cases, they can just have access to million's of people's data if necessary, and in a divorce case, they have the right to ask for AI chatlogs. There is no AI protection or privilege: If you use AI for legal stuff, you have no expectation of confidentiality like you would with a lawyer, so it is not safe from discovery. There is tension between tracking for harmful behavior/threats vs. data privacy rights ; what if someone threatens to kill themselves, kill others, etc.? Should company look for it, track it, report it, alert anyone, suspend the account, send help resources? Still unclear. There is also tension between people wanting the bonus features/ease of use coming from pesonalization and free services, while also not wanting to be tracked or charged. Advertisers see themselves as enablers of a good thing, as people want fitting ads, good algorithms, good suggestions, and free access; so if their business model is challenged or fails, people will have worse access and worse user experiences in their view. They also fear that if their business model is hindered, things will move into a more extreme, embedded, hard to avoid direction that you don't control or decide (Black Mirror ad type of stuff). I previously wrote about Consenter on the blog, and one panel had people from it there and showing screenshots; changed my mind on it a lot and made me understand the new features and goal better, I will probably write an update on it some time. We have different other options all covering something different about tracking, cookies, consent, or going about things differently, old and new: ADPC, GPC, ConStand, Global Privacy Control, DoNotTrack etc.; important for new stuff is granular consent, sent to the website, user given explanations etc. Uninformed decisions and bad practices lead to unfair competition ; bad actors erode trust level overall, so users resignate, experience fatigue and say yes in the same rates between "good" and "bad" services. Will read soon: Our data after us by the CNIL , and future release: Model rules on succession and access to digital remains by Eigenmann und Harbinja Digital remains can be split into assets (copyright, crypto, business tools, money), personal (messages, photos, identities, AI replicas), and third party data. GDPR only addresses living people; dead people's digital remains are subject to member state laws. There might be a need for something harmonized and European, though. For good digital hygiene , we should remember death and make it as easy as possible or sensible for the people we leave behind to get the access they need to manage our stuff how we want them to. Leave instructions, set emergency/legacy access when available (Google, Facebook, Instagram and Apple have it), include digital assets in your will, decide how your data is allowed to be used after death, especially around AI replicas. Hospice, nurses, families etc. should learn to ask affected parties about these things. Thanks to the focus on agentic AI, there is massive need for inference compute, which is super expensive. Almost all of it is in the control of, or can only be afforded by, the hyperscalers. At the same time, anything that seeks to enable or disable things for AI agents on the web can also affect accessibility programs like screen readers. It is in the best interest of the Big Tech companies to keep things individual, because it distracts from the collective issues and changes they'd have to do; it is easier to blame the person for agreeing to tracking than make sweeping changes to how much can be tracked. Individual consent doesn't consider the fact that data doesn't just affect you, but reveals things about your family, friends, partners, coworkers and more, as data is deeply interconnected. If your friend agrees to share his data and it also includes you, that is your data, still going to the service you'd have disagreed to. We as users have no collective bargaining tools yet; even big worker unions aren't negotiating with Microsoft about the terms of their employer using Microsoft Teams, when they actually should. We should also build up data unions made from users who bargain with the platforms. Strikes could look like boycotting the service, blocking trackers, scrambling data, massive amounts of access requests etc. Look into something called a Worker Data Trust ; this was used to prove Uber's predatory dynamic pricing (Worker's Info Exchange). Lots of workers made access requests, the data was combined and analyzed by researchers. After a failed attempt to meet up during lunch, I managed to meet up with another Country Reporter from noyb for a little while until the next panel happened, and sadly we didn't go to the same one. At this point, I was miffed about lunch at the conference. They made a big deal at registration about how the event will be mostly vegan and vegetarian to offset the climate impact of everyone traveling there, and they asked you to select your preference. I chose vegan. But for the entire three days, the food wasn't clearly labeled, some food was mislabeled as vegan when it wasn't, and there was way too little of it and wasn't restocked. It was more like "vegetarian snacks for birds". Vegan people had no warm food option at all, just sandwiches or wraps all three days that would have been enough for maybe 10 people. I mostly starved and I accidentally ate real cheese one time too because the food situation was so confusing. Here was one of the buffet menu cards, which were a bit to the side removed from the food, partially hidden by other stuff, and incorrect (anything with lactose is not vegan). I have no idea how, on a sea of silver platters with lots of bread, I am supposed to be able to differentiate the vegan gluten free bread option and the vegetarian gluten free bread that has scarmoza (italian cheese). It was a roundtable buffet, so everyone was waiting on you to hurry and grabbing stuff; I can't just grab bread and lift off the top to see the ingredients and then put it back, man. At least group the vegan stuff together or put labels directly in front of each thing. Also, while I am not reliant on gluten-free food, I think the people sensitive to it or having celiac disease don't appreciate that either. I skipped the Cocktail parties and big CPDP party, because it's not really feeling fun when you don't drink alcohol, have trouble just going up to people with your mask and hoping they hear you, and have no one to meet or go with. Last day was rather empty in the programme, so I arrived later and left earlier. I attended: My takeaways/new things learned: The AI warfare one was a bit of a letdown, because they all just accepted war as a right, an inevitable thing that has to happen. There was not even a nuance of fighting war itself, or banning AI weapons, etc; it focused more on the dual nature of the data , in which through surveillance, tracking, etc. not only can military use it to target people, NGO's and others can use it to warn, evacuate, render humanitarian aid etc. and document realities on the battlefield. There was also no possibility for the idea that we could enter an age where drones fight drones automatically and no one needs to get hurt or be traumatized or get to kill people like a game, and that is only because everyone is so attached to the idea that war has to have human casualties. It's hard to legislate and restrict because the data is taken from a whole ecosystem : Telecommunications, cloud services, civilian infrastructure, social media etc. and most of the data is collected during times of peace. Warfare is often explained with national security as a reason, which then again is a legitimate interest or fulfills other opening clauses in data protection and privacy laws. It is a problem that the richest men in the world, close to the US admin, lead the biggest companies worldwide, almost all in the US, and control almost all of AI and AI warfare. Project Maven from 2017 was continuously developed on and is now the Maven Smart System , which was used in Venezuela and Iran recently. Our Art. 15 GDPR right of access as it is right now is making up for Germany and Austria's lack of discovery and disclosure rights respectively. Controllers can usually drag stuff out, cite trade secrets and rights of others to evade data access, but the data subject barely has any power. Not having to justify the access request and it not having to be limited to data protection rights is good in this regard and needs to be kept up. Otherwise, also too much confusion and court cases whether a request was abusive or not if now, any request for a court case instead of privacy rights is deemed possibly abusive. We don't only need to focus on reidentification in general, but about the ability to single people's data out; you might not be able to identify them, but you can build a profile anyway. Learned about the term digital twin , or in terms of user data, a data twin that can be used for similation and is similar enough. AI-act-standards.com exists. Many don't know that the AI Act isn't a GDPR for AI, but serves more as market classification, as it sorts AI into different boxes who have to fulfill different requirements. The details of these requirements are/will be set with CEN/ISO standards and frameworks . You can see the progress of development on these standards on that website, and what they cover and how they interact. Hovering over the elements gives additional info. This is done by the JTC21 , and you can also get involved by registering with your national standardization body (in Germany, this is DIN) or when they do public consultations. Disabled people experience both extremes of AI - better accessibility options, often more reliant on AI, so also more subject to surveillance and having their privacy rights violated, while bad governments can use the data to harm disabled people, all under the guise of research. Marginalized groups are often the first trial group in anything, while not being stakeholders in the tech, or even invited to the table. See: AI used in immigration etc. and with deregulation and AI everywhere, we see a loss of reasonable suspicion thresholds in law enforcement and other groups. Learned about adversarial auditing . The previous two days, I did the whole fancy dress pants and blazer thing (one black blazer, one dark red/purple blazer), but for the last day and the drive home, I wore my Bearblog shirt and wide orange jeans: Someone from noyb staff thankfully recognized me and approached me, so we talked for a bit until he had to leave for another lunch meeting. That concludes the human contact I had. And then I left to drive home with my wife. She will hopefully soon write a guest post on my blog about how she navigates a new city in another country without mobile data/a smartphone (she has a tablet with WiFi only), because while I was at the conference, she explored the city on her own. It's kind of difficult to show up to these conferences as someone who isn't sent there for work, who doesn't have coworkers or ex-coworkers also attending, and who doesn't have much or any industry contacts yet. Most people there know each other from work or previous/other conferences, and I don't. These events are primarily for networking, keeping in touch, and talking about what you have seen and learned though. I couldn't discuss anything with anybody present, and it made me feel really lonely and silly. Just going up to people and striking up a conversation is not my strong suit, and it's something I am working on and has already gotten better, but the mask I am usually wearing in these big crowds and gatherings because I am on immunosuppressive medication is actively keeping me isolated. I know people have trouble understanding me, can't see me smiling at them, and think I am sick, so that keeps both sides hesitant. Unfortunately, if I attend next year, I will have to leave away the mask and maybe try out these protective sprays for nose and throat that are supposed to reduce viral load. It seems like you can only 'afford' to wear a mask if you are already in a group of people. Weeks before the event, I asked some people if they would attend, they said they will and we had a group chat of 10 to coordinate meetups. But during the entire conference, I was the only one trying to make something happen - saying where I am/where I will be, identifiers you could spot me with (as we never met before and you can't see name tags well on the lanyard), meeting points etc. and the two people mentioned were the only ones who took me up on it. The others just ghosted me/ignored my messages. That saddened me a lot during the conference. And unfortunately, these types of events are always really exhausting to me beyond the normal amount everyone experiences, because of things that trigger my conditions, my lower energy, my needs to lie down sometimes, sensory issues, food restrictions etc. so I really have to weigh if it's worth it to me. I'm not sure it is, without the social aspect. Many of the panels I chose had an issue of being not well organized. Instead of short speaker times, precise audience questions, interactions, dialogue, disagreements, different sides, answering the panel's topic and offering solutions etc., it often resulted in every speaker having a 10 minute monologue saying their peace, the other speakers not reacting or intervening because it's too much, everyone more or less saying the same thing or zoning out, and then having too little time to really give much attention to audience questions. Some gathered audience questions to answer them in batches and predictably, that resulted in nuance being lost and almost nothing being precisely answered. From many panels, I walked away with less learned than I wanted to, and just being reaffirmed in what everyone knew already. There were almost no further or new resources, or real takeaways of what the next steps should be and how we can tackle or solve an issue. They say " there should be more transparency " but not how we ask for it, how we legislate it, how it should happen. It's often just a vague " Someone should do more of something, and fast. " It was easy for people from the EU Commission to dodge mine and others' questions about the omnibus bullshit with no convincing answer. (: It disillusioned me a bit about my own goal to be speaking at a panel one day, because so often it felt like it was just there to platform someone to give them a chance to ramble and that's it, or just so that they can put this on their CV. Looking into the panelists, so many of them are genuinely great, very accomplished and admirable people with a lot of expertise, but the way things were set up, it couldn't shine through. You would have been better off talking to them directly. As a final bonus for reading this far, help me delete this (fortune) cookie. Reply via email Published 23 May, 2026 Contesting AI & Defending Democracy ; Possibilities for European AI Futures ( x ) Youth protection through inclusion and empowerment : a rebuttal of the exclusion-based narrative ( x ) Intimacy by Design: Governing Human AI relationships ( x ) Microsoft co-wrote parts of the EU's Energy Efficiency Directive , which allows data centers to keep their energy use confidential under the guise of business secrecy. The draft literally had paragraph's of Microsoft's proposal copied in unchanged. The Dutch government used racial/ethnic profiling via algorithms in the assessment of childcare benefit applications, which led to false allegations of fraud against thousands of families, particularly affecting those from ethnic minorities. I heard about this before, but learned more about it that day. To contest it all and defend democracy, we all need to train our AI literacy skills , support and have good tech journalism that questions and exposes it all (404media is, imo, a good example of what they meant), crafting and changing the social media narrative around AI and Big Tech, listening to affected people, demanding transparency via standards and audits etc. We cannot forget that officials know ; many of the effects we criticize are not accidents or side effects, they are the entire point. Like when tech predominately negatively targets marginalized communities, this is a bonus to people in power, and nothing to be fixed. Workers can resist by reminding their leaders of the liabilities and legal risks, strategic issues, money issues etc. that AI brings; demand specific definition of the needs that AI will fulfill at the workplace, instead of letting AI become the purpose instead of the tool. Age verification is racist and migrantphobic : Many people have issues with their ID, or have none, or are undocumented, and age verification in their country requires them to have contact with officials, police, etc. Age verification is transphobic : Relying on ID means many trans people are forced to reveal their deadname or are forced to come out, as it reveals they are trans if the ID is not or cannot be updated. The platforms are harmful, but we have so many ways and ideas against that that doesn't take away important spaces and support groups or bar entire groups of people. Age verification makes it possible for platforms to avoid working on their problems and becoming better, enables avoiding legislation and regulation, and enables control and surveillance by them; meanwhile, the truth is that you don't suddenly turn 16-18 and know how to handle porn, gore, harassment and all other negative parts of social media. The negative sides to social media that are named as the reason for age verification and banning of social media for specific age groups also affect adults negatively . We need to put more effort into education on how to handle these things. Yes, we can protect children's privacy by banning them off of platforms, but this also affects their other (digital and offline) rights, and privacy rights don't trump all . Children and teens should learn and be encouraged to control their own spaces and moderation via FOSS : Matrix, Mastodon, etc. where they can also seclude from adults and aren't reliant on Big Tech. Age verification and banning would take this away from them and also make it harder for FOSS projects. If children only ever enter the political discourse as victims, the only response can be rescue; that it why we have to make sure they enter as participants. Protection is not (just) space away from the risk, but confronting the systems that cause harm and eliminating them. 16-18% of US citizens report having engaged romantically with a bot, 45% of them said it made them feel more understood, 36% said it gave them stronger emotional support than their human partner. Problem: Current version of AI Act doesn't cover romantic and sexual use, no guidance for safeguards for emotionally responsive AI systems that protects around the risk of suicide, crimes, distress when service slows down or shuts down or model changes, discrimination as you get more if you pay etc.; drafts mention some of it now in Art. 50. With all the talk around becoming emotionally dependent on AI, nudging into harmful behaviors, etc. we cannot forget that you are also vulnerable on other services and in human romantic relationships, where the same routinely happens (weak argument, but to be fair, I also often forget this). We also cannot forget that it is not always a replacement - it often just supplements social life, and there are also surprisingly many people who just don't want or need romantic or sexual relations with a human ; they want bots specifically , and only bots. Disclosure agreements (meaning: labels everywhere that this is just a bot and not real) are most often useless, because people know and intentionally seek it out (exception for Insta/Snap DMs etc.) Simplification for Whom? Unpacking the Consumer Impact of the Digital Omnibus ( x ) My Chatbot, My Confidant: Protecting User Privacy in Generative AI Conversations ( x ) Informed consent: The breakthrough in Art. 88b GDPR / Digital Omnibus and current initiatives in the field of PIMS and technical standardisation ( x ) Digital Legacy Beyond GDPR: Succession, Data Protection, Access Rights, and Platform Power ( x ) The Agentic Assistant: What does Big Tech’s goal of creating a universal digital intermediary mean for society? ( x ) Designing Collective Technology Governance ( x ) The digital omnibus is mostly there to enable AI made in Europe to aid sovereignty and be competitive with US and China; AI here needs a framework to access data without much regulatory risk - that is what the EU Commission person said. Enforcing the law and and making it sharper is actually leveling the playing field and furthering innovation, because there is a massive power concentration of a handful companies that can do what they want, barely pay fines, have the fines suspended because of the US government bargaining with the EU, or who see them as a cost of doing business. Competition is impacted this way, as small companies are hit harder than the big ones. If the omnibus goes through with changing definitions of personal data etc., it will take years for case law, literature, standards etc. to catch up, it wastes money in companies who need to re-do everything to comply; so it doesn't simplify anything and makes praxis harder. You may set ChatGPT/Claude/Gemini etc. to not send feedback or training data in your settings, but when you react thumbs down/up to their request of whether the output was good or not, or choose between two different versions, the entire chat log until then gets sent for training and potential human review. So, these popup feedbacks override your settings . I need to read more papers by Theodore Christakis. Here is one of them. US and UK discovery and disclosure laws/principles go directly against EU data minimization principles; as long as data is relevant to a case it should be accessible, which is why in their cases, they can just have access to million's of people's data if necessary, and in a divorce case, they have the right to ask for AI chatlogs. There is no AI protection or privilege: If you use AI for legal stuff, you have no expectation of confidentiality like you would with a lawyer, so it is not safe from discovery. There is tension between tracking for harmful behavior/threats vs. data privacy rights ; what if someone threatens to kill themselves, kill others, etc.? Should company look for it, track it, report it, alert anyone, suspend the account, send help resources? Still unclear. There is also tension between people wanting the bonus features/ease of use coming from pesonalization and free services, while also not wanting to be tracked or charged. Advertisers see themselves as enablers of a good thing, as people want fitting ads, good algorithms, good suggestions, and free access; so if their business model is challenged or fails, people will have worse access and worse user experiences in their view. They also fear that if their business model is hindered, things will move into a more extreme, embedded, hard to avoid direction that you don't control or decide (Black Mirror ad type of stuff). I previously wrote about Consenter on the blog, and one panel had people from it there and showing screenshots; changed my mind on it a lot and made me understand the new features and goal better, I will probably write an update on it some time. We have different other options all covering something different about tracking, cookies, consent, or going about things differently, old and new: ADPC, GPC, ConStand, Global Privacy Control, DoNotTrack etc.; important for new stuff is granular consent, sent to the website, user given explanations etc. Uninformed decisions and bad practices lead to unfair competition ; bad actors erode trust level overall, so users resignate, experience fatigue and say yes in the same rates between "good" and "bad" services. Will read soon: Our data after us by the CNIL , and future release: Model rules on succession and access to digital remains by Eigenmann und Harbinja Digital remains can be split into assets (copyright, crypto, business tools, money), personal (messages, photos, identities, AI replicas), and third party data. GDPR only addresses living people; dead people's digital remains are subject to member state laws. There might be a need for something harmonized and European, though. For good digital hygiene , we should remember death and make it as easy as possible or sensible for the people we leave behind to get the access they need to manage our stuff how we want them to. Leave instructions, set emergency/legacy access when available (Google, Facebook, Instagram and Apple have it), include digital assets in your will, decide how your data is allowed to be used after death, especially around AI replicas. Hospice, nurses, families etc. should learn to ask affected parties about these things. Thanks to the focus on agentic AI, there is massive need for inference compute, which is super expensive. Almost all of it is in the control of, or can only be afforded by, the hyperscalers. At the same time, anything that seeks to enable or disable things for AI agents on the web can also affect accessibility programs like screen readers. It is in the best interest of the Big Tech companies to keep things individual, because it distracts from the collective issues and changes they'd have to do; it is easier to blame the person for agreeing to tracking than make sweeping changes to how much can be tracked. Individual consent doesn't consider the fact that data doesn't just affect you, but reveals things about your family, friends, partners, coworkers and more, as data is deeply interconnected. If your friend agrees to share his data and it also includes you, that is your data, still going to the service you'd have disagreed to. We as users have no collective bargaining tools yet; even big worker unions aren't negotiating with Microsoft about the terms of their employer using Microsoft Teams, when they actually should. We should also build up data unions made from users who bargain with the platforms. Strikes could look like boycotting the service, blocking trackers, scrambling data, massive amounts of access requests etc. Look into something called a Worker Data Trust ; this was used to prove Uber's predatory dynamic pricing (Worker's Info Exchange). Lots of workers made access requests, the data was combined and analyzed by researchers. Data-driven warfare : AI, civilian risks, and corporate responsibility ( x ) Digital Omnibus meets the Charter of Fundamental Rights ( x ) Toward a Standard for Fair AI-driven Recruitment ( x ) Data protection law as a shield, not a weapon: empowering historically marginalized communities in the EU in times of de-regulation ( x ) -> this choice was especially rough, because I was also very interested in ' The U.S. Deregulatory Effect ' happening elsewhere at the same time The AI warfare one was a bit of a letdown, because they all just accepted war as a right, an inevitable thing that has to happen. There was not even a nuance of fighting war itself, or banning AI weapons, etc; it focused more on the dual nature of the data , in which through surveillance, tracking, etc. not only can military use it to target people, NGO's and others can use it to warn, evacuate, render humanitarian aid etc. and document realities on the battlefield. There was also no possibility for the idea that we could enter an age where drones fight drones automatically and no one needs to get hurt or be traumatized or get to kill people like a game, and that is only because everyone is so attached to the idea that war has to have human casualties. It's hard to legislate and restrict because the data is taken from a whole ecosystem : Telecommunications, cloud services, civilian infrastructure, social media etc. and most of the data is collected during times of peace. Warfare is often explained with national security as a reason, which then again is a legitimate interest or fulfills other opening clauses in data protection and privacy laws. It is a problem that the richest men in the world, close to the US admin, lead the biggest companies worldwide, almost all in the US, and control almost all of AI and AI warfare. Project Maven from 2017 was continuously developed on and is now the Maven Smart System , which was used in Venezuela and Iran recently. Our Art. 15 GDPR right of access as it is right now is making up for Germany and Austria's lack of discovery and disclosure rights respectively. Controllers can usually drag stuff out, cite trade secrets and rights of others to evade data access, but the data subject barely has any power. Not having to justify the access request and it not having to be limited to data protection rights is good in this regard and needs to be kept up. Otherwise, also too much confusion and court cases whether a request was abusive or not if now, any request for a court case instead of privacy rights is deemed possibly abusive. We don't only need to focus on reidentification in general, but about the ability to single people's data out; you might not be able to identify them, but you can build a profile anyway. Learned about the term digital twin , or in terms of user data, a data twin that can be used for similation and is similar enough. AI-act-standards.com exists. Many don't know that the AI Act isn't a GDPR for AI, but serves more as market classification, as it sorts AI into different boxes who have to fulfill different requirements. The details of these requirements are/will be set with CEN/ISO standards and frameworks . You can see the progress of development on these standards on that website, and what they cover and how they interact. Hovering over the elements gives additional info. This is done by the JTC21 , and you can also get involved by registering with your national standardization body (in Germany, this is DIN) or when they do public consultations. Disabled people experience both extremes of AI - better accessibility options, often more reliant on AI, so also more subject to surveillance and having their privacy rights violated, while bad governments can use the data to harm disabled people, all under the guise of research. Marginalized groups are often the first trial group in anything, while not being stakeholders in the tech, or even invited to the table. See: AI used in immigration etc. and with deregulation and AI everywhere, we see a loss of reasonable suspicion thresholds in law enforcement and other groups. Learned about adversarial auditing .

0 views

my experience in brussels

For the CPDP 2026, I was in Brussels this week. The inner city with all its cute little shops, fancy buildings and barely any cars was very charming. Have some pics. We spotted Super Dragon Toys on the way and had to stop there, of course. Surprisingly, they had a lot of Sanrio, and even a blind box I was trying to get months ago that was sold out everywhere on and offline before, so I grabbed one. Got Pochacco; I liked all designs you could get in the box, so that was fine with me. I wish we had a bonsai shop: Also came across a colorful shop full of stuff around penises, vaginas, and breasts? We also went to see Mandalorian and Grogu in the cinema there; very epic layout of the room. I also enjoyed the movie; I don't get the reviews at all. Typical Star Wars fan cynicism and everything-has-to-be-dark-and-gritty-like-Andor. What was surprising is how little English is written anywhere or even reliably spoken. In German tourist-y and big cities, you have an English version of almost anything printed underneath, and often even more languages, especially when close to borders. Brussels doesn't really give the same courtesy as much as I thought it would, which caught me off guard because of all the EU buildings and employees there. Many people seem as if they don't learn English in school at all and struggle with it? I booked something a few minutes from the venue that was affordable, looked good on pictures and had a good rating. I read the top description and bottom checklist and it sounded nice. What I didn't read were the actual reviews (my bad, I know). If I had done that, I wouldn't have booked. I read them 10 minutes before arrival and it turned out that this is an AirBnB type thing posing as a hotel. The reviews called out this lie, but still rated it high (enough). A guy waited for us to get us the keys and explain everything, and we shared an apartment with a stranger that had his separate bedroom. Yup. Stressed me the fuck out. It was clean enough in the bedroom and bathroom (had one to our selves directly attached to it thankfully, because we had the double). The rest was meh. Kitchen utensils were severely lacking and often dirty. It was good enough to sleep and be gone the entire day. The stranger stayed in his room all the time, but smoked in there and it stunk through the entire apartment. We couldn't even get hot water reliably, and the sink spilled everywhere. So if you are ever in the same position... Brussels City Chambers is not a hotel, or even an aparthotel like they say. The info is hidden way below, nested between lots of other info, now saying " Comfortable apartment with shared living room. Choice between private room with private bathroom and rooms with shared bathroom. " You don't even get shown that during the booking process when you choose an accommodation, otherwise I would have noticed it then. Most of the pictures supplied are not of the property at all. So while technically you can find out if you are paying a lot of attention, you are meant to be misled if you just wanna be quick about it (and I hate booking hotels, so unfortunately I rushed through it, my bad). Big city, tourists, of course it's full! To be expected. I've been in big tourist-y cities before. But my god, now I understand why Belgians in Germany drive as if they are trying to kill you. They are also trying to kill each other in their own country. Lines on the ground get completely ignored, and so are any traffic signs or lights. The speed limit doesn't matter. Everything is a mere suggestion and they are driving like it's an off-road jungle adventure. They get mad at you for taking the rules seriously. We Germans are a rule-loving folk and get mad if people cross the street during a red light, so this was a culture clash. We were frequently honked at for following the traffic rules (staying in our lane, driving the speed limit, etc.). People just endanger others by speeding through everything, cutting you, overtaking you and almost crashing into someone else, and they don't blink long enough or at all to even let you know they are gonna swerve into your lane... they all drive like reckless, annoyed Taxi drivers in an indestructible tank. It wasn't an asshole here and there, it was everywhere, all the time, every vehicle. We soon found that we are just the odd ones. You felt it even outside the car, as a pedestrian. It felt like you weren't safe anywhere because everyone is going where ever they want, so bicycle lanes and bus lanes still had speeding cars, people almost ran over pedestrians who had the green light to cross, motorcycles drove on the sidewalk... I thought I would get ran over on this trip for sure. I also do not like how the motorcyclists can just speed past you in the middle in the tunnels without any care in the world. And how Apple Maps handles the tunnels!! They don't make it clear whether you are supposed to descend into one or keep right to avoid it. And finally, the way crossings and roundabouts are designed in Brussels is completely not intuitive and insane. I can't even explain it, but you really have to guess how you're supposed to drive, which adds to the whole messy driving culture. Multiple times, I thought we were going the wrong way for sure, but it ended up being correct. The almost complete app reliance to park is also nuts. We tried the parking machines that are spread around the streets, but they are very slow, and if you set the language to German, the process is broken and doesn't let you book anything. It's also very focused on the Belgian license plate layout despite Brussels being so tourist-y and full of people from outside the country, so entering anything with a different layout is risky and seems to overwhelm the process. It was much easier to handle in an app (Indigo Neo), but they only accept credit card; I am lucky to even have one. I expected more care around the different types of people coming into the city from a city that is the capital of Europe, essentially. If there is a next time, we'll definitely take the train, even if it is more expensive and more annoying with luggage. We went to Pure Veg India, Kitsune Burgers, Verdo, and grabbed some things to go from BS40 and a bakery I forgot the name of. Big fan of all of them, except for the dry pastries from unnamed bakery. Verdo was so amazing and my highlight of it all. I don't know if I will be back next year, also has to do with some conference disappointments... I really wanted to like this city, also because I do sometimes toy with the idea of getting more involved in EU stuff, but I think I would be really unhappy living there :< Reply via email Published 23 May, 2026

0 views
iDiallo Today

The commencement speech that shook the world

There he was, the man at the helm of innovation. Eric Schmidt, the former CEO of Google. The man who once said, google doesn't need to record your conversation, it already knows everything about you. Yet he didn't see this one coming. In his speech, he looked clear-eyed into the crowd of graduates and told them that AI is inevitable. There was a group of people who will have a hard time joining the workforce. Companies keep using AI as the excuse for laying off workers. Dario keeps telling us by next year, AI will take over all jobs and there is nothing we can do. They will have nothing, and they better embrace it and be happy. Well, they will have a school loan, but that’s it. If you were an external observer, maybe an alien watching humanity from a distance, you would think that AI is a new species that emerged from a lake and is taking over the world. You would never tell that the people spreading this fear are also the ones selling the tool that they swear will turn us all into gods. It's not just a capable tool that can be useful for coding, writing, and retrieving existing information. No. It's the word itself. The all or nothing. The alpha and the omega. And it comes as a monthly subscription from a handful of companies. What Mr Schmidt was saying to these graduates is that we are done innovating. Now we regurgitate. And then he was booed. He tried to keep talking but the boos were overwhelming. Somewhere between his words, he managed to say that being anti AI is akin to being anti immigrant, trying to score points. I don’t think it worked. When I read the news, I first read through the transcript of his speech. It seemed as if he was able to go through his material. But I was wrong. Watching his performance on video was a whole other story. There was a man, who had practiced his speech in front of a mirror, most likely with Gemini listening and providing feedback. It probably told him that his speech was brilliant. That it was grounded, and encouraging. "The kids will love it." What he failed to see is that booing was not in the training data. No way Gemini was going to tell him that, because it is programmed to be agreeable and friendly. So yes, he was booed every time he mentioned AI. But I think there is a lesson in innovation right there. AI learns from existing material. It can hardly deviate from what it already knows. When you ask it to come up with something new, it will show you something that seems new, because obviously you don't know all the material it was trained on. If it doesn't have the information, it can't tell you that it doesn't know. It will make it up instead. But what these graduates did was exactly what differentiates people from the robots. They did something completely unexpected. They booed Eric Schmidt. They innovated. Something tells me that kids will be just fine. I may never be able to convince my mom to stop sharing AI videos , but my kids will learn to navigate it. They will continue to innovate. Maybe AI will be like a calculator for them. They will know how and when to use it for maximum benefit and prevent the psychosis altogether. It's never gonna be a replacement for thinking. I was really happy to see the booing because it was the last thing they expected. Just a few days ago, the president of Glendale Community College was booed as well because she chose to have an AI read the graduates names and it butchered the process. AI is not inevitable. It's a nice addition. That’s it. We don't just have to accept things as they come to us. The most valuable human quality in an age of automation is exactly what AI cannot provide: the ability to defy expectations, introduce chaos, and create truly original outcomes. That is precisely the power of human innovation. For fun, I copied the commencement speech from a video and passed it through gemini, it complained about the grammar, but as I said earlier, it couldn't predict the outcome: The emotional arc is clear: acknowledge fear → restore agency → define values → point toward possibility. It reads like something that wants to meet graduates where they actually are, rather than giving them generic optimism. Then I asked it if it would result in booing: What makes the speech work is that it does not say: Instead, it says: That framing is resilient. Not so resilient after all. Anyway, congrats to the 2026 graduates! “everything will be fine,” “stop worrying,” or “technology is inherently good.” the future is undecided, humans remain morally responsible, and participation matters.

0 views

News about Raspberry Pi 6 and Microcontroller Development

On Thursday, three of the lead Raspberry Pi engineers hosted an AMA on the r/engineering subreddit . One of the most interesting tidbits was on the Pi 6. Looking back at previous launches: Following that cycle, one would expect a Pi 6 3-4 years after the Pi 5, which would put it in 2026 or 2027. 2012: Raspberry Pi 2015: Raspberry Pi 2 (+3 years) 2016: Raspberry Pi 3 (+1 year) 2019: Raspberry Pi 4 (+3 years) 2023: Raspberry Pi 5 (+4 years)

0 views

Othello World

I was introduced to the board game Othello (also known as Reversi) on a recent trip to Japan. It's one of those games where you can learn the rules in 5 minutes, but the gameplay dynamics are surprisingly deep. When I saw it's played on an 8x8 board, like chess is, I immediately started thinking about how to program a game engine for it. The 8x8 board is helpful because it allows you to represent the board state with 64-bit longs; each set bit in the number indicates the presence of a piece on that square. When you perform a bitwise operation on these numbers you're essentially computing multiple piece movements in parallel with a single CPU instruction. This computational efficiency enables deep searching of the move tree. I purposely started out without reading too much about game strategies because I wanted to explore it through coding the engine logic. It didn't take long to create an algorithm that is significantly stronger than me. Although it's not a high bar. There's a demo available here if you're interested in playing it. The basic building blocks of the game engine are as follows: Once you have these four elements built and wired together, you have a functional game engine to play against. The first two pieces are fairly straightforward—the real strength of an engine comes from how the last two are implemented. Like I mentioned above, we can represent the complete board state with just two 64-bit numbers. One number represents the black piece positions and the other for the white pieces. How you encode the 64 squares to the 64 bits is arbitrary, but I chose to represent each row as one byte (8 bits) and from left to right, top to bottom in terms of bit significance. In other words: And that's all that's needed to represent the piece positions. I created an immutable data class to encapsulate this: In Othello, if one player has no legal moves at any point in time, they skip their turn and the other player gets to go again. If both players have no legal moves, the game ends. Instead of computing both player's legal moves every time to check for those situations, I created a enum so that information somewhat pre-computed. The combination of and provides everything needed to determine the state of the game for the other stages in the engine. This is where things get tricky. Move generation requires codifying the rules of Othello in such a way that, given a board state, all the legal moves for either player can be computed—quickly, ideally. In Othello, you can only place a piece somewhere that will "sandwich" the other player's piece(s) between the piece you're placing and another "anchor" piece of yours. There can't be any blank spaces either. This rule applies to any of the 8 directions of the board (diagonals count). This screenshot illustrates the valid moves for black in this position: This function will calculate all the eligible squares for a single direction of movement (up, down, up-left etc.). What's cool is that it calculates eligible squares for all 8 rows/columns/diagonals at the same time. It's invoked as follows. For each of the 8 directions, you pass in a movement function and an ineligible square bitmask if required for that direction. For example, if shifting towards the left, you need to mask out the pieces on the leftmost column to prevent wrapping to the other side of the board (similarly for moving right). Moving up or down doesn't require a mask because shifting the bits "up" or "down" enough will just drop them from the number entirely. The function will return all valid moves for a given position for the "moving" pieces (the 1st argument). The moves are returned as a where each set bit is a valid square to place a piece. This part was interesting to me as I don't know much about strategy in Othello besides that the corners are important. The corners are important because once you claim a corner it can't be unflipped by the other player. Also, simply maximizing for the most pieces isn't the best strategy either, apparently. I do have a "greedy" algorithm that you can select in the demo app if you want to see that strategy in action. But of course, closer to the end of the game, having more pieces is more important since that's how the winner is determined. I represented this in the eval function by linearly shifting the weighting towards piece score as you get closer to the end of the game. I have two piece scores actually. The is a step function that only returns 1 or -1 depending on which piece colour has more pieces. But in the heuristic evaluation, I look at the actual piece differential score which returns between -100% and +100% depending on what "percentage" of the overall possible pieces the leading player has. That score is given 40% weighting in the heuristic evaluation function, the other 60% is a positional score based on the following square values I came up with: This was my best guess at which squares matter most. My reasoning is that the more central the square is, the more likely it is to be flipped. The closer to the edge it is, the less likely it is to be flipped and the more likely it is to be used as an anchor piece. So putting this all together, the heuristic evaluation is computed as follows: And that's it. The top-level function provides a relative score between -1.0 and +1.0 which represents the strength of a given position, relative to black. Since Othello is a zero-sum game, a good score for one player is an equivalently bad score for the other player. This is important in the next phase, the move search algorithm. This part of the engine is fairly "textbook". There's lots of explanation for how these algorithms work on wikipedia and chessprogramming.org is an incredible knowledge base for this sort of thing too. For zero-sum games, you can use a variant of minimax search called Negamax . That's what's shown here: For Othello specifically, the Negamax function needs to handle the case that the moving player has no legal moves and must pass to the opposing player. This is in the branch in the middle. We check if we're already in a position where the previous player had to pass, which means both players can't move and the game would be over in this branch. If not, we simply call again with the SAME and reverse the score returned from that call. With those 4 components built, I now had a functional engine to play against. I created an class that accepts a move selection algorithm. It exposes 3 methods: - for showing valid player moves in the UI - which validates and then applies a specified player move - which chooses and applies the best move using the I exposed the via a stateless REST API. Each request needs to supply the current game state information in order to make a move. For example: For the demo , it uses HTMX instead to return a rendered board component. The request format is the same but it returns HTML instead of JSON. I read this article recently that took a contrarian view on agentic coding and it's pitfalls. The author makes a lot of good points and it was thought-provoking. While I don't agree that using agentic coding will make you dumber per se ... I do think there's something to be said for regularly exercising the critical thinking and problem solving part of your brain if you want to be a good software engineer. Side projects like this are a great opportunity to do that. The incredible rise in coding competency for AI agents over the last 12 months has made a project like this into a one-shot, one prompt task for a recent LLM. I obviously didn't do that, because the point of this project was the act of doing it, not the end result. I learned a bit about Othello and refreshed myself on bitwise operations. The parts I wasn't interested in doing, the UI and the API wiring, I delegated to an agent to implement for me. To me, that's one of the best parts about coding with AI. I can now offload the tasks I'm not interested in or that's not as critical, and focus on the parts of the system I want to work on. It's never been easier to build and bring ideas to life with software. Board representation Move generation Position evaluation Game tree search

0 views
iDiallo Today

How to Talk to Your Coworkers

You know you explained the same issue before in two or three different places, yet here they are asking again. Why don't they understand you? Why do they ask the same question when you've already given them the answer right there on Jira? Are they stupid? Lazy, maybe? Do they not take the time to read? I often hear this from developers. They write clear documentation and instructions, and people still bother them to hop on a call. This happens so frequently that I think it is worth addressing. An over-abundance of information is just as confusing as too little. But something I should add is that repetition is normal. In fact, repetition should be a tool you use frequently. To do our jobs as developers, we read instructions. Our tasks are usually carefully written and specced out as a document we can implement and check off. There are usually bullet points, requirements, and acceptance criteria. Sometimes, you could implement a feature by following the instructions without even knowing or understanding what the feature actually does. In other jobs, non-technical ones, people derive their work from conversation. A lossy format. For example, when a non-technical manager wants a new feature, they'll have a conversation with a software architect. A conversation that the architect then has to turn into a spec that a developer can implement. One group talks in instructions, the other in conversations. Which is why they often talk past each other. Whenever I hear developers complain that someone keeps pestering them with questions they've already answered, I know it's because they're speaking two different languages. Just because you provided an answer doesn't mean everyone saw it or understood it. You might think you're giving a fine explanation of how a feature works by describing how the different APIs interact. But you fail to see that your audience has no frame of reference for understanding that APIs are supposed to work together, or what an API even is. In that same vein, a manager who wants to have meetings and conversations about every step of development might find that people are declining their invites. For that manager, meetings and discussions are how work gets done, while others are expecting purely documented instructions. In simple terms, the answer to this problem is: Translate and Repeat. By translation, I don't mean language, I mean frame of reference. There is always a temptation to provide all available information, whether it's too technical or too detailed. Again, too much information no information. Instead of explaining how you are solving a problem, focus on what your solution does. For example, I recently worked on a widget that was showing the incorrect number of sales for the month, and only a handful of customers were complaining. Long story short, it turned out that running a job at what we call nighttime is someone else's daytime. Those customers were accessing the widget before the job ran, and the data was cached for a full day. Meaning they were seeing stale data for up to 24 hours. Our fix involved revamping how we display data, we removed caching and created a normalized table that updates in real time, eliminating the need for a complex query. Internally, we had created new APIs and restructured database tables. What looked like a handful of numbers on the UI was far more complicated under the hood. But when explaining this to a manager, they don't need to know about the cron job, the caching strategy, or how the old system compared to the new one. All they need to know is: "We've updated the widget to display real-time data, and we've added a smarter caching strategy for performance." That's the whole answer. If they want the nitty-gritty details, we can have a separate conversation. But developers often start with the technical autopsy first because that's what we would want if another developer asked us. We want the root cause, the stack trace, the PR link. The problem is, different audiences require different information. While leading with the technical breakdown might make you sound thorough in a meeting, non-technical attendees will walk out clueless and ping you on Slack asking the same questions. The goal isn't to eliminate questions entirely. In fact, no matter how well you tailor your message to your audience, someone will still come back with the same question you already answered. That's exactly why repetition matters. It's fascinating to watch children learn. When I'm doing first-grade math with my kids, we use the same strategy for additions and subtractions. At first, it just doesn't click. I count on my fingers, I use popsicle sticks, and to make it fun I even use my toes. My method doesn't always make sense to them. We'll complete a whole packet of homework and I can tell they're just going through the motions. But we repeat it every day, the same way, no deviation. And somehow, eventually, they just know how to do the math. Not to compare your coworkers to children, but repetition works the same way on everyone. Every time they hear your explanation, they pick up one or two more pieces of it. When you keep saying "we upgraded the payment SDK," they don't know what that means, and stopping to explain that one concept isn't going to unlock the whole picture. But maybe they Google "SDK" on their own later. Then "payment SDK." The next time you repeat your explanation, they're better equipped to follow along. Each repetition gets them a little closer to understanding the full picture. The same applies to managers who rely on conversation to communicate with developers. While it can be hard to extract a clear requirement from a meeting, the information is in there. It just needs to be surfaced and shaped. And honestly a conversation is often a good way to kick things off. Imagine if the manager came in with rigid, detailed instructions while having no understanding of how the codebase actually works. Through conversation, a feature can take shape. Developers can push back, raise concerns, and adjust the scope to something realistic for the current state of the infrastructure. That back and forth is what filters raw ideas into actionable instructions. So when you post a Jira comment or Slack message with a detailed explanation of the authentication flow and token expiry logic and it goes ignored, it's not because your coworker is lazy. It was ignored because it was written in a language they don't speak. They asked again not to annoy you, but because they couldn't extract the answer they needed from what you gave them. You don't need to write longer comments or bold more words. Instead, ask yourself whether what you wrote was intended for the right audience, then translate it into something digestible. And be prepared to repeat it a few more times until it lands.

0 views
Unsung Yesterday

Lisa’s copy (and cut, and paste)

I love looking at origins of obvious things, because of two things: I’ve been emulating the Apple Lisa recently, and I was struck by how many of its UI strings were slightly or wholly different than what we’re used to. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/1.1600w.avif" type="image/avif"> It makes sense. Lisa came out in 1983 as Mac’s predecessor and really the first GUI that is directly linked to what we’re using today. Even though it borrowed things from work done at Xerox , tons of conventions were not established yet. So, I thought it would be fun to actually take a closer look. For context, Lisa was as slow as it was expensive, and generally considered a failure. It was basically abandoned by 1985. Not much third-party software has ever been written, but Lisa shipped with 7 impressive office apps with fantastic names: LisaWrite, LisaCalc, LisaDraw, LisaGraph, LisaList, LisaProject, and LisaTerminal. The screenshots below come from an emulator and from manuals (this links to the 1984 version, but each manual also includes a link to the original 1983 edition). The emulator is pretty harrowing; please upvote the idea of Lisa in Infinite Mac if you would want to see it! = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/2.1600w.avif" type="image/avif"> As Lisa powers up, we see the appearance of the “wait” dialog box. We’ll encounter more symbols like this triangle, inspired by traditional flowcharts. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/3.1600w.avif" type="image/avif"> Let’s start with menus, as these really were the treasure map to the whole system. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/4.1600w.avif" type="image/avif"> The Desk menu is basically the equivalent of the dock today. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/5.1600w.avif" type="image/avif"> The File menu has Print appended to it, indicating how important printing was still then; a truly “paperless office” won’t really be possible for two more decades (and seemingly still hasn’t fully arrived ). There is no Window menu yet, so the menu also contains some of that burgeoning functionality. Set Aside is what we would call Minimize today. Save & Continue is basically a contemporary Save, and Save & Put Away a hypothetical Save & Close. Revert to Previous Version is the same as today’s Revert. By the way, in the Revert dialog I appreciated the nice gesture of telling the user how much time passed since the last save, and a warning about undo (we’ll get back to this): = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/6.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/6.1600w.avif" type="image/avif"> Print Current Selection would today be just Print Selection. Print As Is is basically Print… but skipping the setup dialog with number of copies, etc. It was added later in Lisa’s life, and today, we’d probably call it Print Again? If you’re noticing a pattern already, it is more wordiness compared to what we see these days. It makes sense. Our growing familiarity with these concepts is what will allow these strings to become tighter over time. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/7.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/7.1600w.avif" type="image/avif"> This is that Print… dialog, by the way, with beautiful “while you wait” and “while you work” verbiage (although usually I do not condone strings getting so close to each other). The manual explains : “You can have the Lisa use most of its attention to print your document while you wait. A document will print more quickly if you choose While You Wait, but you won’t be able to use the Lisa for any other tasks.” The other strings feel less typical. Format For Printer… is Page Setup, but with a lot of quirks. Printers were not usually yet WYSIWYG , able to mirror stuff exactly on the screen. They often came with their own fonts, so some matching was necessary: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/8.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/8.1600w.avif" type="image/avif"> The manual had an entire section called “When Settings Don’t Match a Printer,” and there were I imagine god knows how many error cases that had to be covered, including: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/9.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/9.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/10.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/10.1600w.avif" type="image/avif"> And Monitor The Printer… is today’s Print Center: a way to see the real-time printing status. Note a lot of writing here elaborates further on the “while you wait/​while you work” dichotomy: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/11.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/11.1600w.avif" type="image/avif"> Monitor The Printer was important, by the way, since the manual warned you your printer might occasionally become haunted: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/12.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/12.1600w.avif" type="image/avif"> But, let’s go back to the File/​Print menu. I actually found a version of this menu that comes from a 1982 pre-release Lisa , never launched to the public. Let me show them side by side: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/13.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/13.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/14.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/14.1600w.avif" type="image/avif"> It’s fun to see designers figuring it all out. You will notice the lack of dividers and ellipses actually touching the work-in-progress strings. 1983’s Set Aside is 1982’s very modern Close. Save & Put Away is Put Back. And, at the bottom, it seems the team didn’t yet figure out that the menu options need to consistently use verbs for commands, and adjectives or nouns for toggles – so we see Intended for Printer… (rather than Format For Printer…) and Printing in Progress… (rather than Monitor The Printer…). = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/15.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/15.1600w.avif" type="image/avif"> Lastly, in a released version of LisaList, this menu would come bearing a harrowing Fix Damaged Document command. Not only it doesn’t even have an ellipsis, but the manual also says “there is always the chance that the recovery process will make things worse instead of better.” Vaya con dios, I suppose. Let’s move on to the Edit menu. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/16.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/16.1600w.avif" type="image/avif"> Today’s Select All is a verbose Select All Of Document, and since this is the first public appearance of undo, that feature is also more descriptive, appearing as Undo Last Change. But otherwise the menu feels surprisingly modern, shortcuts and all. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/17.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/17.1600w.avif" type="image/avif"> Unsurprisingly, the first undo wasn’t as developed. We saw earlier in this post “Once you click OK, you will not be able to change your mind, even with Undo,” which today would probably say “This is not undoable.” You could also see a frightening error message arriving without any further clarification, like above. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/18.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/18.1600w.avif" type="image/avif"> Sometimes, the app would warn you undo doesn’t have your back. We’ve seen this before, and here’s another example. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/19.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/19.1600w.avif" type="image/avif"> Since undo only had one step, LisaCalc and LisaList also had Restore Previous Entry for when you changed your mind after editing a cell in the spreadsheet. You had to employ this strategically, as you did the already-mentioned Revert to Previous Version. “You can even undo Undo!” bragged the manual, and I imagine there must have been interfaces where undo came without a matching redo. But the eventual solution, of course, was bidirectional undo/​redo with many steps. This basically only needed more memory, still very expensive in 1983. Above we also see Clear Entries that would just be called Clear today. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/20.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/20.1600w.avif" type="image/avif"> Elsewhere in Edit menu, Clear Lines Off Top would appear in LisaTerminal only, and was a charming (and I would argue better) way of saying Clear Scrollback. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/21.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/21.1600w.avif" type="image/avif"> The next menu, Type Style, would be called Font today. “Type” is typewriter nomenclature – Lisa was meant to be a typewriter replacement. The point/​pitch convention for font sizes and letter spacing also comes from typewriters, and in an older version of that menu even font names arrive from that universe (PS = Proportionally Spaced!): = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/22.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/22.1600w.avif" type="image/avif"> Otherwise, notable is the deterministic Plain Text reset with a P shortcut that would in time lose to printing. I miss this sometimes, this “reset” idea, as I think it would nicely compliment Paste And Match Style. (By the way, Lisa was the last computer to use Apple logo as a modifier key .) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/23.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/23.1600w.avif" type="image/avif"> While Type Style is for selection, Format ¶ is all about paragraphs – HTML people know this distinction as “inline vs. block.” (The pilcrow symbol means “paragraph,” although I did not expect it to be common use even then.) The flyout menus with their convoluted mechanics weren’t invented yet, but in some sense there was no need for them as the options were very limited. It is interesting to see Margin/Tab Ruler as two options with deterministic shortcuts ([ and ]). But the most unbelievable shortcut must be Same As On Clipboard. It reformats the current selection to match what you have in the clipboard – an early salvo in an endless battle that later brought us Paste Special, Paste And Match Style, Paste And Retain Style, Copy/​Paste Properties, Paint Format and so on, and so on. And it was given S, rather than spending it on Save (& Continue). Otherwise Left Flush and Right Flush would be called aligning today, and the ¶ pilcrow symbol would be replaced by a simple Paragraph Spacing. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/24.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/24.1600w.avif" type="image/avif"> In LisaCalc, Format is missing the ¶ because, well, there are no paragraphs in spreadsheets! I love Words Left/Nos. Right, and empathize with trying to align the digits. But it wasn’t even close , was it. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/25.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/25.1600w.avif" type="image/avif"> Page Layout shows that we’ve had UI boolean problems from day one. Show Page Ruler and Hide Page Ruler do it deterministically, with one always disabled, and without checkmarks. Preview Pages and Don’t Preview Pages do the checkmark, but introduce a dreaded double negative. (These last options, by the way, is the “pages/​pageless format” showing page margins and dividers, that bother us so much about Google Docs.) Today, these would all be in the View menu that doesn’t exist yet. And speaking of boolean challenges, here are some top-level menus from LisaList with even more conventions: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/26.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/26.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/27.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/27.1600w.avif" type="image/avif"> But, back to the Page Layout Menu. Insert Page Mark would be Insert Page Break today. I really love Allow To Cross Pages as the opposite of Keep On Same Page, and the incredible O and Q shortcuts. In LisaCalc, this particular menu comes with a beautifully named For Your Information (sentence capped, for some reason)… = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/28.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/28.1600w.avif" type="image/avif"> …throwing up a sheet-like window showing basic stats. Today, that window would have a more boring name and probably land in the File menu: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/29.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/29.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/30.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/30.1600w.avif" type="image/avif"> The Search menu is fascinating – why wasn’t it called Find like its items are? I am particularly enjoying W keyed off of Find What (today: Find), while F is taken by Find Next Occurrence (today: Find Again). There is some mnemonic sense to it all, but I like today’s proximity of ⌘F/G better. What we know as Replace is Change here, and I am particularly loving Cases Must Agree and Cases Need Not Agree (today usually called “case sensitivity.”) Hide Dialog Box is a string with surprising to me amount of UI jargon. The H shortcut was added later in Lisa’s life, presumably at users’ behest. It’s strange today to see a shortcut like this to hide one specific floating dialog box. Similarly, Insert Wild Card with a confusing ellipsis allows you to insert a symbol in your find dialog that stands for “match anything here” – top-level menu options reaching inside specific dialog boxes were not uncommon in early years of GUIs, but I think fell out of favor over time as the idea can be conceptually confusing. The menu below is from LisaWrite, and I like how comparing it with other apps makes us see the team trying to settle on a convention. In LisaList there are no ellipsis, but question marks! = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/31.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/31.1600w.avif" type="image/avif"> And in LisaCalc, there are… both: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/32.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/32.1600w.avif" type="image/avif"> You can notice that it wasn’t clear where one would put Find-related commands and their today’s presence in Edit menu doesn’t really make a lot of sense, either. We just got used to it. (Also note the “occurence” typo.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/33.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/33.1600w.avif" type="image/avif"> Spelling menu has a bunch of fun options and conventions, and an extremely generous use of keyboard shortcuts: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/34.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/34.1600w.avif" type="image/avif"> LisaDraw sports the Arrangement menu, which will look very familiar to anyone using Illustrator, Sketch, Figma, and so on. This is where Bring To Front and Send To Back started! With a tiny bit of editing (Arrangement is now Arrange, and some of the Objects nouns would be omitted), this would feel pretty modern. I love these visual menus, and I think we lost that kind of stuff along the way: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/35.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/35.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/36.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/36.1600w.avif" type="image/avif"> Okay, let’s move on from menus. The system also relied a lot of dialogs. Let’s look at some of them: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/37.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/37.1600w.avif" type="image/avif"> This wordy dialog would become a small loading state today. The verbose “To terminate the operation, hold down the Apple key while you type a period” probably felt necessary because other than Shift on a typewriter, people were not familiar with modifier keys. Lisa doesn’t have the Esc key, and Mac still respects the ⌘. convention in many places in 2026. (By the way, why would you want to stop saving? Presumably because it could take quite a while.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/38.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/38.1600w.avif" type="image/avif"> In this similar dialog, you can see a reference to a “micro diskette.” Even though Lisa’s “Twiggy” disks seem gargantuan today, they were smaller compared to the original, 8″ floppy disk . (In a similar way, Lisa and other machines of the era were called “microcomputers.”) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/39.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/39.1600w.avif" type="image/avif"> Lisa had some proprioception : In this dialog, the disk put in the first drive is called an “upper diskette.” (Also note: more undo education.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/40.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/40.1600w.avif" type="image/avif"> Disks were not large, so sometimes you had to deal with this kind of horror. It’s interesting how the dialog plain sends you to the manual – an early equivalent to eventual Learn More links. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/41.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/41.1600w.avif" type="image/avif"> This is another example of a rather verbose set of instructions. On one hand, this is better than “Error 456” and nothing else. On the other hand, it feels like a lot of stuff to memorize. Also of note, the beautiful Housekeeping menu. I actually forgot about the Finder (or, in Lisa’s parlance, Desktop), so here’s a screenshot of it also: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/42.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/42.1600w.avif" type="image/avif"> Housekeeping was basically the junk drawer – on the Mac a year later, this will be named Special. It also has some stuff that today would be in the View menu. (This later version of Lisa calls Trash the same as the Mac. Earlier on, you would see it named a Wastebasket instead.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/43.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/43.1600w.avif" type="image/avif"> Of note elsewhere in Desktop is the use of the term Stationery, roughly meaning “template,” but with extra sprinkling of desktop-metaphor skeuomorphism. Also, Attributes Of is an early version of Get Info. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/44.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/44.1600w.avif" type="image/avif"> Another verbose dialog (compare with Abort/​Retry/Ignore from around the same time). This is before we invented hint text that we’d just put under the buttons themselves. In case you haven’t noticed by now, Lisa’s strings all have two spaces after a full stop! = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/45.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/45.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/46.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/46.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/47.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/47.1600w.avif" type="image/avif"> There was lot of “you cannot” dialogs, walking you through some recovery steps. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/48.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/48.1600w.avif" type="image/avif"> Plug and play didn’t yet exist (this would all happen in the 1990s), so that had to be explained also. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/49.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/49.1600w.avif" type="image/avif"> I also love the anthropomorphic phrasing “Preferences has been told,” which I don’t believe you see anywhere today. And I think we can round up this post with a few small delightful language details like this one. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/50.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/50.1600w.avif" type="image/avif"> As a huge fan of the slightly pretentious “presently” over “currently,” I smiled seeing this next to the printing status. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/51.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/51.1600w.avif" type="image/avif"> “Just a moment, please…” feels so old-fashioned, somehow. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/52.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/52.1600w.avif" type="image/avif"> And I want to end on a pre-release version of the Edit menu we’ve already seen. You can spot here Select Entire Document (instead of eventual Select All Of Document), but of course the best thing is the Copy, Cut, & Paste with an ampersand! I find it so, so charming. = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/53.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/lisas-copy-and-cut-and-paste/53.1600w.avif" type="image/avif"> I hope you enjoyed this tour. It was interesting to me to see how many of these became the standard back there and then, how many were tweaked a little bit, and which ones had to be redone more thoroughly. Now, excuse me as I have to go deal with my whistling printer. #history #interface design #writing They help me get unstuck. If you go far enough, you will find out that even the most ossified conventions that are older than you haven’t always been this way. They put me in the mood of “what of the things that feel normal today that deserve to feel dated, obsolete, or awkward?” Find Next Misspelling (you don’t often see that word!) Suggest Corrections + Paste Guess (this is just replacing the word with the suggestion – interesting use of the clipboard metaphor) Put In Dictionary (today: Learn Spelling)

0 views
Stratechery Yesterday

2026.21: The Data Center Veto

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 . Data Center Discontent. The impact of AI is, at least for now, being felt digitally: that is where AI is useful, and the more digital a job, the more it is threatened by LLMs. AI, however, depends on data centers in the physical world, and building data centers needs permission. This gives normal people the sort of veto power over AI they didn’t have in the face of globalization; I make the case in Monday’s Update and on Sharp Tech that understanding this dynamic is more important that trying to correct misinformation, which is a symptom, not a cause, of data center opposition. — Ben Thompson Agent Economics. What will the internet look like when ad-supported models are rendered obsolete by shifting user behavior and the rise of agentic web traffic? Ben considered this question last summer with The Agentic Web and Original Sin , and I was surprised to learn this week that Parag Agarwal, former CEO of Twitter, is now focused on devising solutions for exactly this reality. This week’s Stratechery Interview with Agarwal dives deep into the economics of content on the Internet, why ads make sense for humans, and why incentivizing content for agents will be different, and how Agarwal and Parallel are trying to solve them. I learned a ton from this interview, and I bet you will, too — and don’t worry, we did get a few bonus questions on the ride at Twitter.   — Andrew Sharp Never Count Out the Slime Mold. Wednesday’s Daily Update on Google I/O reminded me of an iconic leaked memo about the ungovernable and poorly coordinated mold in Mountain View, as the company seems to be throwing 10 different types of AI spaghetti at the wall to see what sticks. Then again, Google is now a nearly $5 trillion company and its transformer architecture supercharged the AI era. That second part is why, when Ben highlights a DeepMind approach to building AGI that’s distinct from the approaches at OpenAI and Anthropic, I’m compelled to both pay attention, and remember: for all of Google’s faults and misses, they do in fact have plenty of historic hits.  — AS Data Center Discontent, Understanding the Opposition, Fixing the Problem — There are understandable reasons for people to oppose data centers; the only solution that will work is simply paying them off. Google I/O, World Models, I/O Spaghetti — Google I/O put AI everywhere, for better and for worse. Meanwhile, is DeepMind aligned with Google’s business objectives? An Interview with Parallel Founder Parag Agarwal About Valuing Content on the Agentic Web — An interview with Parallel founder Parag Agarwal about valuing content and incentivizing its creation in a world of agents (plus questions about Twitter). Data Center Unpopularity Google Being Google The Little Vertical Laser That Everyone Uses Intel’s 30 Years in Costa Rica Constructing US-China Stability; Trump’s Taiwan Comments and More Summit Takeaways; Putin in China Wemby, Harper and an Instant Classic from the Spurs in Game 1 vs. OKC A Note on the Future of GOAT and An Emergency Top Five Much Ado About Data Centers, What Tech Gets Wrong About Its Critics, Q&A on SpaceX, Chinese AI, Elon Musk

0 views

Lawmakers Demand Answers as CISA Tries to Contain Data Leak

Lawmakers in both houses of Congress are demanding answers from the U.S. Cybersecurity & Infrastructure Security Agency (CISA) after KrebsOnSecurity reported this week that a CISA contractor intentionally published AWS GovCloud keys and a vast trove of other agency secrets on a public GitHub account. The inquiry comes as CISA is still struggling to contain the breach and invalidate the leaked credentials. On May 18, KrebsOnSecurity reported that a CISA contractor with administrative access to the agency’s code development platform had created a public GitHub profile called “ Private-CISA ” that included plaintext credentials to dozens of internal CISA systems. Experts who reviewed the exposed secrets said the commit logs for the code repository showed the CISA contractor disabled GitHub’s built-in protection against publishing sensitive credentials in public repos. CISA acknowledged the leak but has not responded to questions about the duration of the data exposure. However, experts who reviewed the now-defunct Private-CISA archive said it was originally created in November 2025, and that it exhibits a pattern consistent with an individual operator using the repository as a working scratchpad or synchronization mechanism rather than a curated project repository. In a written statement, CISA said “there is no indication that any sensitive data was compromised as a result of the incident.” But in a May 19 a letter (PDF) to CISA’s Acting Director Nick Andersen , Sen. Maggie Hassan (D-NH) said the credential leak raises serious questions about how such a security lapse could occur at the very agency charged with helping to prevent cyber breaches. “This reporting raises serious concerns regarding CISA’s internal policies and procedures at a time of significant cybersecurity threats against U.S. critical infrastructure,” Sen. Hassan wrote. A May 19 letter from Sen. Margaret Hassan (D-NH) to the acting director of CISA demanded answers to a dozen questions about the breach. Sen. Hassan noted that the incident occurred against the backdrop of major disruptions internally at CISA, which lost more than a third of it workforce and almost all of its senior leaders after the Trump administration forced a series of early retirements, buyouts, and resignations across the agency’s various divisions. Rep. Bennie Thompson (D-MS), the ranking member on the House Homeland Security Committee, echoed the senator’s concerns. “We are concerned that this incident reflects a diminished security culture and/or an inability for CISA to adequately manage its contract support,” Thompson wrote in a May 19 letter to the acting CISA chief that was co-signed by Rep. Delia Ramirez (D-Ill), the ranking member of the panel’s Subcommittee on Cybersecurity and Infrastructure Protection. “It’s no secret that our adversaries — like China, Russia, and Iran — seek to gain access to and persistence on federal networks. The files contained in the ‘Private-CISA’ repository provided the information, access, and roadmap to do just that.” KrebsOnSecurity has learned that more a week after CISA was first notified of the data leak by the security firm GitGuardian , the agency is still working to invalidate and replace many of the exposed keys and secrets. On May 20, KrebsOnSecurity heard from Dylan Ayrey , the creator of TruffleHog , an open-source tool for discovering private keys and other secrets buried in code hosted at GitHub and other public platforms. Ayrey said CISA still hadn’t invalidated an RSA private key exposed in the Private-CISA repo that granted access to a GitHub app which is owned by the CISA enterprise account and installed on the CISA-IT GitHub organization with full access to all code repositories. “An attacker with this key can read source code from every repository in the CISA-IT organization, including private repos, register rogue self-hosted runners to hijack CI/CD pipelines and access repository secrets, and modify repository admin settings including branch protection rules, webhooks, and deploy keys,” Ayrey told KrebsOnSecurity. CI/CD stands for Continuous Integration and Continuous Delivery, and it refers to a set of practices used to automate the building, testing and deployment of software. KrebsOnSecurity notified CISA about Ayrey’s findings on May 20. Ayrey said CISA appears to have invalidated the exposed RSA private key sometime after that notification. But he noted that CISA still hasn’t rotated leaked credentials tied to other critical security technologies that are deployed across the agency’s technology portfolio (KrebsOnSecurity is not naming those technologies publicly for the time being). CISA responded with a brief written statement in response to questions about Ayrey’s findings, saying “CISA is actively responding and coordinating with the appropriate parties and vendors to ensure any identified leaked credentials are rotated and rendered invalid and will continue to take appropriate steps to protect the security of our systems.” Ayrey said his company Truffle Security monitors GitHub and a number of other code platforms for exposed keys, and attempts to alert affected accounts to the sensitive data exposure(s). They can do this easily on GitHub because the platform publishes a live feed which includes a record of all commits and changes to public code repositories. But he said cybercriminal actors also monitor these public feeds, and are often quick to pounce on API or SSH keys that get inadvertently published in code commits. The Private-CISA GitHub repo exposed dozens of plaintext credentials to important CISA GovCloud resources. In practical terms, it is likely that cybercrime groups or foreign adversaries also noticed the publication of these CISA secrets, the most egregious of which appears to have happened in late April 2026, Ayrey said. “We monitor that firehose of data for keys, and we have tools to try to figure out whose they are,” he said. “We have evidence attackers monitor that firehose as well. Anyone monitoring GitHub events could be sitting on this information.” James Wilson , the enterprise technology editor for the Risky Business security podcast, said organizations using GitHub to manage code projects can set top-down policies that prevent employees from disabling GitHub’s protections against publishing secret keys and credentials. But Wilson’s co-host Adam Boileau said it’s not clear that any technology could stop employees from opening their own personal GitHub account and using it to store sensitive and proprietary information. “Ultimately, this is a thing you can’t solve with a technical control,” Boileau said on this week’s podcast . “This is a human problem where you’ve hired a contractor to do this work and they have decided of their own volition to use GitHub to synchronize content from a work machine to a home machine. I don’t know what technical controls you could put in place given that this is being done presumably outside of anything CISA managed or even had visibility on.” Update, 3:05 p.m. ET: Added statement from CISA. Corrected a date in the story (Truffle Security said it found the repo gained some of its most sensitive secrets in late April 2026, not 2025).

0 views

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

Last week I ran the first part of my What If…We’re In An AI Bubble? Series, where I asked questions and posed scenarios as to the consequences of the many, many questions I’ve asked over the last few years. It quickly became one of my most-read articles I’ve ever written, and for those of you who joined me for the first time last week, here’s a quick list of what we’ve covered already: As I mentioned last week, I believe one of the many problems with the analysis of the AI bubble is that people are willing to consider individual facts — like that AI is too expensive for everybody involved and data centers are not being built at the speed that we believed — but never the gestalt of their consequences.  For example, if data center construction slows to a crawl ( as I’ve discussed is already the case ) there’s a cascade of events that will occur: It’s really easy to say “wow, this stuff needs a lot of debt!” and “wow, this stuff takes a while!” but actually sitting and thinking about what that means logically leads you to some gruesome outcomes.  And to be clear, there’s not really an alternative to that scenario if data center construction slows. Even in an optimistic scenario, if data centers that started being built in 2024 don’t get finished until 2027 or 2028, that means that NVIDIA’s “latest” GPUs are perennially two or three years in the future.  While some capacity exists, I believe there are at least one million Blackwell GPUs sitting in warehouses waiting to be installed years into the future, which means that projects are going to launch in a year or two with potentially three-year-old GPUs, or said projects are going to have to either replace their orders with Vera Rubin or dump aged capacity onto a market saturated with Blackwell GPUs. The argument against what I’m saying is that there’s “insatiable” demand for AI compute — that “any viable compute on the market will be used,” which is true in measurements of days or months, but breaks down in the space of a year. As I mentioned a few weeks ago, AI’s demand story is a lie , because capacity is mostly taken up by Anthropic and OpenAI, creating the illusion of demand by absorbing most available inventory, while simultaneously obfuscating the fact that other sources of demand are simply non-existent in any meaningful numbers..  Many are conflating “there’s not much available” with “there’s so many people that want GPUs” without quantifying what “so many” means or how much they want, when the remaining performance obligations from Google, Amazon, and Microsoft have, outside of OpenAI and Anthropic, effectively plateaued, as is also the case when you remove these companies from CoreWeave order book.  If there were incredible, insatiable, indisputable demand, RPOs would be exploding across the board. Instead, nobody seems interested in buying capacity at scale outside of Anthropic, OpenAI, and the hyperscalers supporting them — or, in some cases, the likes of NVIDIA providing backstops to compute providers, agreeing to buy surplus compute in the case that they’re unable to sell it themselves. This is, to be clear, something that shouldn’t happen if there was genuine, distributed demand.   The sheer scale of the supposed AI data center buildout is in the tens of gigawatts of capacity, which translates to  $10 billion to $15 billion per gigawatt in annual revenue. I can find no examples of anybody but Anthropic and OpenAI spending billions on compute.  Both companies need to make or raise a combined $1.25 trillion in the next four years to afford their compute commitments across Oracle, Microsoft, Google, Amazon and CoreWeave.  The counter-argument to everything I’m saying is effectively two points: The latter is far from compelling, but I can see how somebody would believe it.  So much money appears to be flooding into companies like AMD, Samsung, and Sandisk — tens of billions of dollars to the point that it’s creating shortages across basically every component imaginable — which naturally might make you think that demand would exist at the other end. For the consumer, that perception becomes even more believable when you notice how consumer electronics are getting more expensive. Certain games consoles, nearly six years after their initial release, are more expensive than they were at launch. Typically, the inverse is true.  Meanwhile, smartphones and PCs are expected to ship with weaker specs or high prices, in part because of shortages of key components, caused by demand for AI data center hardware.  The thing is, demand for AI compute doesn’t have to exist for AI data centers to get built. While some have clients signed up in advance, said deals were signed so many years before construction will complete that it’s hard to guarantee that they’ll be willing — or solvent enough — to pay.  I also imagine most clients have signed contracts that have milestone dates for delivery of compute capacity. If data centers are delayed, clients likely have a contractual out, much like Microsoft does with its $17 billion compute deal with Nebius . In any case, in a frothy debt market full of desperate speculation, these projects are being funded by the very same private credit firms that piled into SaaS companies between 2018 and 2022 under the assumption that every software company will grow in perpetuity. When due diligence is so weak in private equity and private credit that Apollo’s John Zito says that their valuations are “ all wrong ,” it’s hard to believe that the same financiers are diligently making sure that enough revenue exists to justify these massive data center debt deals. The same questionable attention to detail applies to venture capital, which has seen ( much like private equity ) its investment model slow to a crawl since 2018 , with an average TVPI (total value paid in) slow to a horrifying 0.8 to 1.2x since 2018, meaning that for every dollar invested, you’re at best likely to get even money in return.  These are the very same investors telling you that every AI company is worth perpetually-growing amounts of money, that everything will work out perfectly , that somebody will work out how to make AI profitable, and that AI is both here to stay and doing incredible things , even if they can’t really explain what those things might be. In reality, none of these people have any idea how to turn around these rotten economics. Data centers are massive money-losing operations that in the best case scenario take five years to make a single dollar of margin, and their customers are eternally-unprofitable AI startups that rely on a constant flow of venture capital dollars.  The AI bubble is entirely built by people who hope somebody else will solve their problems. AI labs depend on venture capitalists to fund them, hardware providers to invent silicon that makes their businesses profitable, and their AI startup clients to find ways to make profitable businesses using their APIs. In turn, AI startups rely on AI labs to work out a way to make their models cheaper so that AI startups can make their business models profitable.  Put another way, everybody’s response to “how does this become profitable” is “don’t worry, somebody will work it out, but don’t worry, they’re going to at some point.” Today, I want to explore what happens if they don’t.  What if…We’re In An AI Bubble?  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?  OpenAI and Anthropic can’t expand much further than their current capacity. As they both make up 50% of Amazon, Google and Microsoft’s revenue backlogs , hyperscalers will be unable to make the majority of the revenue they’ve promised their shareholders. The $178.5 billion in US data center debt from 2025 will go mostly unpaid, as a great deal of it is project financing that’s dependent on revenue from data centers that won’t be built and thus won’t be making any revenue. NVIDIA, which claims to have shipped over 3 million Blackwell GPUs in 2025, will have trouble selling its next-generation Vera Rubin GPUs, as nobody will have anywhere to put them. Alternatively, we’ll see write offs of billions of Blackwell GPUs that will now be considered obsolete. Banks that are already afraid of “choking” on data center debt will stop issuing it, because these investments will not be paying off. It will become very difficult for anybody to afford to buy more NVIDIA GPUs, because AI data centers — which cost around $44 million per megawatt — require massive amounts of upfront capital expenditures, making it unlikely-to-impossible that somebody has the money lying around. That the amount of revenue flowing to both NVIDIA and associated hardware companies making CPUs, RAM, and solid-state storage is proof that there’s demand for…services run on them. 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? What if OpenAI and Anthropic became AI’s lender of last resort?  What if AI broke venture capital’s back?  What if inference isn’t profitable?

0 views

News: OpenAI Had A Negative 122% Non-GAAP Operating Margin In Q1 2026, and ChatGPT Growth Has Stalled

New revelations about OpenAI’s finances paint a dim picture for the company, as The Information reported it generated just $5.7bn in the first quarter of 2026, with an adjusted operating margin of -122%.   This means that for every dollar of revenue the company generated, it lost $1.22.  As The Information’s Sri Muppidi noted , these operating margins were adjusted — and, presumably, didn’t conform to GAAP (or generally accepted accounting principles) standards — and excluded certain “large line items”, like stock-based compensation.  By that maths, that means that OpenAI lost $6.95 billion in the quarter, and because this is non-GAAP, it’s quite possible that losses are much higher, revenues are lower, and its margins are worse. The piece does not specify if operating margin includes or excludes training costs, nor does it break down what other exclusions there may be other than stock-based compensation. The report also claims that OpenAI is “on track” to hit its goal of generating $30bn in revenue for 2026, although if it maintains these disastrous margins, it would end up losing $36.6bn.  Meanwhile, ChatGPT’s user growth has stalled. While weekly active users hit 920m in February, the average for the quarter sat at 905m, suggesting lower numbers in either (or both) January or March. OpenAI had expected to hit 1 billion weekly active users in 2025. This suggests that ChatGPT’s growth has stalled. As I’ve noted in the past, weekly active users are a fairly novel metric, with most companies using monthly active users to represent adoption. I’ve also speculated that the reason why OpenAI has favored this metric is because it’s easy to manipulate . OpenAI reportedly had 55m paying ChatGPT customers at the end of Q1 — up from 47m people at the end of the year.  Assuming a userbase of 905m users, this means that OpenAI has a conversion rate of roughly 6%. It's likely worse, as monthly active users should, at least in theory, be a higher number, as it captures every weekly user in addition to less-active users over the course of a month. Nevertheless, while this represents an improvement over the 2.583% rate in February of last year , it’s likely improved as a result of cheaper ad-supported ChatGPT “Go” subscribers at $5 or $8 a month, depending on geography. OpenAI also gave away a free annual ChatGPT Go subscription to literally every Indian subscriber in late October 2025 , though I cannot confirm if they’re counted in the total. As I wrote up yesterday , Anthropic leaked (or had leaked) that it believed it would have a non-GAAP EBIT operating profit in Q2 2026 entirely as a result of Elon Musk discounting two months of compute costs for that specific quarter , and it makes me wonder why we’re suddenly, in the space of 24 hours, talking about operating margins or operating profits for two companies that have hidden behind annualized revenues and obfuscated financials for several years. If I had to guess , it’s likely that investors have begun to demand firmer, more “real company”-adjacent numbers, and while Anthropic was able to find a clever way to manipulate them as a means of raising funding, OpenAI was forced to share numbers a little closer to reality. What’s clear is that we’re in an information war between two companies that burn billions of dollars, with one of them ( OpenAI ) allegedly planning to file for an IPO as soon as today .  Anthropic clearly wants to position itself as the stable, reliable, economically viable alternative to OpenAI, but can only do so with a kind of financial engineering only made possible in a media climate bereft of scrutiny.  Nothing has changed about the core economics of generative AI to suddenly make things profitable, other than the ingenuity of CFO Krishna Rao and his willingness to move numbers around a spreadsheet.  Nevertheless, it’s interesting that Anthropic appears to be leapfrogging OpenAI in revenue. In early May, Anthropic claimed to have $45bn in ARR . By contrast, in March, OpenAI claimed to have topped $25bn in ARR . While OpenAI brought in a billion dollars more than Anthropic in Q1 2026, The Information couldn’t get ahold of OpenAI’s numbers for Q2 2026, but at $45 billion in ARR - $3.75 billion in a month - Anthropic may have taken the lead. That is, of course, if its numbers actually line up with reality, something I’ve disputed multiple times .  Nevertheless, if investors become convinced that OpenAI is falling behind, it’ll be much harder to raise another round at or above its current $852 billion valuation.  Perhaps that’s why OpenAI is rushing to go public - it realizes it might have tapped out private investors. If you liked this piece, you should subscribe to my premium newsletter. It’s $70 a year, or $7 a month, and in return you get a weekly newsletter that’s usually anywhere from 5,000 to 18,000 words, including vast, detailed analyses of  NVIDIA ,  Anthropic and OpenAI’s finances , and  the AI bubble writ large . My Hater's Guides To  Private Credit  and  Private Equity  are essential to understanding our current financial system, and my guide to how  OpenAI Kills Oracle  pairs nicely with my  Hater's Guide To Oracle . This week, I’ll publish the second part to my ongoing series (“ What If…We’re In An AI Bubble? ”) about the factors and events that will cause the AI bubble to finally pop.  Subscribing to premium is both great value and makes it possible to write large, deeply-researched free pieces every week.  The Information reports that OpenAI generated $5.7bn in revenue for the first quarter of 2026 based on discussions with sources familiar with its financials. With adjusted negative margins of -122%, this means that for every dollar of revenue OpenAI made, it lost an additional $1.22, or around $6.95bn on a non-GAAP basis. OpenAI is "on track" to hit goal of $30bn in 2026 revenue, but margins suggest losses of over $36.6bn. OpenAI continues to struggle converting free ChatGPT users to paying customers, and overall user growth has stalled.

0 views

Benchmarking Apache Kafka Consumer Groups vs Share Groups (overhead test)

In my last blog post I introduced Dimster (DIMensional teSTER), a performance benchmarking tool for Apache Kafka with a specific set of philosophies. In this first share group benchmarking post, we’re going to use share groups as they are not intended to be used, but for a good reason. Share groups allow you to move past partitions as the unit of parallelism by allowing multiple consumers to read from the same partition, using message queue semantics. We’ll run those kinds of tests in the next post. In this post I just want to understand if the mechanics of how share groups work add any additional overhead compared to consumer groups. So we’ll use share groups as if they were consumer groups (by capping consumer count to partition count). Objective : Use synthetic tests to measure the overhead of share groups compared to consumer groups in identical conditions. How : Like-for-like tests which use an identical workload/topology using consumerType (CONSUMER_GROUP|SHARE_GROUP) as a dimension. Given identical producer/consumer counts, producer rate, topic/partition counts, do share groups scale as well as consumer groups? Do they add any latency overhead? These benchmarks are educational , they are not hard numbers, they are not some kind of canonical result (in fact, no such benchmark exists). And again, this is not a realistic test at all, they only serve to understand share group overhead. I ran all these benchmarks on a k3d Kubernetes cluster on my Threadripper 9980X: 64 cores (128 threads) 256 GB DDR5 memory Two Samsung 9100 PRO 8 TB (with one dedicated to the benchmarks) Pretty decent CPU and RAM cooling.  This is not a production setup, but the hardware is more than capable of handling a small to medium sized Kafka cluster with excellent performance. The SSD can sustain around 1.7 GB/s once the SLC cache has filled up and none of these benchmarks exceed that in aggregate across the 3 brokers. All tests were run with TLS between the clients and brokers and between each broker. I prefer to run benchmarks with TLS enabled (though it reduces the numbers) because most people (hopefully?) run Kafka with full TLS.  Dimster uses named environments located in the dimster-config.yaml . Each environment targets a specific k8s cluster (via kubectl context), specifies the Kafka and client versions, sizes the Kafka pods, determines heap sizes, broker and log config files etc, all in one yaml block. This environment uses 36 of 128 CPU threads (16 of 64 cores) and 72 GB of 256 GB of RAM of my workstation, so we’re not pushing the Threadripper too hard. Note, the ‘requests’ field block is applied to both k8s requests and limits. The client pod is over-provisioned with 12 CPU cores (24 threads) and 24 GB RAM to avoid any client bottlenecks causing spurious results. The tests in this post compare consumer groups with share groups. To do that, I tried to isolate other factors as much as possible. Random load skew is one such important factor.  In these tests, I ensured that load was as even as possible over the brokers: Message distribution over the partitions of a given topic was even. I used the Dimster message distributor PINNED_PARTITIONS which ensures the number of producers is divisible by the number of brokers and pins each producer to a set of partitions, and each producer round-robin sends to its partitions directly. Multi-topic tests used a topic count divisible by the number of brokers to ensure even distribution of leaders over brokers. Consumer counts per group were divisible by the number of brokers to ensure even distribution of partitions over consumers. Fig 1. Dimster’s partition pinning for even load distribution This is not like in real-life, but for this post I want to avoid the randomness involved with partition and broker skew so that we can compare consumer group vs share group performance without load skew randomness playing a role. I’ll be writing about and running benchmarks with partition and broker skew in a future post. Link to results as a tarball For the throughput benchmarks, I used Dimster’s explore mode, which probes the cluster to find the highest sustainable throughput while staying under a target end-to-end latency in ms and percentile (50 ms, p75 in this case). It measures e2e latency per-partition and uses the latency of the poorest performing partition as the yardstick.  Explore mode runs in phases: Ramp . Start with a low throughput and keep doubling the throughput after a configured interval. Once the e2e latency exceeds the limit, move to the next phase. Search : Perform a binary search within the bounds of [0 - max-ramp-throughput ]. It starts at the midpoint and if it can sustain that throughput, it searches the high range starting at the midpoint. If it can’t sustain it, then it searches the low range. It recursively performs the search until the current search range size is < 5% of the throughput. Then it moves to the sustain phase. Sustain : The throughput identified by the search phase is maintained for a prolonged period. If it passes, the test is complete. If it fails to sustain (under the target e2e latency), it goes back to the search phase, with the failed sustain throughput as the new upper bound of the search range. The sustain phase is successful if 80% of the intervals (30 intervals of 10 seconds by default) meet the latency criteria. This rule exists as explore mode is trying to find the highest sustainable throughput which sits on the edge of the cluster’s limit, allowing for some latency spikes. I ran explore mode on the following workload: The first scenario has 4 test points which co-varies 4 workload aspects related to partition, client counts and consumer type as dimensions, repeating the tests 3 times. Fig 2. The merged result of three repeats (only small variance between runs) We see that share groups matched or even exceeded consumer group performance. Moreover, this pattern was broadly the same across the three test repeats. We can’t infer this as a generalizable result based on this one test, but my general observation, having been running these tests for a few weeks, on EKS clusters, my Threadripper and my Mac, is that throughput in this kind of synthetic test is comparable (between consumer/share groups). Scenario 2 - Varying fanout This scenario involved 1 topic with 12 partitions with a fanout of 2 and then 6. Fig 3. The merged result of three repeats (only small variance between runs) The surprising result was that share groups maintained a higher sustainable throughput with a fanout of 6. Explore mode is sensitive to spiky latency, and one thing I’ve observed is that share group latency can be more stable under stressful loads than consumer groups. Again, this may not be generalizable, but it shows that share groups might actually outperform consumer groups in some cases. I think the main takeaway from these limited tests is that share groups and consumer groups are in the same ball  park in terms of raw throughput. Link to results as a tarball The throughput benchmarks were a stress test of sorts, pushing Kafka right up to its limit. CPU was maxed out. We don’t want that for the latency benchmarks. We’re not going to push the Kafka cluster to the limit as we want to measure latencies within the performance envelope. With 4 vCPUs, around 100 clients and TLS, a 15 MB/s (1.3 TB daily) workload fits comfortably inside that envelope. I used run-mode , which are the standard fixed throughput benchmarks (best for measuring latency). I ran a single test campaign with 3 scenarios where consumerType was the dimension: 1 topic with 60 partitions, 30 producers, 60 consumers. 12 topics with 6 partitions, 6 consumers per topic, 3 producers per topic. 6 topics with 6 partitions, 3 consumer groups per topic with 6 consumers each, 3 producers per topic. All ran with an aggregate producer rate of 15000 msg/s with a 1 KB message size (15 MB/s). Fig 4. End-to-end latency (p99) over time (10 second intervals). Note: you can select a time range on Dimster charts to zoom into a sub-range. Under this lighter load, we see that share groups add some overhead, with the e2e p99 latency being a little more choppy than the much flatter consumer group latency. Fig 5. End-to-end latency distribution. Note: you can select a percentile range on Dimster charts to zoom into a sub-range. Fig 6. p99 end-to-end latency over time (10 second intervals) The sharegroup overhead is more pronounced in this test. Fig 7. End-to-end latency distribution. Fig 8. p99 end-to-end latency over time (10 second intervals) Again we see the same overhead. The takeaway is that for an adequately sized cluster that is not stressed by the workload, we can expect to see some small share group end-to-end latency overhead. Just to show you this isn’t an artifact of running these tests on k3d on a single workstation, we see the same pattern on a 50 MB/s test I ran a few weeks ago on AWS EKS with the m6i.2xlarge instance (8 vCPU, 32 GB RAM, EBS). Fig 9. 50 MB/s test, p99 end-to-end latency over time (10 second intervals) on an EKS cluster And a 150 MB/s test which was more stressful Fig 10. 150 MB/s test, p99 end-to-end latency over time (10 second intervals) on an EKS cluster We see the typical Kafka latency spikes related to log flushing and rotation (which has this predictable cadence due to how all load starts at the same time, at a constant rate, on one topic). The share group tests consistently used more CPU than the consumer group tests, which is understandable given share groups do a lot more accounting and state management than consumer groups. For example, the first repeat of scenario 1 of the latency test (executed as test points CG, SG, CG, SG, CG, SG): Fig 11. CPU over three apache/kafka pods In all these tests, consumers did nothing with the messages except record some metrics. In the real world consumers write to databases and call APIs. It might take anywhere from < 1 ms to 30+ seconds to process a message. More useful benchmarks simulate consumer processing time which is exactly what we’ll do in the next post. When we add processing time, we start to see where share groups really shine. To summarize some findings from this post: Share groups add a little overhead which might show up in a latency benchmark. Share groups consume more CPU. Raw throughput benchmarks will probably see varied results, but share groups are not fundamentally slower than consumer groups. 64 cores (128 threads) 256 GB DDR5 memory Two Samsung 9100 PRO 8 TB (with one dedicated to the benchmarks) Pretty decent CPU and RAM cooling.  Message distribution over the partitions of a given topic was even. I used the Dimster message distributor PINNED_PARTITIONS which ensures the number of producers is divisible by the number of brokers and pins each producer to a set of partitions, and each producer round-robin sends to its partitions directly. Multi-topic tests used a topic count divisible by the number of brokers to ensure even distribution of leaders over brokers. Consumer counts per group were divisible by the number of brokers to ensure even distribution of partitions over consumers. Ramp . Start with a low throughput and keep doubling the throughput after a configured interval. Once the e2e latency exceeds the limit, move to the next phase. Search : Perform a binary search within the bounds of [0 - max-ramp-throughput ]. It starts at the midpoint and if it can sustain that throughput, it searches the high range starting at the midpoint. If it can’t sustain it, then it searches the low range. It recursively performs the search until the current search range size is < 5% of the throughput. Then it moves to the sustain phase. Sustain : The throughput identified by the search phase is maintained for a prolonged period. If it passes, the test is complete. If it fails to sustain (under the target e2e latency), it goes back to the search phase, with the failed sustain throughput as the new upper bound of the search range. 1 topic with 60 partitions, 30 producers, 60 consumers. 12 topics with 6 partitions, 6 consumers per topic, 3 producers per topic. 6 topics with 6 partitions, 3 consumer groups per topic with 6 consumers each, 3 producers per topic. Share groups add a little overhead which might show up in a latency benchmark. Share groups consume more CPU. Raw throughput benchmarks will probably see varied results, but share groups are not fundamentally slower than consumer groups.

0 views

Piri

This week on the People and Blogs series we have an interview with Piri, whose blog can be found at pketh.org . 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. Hey, I'm Piri. I'm a software designer, engineer, and artist of sorts. I build Kinopio , and have been blogging about the craft of making software for 12+ years (:O). I went to school in Toronto for biology and urban planning. There I learned that I liked illustration a lot more than writing boring reports and papers. After school, I got a job at a startup as an illustrator, that turned into product design, when also turned into writing code so I could build the ideas in my head. I can't remember a time when I didn't have some kind of blog. In university, I met a lot of new friends around the world by doing more angst-y cringe-y livejournal-y style writing. I started designing pketh.org while on a flight to SF, paid for by Yahoo, for a job interview at Flickr (times sure have changed). If you’re curious about the green design, I was inspired by the 1956 Jaguar D-Type, which I still think has such a unique prototype race car shape. My posts are usually long essays that take about a week or two to write and produce, so I try and make them timeless. When I have an idea for a post, I'll make a Kinopio space for it and collect thoughts, images, and URLs in it for a while. If after weeks or months it’s still on my mind, I'll start connecting and organizing everything into a rough outline. From there I'll start pasting things in and typing it up in either IA Writer or TextEdit. When the draft is done, I usually have someone proof-read it and use that feedback to make final edits. Then the final HTML formatting bits are done in my code editor of choice, SublimeText. Writing is like a muscle that atrophies when you don't use it. Mine's out of shape so the process is quite painful. When I finally a new post out to the world, I just want to lie down and never get up again. Probably related, but I end up throwing away 1/2 to 2/3 of what I write in a blog post. If I had the time to write more often I suspect it'd get easier. I think I could get pretty good at it. I prefer different places and tools depending on where I'm at in the process. I collect notes, inspiration, and connect related ideas wherever I am, usually on my phone. I like doing the early writing stage in a coffee shop or in bed. Anywhere that doesn't make me feel like I’m doing “Real Work™” yet. When I get really into it, I like to type on a desk with a good keyboard (I'm a big HHKB fan), on a screen big enough for me to keep my context windows (dictionary.app, Kinopio spaces, related web pages) next to my writing window. My blog uses Jekyll and is published on Github Pages. The domain stuff is done through Hover. It's quite basic. I might use something newer and nicer than Jekyll, but it would probably be compiled from markdown files the same way. The current design is a bit of a Ship of Theseus that I've been slowly and gently updating it over years, so it's kind of grown on me. I think the domain name is $20~/yr and I think that's it. I'm split on blogs with paid content: If writing is your job, then monetizing somehow totally makes sense. Quality independent writing and journalism is really important and should be compensated (I like Craig Mod's approach ). But for basically everyone else, blogging is a thing they do on the side for fun, and I think it sucks when people feel pressured to turn everything they do into a passive-income side-hustle potential-business-empire. Skimming the depths of my RSS feeds, I realized that I’ve subscribed to literally 1000s of blogs. But sadly most have withered away over the ages. Funkaoshi has been around for even longer than I've been writing – I consider the author my Toronto blogging senpai. I really enjoy Alexotos' in depth mechanical keyboard reviews. It's really cool and encouraging to see newer people blogging the same way we did. Lilly Ashton’s blog is worth reading If you're looking for something more personal and cozy. Since 2018, I've been building Kinopio , a spatial note-taking tool to collect and connect your thoughts, ideas, and plans. You can use it to make sense of your thorniest problems and grow your coolest new ideas into plans. I hope you enjoy it. 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 142 interviews . People and Blogs is possible because kind people support it.

0 views
Brain Baking Yesterday

Bread Baking In Video Games

In September last year, as part of a series on card games, I wrote about card game mini games in video games . It was fun to conduct a little bit of research related to a specific topic in the world of video games. Since you are reading this on Brain Baking , my interest is always piqued when a game allows me to bake crusty baked goods. The idea to dig into the topic of bread baking in the many virtual gaming worlds came to fruition when I played Bug Fables in 2021. As I wrote in the review: As a professional baker myself, I especially adored the baking honeybee in the Golden Outpost, that exclusively sells flour, which you can use to bake tarts, doughnuts, croissants, glazed honey treats, cupcakes, and more. Discovering new recipes was a great distraction—albeit an expensive one, if an expensive ingredient was turned into a mistake, healing one measly HP and TP (“team points”, or mana, just like in Paper Mario). The local bakery in Bug Fables, trying out new recipes. Bug Fables is a love letter to Paper Mario where the lovely toad Zess T. cooks up jummy stuff for Mario to recover heart and flower points—but Zess T. doesn’t specialise in (bread) baking: she’s a chef that whips up as much spaghetti as cupcakes. You can have Zess combine cake mix with inky sauce to bake a choco cake. Eathing the cake will replenish 5 HP and 15 FP, but alas there are no bread-like recipes present in the game. How about a recipe in The Legend of Zelda: Breath of the Wild ? The closest thing I can think of is throwing a carrot into the fire that yields a carrot cake . Bug Fables still wins, where the baker—with proper baker’s hat—can be seen popping dough into the oven using a pizza peel. In Breath of the Wild , the cooking/baking process is the same: throw stuff into the cauldron, do a happy dance, and poof. How about farm simulation games like Stardew Valley and its inspiration Harvest Moon ? In the former you can cook (indeed, not “bake”) a crusty baguette in the kitchen using wheat flour. There are a lot of recipes that require wheat flour such as pizza, muffins, and pies. In many iterations of the latter, such as the GBA’s Friends of a Mineral Town , you can buy bread in the store and use it as an ingredient to whip up raisin or curry bread, jam buns, or even a cheese fondue . Weirdly enough, you can buy flour that’s required for baking an apple pie, noodles, and (pan)cakes but you can’t bake bread with it. Many RPG Codex members dug up computer role playing games where you can bake bread . The list includes the Ultima games (VII, Online 1 , …), EverQuest , Arx Fatalis , The Elder Scrolls games ( Skyrim ), … In Morrowind , you can grind store-bought bread in a mortar and pestle to turn it into a restore health potion, but there exist survival mods such as Morrowind Crafting that introduce cooking. Still no dedicated bread oven, though. The Ultima VII baker: I am the baker here in Britain and I make the sweetest bread thou has ever tasted. In 2018, James Davenport wrote about the rise of video game bread for PC Gamer, focusing on the early presence of bread in games. But the presence of bread doesn’t automatically mean the crusty goodness can be baked yourself. The article does mention World of Warcraft —the MMORPG as another subgenre of games where crafting and thus cooking is a big part of the meta game. Still no dedicated bread oven, though. In Level 5’s Fantasy Life you can become a cook who masters their skill using three mini-games inside the kitchen: the frying pan, the cutting board, and the oven. Baking is done in front of the oven, not the pan, effectively splitting how ingredients are converted into an edible end product. Except that there’s nothing to consume as it’s not that kind of game. Also, I can’t seem to find bread-specific cooking recipes from the game : only the classic apple pie that requires Faraway Wheat. I’m waiting to play the game until I eventually buy a Switch 2 so I’ll report back when I know more. Some Rune Factory games seem to approach bread baking the same way. Maybe complex roguelike games offer a more realistic way to produce bread? According to the Dwarf Fortress wiki you can bake bread: “You can use flour or sugar milled from plants to either bake bread or make candy”. The Dwarven Cuisine mod adds more variations that even require making dough that then can be turned into bread by baking it. This is the only example I could find of a video game that introduces a “kneading” step before baking! Different types of Dwarven bread to be baked in the Dwarf Fortress mod A surprising entry popped up during my research: The Sims . In the Get To Work expansion of the fourth instalment, you can have your sims engage in some serious cookery/bakery activities . It’s not just bread but also bread sticks, bagels, whole wheat loaves, potato bread, and even a sourdough loaf! As a huge fan of sourdough, I guess The Sims 4 wins this one. And then there’s Bakery Simulator that takes virtual bread baking to a whole new level. Even the reviews say mixed . Get it, mixed? As in mixing dough? No? OK then. Other dedicated cooking simulation games include Lemon Cake , a game I discovered thanks to Kat Thompson’s article on virtual armchair baking for Bon Appétit that looks like a cosy variant of the frantic multiplayer Overcooked! series. EuroGamer’s YouTube video “5 Brilliant Games About Bread (that you probably never even knew existed)” showcases how the physics-based game on bread called I Am Bread redefines bread slice stickiness. It might not enable you to bake a lovely loaf of bread, but a game where you are the slice and have to slather yourself with savoury spreads deserves a special mention: Let me know if I missed a game that features getting your hands dirty with dough and oven. I have to run; writing this post made me hungry. I especially enjoyed Lauren and Lloyd Sommerer’s 2001 essay entitled I Want To Bake Bread on Ultima Online .  ↩︎ Related topics: / bread baking / video games / By Wouter Groeneveld on 22 May 2026.  Reply via email . I especially enjoyed Lauren and Lloyd Sommerer’s 2001 essay entitled I Want To Bake Bread on Ultima Online .  ↩︎

0 views
Kelly Sutton Yesterday

Moving on from React, 2 Years Later

It’s been an even busier year and change for Scholarly . We’re coming up on 3 years in business. We’ve raised a small round of funding from our existing investors, grown the team in both Denver and Seattle, and continue growing in all dimensions. I’m trying to do an annual review of a decision to move away from React in ~2023 to see how things are turning out. You can read the original posts, Moving on from React and Moving on from React, a Year Later . What a wild 18 months it’s been. Since the last post, we’ve moved from tab-completion and copy-paste LLM-aided development to full-on agents with things like Claude Code. We’ve also grown the team and we have reintroduced React (gasp!). The decision to reintroduce React was solely driven by React Flow . It’s the best diagram tool we found, and we thought it was worth eating our hat. Unlike some of the other libraries we use and pay for, it’s not currently packaged as Vanilla JavaScript. We’ve also deployed React in a select few areas where its state management yields the best customer experience. We ship this as small pieces of a page that is otherwise server-rendered. The React bits help us add the interactivity that we believe makes the best customer experience. For those keeping tabs, here’s how our Ruby/JS LOC has changed over time: A few reflections on the numbers above: Given the recent changes in software engineering, it’s hard to tell how much of this even matters anymore. Our roles as software engineers are changing with every model or harness upgrade. Agents and models have gotten a lot better at interpreting and using StimulusJS and Turbo . We use Claude Code with Opus 4.7 at the time of writing. Some of the rough edges of using Turbo with LLMs in the beginning feel completely gone now. Kept this one short to provide an update. Things are changing quickly, and it’s kind of interesting to think how much of this may or may not matter in the long run. If the LLM is writing our code and the customers have a great experience, how much does stack choice matter? Maybe we should index toward more complex technologies for humans but easier for LLMs to write? How much control should we cede? Thanks for reading. Until next time. Our codebase has 179k LOC of Ruby, compared to 61k from 18 months ago. A tripling! This can be somewhat attributed to our adoption of Sorbet for static type-checking. It just produces more verbose Ruby and provides some more safety that certain parts of our code base benefit from. Our JS LOC went from 4.1k to 14.8k in the same time frame. We’ve also adopted TypeScript here for some of our files that touch React. I’ve kept the linear trendline to simulate where we might have been with React. We’re still below where I’d predict we’d be had we stuck with it. You can clearly see where we made the cutover from React to Stimulus in August 2023, although it’s not as obvious since it’s so far in the past. Our Ruby LOC was growing super linearly last time, and that continues to be the case. I attribute this solely to Claude Code. It really whips the llama’s ass. Volume of LOC remains a liability, but the product capability has grown about this much or more in the meantime, so not concerning.

0 views

Alleged Kimwolf Botmaster ‘Dort’ Arrested, Charged in U.S. and Canada

Canadian authorities on Wednesday arrested a 23-year-old Ottawa man on suspicion of building and operating Kimwolf , a fast spreading Internet-of-Things botnet that enslaved millions of devices for use in a series of massive distributed denial-of-service (DDoS) attacks over the past six months. KrebsOnSecurity publicly named the suspect in February 2026 after the accused launched a volley of DDoS, doxing and swatting campaigns against this author and a security researcher. He now faces criminal hacking charges in both Canada and the United States. A criminal complaint unsealed today in an Alaska district court charges Jacob Butler , a.k.a. “ Dort ,” of Ottawa, Canada with operating the Kimwolf DDoS botnet. A statement from the Department of Justice says the complaint against Butler was unsealed following the defendant’s arrest in Canada by the Ontario Provincial Police pursuant to a U.S. extradition warrant. Butler is currently in Canadian custody awaiting an initial court hearing scheduled for early next week. The government said Kimwolf targeted infected devices which were traditionally “firewalled” from the rest of the internet, such as digital photo frames and web cameras. The infected systems were then rented to other cybercriminals, or forced to participate in record-smashing DDoS attacks, as well as assaults that affected Internet address ranges for the Department of Defense . Consequently, the DoD’s Defense Criminal Investigative Service is investigating the case, with assistance from the FBI field office in Anchorage. “KimWolf was tied to DDoS attacks which were measured at nearly 30 Terabits per second, a record in recorded DDoS attack volume,” the Justice Department statement reads. “These attacks resulted in financial losses which, for some victims, exceeded one million dollars. The KimWolf botnet is alleged to have issued over 25,000 attack commands.” On March 19, U.S. authorities joined international law enforcement partners in seizing the technical infrastructure for Kimwolf and three other large DDoS botnets — named Aisuru , JackSkid and Mossad — that were all competing for the same pool of vulnerable devices. On February 28, KrebsOnSecurity identified Butler as the Kimwolf botmaster after digging through his various email addresses, registrations on the cybercrime forums, and posts to public Telegram and Discord servers. However, Dort continued to threaten and harass researchers who helped track down his real-life identity and dramatically slow the spread of his botnet. Dort claimed responsibility for at least two swatting attacks targeting the founder of Synthient , a security startup that helped to secure a widespread critical security weakness that Kimwolf was using to spread faster and more effectively than any other IoT botnet out there. Synthient was among many technology companies thanked by the Justice Department today, and Synthient’s founder Ben Brundage told KrebsOnSecurity he’s relieved Butler is in custody. “Hopefully this will end the harassment,” Brundage said. An excerpt from the criminal complaint against Butler, detailing how he ordered a swatting attack against Ben Brundage, the founder of the security firm Synthient. The government says investigators connected Butler to the administration of the KimWolf botnet through IP address, online account information, transaction records, and online messaging application records obtained through the issuance of legal process. The criminal complaint against Butler (PDF) shows he did little to separate his real-life and cybercriminal identities (something we demonstrated in our February unmasking of Dort). In April, the Justice Department joined authorities across Europe in seizing domain names tied to nearly four-dozen DDoS-for-hire services, although because of a bureaucratic mix-up the list of seized domains has remain sealed until today. The DOJ said at least one of those services collaborated with Butler’s Kimwolf botnet. A statement from the Ontario Provincial Police said a search warrant was executed on March 19 at Butler’s address in Ottawa, where they seized multiple devices. As a result of that investigation, Butler was arrested and charged this week with unauthorized user of computer; possession of device to obtain unauthorized use of computer system or to commit mischief; and mischief in relation to computer data. He is scheduled to remain in custody until a hearing on May 26. In the United States, Butler is facing one count of aiding and abetting computer intrusion. If extradited, tried and convicted in a U.S. court, Butler could face up to 10 years in prison, although that maximum sentence would likely be heavily tempered by considerations in the U.S. Sentencing Guidelines, which make allowances for mitigating factors such as youth, lack of criminal history and level of cooperation with investigators.

0 views

Datasette Agent

We just announced the first release of Datasette Agent , a new extensible AI assistant for Datasette. I've been working on my LLM Python library for just over three years now, and Datasette Agent represents the moment that LLM and Datasette finally come together. I'm really excited about it! Datasette Agent provides a conversational interface for asking questions of the data you have stored in Datasette. Add the datasette-agent-charts plugin and it can generate charts of your data as well. The announcement post (on the new Datasette project blog) includes this demo video : I recorded the video against the new agent.datasette.io live demo instance, which runs Datasette Agent against example databases including the classic global-power-plants by WRI , and a copy of the Datasette backup of my blog. The live demo runs on Gemini 3.1 Flash-Lite - it's cheap, fast and has no trouble writing SQLite queries. A question I asked in the demo was: when did Simon most recently see a pelican? Which ran this SQL query : And replied: The most recent sighting of a pelican by Simon was recorded on May 20, 2026 . The observation included a California Brown Pelican, along with a Common Loon, Canada Goose, Striped Shore Crab, and a California Sea Lion. Here's that sighting on my blog , and the Markdown export of the full conversation transcript. My favorite feature of Datasette Agent is that, like the rest of Datasette, it's extensible using plugins. We've shipped three plugins so far: Building plugins is really fun . I have a bunch more prototypes that aren't quite alpha-quality yet. Claude Code and OpenAI Codex are both proving excellent at writing plugins - just point them at a checkout of the datasette-agent repo for reference and tell them what you want to build! I've also been having fun running the new plugin against local models. Here's a one-liner to run the plugin against gemma-4-26b-a4b in LM Studio on a Mac: Datasette Agent needs reliable tool calls and the ability for a model to produce SQL queries that run against SQLite. The open weight models released in the past six months are increasingly able to handle that. Datasette Agent opens up so many opportunities for the LLM and Datasette ecosystem in general. It's already informed the major LLM 0.32a0 refactor which I'm nearly ready to roll into a stable release, maybe with some additional "LLM agent" abstractions extracte from Datasette Agent itself. I've been exploring my own take on the Claude Artifacts, which is shaping up nicely as a plugin. I'm excited to use Datasette Agent to build my own Claw - a personal AI assistant built around data imported from different parts of my digital life, which is a neat excuse to revisit my older Dogsheep family of tools. We'll also be rolling out Datasette Agent for users of Datasette Cloud . Join our #datasette-agent Discord channel if you'd like to talk about the project. 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 . datasette-agent-charts , shown in the video, adds charts to Datasette Agent, powered by Observable Plot . datasette-agent-openai-imagegen adds an image generation tool to Datasette Agent using ChatGPT Images 2.0 . datasette-agent-sprites provides tools for executing code in a Fly Sprites persistent sandbox.

0 views
JSLegendDev Yesterday

The Trick to Designing Highly Replayable Arcade and Linear Games

I recently finished a prototype for a game called HARVEST MOVE based on an arcade style game of the same name that I developed 3 years ago. In the original version, the player moves on a grid and needs to collect as many crops as possible while avoiding enemies. If they get hit, the player is presented with their current score, their best score and the ability to play again. A screenshot of my HARVEST MOVE prototype However, while remaking it, I took a few design decisions that altered massively the replayability of the game. I’d like to share what I did. First, I structured the game into configuration of enemies (I’ll start using the term level rather than configuration to make things clearer) that determined what enemy types and how many where to be placed on the grid. I then, tied those levels to specific score thresholds. Therefore, once a player reached a threshold they would be seamlessly moved to the next level. Secondly, I turned the player’s score into a currency. When they had a game over, they could spend the wealth accumulated to unlock more valuable crops that would start spawning in their next attempt. Even though players always replayed the game starting from the first level, they could accumulate wealth much faster which translated to faster progress through levels they had previously played. Additionally, the more crops they unlocked, the more likely they were to reach late game levels locked behind higher score thresholds because they simply earned more. Now, why does this structure seemingly works in making an arcade/linear game more replayable? I have a few hypothesis to present which are listed below. There is now a sense of permanent progression which mitigates the feeling of loss you experience after losing in a score based game. This makes you more likely to try again. Replaying previous levels while being more powerful/quicker gives the player a very satisfying feeling of power which feeds into an innate power fantasy of some sort. If your game has upgrades that meaningfully alter the gameplay experience, then you tap into a novelty effect that will make the game more enjoyable for longer. For example, having unique items/weapons the player can unlock or alternative pathways in a level or an alternative level. I don’t think so. Roguelikes usually rely on procedural generation and randomization to keep things fresh. There is less emphasis on level design and more emphasis on making builds and testing them out. Rather, I would estimate this structure to be more similar to time loop based games like The Legend of Zelda Majora’s Mask. In Majora’s Mask, you play through the same handcrafted environment over and over and progressively unlock things in the game allowing you to access things you couldn’t before. However, that doesn’t mean procedural generation can’t be used. In fact, I used it in my game, but I don’t believe in it being a core aspect. Considering I accidently discovered this through experimentation, I still think there is room for fine tuning. However, this makes me excited to test this structure again in future projects. I wonder how this would fit with an RPG or a platformer, etc… That said, it would be nice if I could get your feedback on my game. To make things as convenient as possible, here is a google form (link to the game is inside the form) for you to provide your feedback so you don’t have to create an account to be able to comment. Anyway, if you’re interested in all things related to programming, game development and game design I recommend subscribing to not miss out on future posts. Subscribe now A screenshot of my HARVEST MOVE prototype However, while remaking it, I took a few design decisions that altered massively the replayability of the game. I’d like to share what I did. First, I structured the game into configuration of enemies (I’ll start using the term level rather than configuration to make things clearer) that determined what enemy types and how many where to be placed on the grid. I then, tied those levels to specific score thresholds. Therefore, once a player reached a threshold they would be seamlessly moved to the next level. Secondly, I turned the player’s score into a currency. When they had a game over, they could spend the wealth accumulated to unlock more valuable crops that would start spawning in their next attempt. Even though players always replayed the game starting from the first level, they could accumulate wealth much faster which translated to faster progress through levels they had previously played. Additionally, the more crops they unlocked, the more likely they were to reach late game levels locked behind higher score thresholds because they simply earned more. Now, why does this structure seemingly works in making an arcade/linear game more replayable? I have a few hypothesis to present which are listed below. There is now a sense of permanent progression which mitigates the feeling of loss you experience after losing in a score based game. This makes you more likely to try again. Replaying previous levels while being more powerful/quicker gives the player a very satisfying feeling of power which feeds into an innate power fantasy of some sort. If your game has upgrades that meaningfully alter the gameplay experience, then you tap into a novelty effect that will make the game more enjoyable for longer. For example, having unique items/weapons the player can unlock or alternative pathways in a level or an alternative level.

0 views
Jim Nielsen Yesterday

Book Notes: “Poor Charlie’s Almanack”

I’ve been slowly listening to Poor Charlie’s Almanack: The Essential Wit and Wisdom of Charles T. Munger . I like his practicality. He’s never trying to be overly academic, as if he needs to prove how smart he is. He says Berkshire’s success doesn’t come from them solving hard problems, but from spending their time knowing what a simple solution looks like — and acting on it when they see it! We’ve succeeded by making the world easy for us, not by solving the world’s hard problems. Munger analogizes their approach to investing like jumping a fence. They don’t spend all their time trying to figure out how to jump a seven-foot tall fence. Instead, they find a spot where the fence is only a foot tall, jump it, and take the reward on the other side. The approach he articulates for investing, in fact, seems broadly applicable to any kind of problem solving: Whenever people ask him for advice (as if somehow he could bestow upon them some kind of knowledge that will save them the pain and hardship of experience) he seems anathema to the idea that you can live life without making lots of mistakes. To paraphrase Charlie: “I don’t want you to think that we have a method of learning that will prevent you from making mistakes. The best you can do is learn to make fewer mistakes than others. And then, when you inevitably do make mistakes, learn to acknowledge them and fix them quickly.” Straightforward. Practical. No bullshit. No ego. (Basically the opposite of everything I see on social platforms.) I quite enjoyed his perspective. Reply via: Email · Mastodon · Bluesky Quickly eliminate the universe of what not to do. Follow up with a multi-disciplinary attack on what remains. Act decisively when — and only when — the right circumstances appear.

0 views