Latest Posts (20 found)
Unsung Today

YouTube’s right click relay

An interesting mechanism in YouTube I just learned of. If you right click once, you get their context menu: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/youtubes-right-click-relay/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/youtubes-right-click-relay/1.1600w.avif" type="image/avif"> If you right click again , you get the native browser menu: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/youtubes-right-click-relay/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/youtubes-right-click-relay/2.1600w.avif" type="image/avif"> This is clunky and not discoverable, but I can see YouTube team’s bind here. As far as I know, it is not possible to extend browser’s native right click menu (even with user’s consent), or invoke it in some other way (so that, for example, they could have an entry point to the native menu in their menu). At the same time it does feel like the correct use of a right click menu, to host quick functions like Miniplayer or Copy Video URL At Current Time or Copy Embed Code – and, you can also see how Chrome’s own menu has a lot of cruft in it. In a way, this might be what is often called a “progressive enhancement.” It is better than blocking the native menu altogether, and I cannot think of any smarter alternative given the constraints. But it is clunky, as things often are when websites venture out to become web apps. #mouse #web

0 views

You should never be angry at work

I try not to give a lot of prescriptive advice about working in tech companies 1 . There are many ways to be successful, and every company works differently. If you’re shipping projects and your management chain is happy, it doesn’t really matter how you’ve accomplished it. However, there’s one thing that I do think is solid advice: you should never be angry at work . Anger in the workplace is toxic. An angry colleague immediately becomes a new problem to be managed, not a professional helping you manage problems. When someone is visibly angry in a meeting or in Slack, it kills the entire atmosphere: other engineers will often go quiet entirely, not wanting to make the situation worse. If you routinely “get heated” at work, the best-case scenario is that you’re part of a tight-knit team of confident people who aren’t put off by it 2 . No harm, no foul. But the second someone comes onto your team who’s not so confident, or you have to communicate outside of your team, it becomes a big problem. Healthy workplaces route around anger in the same way that networks route around damage. Emotionally unreliable engineers will get left out of conversations that might cause them to blow up. Decision-making will get done around them in backchannels. I’ve seen this become a self-reinforcing cycle: angry engineers aren’t consulted on key decisions, which makes them angrier, which pushes them even further away from the spaces where decisions get made, and so on. You can often find these engineers bitterly complaining that they keep the company together, but nobody ever listens to them. In my experience 3 , this is almost never true. Engineers who are highly effective tend to get listened to — at minimum by their colleagues, and eventually by managers and product managers who want to extract as much value as possible from them. (One reason this is true is that all successful projects involve working with other people, and if nobody listens to you, you can’t do that.) Why do angry engineers believe they’re important? Paradoxically, anger can be really useful to a software engineer . Angry engineers are rarely the ones holding the company together, but they’re also rarely useless . One surprising thing about working for big tech companies is that some engineers are not just unproductive, but actively net-negative : either because they’re incapable of doing useful work on their own, or because they’re sloppy enough that they create more work than they do, or because they’re so checked out that they literally do nothing. Angry engineers might be net-negative in a cultural sense, but in terms of literally solving tickets and shipping features, they’re usually well above average. Why is this? Anger often comes from caring about your work, and caring a lot is sufficient to make you a competent engineer . I’ve never worked with someone who genuinely cared about their work who wasn’t (or didn’t eventually become) competent. I actually think it’s healthy for an early-career engineer to sometimes get angry about their work, because it means they care a lot: it’s still a mistake in the moment, but it’s a “good mistake” . I certainly used to get angry — in fact, I wrote about the angriest I’ve ever been at work here 4 . But you have to move past it . Think of “caring about your work” as a vertical tube, unsealed at either end. You fill the tube by pumping in emotional investment from the bottom 5 . If you have too little, it drains away and you end up as a useless coaster. But if you have too much, it overflows and you end up as an angry engineer that people have to work around. One solution is to try and care the exact right amount: be invested in work a bit, but also have hobbies and a family and whatever else gives you perspective about your work problems. If you have a rich and healthy personal life, it’s hard to find yourself yelling at somebody about React state management. However, this is a tricky balance to maintain over time. Another solution is to care about different things. The reason too much caring overflows into anger is because what you care about is misaligned with what the organization cares about . If your interests are perfectly aligned with your company’s (for instance, if you primarily care about delivering shareholder value ), you can fit way more emotional investment into the tube before it overflows. Here’s some dangerous advice : showing a little bit of anger at work can sometimes be useful. It can be a good way to signal that you care, or to build rapport with certain people, or to draw attention to something you think is important. However, it’s still always a mistake to be angry. You need to be able to drop back to a friendly mode at will, which is very difficult when you’re genuinely angry. Being able to show a full range of emotion at work is good. It makes you more persuasive and more human. Being a fully professional robot is fine — you can have a successful career this way — but there’s always going to be some kind of uncanny-valley HR-ness to your work persona that will make it hard to connect with your colleagues. If in doubt, don’t show anger. It’s never wrong to be professional. However, if you can signal that you’ve got enough distance to separate your professional feelings from your real feelings, and enough perspective to realize that the stakes of a technical decision are fundamentally not that high in the grand scheme of things, it can sometimes be okay to show visible frustration so that people know you’re still human. Well-known software engineering personalities are often angry. It feels unfair to give too many negative examples, but obviously Linus Torvalds’ rants about Linux are a great example. Some of my favourite engineering talks are from Bryan Cantrill, who is sometimes visibly furious at his subject matter. There are too many well-known angry blog posts to list, but I’ll cite one I genuinely like: my Australian blogging colleague Nikhil’s post titled I Will Fucking Piledrive You If You Mention AI Again . Anger is a part of the general image of a competent software engineer. Many junior engineers learn from this that it’s okay to be angry. However, taking your emotional cues from engineering celebrities is a big mistake, for a few reasons. First, you are not Linus Torvalds or Bryan Cantrill . Torvalds is the BDFL of the most important software system in the world. Cantrill is the cofounder and CTO of his company. When these people are angry at work, people will not work around them, because they are the ones deciding what gets worked on . Once you’re the one in charge, you can get away with being emotional in the workplace 6 . Second, you don’t know what it’s like to work with these engineers . People give talks and write blog posts because they’re emotionally worked up about something. If your only exposure to a celebrity is via their conference talks and blog posts, you’re seeing them at something like their maximum emotional intensity. If you then take that level of emotion into your normal everyday work, you’re almost certainly overshooting. I’ve been reorged into dysfunctional teams, have had projects I enjoyed cancelled, and have worked on systems that were extremely chaotic. I can’t remember the last time I was actually angry at work. To be clear, I’m not successfully hiding my anger (unless it’s so repressed it’s invisible to me as well) 7 . Nor am I naturally a chill person. I’ve just reached a point in my career where I genuinely don’t get upset about work stuff. A cynical person might say here that I’ve stopped caring about my work, so of course I don’t get angry anymore. I’ve left the side of the “real engineers” — the Linus Torvalds and Bryan Cantrills of the world — and sold out for that sweet, sweet big tech money. I mean, maybe! It’s true that I’m less invested in specific technical decisions than I used to be. But I still care a lot about doing a good job, I still spend a lot of time tweaking and reading code, and I certainly get more done than I did when I was more emotionally volatile. Being angry at work feels good. It feels like proof that you’re working on something that matters, and that you’re personally having an impact. If you’re angry, nobody can call you a coaster. But anger is only a local maximum. If you can find your way to a different style of working, you’ll not only be more effective, but you’ll be in a far better place to have impact on problems that actually matter. Mostly, I fail . As I understand it, this is the work environment that most famously angry engineers came up in. My experience is certainly limited (a handful of companies, and maybe ten different teams or organizations). I can certainly believe it happens! About halfway down, in the section titled “it’s not your manager’s fault”. Emotional investment is a liquid with the viscosity of water. To a point. Even Torvalds famously said he’d gone too far with the anger and decided to turn it down a bit. I suppose I’m not the best person to judge whether this is true. If you work with me and I do come across as an angry guy, please do tell me. Mostly, I fail . ↩ As I understand it, this is the work environment that most famously angry engineers came up in. ↩ My experience is certainly limited (a handful of companies, and maybe ten different teams or organizations). I can certainly believe it happens! ↩ About halfway down, in the section titled “it’s not your manager’s fault”. ↩ Emotional investment is a liquid with the viscosity of water. ↩ To a point. Even Torvalds famously said he’d gone too far with the anger and decided to turn it down a bit. ↩ I suppose I’m not the best person to judge whether this is true. If you work with me and I do come across as an angry guy, please do tell me. ↩

0 views
Brain Baking Yesterday

Deconstructing A 17th Century Letter

Continuing the letter writing fever, I’ve been exploring the academic work called Letters As Loot by Gijsbert Rutten and Marijke J. van der Wal. It’s a treasure trove of information on how letters were written in the 17th and 18th century, based on a corpus of 50k letters that were captured by raiding ships between England and The Netherlands. These boats usually contained a bag full of letters headed to offshore family and friends but due to the raging Anglo-Dutch War (four of them between 1652 and 1784), many letters never made it to their destination. That’s frustrating for the reckless explorers waiting to hear something from their family back home (or the other way around). But at the same time, nearly four hundred years later, these lost letters are the only thing that help us shape our view of lower and middle-class Dutch letter writers, which is otherwise dominated by upper class male writing. I’d love to think that if the Belgian Post loses a letter I sent, it’ll turn up in a couple hundred years for researchers to marvel at. I’m pretty sure by then this website is long gone. Who says the internet will still be alive? Or the planet, for that matter, judging by the extreme weather conditions… Unfortunately, Letters As Loot is written in a stereotypical form of Academese and hard to recommend in its current state. So I scanned the pages diagonally and summarised the coolest findings here. The most interesting is the deconstruction of a typical 17th century letter, written by Angenieten Cornelis to her husband at sea Roelandt IJosten Ostvorndijck. Here’s what she originally wrote: A letter by Angenieten Cornelis, dated 15 September 1664. Lifted from Letters As Loot, page 80. That’s quite challenging to read even for a Dutch speaking person like me. Here’s the line-by-line translation by the authors: What’s so interesting about this letter? The fact that more than 50% of its contents is what we’d nowadays call formulaic nonsense: If you’re married to Roelandt (written as Roellant, which I’m quite sure is misspelled), why write such a cold an distant contents? She’d “regret to hear it” if he wasn’t in good health anymore. I think my wife would kill me if I’d write like that, thinking there must have been a very suspicious reason for my aloofness. She must have made up for that by ending it lovely: a hundred thousand times good night by me —but just to be sure, write your full name again. It is I, Leclerc! Some expressions, such as a way of ending the letter, were so common that they were abbreviated: uwe dienstwillige vrient (your faithful/obedient friend) would become U.E.D.W. . The most funny one most certainly is ick sal onse kijndt eens soenen voor u (I’ll kiss our child for you). It only appeared a couple of times so the writer must have been a creative one. The use of a very formulaic structure was extremely common in the 17th century, which gradually disappeared in the 18th century and onwards. The authors of the research also discovered that this greatly varies between classes: lower class and female writers are much more likely to write like this, while upper class and male writers seem to skip this entirely. It hadn’t occurred to me that this is largely due to (il)literacy. Letter writers having difficulty writing will stick to copying example letters from letter-writing guides. The authors make the distinction between more elite manuals, the very popular school books, and Jacobi’s Gemeyne zeyndt-brieven from 1645 that was reprinted well into the 19th century. Most of these books came with example letters and offered formulas for starting a letter, expressing regret, how to end it, how to note the date, and so forth. Kloek en gezond (strong and healthy), laat u weten dat (to let you know that), blijft hiermede den here bevolen (stay with this the Lord recommended) and so forth are all examples from Jacobi’s book 2 . If we look back at Angenieten Cornelis’ letter, you can easily discern some basic structure and delete all the junk to filter out what Angenieten actually wanted to tell her very respected and devoted husband. Here’s how I imagine that letter might be written nowadays: How much formulaic sentence and paragraph structures do we use nowadays? Barely any, and yet, the main form of the letter hasn’t changed since the 17th century: there’s still an opening (date, addressing to), a short formulaic exchange of pleasantries ( hope you are well, how’s things ), the bulk contents of the reason for sending the letter (here’s some stuff), and a closure ( cheerio or as M.I.A. would write, XXXO ). As the time went on, the strict use of formulaic structure disappeared. Thank God for not having to thank God a thousand times good night anymore. Most letter writers, including me, would start a letter with the date & location, but most older letters would switch this up and end with it. Also, the address we now place on the envelope would be the beginning of the letter, integrated as part of the text. This, together with the formulaic weirdness, would make it easy to spot if a piece of paper with scribblings on it was in fact, a letter, and not some customs clearance notice, tax slip, or worse, declaration of Independence. In sum, for the Dutch history nut into letter writing, this bottom-up research of the “ Sailing Letters ” by Rutten and van der Wal is a gold mine. I didn’t even touch the importance of these letters to the etymological history of written versus spoken words in Dutch. The digital version is freely available. Don’t let the dry text discourage you; just scroll through it to find a cool photo and read a few bits here and there. Time to buy a good brown ink. Looft God Booven Al! Did you know that the address field didn’t need a number? “To cobbler Jeff, the one living near the town square” would suffice. Or “To my husband Jeff, at ship The Jolly Jumper at sea left via Amsterdam commandeered by captain DoGood”.  ↩︎ Later authors attempted to modernise Jacobi’s increasingly outdated manual, but as Rutten and van der Wal note, the “differences outweigh the similarities”: most typical formulaic sentences were copied from other letters, not from examples out of manuals.  ↩︎ Related topics: / letter writing / By Wouter Groeneveld on 21 August 2026.  Reply via email . God is praised in the “address field” 1 ? Why write worthy and very beloved husband to address and start the letter? Why repeat the full name of your husband and yourself? Surely your husband will know your name? Nothing more on this occasion than commend to the Lord? Did you know that the address field didn’t need a number? “To cobbler Jeff, the one living near the town square” would suffice. Or “To my husband Jeff, at ship The Jolly Jumper at sea left via Amsterdam commandeered by captain DoGood”.  ↩︎ Later authors attempted to modernise Jacobi’s increasingly outdated manual, but as Rutten and van der Wal note, the “differences outweigh the similarities”: most typical formulaic sentences were copied from other letters, not from examples out of manuals.  ↩︎

0 views
Stratechery Yesterday

2026.34: App Snore

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 Sharp Tech video is on the turnover at DeepMind. Apple Makes Compromises in the EU. Ben has covered the angst surrounding the App Store since the beginning of Stratechery and was focused on Apple’s policies long before it was cool. Now that the company’s finally been forced to compromise in various forums — including a settlement this week with the EU, as well adjustments to its ATT policies in Germany — I thought the most remarkable aspect of Ben’s coverage on Wednesday was how incidental and boring it all seems in the shadow of the possibilities and concerns that exist everywhere else in tech right now. We had a fun conversation about that dynamic at the top of this week’s episode of Sharp Tech before turning to AI cybersecurity, vibe coding epiphanies, and more insight on writing with and without AI. — Andrew Sharp Truth (Social) and Reconciliation. Sharp China returned from its annual August hiatus this week, and in an episode that’s outside the paywall , we talked about various sources of U.S.-China friction before Xi’s visit to D.C. in September. Before that, however, we began in Korea with more questions than answers as Foreign Minister Wang Yi descended on Seoul in the wake of President Trump’s abrupt Sunday evening decision to reduce joint military exercises between the US and ROK. As for that Trump decision, in this week’s Sharp Text article , I used the Korea news as an opportunity to marvel at the exhausting economy of takes and theories that accompanies every foreign policy decision (and meme) under the current administration. — AS August Fun with the Clippers and Lakers . During the quietest period of the NBA calendar, there’s actually been quite a bit of news out of L.A. On one hand, we have a terrific mess as Buss family members squabble and Mark Walter’s DOJ-flavored cashflow problems have led to a shocking sale nine months after he initially purchased the team. On the other, Steve Ballmer and the crosstown Clippers might be in the (relative) clear after a 12-month NBA investigation into alleged salary cap circumvention. We discussed all of it on this week’s Greatest of All Talk , including frustrations with Clippers media coverage, what the NBA wants for the Lakers, and a memorable Top 5 segment about our top vacations.  — AS Stripe Acquiring OpenRouter, Aggregating AI?, Flipping the Business Model — Stripe is reportedly acquiring OpenRouter, an implicit bet on a future market of models and the chance at Aggregation. Nvidia Backs OpenAI Data Center, Anthropic News, Google Buys Spirit Airlines Data — Nvidia makes another deal, this time with a frontier lab; Anthropic’s revenue continues to amaze; and maybe data finally is oil. Apple Settles With E.U., U.S. App Store Fees, ATT Rules in Germany — Apple’s App Store is finally facing the reality of lower fees, and the EU should be satisfied with its work; it’s ok it’s late. So What Was Trump Saying to South Korea on Sunday? — A snapshot of Truth Social foreign policy and the take economy it inspires. More on Watermarking Apple Settles With EU How TSMC Uses Old Fabs to Make New Chips China Built 700 Waste-to-Energy Plants in 6 Years Wang Yi Visits South Korea; Remembering Zhu Rongji; US-China Ahead of Xi’s Visit; How China Monitors Foreigners August Fun with the Lakers and Clippers, Top 5 Takeable Teams or Players, Top 5 Vacations The App Store in the Shadow of AI, Offensive and Defensive Cybersecurity, Q&A on Financial Planning, AI Writing, American Sports

0 views

On values, morals, and doing business

I caught wind of the news that MacStories is back posting on X, the “everything platform”, and that seems to have caused some backlash. I am not a reader of MacStories (because tools are tools and I don’t read about new computers the same way I don’t read about new washing machines) and I’m also not on X. So why do I even care about this news? Well, the short answer is that I don’t. But after the move (I guess because of the backlash?) Federico Viticci, MacStories’ Founder, posted what he called “ An Explanation ” conveniently, not on MacStories’ homepage and not even on the site at all. You should go read the whole thing if you’re curious, but there are a couple of things here and there that caught my attention. The first interesting thing is the attempt to separate Elon and his morals from X. We want to be absolutely clear about something: returning to X does not represent a change in our values, what MacStories or we stand for, or an endorsement of Elon Musk. We abhor Musk’s politics, his rhetoric, his careless disregard for others, and the direction he has taken X. But we also disagree that participating on X means we have aligned ourselves with any of Musk’s views or actions. We reject Musk’s worldview and will continue to treat people with the kindness and respect they deserve wherever they are on the Internet. I’m sorry, but this is not how things work. By being on the platform, by using it to reach the audience that’s on there, you are directly supporting the man. Because the platform only has value because people are on it, and you being there makes the situation worse, not better. The main reason why MacStories is back on X is, surprisingly, money. Boring, yeah I know. Quoting from the post again: It’s not just how we earn a living; it’s one of a small number of independent websites that still cover apps, Apple, and a growing list of topics, including videogame hardware and the automation and productivity side of AI. Readers shouldn’t have to think or care about the business side of MacStories, but we have to, which is why we returned to X. If that is the situation, be transparent. Show how you run the site, how much money the site is making or losing, and make your case. But simply saying “Sorry, running a site is hard so we’re doing a 180 without telling anyone, not even the people who work here” is a shitty move. Especially because the move is pretty obvious: the amount of AI-related content on MacStories has exploded, AI people are on X, and if you want to try to grab some of that money, you have to play that game. Like, I get it, but at least say it and own it. Don’t try to play the running-a-business-is-hard card. Have the guts to put up a post on your precious website where you explain what you’re doing and why you’re doing it. Tell people you want to chase more AI content, because you think you’re now more of a “builder” . You’re an Apple fanboy; have some courage. People with strong values and morals seem to become rarer and rarer these days, especially when money is involved, and it’s so sad to see. And this whole AI moment seems to be exacerbating that. Thank you for keeping RSS alive. You're awesome. Connect via email :: Sign my guestbook :: Support for 1$/month

0 views
Unsung Yesterday

Movie review: General Magic

★★☆☆☆ 2018, 92 minutes General Magic was a company started in 1990 by some of ex-Apple staffers, working on a pocket communication device and its operating system (Magic Cap, sporting a fascinating room user interface). The product launched in 1994, but swiftly failed in the market, similarly to and concurrently with its chief competitor, Apple Newton . Many alumni of the company – including Megan Smith, Kevin Lynch, Tony Fadell, and Pierre Omidyar – ended up having successful careers in tech after that, to a point that General Magic is referred to as “ Fairchild Semiconductor of the 1990s .” = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/movie-review-general-magic/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/movie-review-general-magic/1.1600w.avif" type="image/avif"> The eponymous documentary , released in 2018, was disappointing to me. Sure, it is well-edited, and particularly shines owing to a lot of archival footage shot during General Magic’s happy years. Unfortunately, we get to see none of the sort of details I was hoping to see: no pre-release interface or hardware, no discussion of product nuances, no solid reflection on the company, the culture, or the zeitgeist. The movie drops so many fascinating questions and avenues, but doesn’t really follow up on them: Unfortunately, I kept thinking of the movie as “generic magic” – a sort of interchangeable valorization of Silicon Valley’s “failure is secretly success in the fullness of time,” defaulting to romantic or rousing music, that must have felt obsolete even in 2018. It felt like the documentary could very well talk about one of the many other companies and efforts, which is frustrating, because there was something special and unique about General Magic. I also kept remembering The Soul of the New Machine , Andy Hertzfeld’s own Folklore.org , and even Halt and Catch Fire , all of which more adeptly interspersed personal and emotional drama with specific details you could learn from and take home with you. I think General Magic deserved more. (I do want to recognize that perhaps this wasn’t a movie for me. The documentary is free on YouTube if you want to check it out – it’s consistent throughout, so if you like the early minutes you might like the whole thing.) = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/movie-review-general-magic/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/movie-review-general-magic/2.1600w.avif" type="image/avif"> (To play with Magic Cap, go to Infinite Mac , click on Macintosh Garden tab at the bottom, search for “magic cap”, click on magic_cap_simulator.sit, go back to the emulator, double click on the Outside World icon, double click on Downloads, double click on the .sit file, wait for it to unpack, close the Downloads window, reopen it, double click on the Magic Cap Simulator icon.) #apple #history #movie review #review At some point, Andy Hertzfeld reflects on setting a bad example by focusing on small playful details instead of rallying the team to ship stuff. Where did this realization come from and did that change him as a person going forward? In hindsight, did the company benefit or suffer from the culture of freewheeling “superstars” who are also perfectionists? In a strange, brief vignette, a few people talk about not wanting to have any managers – but that is not picked up again or resolved in any way. How did the company manage to hire all of this past and future talent? Are there any repeatable lessons in here? During the launch, there is a brief slide with “whole person thinking,” which felt unique for a tech product reveal. Near the end of the movie, Kara Swisher talks about worrying how mobile devices can affect and perhaps even impair human-to-human communication. Those two threads are not connected. About the only lesson learned and spoken out loud comes from Tony Fadell, who says: “with the iPod, we iterated a lot faster.” Would this have mattered if the premise of the movie seems to be that General Magic was too early on the market anyway? There was a mention of a skeuomorphic room interface done pretty much overnight by Andy Hertzfeld. From the perspective of today, it is the device’s perhaps most distinctive characteristic, but it’s not covered more than that one mention. In another very rare specific example, there is a beat talking how iPhone’s (very controversial, early on) software keyboard owes its existence to General Magic’s team trying that first. How did whoever created it feel about it? An external observer suggests that General Magic missed the early ascendance of the web, but we don’t see anyone from the company reflecting on it.

0 views
matduggan.com Yesterday

In Purgatory Everyone Likes Crepes: My Time at a Greek All-Inclusive

I can’t remember the last time I was actually hot. It’s a thought that keeps looping through my head as I stand next to a children’s play structure in a Greek all-inclusive waterpark. The sun is beating down on an international community of mostly parents drinking watered-down cocktails out of plastic cups while their children scream and run in circles. Surrounding this little paddock of plastic is a lazy river, filled with mothers and fathers staring blankly into the middle distance as they slowly orbit the water toys. It’s all concrete and aggressively bright primary colors, suffused with the smell of gyros being cooked by a Filipino staff behind me. Living in Denmark, it’s rare for the sun to shine directly on you. Typically, everything outside looks like it has a blue filter placed over the lens—like how TV shows put a yellow filter over the camera to establish that you are now in Mexico. Sometimes in Copenhagen you might get hot, but then it will immediately start to hail on you, and you suddenly have a different, worse problem. Greece, by contrast, feels like the sun is noticeably closer to the earth. It feels personal, like a heat lamp pressed against your skull. My daughter has been playing peek-a-boo with a cute baby on a bench next to this water playset for long enough that I feel a moral obligation to go over and say hi to the mom. She’s a nice woman, watching four kids at a waterpark alone with a casual calm I actively envy. I’m a little stressed keeping eyes on just one, but she has four kids ranging from around ten to two, running around and disappearing beneath the waves, only to emerge just before I would panic. She has a small sunburn on the small of her back that I assume she either can’t reach or forgot—a small, raw triangle of red. We chat briefly. She asks where I live; I ask the same. I’m surprised when she answers Russia, mostly because I don’t get much exposure to Russians in Denmark. I clearly make a face without meaning to, because she quickly adds, "Their father is off fighting in the war." Ironically, I think she added this to head off me judging her as a single mother. Instead, revealing the father is a Russian soldier has made the part of my brain that regulates politeness completely short-circuit. What is the social etiquette for the wife and children of a military power you don’t support? I’ve never even considered this question, standing here in my swim trunks, my too-pale stomach exposed to a hostile world. I don’t want her children to be orphans, obviously. Neither she nor they did anything to start this conflict. But I’m worried that expressing vague positivity will end like my conversation with an Israeli in Copenhagen who took my neutral statement, "I hope the conflict ends soon," and responded with a wink and, "It will, with Trump at the helm." "I hope he comes home soon," I say, keeping my face perfectly neutral. She nods and resumes throwing a ball around with her children. She seems completely unaffected by thinking about her husband, which I think is actually the strange magic of the all-inclusive resort. It is a geopolitical anesthesia. The world is burning down, but here, the ice cream machine is still running. On most topics, I don’t consider myself a snob. I enjoy a Michelin-star restaurant, and I enjoy a nice slice of 7-Eleven pizza at 2 AM. I'll finish a thick, sad Classic of Literature and then immediately pick up Space Marines vs. The Metal Skeleton Wizard on the Moon . But on travel, I’ve always looked down on the all-inclusive crowd. Sitting one rung above a Carnival Cruise on the ladder of human decay, the all-inclusive always seemed like the most cynical way to say you had legally stepped foot in another country. My first real exposure to this was in Puerto Rico. I would leave my bespoke 20-room boutique hotel and scoff at the barbed-wire fence surrounding the American mega-resort down the road. "Why would you fly to the Caribbean to eat at a steakhouse?" I’d say, dripping with scorn to my wife, who would nod as we walked through dark neighborhoods on our way to eat dinner in someone’s actual living room that Google Maps called a restaurant. As I traveled the world, I saw these giant compounds everywhere. I swore I’d never become one of those placid, sunburned people wandering around a sculpted grass lawn, slightly buzzed at 11 AM. So imagine my surprise when I found myself finishing my second tequila sunrise before lunch, staring at a too-blue pool. The resort’s "activity crew" was out on Crepe Island—so named because it had a full crepe station on an island in the middle of the pool. "Really, it's a crepe peninsula," I say to nobody. Nobody cares. They are aggressively not paying attention to anyone else. This is not a community. A line of unlicensed, Disney-and-Nintendo-adjacent costumes are paraded out, with "Merio" closest to me. Kids kept trying to give Merio a high-five. I don't know if it was the suit or if the guy inside was just sick of his job, but he kept waiting too long to high-five the kids back, inevitably wacking them in the face or the back of the head as they moved on. Over and over, an excited child would run up, followed by a bizarre, lagging delay before the inflated hand would strike. "At some point, that's just hitting kids," I said to the ether. The woman next to me put her AirPods back in. My wife had booked this trip as a reward to our daughter. Having been a remarkably good sport as we dragged her to such famously child-friendly vacations like "A Sheer Cliff Overlooking Icebergs in Greenland" and "Endless Climbing Up and Down Stairs in Florence," we wanted to give her a chance to just be a kid. When we asked her what her favorite vacation was, she responded with zero hesitation. "Lalandia," she’d say, before resuming coloring in her coloring books with so much force you could see the head of the marker get pushed back inside the plastic casing. Since Lalandia is effectively a massive, indoor all-inclusive in Denmark, we figured the same concept in Greece would at least be a warm alternative. We boarded a chartered flight direct to Greece, my first time on a flight where everything was delivered in Danish. I felt like a spy hiding among the locals, fearful they'd discover the American among them. Safe from prying eyes, I was pleased to watch the Danes engage in behaviors they usually made fun of us for. Loud conversations were had, crunchy snacks were aggressively unwrapped, and general uncouth behavior typically shunned was suddenly fair game at 30,000 feet. Upon landing, the tour coordinator told my wife and me that we had to "run" to make our bus. My wife took off for the toilet; I grabbed the kid and the big suitcase and sprinted for the van. We then sat in the van waiting to take off for over an hour. What I hadn't realized in my heroic rush to the van was that I had left a small carry-on sitting in the middle of the airport. It was filled with snacks, coloring books, and also my wife’s wallet and passport. The first night at our all-inclusive was understandably tense. Variations on the word "idiot" were thrown around. The next day, we got the good news that the bag was safe and sound at the airport police station on the island of Kos. So while my family went off to the pool, I went to the lobby and called a cab. My driver arrived 30 minutes later and immediately asked, "Is it ok if you sit up front so we also take these beautiful people downtown?" The Scottish woman in the back blushed at this. I, lacking the social architecture to recognize warmth, simply thought: Wow, bold move saying that in front of her husband. I got into the passenger seat. This, as I realized later, totally broke down the driver-passenger social construct. After dropping the charming Scottish couple off in the downtown area, my driver started telling me literally everything about his life. For the next forty minutes, I learned how his brother had been a firefighter, then one day went on vacation to Vietnam, fell in love with a Vietnamese woman, and opened the only authentic Greek gyro restaurant in Hanoi. He had a booming, theatrical laugh and was poured into a skin-tight polo shirt. "Why are you going to pick up this suitcase your wife lost? DO WE EVEN NEED TO ASK?? HAHAHA! WOMEN!" Then he’d get deadly serious and remind me, "Children, they're the most important thing." I had spoken maybe six words at this point in the trip. I forced a laugh, silently calculating the statistical probability of being murdered and buried in a Greek olive grove. It would be a beautiful place to die, though I worried they’d use a photo of me from this trip—pale, squinting in a baseball cap—for the Netflix documentary thumbnail. Some true crime podcast would inevitably conclude I had it coming. At one point, he pulled the cab over to show me a flat patch of grass. "This is where I saved the island from a wildfire," he said proudly. I couldn't see any sign of fire; it just looked like a normal field with the grass crushed. I didn't say anything, as up to this point, the conversation had been delightfully one-sided. I had mostly sat sweating through my shirt, nodding. He told me how someone had thrown a cigarette out of their car, and it had started to smolder. He had stopped and used his legally required fire extinguisher to put it out. "It's good that I had this," he said, patting the dash. "This is why a robot can never replace taxi drivers." He then stared at me as if I were an assassin sent from Silicon Valley. "You betcha," I said, sweating. I wanted to assure him I wasn't there to replace him with an app. My amoral peers back home were already working on it, but I personally wouldn't kill his livelihood. Just people who looked and sounded exactly like me. I kept poking around silently instead, but then he caught me looking at the giant bulldozer sitting twenty meters away, its tracks leading directly to the field. I'm a genius like that. "Yeah, alright, also the bulldozer helped a bit to put the fire out. But mostly, it was my fire extinguisher." The bulldozer was merely an accessory after the fact. He then changed the subject by telling me that Tom Hanks had sat in his taxi "right where you are sitting." "Did you know Tom Hanks loves Greece and we love him? He is such a friend of Greece that we gave him a passport." Is Tom Hanks Greek? I thought, staring out the window. Why are there so many interior decoration stores? Is everyone on this island redoing their bathroom? "Tom is so nice, we love him." My brain returned absolutely no information about Tom Hanks, which frankly is typical of my mind. He clearly wanted me to respond with a Tom Hanks factoid, but all I could think to say was, "Yeah, his son was really good in Fargo ." "HIS SON? Who is talking about his son?" He took the conversation back over, explaining how Tom Hanks’s wife had sat in the back of the cab while Tom sat in the front. Weird choice, Tom, I thought, looking for a sign we were wrapping this trip up. When we arrived at the small airport, he parked randomly outside the main building, basically just the corner of the road that led from the airport back to town. "Wait, are you coming in with me?" I asked, confused. He nodded, saying it would "take way too long" if I went in by myself. Suddenly we were concerned about efficiency. He marched us in, knowing everyone who worked there. I found myself in a small police office that definitely didn't understand the separation of church and state. There was a massive crucifix on the wall, and each police officer's desk was covered with a Jesus mousepad and a large picture of the Virgin Mary. My cab driver and the police officer negotiated the release of the suitcase in front of me without bothering to involve me. At some point, I was told I could take the suitcase and get out of here. Nobody had asked me any questions except to quiz me about the contents of the bag. On the way back, we stopped for tea because, truly, what is a taxi meter at this point? We'd been in the car together for like two hours. He told me how his mother-in-law had almost died from a heart attack. "It's good that she could get to Athens in time," he said. He then told me how during the off-season he harvests olives from his family farm and has them pressed down the street. "It's heaven working the fields with your family." I imagined my siblings and I being asked to harvest olives in the beating sun and immediately envisioned four body bags in the shade of an olive tree. I nodded, staring out the window at a fire extinguisher store across the street, where what looked like a 12-year-old boy rolled a cigarette seemingly one-handed and lit it while sitting on top of a barrel. The long grass around the fire extinguisher store seemed primed for a fire. What happens if a wildfire hits a fire extinguisher store? I pondered, while my driver went on about the beauty of the Mediterranean or something I wasn't paying attention. Then we packed it up and went back to the hotel. "Thanks for a nice morning, Mark," he said fondly to me as I got out. My name is Mat. But I guess if you've saved the island from a wildfire, you can call me whatever you want. I got back just after Mini Disco. This was a one-hour dancing marathon for the kids in the semi-enclosed theater. With two fully manned drink stations on either side of the stage, it was an opportunity for children to dance while their parents drank like an asteroid was imminent. The songs stayed the same every night, but on this first night, we were going to learn a valuable lesson: Always buy the t-shirt. Apparently, while I was learning the ins and outs of the Greek cab business, a nice woman had asked my wife and daughter if they wanted to buy a t-shirt for the Mini Disco. My wife, smelling a tourist scam, had hard-declined. What she didn't realize was that the climax of the Mini Disco was a formal t-shirt presentation ceremony. Each child's name was called, they were presented with a t-shirt, and then they were allowed to hug Leo the Lion. My daughter didn't understand that she didn't have a t-shirt. So, when the name "Eleanor"—which is not her name—was called, my daughter hopped up and snagged the shirt. This meant my wife had to rush onto the stage, rip the t-shirt out of our daughter's hands, and hand it to the sheepish little girl whose shirt it actually was, all while holding a cocktail. It was a masterclass in parenting under the influence. The next day, we were on the hunt to put in an order for the t-shirt, having made the most serious promises parents can make to a child. After we chased down the red-haired French woman running the kids' merch table, we went to the main pool. She didn't seem surprised to see us come crawling back. I got the sense the first day she was doing the sales pitch, then after that she just waited for us to come to her. There is a weird etiquette to pools and British people. They will rush out the second you are legally allowed to put a towel down on a chair, meaning from 8 AM to 1 PM, there isn't a single open seat. The British treat pool chairs the way trench soldiers treated no-man's-land: as hotly contested territory worth dying over. But if you are lazy like my family is, you just wait. They start to leave the pool around 1 PM, and you can get a great seat with zero work. The next day, you repeat the entire cycle. That evening, kiddo got her shirt. It was a proud moment; she clutched her blaze-pink t-shirt to her chest and teared up with pride. Soon, the days started to blend together. At some point, we all got an emergency text message telling us about wildfires on a neighboring island. I assumed the resort staff would need to calm down the crowds, as you could pretty clearly see the smoke from the fire. The sky was turning a dark, orange-brown in the distance, and the air smelled like burning rubber. Nobody cared at all. A thousand people looked at a Greek text message they couldn't read, put their phones down, and picked up their beach reads. The apocalypse was met with a shrug. As an allegory for global warming, there is something particularly bleak about people dancing in a pool to 90s boy band hits as a thick plume of wildfire smoke shoots up into the sky. Thankfully, here nobody pretends to care about anything, so I was able to slip back into a soothing apathy. In a world that was constantly asking me to pay attention to some fresh horror, this was a place that asked nothing of you. Toward the end of the trip, we decided to head down to the small town and were dropped off at Dolphin Square. We started walking around, looking at Google Maps to see what we should look at. There was a Roman House, which is basically an empty lot full of pieces of old Roman architecture and a sign saying I needed to pay 10 euros a person. Since nobody was there to collect this 10 euros, the sign felt more aspirational than practical. Someone should pay this Greek island 10 euros, but not today, I guess. But I looked at the old rocks. My daughter was unimpressed. She looked at the ruins, looked at me, and asked if she could get ice cream. "Denmark has a lot of old stuff," she said, which, in her defense, is true. We walked around a bit more, buying little tourist trinkets. I'll never understand who buys the t-shirts that fill the small streets of these towns. Who is the demographic for a shirt that says "I heart my boyfriend"? And more importantly, where is he? Does he buy the t-shirt for you before you go on a solo trip without him? But we went to a small restaurant and had a proper meal for the first time in days. Despite the heroic efforts of the staff at the resort, it was actually hard to eat there meal after meal. The culinary philosophy seemed to be "cook the will to live out of it." Everything was either fried and dried out beyond belief, a hard puff pastry, or so bland you couldn't really tell what was going on. The lamb sorta tasted like the chicken, which tasted a lot like the pork, which tasted like a cry for help. At one point, we went to an Asian-themed restaurant on the resort, and I was served "duck with Chinese pancakes." The duck was well-cooked, but the pancake was an Old El Paso flour tortilla. I couldn't help but feel like the duck died for no reason. At one of these meals, where my daughter pounded another plate of french fries and pizza, a British woman at the table next to us told me how her entire family looked forward to this trip. She started to tear up as she explained that she and her husband had worked extra hours this year to make it so their kids could come with them. "It just makes me burst with pride to think about," she said. As she spoke, one of her kids sat beside her, wearing noise-cancelling headphones, staring at an iPad, and methodically eating an entire pepperoni pizza without making eye contact with another human soul. By the end of our week, I was eating meals of plain bread with watermelon and coffee. My daughter was consuming what looked like a kilo of Nutella, and my wife and I settled down for another cycle. We only ended up going to the actual beach, which was beautiful and maybe 200 meters from our hotel room, once. The ocean was beautiful, with rolling hills in the background, perfect warm water that was the saltiest water I've ever been in. It was like swimming in a giant, warm tear. Everyone but me hated it because it wasn't as nice as the pools. "Ugh, there are ROCKS!" my daughter shouted, upset at the audacity of the ocean for existing. Honestly, the rocks hurt a fucking ton, but I was too self-righteous to admit it. "Let's enjoy nature, everybody!" I yelled, bleeding from the feet. I thought by the end of my time with these people that I would come to think less of them. I expected to leave despising their complacency. Instead, I found myself weirdly protective of these folks. They are just trying to make some childhood memories with their kids, trying to manufacture something, anything that looks like a normal childhood in a world burning down. I won't lie, the all-inclusive life isn't the life for me. It is a place out of time, where the enjoyment of it requires a total suspension of your relationship to the outside world. But I do now understand the appeal of not being challenged. In a time when everything is being questioned and every tradition and norm is falling apart, this is a callback to frankly an easier time to be alive. And we ended up getting the t-shirt, which, when you break it down, is really the most important part.

0 views
matklad Yesterday

Rust Glancer

Rust Glancer , a functional LSP server for Rust which uses two orders of magnitude less RAM, is incredibly cool. Go check it out! This post started as a comment on lobste.rs, but I figured it out that it’s better to publish it somewhat more prominently. Don’t expect polished writing though! Some thoughts: rust-analyzer uses rowan for syntax tree representation Yeah, rowan is garbage :P I was really thinking about And Rowan is pretty good for that. But that’s 1% use case. The 99% use case is all the code in your 6666 dependencies which you won’t ever look at, but which needs to be at least shallowly analyzed. Even for incremental tool whose main goal is refactoring, the primary AST structure should be just a list of arrays. There might be a real post about that at some point, see https://youtu.be/G93oYL1ry70 as a teaser. Rust workspaces genuinely have a lot of information that must be indexed: thousands of functions, structures, traits, relationships between these, function bodies and statements in them, etc. Each of these needs to be analyzed and remembered, and you can’t really cheat if you want to have things like “find all references to this structure”. If I understand correctly, Rust Glancer wants to process each function body. I think that part can perhaps be made lazy (but not incremental!) with little overhead? Index all items, but, for functions, do only the currently opened file? This might combine some of the better parts of both worlds. Would be interesting to compare memory usage with Rust Rover. Net of the IDE GUI itself, I would expect RR to be more compact. Some features are unlikely to be supported though, such as build scripts / proc macros support via proc macro invocation I might be rationalizing/misremembering things, but IIRC it’s exactly around adding proc macros that the thing began to feel unreasonably bulky. Expanding proc macros is slow as we are running real code, we can’t really do normal IDE cheats. And proc macros generate a lot of code. At one point I measured, it was like 30% of rust-analyzer binary size was attributed to JSON parsing code. If no one sees the code, it can’t harm anybody, right? One potential approach here is to pull the Sorbet trick, where you don’t run meta programming at all, and instead have a plugin interface to “explain” the effects of what that would have done. Instead of running serde, we just add a shim that injects with an empty body. I’m not sure why, but in rust-analyzer I’ve observed that when agents edit the code, inlay hints can get out of place Rust analyzer’s core data model is very pedantic about always observing consistent snapshots of the code, and does its best to ensure that the language client and server have a shared, strictly serializable view of the world. It’s a shame that LSP doesn’t allow that to be correct , only heuristically right , unlike the older Dart Analyzer protocol, which has sound data synchronization. However our implementation of file watching is sketchy! First, there are two backends: we can ask the editor to do watching for us, or we can use server side watching. Try changing this option and see if it helps? But then, yeah, my recollection is that our native watcher’s API was fundamentally racy, and I didn’t do the messy platform-specific work of making it correct. But the main thing I want to write, and why I moved from the cozy lobste.rs text area to the luxurious comforts of an Emacs buffer, is that right now rust-analyzer is a bit like that half-drawn horse meme, except that it’s only the head half of the horse. One Big Idea of IntelliJ is that it’s PSI API (essentially AST with resolved types) is really an interface, and there are multiple provides. And in a typical usage, there’s at least three backends in play: This is how I think such things should work. rust analyzer shouldn’t use salsa for all those 6666 dependencies you still haven’t looked at. It should just use rustc’s .rmeta files, switching to salsa, transparently, only when the user starts messing around their folder. The prerequisite for that is defining the abstract API for accessing Rust code. That was always the plan, and we did start on that at some point: https://hackmd.io/ytd82QNiT_Ku2XFr1EAtiQ rmeta-transparent – source code might not be available for some crates, the API should support pre-compiled rmeta files as inputs. But I don’t think that work was ever completed. This still seems to me to be the lowest-hanging watermelon here — split the world into arcy-pointy incremental tip of the iceberg, and mostly read-only, on disk, compact, dark, moist breeding ground for supply chain attacks. Such glance analyzer architecture would be great, imo! incremental parsing, incremental, DOM-mutation style refactorings, For the files opened in the editor, actively modified by the user, the PSI is backed by the concrete syntax trees. For the rest of the project files, the PSI is backed by the so called Stub Tree, a compact on disk representation storing only the “externally visible” parts of the file (so, without function bodies). If the user navigates to a new file, its PSI transparently switches from stubs to syntax tree. For dependencies, the PSI is often backed by the compiled .class files, produced by javac. If you navigate there, the IDE just decompiles stuff four you! Super cool!

0 views
Justin Duke Yesterday

The Man Who Knew Too Much

The Man Who Knew Too Much is a film of peaks and valleys. There is little argument that it is a good film; whether you place it amongst the highest of Hitchcock's work depends on just how much you value the stratospheric heights it reaches, and whether they overcompensate for the lulls. The film is never weak, but it is weak for Hitchcock in parts. Watching it for the first time, and knowing that it is a Hitchcock film, you feel as though you don't quite need all the foreshadowing and lampshading. As it progresses, you can't help but feel a sense of déjà vu with his other work — remarkable for this film as compared to the parts of his filmography not considered his absolute best. As a remake of his own 1934 work, and something relatively mid-career for him, it is very much him in his bag, doing what he does and what he is well known for. Compare this with, say, Family Plot , where your mileage largely depends on how willing you are to go along with him doing something much shaggier than usual. Put another way: this is the first Hitchcock film where I found myself not once, but twice , checking how much time was left in the movie and being surprised that there was so much still to go. But those dizzying heights. There is, crucially, the ability Hitchcock has to wring noteworthy performances from the Jimmy Stewarts of the world — to see something new and interesting in a face you have already seen so many times. I say this without consulting any of my prior notes, but my gut reaction was that this was my favorite Jimmy Stewart performance I have ever seen. He plays a man who fits perfectly the definition of fumbling . Hitchcock uses his frame for great gags, especially in the first act. But there are two scenes in particular where you see Jimmy Stewart as something an actor of his caliber is almost never shown as: a completely broken man. First, the close-up of him holding the corpse of a dying man, trying to process on many levels the mistakes and errors he has made over the past few days. And then a scene that is grotesque in many ways, but not unrealistic, when he coerces Doris Day — his wife, who must be said is consistently much smarter than him throughout the film — to take a fistful of tranquilizers before he delivers the news that their son has been kidnapped. For all the love I have for Cary Grant, he tends to have a certain problem in Hitchcock films of being too starkly charming in the scenes where terrible things have happened to him. Jimmy Stewart crumbles, and stays crumbled, until the very end. And then, of course, there is the VistaVision and the scene work. I am not smart or well versed enough to talk about the technology and how Hitchcock used it, but the aesthetics are perfect and gorgeous. He relies a lot on static shots, especially when we are first introduced to Marrakesh, that — like a discordant note held for slightly too long — usefully upset the viewer. But where I must end this review is, I imagine, with the set piece that most people think about when they think about this film: Albert Hall. Five minutes of opera and those aforementioned static shots, not a single line of dialogue, but stress building and building and building — for me, it is indelible, and so powerful that even after I forget the silly international spy bits, I know I will remember it for years to come. I think this is correctly placed in the mid-tier of Hitchcock's canon. His best films are tauter and have more things to say, tauter and carry more opinions than this one does. But a middle-tier Hitchcock film is still a very good film. And if I got to watch something this good every evening for years to come, I would consider myself a very lucky filmgoer. 8 out of 10. One last thing: Doris Day was great. The script did not really give her much to display any sort of range, despite the character herself being very competent and capable and, again, much smarter than Jimmy Stewart's — but there's just not a lot for her to do. 1 Honestly, the same could be said of Jimmy Stewart's character, and to a certain extent that's why parts of the film drag as much as they do: you get the sense that our protagonists are, up until that Albert Hall scene, passive observers more than they are agents of the action. Not a sin in and of itself, but it exacerbates the drag in the middle of the film, because everyone is just going through the motions. But Day's performance in that tranquilizer scene is unimpeachable — and, as with Jimmy Stewart, not something you're used to seeing from an actress of her stature.

0 views
Sean Goedecke Yesterday

Readers can't identify watermarked AI text

In the last few weeks, I’ve been complaining that everyone is wrong about AI watermarking: it isn’t really anti-consumer and it doesn’t make the outputs any worse. The watermarking papers demonstrate 1 that this is true, but I thought it might be interesting to put it to a practical test. Given examples of watermarked and unwatermarked answers to the same prompt, could readers tell which is which? To find out, I vibed up 2 https://sgoedecke.github.io/watermark-quiz/ , a static site that quizzes readers. I used Qwen3-30B-A3B-Instruct-2507 on a rented H200 to generate thirty responses: three responses per question, one of which was secretly watermarked with SynthID-Text. The rented GPU cost around two dollars. To measure results, I just sent users to a different page for each score, and aggregated visitors-per-page in my analytics 3 . This would be easily spoofable if anyone cared enough to do so, but for a casual test I think it’s acceptable. The first round of traffic I got to the quiz (278 participants) had these slightly puzzling results: Pure random choice would lead to an average score of 3.33/10. However, the mean score here is 3.92. There is indeed a spike around 3/10, as expected, but there’s also a second weird spike at 6/10. Why is that? It turned out that the SynthID response was option A in six of the ten questions, so users who just selected the first answer for every question would get 6/10. Oops. I re-shuffled the questions and got these results: Now the mean is 3.4/10, much closer to the expected 3.333. There’s no spike around 6. We only had 73 people take the quiz after I shuffled the questions — most people saw it and took it immediately after I posted it to my LinkedIn and Hacker News — but given the previous results, I think that’s still enough to feel confident that people were just guessing randomly. So no, people can’t identify the presence of AI watermarks . Obviously this wasn’t exactly a scientific study, but it’s still pretty suggestive. If watermarks were really choosing random words that the model would never pick, you’d be able to sometimes tell from three side-by-side responses which one went down the weird watermarked road, right? I also hope that something like this can serve as a persuasive tool: if you’re worrying about what impact watermarking is going to have, and your intuition is unmoved by the mathematical explanations, having a read of the watermarked and unwatermarked responses might convince you that there’s really no difference in quality. The one-sentence explanation for why is that AI models already randomly select from a handful of top tokens, and watermarking just replaces that random choice with a bias that is predictable while still being equivalently “random”: as a simple example, instead of “pick randomly from the top three tokens”, you could do “count the letters in the previous ten tokens, take mod three, then pick that token”. Some notes from the vibing: GPT-5.6-Sol put extraneous text all over the page I had to get it to remove, it chose the now-very-recognizable styling that I had to rip out, and it built some kind of weird Javascript-driven static site instead of just the cross-linked pure HTML thing I would have built by hand. It took me about an hour (although I did maybe ten minutes of actual work). Umami, hosted on PikaPods. For my blog, I do also pay for Netlify analytics because I find JS-based analytics misses >50% of technical users, but for stuff like this Umami is fine. The one-sentence explanation for why is that AI models already randomly select from a handful of top tokens, and watermarking just replaces that random choice with a bias that is predictable while still being equivalently “random”: as a simple example, instead of “pick randomly from the top three tokens”, you could do “count the letters in the previous ten tokens, take mod three, then pick that token”. ↩ Some notes from the vibing: GPT-5.6-Sol put extraneous text all over the page I had to get it to remove, it chose the now-very-recognizable styling that I had to rip out, and it built some kind of weird Javascript-driven static site instead of just the cross-linked pure HTML thing I would have built by hand. It took me about an hour (although I did maybe ten minutes of actual work). ↩ Umami, hosted on PikaPods. For my blog, I do also pay for Netlify analytics because I find JS-based analytics misses >50% of technical users, but for stuff like this Umami is fine. ↩

0 views
alikhil 2 days ago

How to not burnout

As someone who has experienced burnout, and has talked to many people who have experienced it, I can tell you that it’s tough to recover from burnout. It may take a lot of time and money and can cost you your job or even your profession. However, it’s much better to prevent it by taking some precautions and following simple rules. It requires less effort, helps prevent burnout and costs less. You won’t find a secret recipe or a silver bullet here. I genuinely believe that burnout can be prevented by following a few simple rules, or better yet, by treating them as hygiene. Doing the same thing every day can become extremely boring. It’ll slowly kill your motivation and you start hating your job. Automate repetitive work . Reduce the maintenance burden. For example, if you find yourself handling the same type of ticket over and over, build self-service workflows, or at least write instructions so other engineers can handle it without bothering you or your team. After you spend enough time repeating the same action many times, you’ll likely end up being good at it. Your colleagues will notice that and you’ll be asked to do this action even more. Boredom is another risk of repetitive tasks. If you find yourself bored with the same work, problem, technology or anything else, find a new challenge: something new to discover and solve, a new problem, a new tool or skill to learn. Remote work, lack of verbal communication, and absence of feedback could lead to loss of sense of reality, causing you to start doubting our skills, competence, and impact. Ask your manager and your peers for honest feedback . Accept it. Your self-doubt will likely disappear and you’ll get some direction on how to improve your skills and grow. Being motivated and productive at work will lead to big results, doubtlessly. However, for most people, life is not limited only by work. Chronic overworking will damage other areas of your life. While your productivity could benefit in the short term, in the long term you’ll suffer from tiredness, lack of motivation, and bad sleep. So try not to overwork when you can . If you had to overwork because of a strict deadline or an urgent delivery, try to compensate it by taking days off soon afterward to recover. Don’t check your Slack/email after working hours . You need a real pause. Reading work-related messages will keep your brain focused on solving problems instead of resting and being present with your friends and family. You are still working, and, in fact, overworking. If you can, I’d recommend having a separate smartphone for work-related things. You may say: “But if I don’t check Slack/email, I might miss something important and urgent.” I believe this concern is overestimated. Most communication can wait until the next morning. For really urgent matters, on-call practices should be in place, and another tool should be used, like PagerDuty. Use your paid time off days . I’ve met people who don’t use their PTO days; they stack up until they vanish. Disconnect from your work, get new ideas, travel and catch up with other areas of your life. Visit friends and family. It’s a basic necessity. It’s not surprising that minimum vacation days are required by law in many countries. Get regular physical activity. I’m not saying you should master volleyball or run 10 km every day. It could be anything convenient for you, like swimming in the sea, doing yoga, walking 10,000 steps, hiking – whatever suits you best. It can help to relieve stress and clear your mind. It’s especially useful to do it just after you finish your working day, to switch contexts. Physical activity can be a smooth bridge from your work back to your life. Have a hobby. Find something you’ll enjoy doing. It’s better if your hobby has nothing to do with your job – ideally, it should be something totally different. For example, I spend all day sitting at home in front of my computer as a software engineer. So as a hobby I’d choose something I’ll do away from home and with other people. Like going to improv comedy classes, or playing padel, or playing board games. Imagine loosing your job or burning out and when work is the main part of your self-identity. The crisis will hit you hard. If you have no idea what could be your hobby, go and try new things. Ask your friends about their hobbies, ask whether you can join them. Look for activities online, on platforms like Meetup. Think of things you enjoyed doing in your childhood. It’s easy to fall into workaholism, start overworking, forget to recharge and neglect other aspects of your life. Keeping work and life balanced takes effort. Find what works for you. What do you do / don't do to not burn out at work? Tell the world!

0 views
Jim Nielsen 2 days ago

A Sloppy Interface Is a Security Liability 

In his talk “Why AI Is Breaking Software Security As We Know It” ( my notes here ), Feross Aboukhadijeh talks about the Axios npm incident and how the maintainer got phished by succumbing to (amongst other things) a faux Microsoft Teams interface: this is the kind of thing that AI makes easy to do, because it can vibe code that whole fake Microsoft Teams interface pretty trivially You’ve probably seen these: interfaces designed to look like some other product in order to provide a facade of authenticity and exploit someone. What struck me in listening to Feross was this idea of how the quality of your interfaces can be a protection mechanism against attackers. I don’t know if I’ve ever heard someone say that out loud — interface and interaction design as a security control — but I’m saying it. Now, of course, not everyone will consciously notice the level of polish that world-class professionals imbue in digital interfaces. But some will. Personally, I’ve always used the quality and care of digital experiences as a heuristic for judging authenticity — and competency to be honest, e.g. “If this UI is so bad, what else will surely be bad?” Granted, it was a much more dependable heuristic before AI came along. But even now, I can still suss out slop and carelessness which is a skill that continues to be a reliable, protective form of digital literacy (for me). That’s all to say: a sloppy, careless approach to interface design not only hurts your brand in terms of customer perception, but it can be an attack vector. The easier it is to sloppily reproduce what you sloppily ship, the easier it will be for your product or brand to be leveraged as a vehicle for exploiting your customers. If everything you make was produced from a single prompt, then everyone else is one prompt away from imitating you. The easier something is to make, the more likely it’ll be in the genre of “easy to exploit”. One way to protect yourself (it’s not the only one way, security is never a binary “you are / are not secure”) is to do that extra work to make your experiences go above and beyond what you can easily get out of an LLM. The protection here is having an interface and experience that is hard to replicate with the same level of fidelity that discerning users will notice — things like micro-interactions, loading behavior, UI copy and voice, handling of edge-cases, etc. That’s the stuff that’s hard (and expensive) to fake because it’s hard (and expensive) to notice you need to fake it. tl;dr — Fidelity to craft is not only valuable from a product standpoint, but it’s also valuable from security standpoint. If attackers are going after low-hanging fruit, your fruit will be harder to reach if it’s up high. Reply via: Email · Mastodon · Bluesky

0 views
Unsung 2 days ago

Zalgo: The good, the bad, and the very, very ugly

Have you ever seen this? The best way to predict the future is t̷o̶ ì̴͇n̵͓̆v̶̝̕ȇ̷̝͈̩͊̇̾̄̂̀̈̔̀͛͋͆̓͒͘͝ͅn̸̦̙̣̤͓̜̼͙̲͔̺͚̮̬͆̇̇͐̇̽̒̎t̵̮͎̃̒͒̋̂̏̒̀̿͌͗̄͑̀̀͒̈̚͠͝ ȋ̸̧̛̭̠͈̰̰̦̹̥̜̖̈̂̀̽̿̋̊́̇̍̓̆̉̄̄̊͊̒̎͋̂̒̍̽̄͝ͅt̶̨̢̺̱̻̭̣͉͕̥͚̯͍̣͕͔̬̥͔̘̼͌̉̀̄̊̆͛̽̍̐̔̐̀̾̋̆͒̏̏̋͋̽͗̌͋͗.̸̧̨̧̡̢̪͙̦͙̝̜̦̞̳̤͖̟͍̮͖̘̙̳͉̳̲̲͉̠͎̽̍̓̒̅̿͂͑̎͊̋͒̈́̅̈́̆̽̒͛͐͛̉̀̈́̈̉̏̏̋̒͘͝͝͝ In the lore of the web, this kind of a strange glitchy text is known as Zalgo : Zalgo is a meme where a popular picture/​comic is edited in a way that “corrupts” it, producing scary results. The term “Zalgo” refers to the being apparently responsible for the corruption, whose name is uttered by its victims in an eldritch manner. I’ll let you read up on that at the above link if you are curious, but what’s interesting for us here is that… Zalgo is text. You can grab the line above. You can copy and paste it. You can even try to edit it. But… what is that, and why is it possible to construct text this way? In Unicode, ä is a completely independent character from ą, and they are both completely unrelated to a – any type designer treats them as a variant of the same base letter, but there’s nothing preventing them from making them look very, very different. But now think of the Vietnamese language, which has six tones mapping to six accent characters , and many of them can be combined into pairs: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/1.1600w.avif" type="image/avif"> This gives us 104 accented letters, and 30 doubly accented letters, just for this one language. Sure, you can imagine adding all of them as independent characters, but at some point another idea appears on the table: What if we just allowed a system where you can add an accent to any letter? Instead of outputting ä as one letter, you could output a followed by ̈  , which then would be recombined by the rendering logic into ä. And to get two accents, output a and then ́   and   ͆  , to get á͆. Now, the zero-one-infinity rule says that once you open the door to two, you might as well allow three or even more. Add to it the fact that some accents go under the letter, and here you go: perfect conditions for the Zalgo meme that just creatively stacks up accents one after another – not for communication, but solely for aesthetics. Today, there are a whopping 122 combining diacritical marks used in all sorts of occasions, and Zalgo generators grab many of them. A fun thing to try in one of them is to let it do its thing, and then keep pressing Backspace: Now you might ask, why do separate characters exist for ä and ą then? Why isn’t every accent combining? Two things: history (some pre-combined accented characters existed for as long as movable type was around) and complexity (combining accents are harder to process, to display, to edit, and even to design). There were many debates around this – you can open the History box on the above Wikipedia page and pore over the old documents to learn. (As a matter of fact, today all Vietnamese letters exist as precombined characters, too.) A few bits that might be useful to know: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/3.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/zalgo-the-good-the-bad-and-the-very-very-ugly/4.1600w.avif" type="image/avif"> Eagle-eyed among you might have noticed that ä and á͆ look different above. As far as I understand, if the combination of a letter and accents isn’t supported by the current font, the entire combination falls back to a different font , rather than picking bits and pieces from different fonts. There are even more combining characters , and emoji use a similar system to add skin tone modifiers, gender, or turn a woman next to a fire truck into a female firefighter. Lastly, I found this warning on the very Fandom page that explained Zalgo amusing: Do not post Zalgo text in the discussion area or anywhere else on the wiki. Doing so will subject you to a ban. Every warning tells a story; it seemed like more people were perhaps infatuated with the glitchy text than expected. #encoding #typography Zalgo is a good reminder that while it’s hard to contain text , you can at least crop it – often you might see things like these, where in some places Zalgo is allowed to roam free, and in others the text is clipped so three or more accents fall outside of the clipped area. Eagle-eyed among you might have noticed that ä and á͆ look different above. As far as I understand, if the combination of a letter and accents isn’t supported by the current font, the entire combination falls back to a different font , rather than picking bits and pieces from different fonts. There are even more combining characters , and emoji use a similar system to add skin tone modifiers, gender, or turn a woman next to a fire truck into a female firefighter.

0 views
David Bushell 2 days ago

Ruminations on notifications

I’m on annual leave next week. Now would be the ideal time to drop premium rage-bait and walk away. “One browser tab is enough” was drafted but due to a tragic accident we are all spared. This sideways look at notifications should be more relatable. When I pay using NFC I’m annoyed twice. First by Apple Pay, then again when my banking app catches up. Can’t they decide between themselves? I don’t need two reminders about the groceries I bought a minute ago. Maybe I can disable notifications for either one, but then I might miss real fraud alerts. Notifications are a chore I could do without. Notifications are a core feature of needy programs . Every app wants to be the centre of attention. They can’t wait to tell you about their new features. Presumably in-app notifications are the new trend because OS level notifications are easily blocked. Vivaldi ruined my browsing experience for a long time. That annoying “toast” wasn’t dismissible. It crossed the line of death and looked suspicious. Eventually it was fixed by moving into the tab bar. I recently returned to Sublime Text to avoid modern apps that were too needy. In response to my post, developers were keen to laud their command line supremacy. I don’t disagree but the CLI isn’t immune to notification nonsense. Every time I open Neovim I get stopped. Guess what happens when I press enter? Nothing! How about telling me what the command is to update the damn plugin?! Dear devs, updates may be your life, they ain’t mine! The web platform demands that anything native apps can do, the web must copy. There are good arguments for this. The counterpoint is terrible implementation. Browser vendors have done a dismal job at designing the user experience around push notifications . “This website wants to send you notifications, allow?” Does this still pop up before a page has even loaded? I wouldn’t know. I blocked that years ago without thinking twice. My advice, look for this: — and block wholesale without exception. In all my years of building websites I’ve never had a single client request or even consider notifications. Not one project that scoped in such a requirement. Apple held out for declarative web push in Safari citing their usual privacy theatre ( lol ). Apple aren’t fans of silent push with no visible UI. I reckon their actual trepidation is their unreliable cloud syncing infrastructure. When I tested it was 50/50 on whether a notification ever arrived via Apple. Mozilla’s servers are rock solid. One rainy day I ran an experiment to send large data split across many hundred web push payloads. I was able to clock kilobytes per second. This is awful abuse of the API. Apple might be right about silent push… Proton Mail was one of the few mobile app that I allowed notifications. My inbox is usually rather chill, except when Proton spam me themselves . Alongside my public addresses I use [redacted]@ for important accounts. I configured a folder to send mobile notifications for this address only. It worked for years. Then one day the spam notifications began. Spam that had already been flagged and filtered into trash (sent to any address). I reported this bug to Proton Support in May and was told: If we have any relevant information to share with you, or if we have any questions, we will follow up on this support ticket. I never heard back. Notifications remain disabled. Today my phone is almost entirely notification free unless I get an SMS from family. Oh, and Apple pestering me about iOS 26 several times a week. My iPhone will remain on iOS 18, thanks. Apple sure love their dark arts and deceptive patterns. There is no option to stop this constant nagging. If other apps tried it I bet Apple would delist them. This ain’t about security, I get iOS 18 updates. UK Government got trigger happy with their alert system. As with all mobile alerts of this nature, we’re reminded that abuse victims are at risk . This one also led to fire departments across England and Wales having to remind people their neighbour’s barbecue is not an emergency. As Robb Knight noted: “there is nothing actionable in the alert” . Unless you count “Search gov.uk”, so I did. The more information provided was: Sent by the UK government at 7:01pm on Friday 14 August 2026 This alert was sent to England and Wales. Surrounding areas might also have received the alert. Emergency Alert - GOV.UK Thanks, Government. That could have been an email. Why don’t these alerts respect my volume setting? Scared me half to death! If they have to be all or nothing, reserve them for zombies or higher. And that’s the problem with notifications. There is rarely the granular control necessary to make them useful. Most senders cannot be trusted to used them responsibly. The temptation to abuse direct access to people is too much, especially for men with guns . If I ever allow notifications to begin with I disable them indefinitely the first time an app cries wolf. Every app cries wolf eventually. Life is so much better when I go seeking information at my own pace. Thanks for reading! Follow me on Mastodon and Bluesky . Subscribe to my Blog and Notes or Combined feeds.

0 views
Karboosx 2 days ago

What an AI-First Programming Language Would Look Like

Current programming languages are full of syntax that AI doesn't really need. If AI is the one writing the code, why bother with brackets and commas? I explore two ways we could redesign languages for machines: either super low-level assembler or very verbose natural language. Let's look at why we need to optimize this! ;)

0 views
Unsung 2 days ago

Got your back, pt. 7

Nice recent addition to Gmail – a little warning if you’re replying to a thread you were BCC’ed on. = 3x)" srcset="https://unsung.aresluna.org/_media/got-your-back-pt-7/1-framed.1600w.avif" type="image/avif"> Please note that I’m not necessarily endorsing the execution details, as I consider Gmail kind of a clunky operation overall. You can’t swat the message away with a swipe, the wrong quotation mark is used, and I’m perplexed about the location of this message – something tells me it was really cheap to do it this way rather than put it close to the recipient field, to help you understand the relation. But still, I appreciate something shining at least a bit of light at the complex relations between To, CC, and BCC. #google #got your back

1 views
Jeff Geerling 2 days ago

Getting the Steam Deck LCD working on a Raspberry Pi

The BOE TV070WXM-TV0 LCD used in the original Steam Deck can be had for around $30. It's a serviceable 7" touchscreen with 400 nits of brightness and a resolution of 1280x800 (for a sharp 216 ppi). The specs are a lot nicer than the Pi 7" Touch Display , which costs twice as much, with giant bezels and half the resolution! Until today, the Steam Deck LCD didn't work with a Raspberry Pi. But the folks at Scandent were trying to standardize on a mass-market touchscreen for one of their own devices, and built a Linux kernel driver for it which they intend to upstream.

0 views
マリウス 2 days ago

Flipper BUSY Bar

Yes, it is in fact real, I’m holding it in my hands, and after what feels like years of Flipper teasing everyone with this ominous device in various online posts, I can finally confirm that it is real. The BUSY Bar is a 250 gram desk device by Flipper Devices , the company behind the Flipper Zero and the still very much in-development Flipper One . It’s basically a little display that shows various things on a 72x16 RGB LED matrix, and as of writing this it’s main selling point is that can run a Pomodoro-style focus timer , and that it has a ful-blown HTTP API that’s available over USB, over the local network and over the internet, that let’s you control this thing. The BUSY Bar has a five-position selector on the top, that switches between the two focus modes ( BUSY and CUSTOM , which are functionally identical and only differ in their defaults), a OFF position that in reality is more of a sleep mode which turns both screens off, an apps position that currently only holds a clock, and a settings position for, well, the settings. A large mechanical button in the middle starts and pauses a session, a scroll wheel adjusts the timer and doubles as an OK button, and last but not least there’s a back button for when you have to navigate back. Speaking of back, the backside of the device has a 1.54 inch monochrome OLED that shows the timer, the battery percentage and the Wi-Fi, Bluetooth and USB indicators. This way the device remains usable to its own user as well, even when clipped to the top edge of a monitor using its built-in mount, pointing its primary matrix display away from its user. The device measures 168.6 x 55.2 x 40.8mm and weighs 250g/8.82oz. The body is made out of PC/ABS with a PC front and back panel, and the monitor mount padding is TPE. The bar fits monitors up to 21mm thick and I can confirm that it works on curved displays as well. However, if you have a particularly thin monitor (say, one of these portable displays) it won’t be able to sit on top of it. The full specifications, as published in Flipper’s own documentation , are as follows: The 72x16 matrix is driven by the ICND2153 , a 16-channel constant-current PWM sink driver with a 16-bit grayscale shift register, LED open detection and a pre-charge circuit for ghosting reduction, and the ICN2012 8-channel power switch. One thing that is a bit sad in 2026 is the 2.4 GHz limitation for Wi-Fi. In an office environment full of devices and microwaves the bar is on the most congested spectrum available. The USB side is also kept, let’s say lightweight , with its 12 Mbit/s maximum speed, which, however, is certainly enough for a virtual ethernet interface serving a web UI and an HTTP API. On the charging side the documentation asks for an 18 W or higher PD charger for the 2.5 hour figure, while the device itself only appears to use 5V⎓3A (15 W) and 9V⎓1.5A (13.5 W) as its PD modes. There is one discrepancy with regard to the display brightness, where the tech specs page lists no brightness figure at all, the product page currently says 400 nits, and the launch coverage from CNX Software and XDA both quote 800 nits. I don’t have the equipment to measure it, so I can’t really tell which it is, but I can assure you that even in a brightly lit space it’s plenty bright. Flipper published an official disassembly guide on iFixit , which is awesome. Its 21 steps describe a device that’s designed with repairability in mind. The back cover is held by 8 clips and comes off with a plastic card. Below it are 5 Phillips PH1 screws, one on the bottom and four on the back. The battery has a press-latch connector and needs to be disconnected before anything else. The display flex cables use spudger-release latches, the main PCB is held by 3 screws, the control PCB by 5 latches, the front display back cover by 6 latches and the button stabilizer by 3 screws. The monitor mount legs are friction fits. Nothing is glued and the battery is a standard 18650 cell on a 4-pin connector, which means a replacement is easily and cheaply available from most electronics shops. For a 2026 consumer device this is probably something that my fellow Right to Repair advocates will love. The firmware sources are on GitHub as . Most first-party code is GPL, the library is MIT, graphical assets are CC-BY 4.0 and fonts are OFL 1.1, all of which are declared in a REUSE manifest. The build system is FBT , the same SCons-based Flipper Build Tool used for the Flipper Zero , and the dependency list is a usual embedded stack with FreeRTOS underneath Flipper’s own abstraction, lwIP for TCP/IP, TinyUSB for the USB device side, Mongoose as the embedded HTTP and WebSocket server, mbedTLS for TLS and LVGL for the UI. The bar also includes JerryScript in , wired up through and a service. That is the same JavaScript engine the Flipper Zero uses for its scripting apps. With the engine already in the firmware the only thing that still seems missing is the documented way to load your own scripts onto the device. The BUSY Bar runs an HTTP server and speaks the same API over three transports, documented as OpenAPI 3.1 . Plugging the device into a computer over USB brings up a virtual ethernet interface with the device at a fixed , printed on the back of the unit. is the local web interface, is the API reference generated by the firmware currently on the device, and is the base URL for said API. No authentication is used over USB, but it can be used via Wi-Fi and it must be used when going through Flipper’s cloud. This request responds with the current power status. The battery current is in mA, and both battery and USB voltage are in mV, which means that you can graph the device’s own power consumption without any extra hardware. Note: Access over Wi-Fi is disabled by default and has to be turned on from the local web interface over USB first. Once enabled, you can pick a token for authentication, which would go into an header, if you decide to set one: Access over the internet goes through Flipper’s cloud with a bearer token generated at , scoped either to a single device or to the account: Flipper maintains for Python with both a synchronous and an client. It maps method names onto API paths directly, so becomes and becomes . That makes the OpenAPI document usable as the library’s reference documentation: The library also has a module that scales and re-encodes images and audio for the device, an mDNS discovery helper for , and a firmware compatibility check. On top of that there is an official TypeScript library for all the soydevs, and a community-maintained .NET client . And there is also a Zig library, but… more on that in just a moment . :-) The BUSY Bar presents itself to Matter as a single on/off endpoint, an emulated switch with a configurable startup state of , , or . Turning it on starts the BUSY timer and turning it off ends it, making the integration is a trigger. Reporting the state back to Matter requires switching on Settings ➔ Smart home , at which point focus sessions can power automations like dimming lights or locking a door when a timer is turned on. Pairing is done using a QR code on the back screen or in the web interface, and the device can be commissioned into multiple fabrics at once. The Home Assistant integration is done through the HTTP API using the generic REST facilities, which works in both directions, meaning the device as an automation trigger, and the device as an output for anything else in the house. The BUSY Bar comes with mobile apps for your smartphones. I have tested its iOS app and, well, it was okay, I guess. I’m not a huge smartphone app user to begin with, but I’ll give my two cents here. The app basically mirrors the current state of the bar and offers rudimentary control over it. When you start a timer and you have the app set up (via Flipper’s cloud) you’ll see the app pushing a permanent notification that displays the timer on your smartphone’s lock screen. It’s also possible to configure a Do not Disturb mode that prevents other apps from interrupting your focus session whenever a timer is currently running. To me these are gimmicks, but to others these features might be worth something. Having that said, the apps aren’t rated particularly highly and while I didn’t encounter any issues during the few days that I’ve tested the iOS version, the app did leave a somewhat cheap impression by the way it looks and functions. It felt like one of these apps that corporate boomers at large hardware manufacturers would come up with, falsely believing that they are in-line with what today’s generations might want. There are a few things that bother me, however none of them are actual dealbreakers. The Wi-Fi authentication is a single shared numeric key, constrained by the API schema to , sent in a plain header over unencrypted HTTP on the local network. At the four digit minimum that is a 10,000 value keyspace, and I have found no documentation of rate limiting. The access mode enum also includes an value alongside , which means that the API can be opened on the LAN with no key at all. Hence, it’s probably a good idea to use a ten digit key and keep the device off networks you don’t control. Then there’s all the coming soon . Installing user apps, the JS SDK, the Windows application, and the expanded app library, those are all future promises. I don’t doubt the Flipper team that they will eventually arrive, but I could imagine that for a non-technical user it is probably very frustrating to have bought a device that can barely do anything at all at the moment, especially on a Windows machine. The device that arrives today is a focus timer, a clock, and a status display. Lastly, the price. It launched at USD 179 for waiting list members, then USD 199 for the first 3,000 units, with USD 249 quoted as the eventual retail price. At 249 it is a very hard sell, especially in the current software state. If you’re buying this because you’re a technical user and you really want to fiddle with it, it might be worth the Pesos, but as I’ve demonstrated in the past you can build a similar device significantly cheaper yourself, especially if you’re already deep into the tinkering rabbit hole. Flipper built the device I would have expected them to build, which I mean as a sincere compliment. The hardware is over-engineered for a status light in the same way that Flipper hardware always seems to be, with a real mechanical switch, a real encoder, a replaceable 18650, an official teardown guide and no glue anywhere in it. Whether it is worth the money depends entirely on what you intend to do with it. As a device that tells your coworkers to go away, it is way too expensive and not at all effective, because people who interrupt you are not deterred by a sign that tells them not to. Let me put it this way: For roughly $50 below the BUSY Bar ’s retail price you could place one of several Smith and Wesson models on your desk and it would likely be a more effective way to deter co-workers from talking to you. However, as a small, well-built, fully scriptable RGB matrix with an 8 GB filesystem, a WebSocket, and an elaborate priority system, so that several programs can share one screen without overwriting each other, it is the most open and probably best thing in its class, and I expect the community will find uses for it that Flipper hasn’t thought of yet. PS: Turning off the BUSY bar is like quitting Vim, in the sense that it doesn’t offer an obvious way to do so. Yes, the switch on top has an “OFF” position. However, that simply turns off the displays, but it keeps the busy bar running and connected to WiFi. If you want to fully shut down the device so that it won’t consume any battery, you will have to put the switch into the “Settings” position, navigate to System , Power , and Shutdown , and confirm the poweroff with Yes . Only then the device actually turns off. As mentioned before, I have a little bonus that I’d like to share with this review, which is a Zig library that implements the BUSY Bar ’s current OpenAPI specification as closely as possible, and that brings a command line tool that lets you control the device over its HTTP API. The library supports all of Zig’s platform targets as it only uses Zig’s library, and it is fairly lightweight and easy to use. I’m using it with my BUSY Bar and it has been working great for me. The command line tool contains a few quality-of-life features like simple commands for starting and stopping the busy mode, which would otherwise require manually writing JSON payloads. Long story short, if you’re one of the people that have ordered the BUSY Bar and are maybe looking to integrate it into Zig tools, or even just into your desktop environment using your own scripts, I invite you to check out the repository . If you’d only want the CLI tool to play around with your BUSY Bar you can find builds for every supported platform over on the release page on GitHub .

0 views
Ginger Bill 2 days ago

Everyone Says Assembly Is Untyped—Everyone Is Wrong

TL;DR: I believe Odin;s inline assembly is currently the best out of any language.The most important aspects are of this article listed below. I am not aware of any other assembly (GCC/Clang/Rust/Go...) that would combine all of these aspects:Inline assembly is organized into ;templates;, similar to and callable as procedures. templates integrate with rest of the code, through bindings specifying clobbers, pinned, tied, and scratch registers.Assembly syntax is unified across ISAs and consistent with Odin syntax.Assembly is fully type checked...

0 views