Latest Posts (20 found)

Bonsai: Compiling Queries to Pruned Tree Traversals

Bonsai: Compiling Queries to Pruned Tree Traversals Alexander J Root, Christophe Gyurgyik, Purvi Goel, Kayvon Fatahalian, Jonathan Ragan-Kelley, Andrew Adams, and Fredrik Kjolstad PLDI'26 File this under: “so elegant, why wasn’t this discovered sooner?” This paper describes a generic language (Bonsai) and compiler for efficient tree traversals. The language is structured such that a simple compiler can quickly generate efficient code. The examples from the paper fall into two buckets: SQL-like queries and spatial data structures. Here is some example code from the paper which describes a SQL-like operation on a set of points: A is a structure with two elements ( , and ). The function returns the minimum associated with any point that has an x value within the range . And here is an example from the paper which describes a ray tracing function: The function finds all triangles which intersect a given ray and returns the one that is the closest to the origin of the ray. The key point of the paper is that both types of functions can be implemented as tree traversals. A key design point that makes Bonsai feasible is metadata stored in the trees which represent sets. Tree metadata is specified separately from queries. The following snippet from the paper contains a tree data structure represented as an algebraic data type: A set of points is represented as a tree. Leaf nodes hold points. Interior nodes have pointers to and children, and four pieces of metadata ( ). The keyword is used to describe the meaning of the metadata. The expression means that the value of all x fields in all points contained in the subtree lies within the range . The expression means that the minimum value of the field in any point in the subtree is . The Bonsai compiler takes a query and a description of the tree metadata as input and generates C++ code to perform the query via traversing the tree. There are three key properties of this process. The first is that the generated code for all filter and reduction operations are fused together. In other words, there are no intermediate trees (i.e., sets) produced during query execution. Secondly, tree metadata is used to accelerate both filtering and reduction operations. For filtering, the generated code checks tree metadata to determine if all data elements in a subtree will be accepted by the filter, or if all elements will be rejected by the filter. If all elements will be rejected, then there is no need to traverse the subtree. If all elements will be accepted, then there is no need for further evaluation of the filter expression for the subtree. In this case, traversal into the subtree can be skipped if the root of the subtree has metadata containing a pre-reduced value ( in the example above). Fig. 4 shows IR corresponding to two filtering examples. In both examples, there are two types of leaf nodes in the tree. nodes contain a single value whereas nodes contain an array of values. Fig. 4a shows the IR for a single filter expression . Here is the code, annotated with some comments to describe the semantics: Fig. 4b shows the IR for the logical and of two filter expressions: : Code generation tracks a symbolic interval associated with each expression. An interval is represented by two expressions: one that evaluates to the lower bound of the expression and one that evaluates to the upper bound. This interval analysis is used to produce the code that implements and . Interval analysis is fast to compile but can produce code that suffers from false positives. Symbolic interval analysis is general enough to handle spatial filters (e.g., those used in ray tracing). Fig. 7 compares Bonsai to a state-of-the-art library ( FCPW ) for geometric queries: Source: https://dl.acm.org/doi/10.1145/3808256 Fig. 8 compares Bonsai to relational databases for range joins. The range join logically computes the Cartesian product of two relations, and then removes elements from the result which are not near each other according to Manhattan distance . Source: https://dl.acm.org/doi/10.1145/3808256 Dangling Pointers A logical extension of this process would be to automatically determine what tree metadata would be most useful for a set of queries. Thanks for reading Dangling Pointers! Subscribe for free to receive new posts.

0 views

Fitness Challenge: Update Two

About two months ago, I discussed my fitness challenge where the goal was to get below 85.3kg, the oldest measurement I have on record on the scale’s app, starting from 89.6kg. We’re halfway through this challenge, and things got a bit out of hand because, as it’s often the case, I tend to go a bit extreme when I set this type of goal. I hopped on the scale this morning and logged an 81.1kg, which is the lowest weight I have on record since I bought the scale 10 years ago. I’m feeling incredibly well, at least physically, if we ignore the heatwave with its endless series of days at 39°C. The mental side of things, well, that’s a different story, but I can assure you it’s not related to the loss of weight. That’s helping a lot actually, but this is something I plan to write about once this challenge is over in a few months. Thank you for keeping RSS alive. You're awesome. Connect via email :: Sign my guestbook :: Support for 1$/month

0 views

Waiting to be found by only you

Who knows how reality will continue to develop? There’s no way to prepare. When you can’t be prepared, be prepared to find poetry in the chaos. Secret messages, serendipitous grace, lines of meaning in a whirlwind of uncertainty. “It's gonna change, baby doll It's gonna change, honey ball It's gonna change, sugar cane It's gonna change, sweetie legs.” This is a test but so is everything. Everyone is watching you and everyone will judge you and you have to make peace with it. Also, no one is watching you and no one cares and you have to make peace with that, too. You will always displease some people. In the end, you are watching and judging and ignoring and being displeased, too. It evens out. Give up on pursuing happiness as quickly as possible. Seek to live, instead. It's quite the experience, but it will include much, much more than happiness. Give yourself comfort in small things and challenge in big things. Or maybe the opposite. Pick 3 skills from the list below and master them as quickly as possible: how to defuse an argument how to make a Venn diagram how to not take everything personally how to be running up that hill how to stop trying how to keep trying how to properly use the words effect and affect how to make a dent in the universe how to roast a marshmallow perfectly the way you like it how to forgive yourself how to make a great sandwich how to ask questions how to make numbered lists how to write in cursive (A fading skill! Grab it now before it’s gone. Or don’t because literally no one cares.) how to find your people how to make a great lemon dessert how to ignore lists like this Alternately, memorize a poem instead. It will be more beautiful, and just as useful. Perhaps more useful. Who knows how reality will continue to develop? When you can’t be prepared, be prepared to find poetry in the chaos. Find your kind of poetry — whether it’s in words or music or the ocean or motion or a really great sandwich — and look for it everywhere. It will always be there, waiting to be found by only you. how to defuse an argument how to make a Venn diagram how to not take everything personally how to be running up that hill how to stop trying how to keep trying how to properly use the words effect and affect how to make a dent in the universe how to roast a marshmallow perfectly the way you like it how to forgive yourself how to make a great sandwich how to ask questions how to make numbered lists how to write in cursive (A fading skill! Grab it now before it’s gone. Or don’t because literally no one cares.) how to find your people how to make a great lemon dessert how to ignore lists like this

0 views

Relative velocity and closing speed

In Physics simulations or game engines it’s sometimes useful to determine the speed with which two objects are approaching each other. This post will discuss the concept of closing speed , which is the normal component of the relative velocity of two objects. Suppose we have objects A and B [1] with velocity vectors \vec{V_A} and \vec{V_B} . The relative velocity of B w.r.t. A is: Put differently, it’s the velocity of B in A’s frame of reference. This relative velocity is a vector, and we can split it into orthogonal components. Obviously, the nature of such a split depends on the basis we want to use. We could look at the vector’s x an y components (we’ll be using - two dimensional space, but everything here applies to 3D as well), but for this post we’re interested in something slightly different: We draw a line connecting the two objects. The component of \vec{V}_{B|A} in the direction of this line is called the normal component of relative velocity, while the component perpendicular to this direction is called the tangential component . How do we find the component of a vector in the direction of a specific line? By using a vector projection! . We’ll represent the line by a vector, and find the projection of \vec{V}_{B|A} onto this vector. The positions of A and B can also be seen as vectors: \vec{P}_A and \vec{P}_B . The line connecting them can then be expressed as the vector \vec{P}_B-\vec{P}_A : All we need from this position difference vector is its direction, not its magnitude, however [2] . So we’ll use the unit vector of \vec{P}_B-\vec{P}_A , denoted as: Finally, to find the projection of \vec{V}_{B|A} onto \widehat{P} , we compute [3] : Where the multiplication operator between the vectors is the dot product . Note that the result of the dot product is a scalar; therefore, the quantity S_c is called the closing speed - it expresses the rate at which the relative distance of the two objects is changing. If it’s positive, the objects are drifting farther apart; if it’s negative, the objects are getting closer together. Therefore the term "closing speed" may be slightly confusing; alternatively, this has been called a "signed separation speed", or "normal relative speed" [4] . The signs in these calculations can be tricky to get right, so we have to be very careful. Let’s see a few examples that will help us make these computations more concrete. To build up some intuition and get some practice with the equations, we’ll review the following examples: Example I : We’ll start by computing the relative position unit vector \widehat{P} : Then, the closing speed is: Based on our convention, the negative sign of S_c means that the objects are approaching each other. Due to the simple nature of the example, this result is easy to verify, as it can be immediately guessed just by looking at the diagram. Example II : Here \widehat{P} is the same as in the previous example. The closing speed is: Same magnitude, but different sign from before, because the objects are moving farther apart. Example III This example is to demonstrate that we get consistent results even if B is to the left of A. Here the relative position unit vector is: And the closing speed: Which is the same as in example I, as expected. The direction of \widehat{P} flipped, but so did the direction of the relative velocity vector, so the result has the same sign. Example IV : Finally, an example showing more arbitrary positions and velocities. This example is a good opportunity to demonstrate something important about S_c : it’s time-dependent, because positions change with time. Here, -6.6 is the closing speed at the exact moment when A’s and B’s positions and velocities are as stated in the example. In the next time step, the position of A will be \langle2,5\rangle and the position of B will be \langle2,3\rangle , while their velocities remain the same. The S_c then will be quite different. This is a good segue to the next topic - which is a more physical view of closing speed. The computation shown so far represents a static view of the world; perhaps the right word to use is instantaneous . Given the positions and velocities at a given moment, what is the closing speed between the objects at that exact moment ? But there’s no reason to not generalize this using a more standard physical interpretation of velocity. First, let’s state the position vectors of A and B as a function of time: \vec{P}_A(t) and \vec{P}_B(t) . The relative position vector between the objects is also a function of time: Now we’ll define the scalar distance as the magnitude of this vector: We’re interested in \frac{dr(t)}{dt} - the change in this distance over time. Let’s start by breaking R(t) down to its constituents: By the chain rule [5] : Switching back to the vector representation: since \vec{R}(t)=\langle x(t),y(t)\rangle , the numerator of the fraction above is then a dot product between \vec{R}(t) and \vec{R}'(t) , we can write this as: But \hat{R}(t) is precisely \hat{P} from the earlier section, as a function of time. Moreover: Because velocity is the time derivative of position. Therefore, we end up with the same equation, just as a function of time: This formulation is more precise because it makes it very obvious that all the quantities we’re dealing with are time dependent.

0 views

Going Backward

Go's standard library has a package with a function called . It lets you iterate over the elements of a slice in reverse order: If you're not deeply familiar with generics and iterators, the natural reaction to this signature (and to the others in the package) is: "couldn't this have been made simpler somehow?" To answer that, let's run a thought experiment. Let's picture ourselves as a distant ancestor, living in the pre-iterator era, who decided to implement from scratch. Our imaginary ancestor doesn't work at Google, so don't project their decisions onto the Go development team. They had their own reasons — and no Jira. A pleasant, sunny summer day, birds singing. You're at the keyboard as usual, and suddenly you decide to write a function for walking a slice in reverse order. Anything beats working on yet another Jira ticket. Usage example: The implementation is simple and works reliably. There's one drawback, though: creates a copy of the slice, which can be wasteful for large slices. Besides, the sun has hidden behind a cloud, and it looks like rain is coming. You decide to work a bit more. To avoid copying the slice, you decide to return a closure that knows the current position in the original slice and returns the next element on each call: Usage example: Now it allocates O(1) memory instead of O(n). That's better. Before moving on, you glance out of the window. Yep, sure enough, the rain has started, and the sky is even cloudier than before. Excellent working weather! Something about the calling code keeps bothering you. It came out rather imperative. You'd like to hand the loop mechanics over to and leave the caller with nothing but the application logic (whatever it is you do with the slice elements). You decide to complicate 's signature a little. Now it will return an iterator function that takes a callback as an argument and applies it to each element of the slice: The function returns a — that's so the callback can signal when it wants to stop the traversal early. Now you can turn the loop body in the calling code into a callback, and you don't need the loop anymore: Mmm, very functional. One small nuance: 's signature looks a bit heavy. You add a separate type for the return value: The function looks much better now: Praising yourself for inventing the iterator, you walk over to the window. It looks like the weather's gotten worse. The rain is coming down in buckets, and the sky is so overcast that it's grown as dark as evening. It's all great, but then it hits you: an ordinary over a slice returns both the index and the element's value. Your iterator returns only the value. You decide to fix this vexing oversight: Usage example: Since the result's signature has changed, it no longer fits the type. What can you do — you'll have to add a new type. After ten minutes of deliberation, you decide to call it : You get up to stretch your legs, and go to the window. The downpour is so heavy you can't make anything out. Lightning is flashing. Hail the size of your fist is falling — you've never seen anything like it in your life. Well, these things happen! Have you thought of everything? Seems so. But you're not going back to Jira tickets just yet. Refreshing your memory of the Go spec, you realize that besides ordinary slices there are "user-defined" ones — types whose underlying type is a slice: works perfectly well with — the compiler accepts a value of type since its underlying type is : But what about this? Here's where the difference between and shows up. When you assign the function itself, it's the signatures that get compared: versus . Signatures match only if the parameter types are identical. But and are different, even though one is based on the other. The signatures differ → you get an error. Scratching your head, you turn to the spec once again and find a special generic syntax: . It represents the set of all types whose underlying type is . Just what you need! Now you'll have to parameterize not only the element type ( ) but the slice type ( ) as well. is needed for the returned values, while lets the function accept not just , but any types based on it: Now the example: It works! You've ended up with something similar to from the package. You exhale wearily and walk over to the window. The downpour and hail have given way to a hurricane. Trees and billboards go flying past. Toads, for some reason, are falling from the sky. To take your mind off the strange events outside the window, you keep pondering. An ordinary is already great. But it would be even better if the traversal logic itself were configurable. On the other hand, if you end up with a lot of parameters, a strategy would suit better. And, by the way, it wouldn't hurt to add a factory that produces iterator factories according to given criteria... Before you can finish the thought, the ground outside the window tears open with a deafening roar. An enormous black hand, streaming molten lava and flickering flames, bursts out of the fissure, seizes you, and drags you straight down to hell. P.S. Despite the article's tongue-in-cheek tone, the "complicated" version in the standard library is justified ( just follows suite with other package functions). But if you're doing something similar in a project that solves a specific problem — it might make sense to stop at the simpler option.

0 views
Stratechery Yesterday

Meta Earnings, Meta’s Timing Problems, The Financial Tail

Meta's earnings were a bit disappointing; future promises about AI products were more disconcerting.

0 views
ava's blog Yesterday

show respect - name things correctly

I occasionally come across people who call themselves “almost vegan” “practically vegan” “99% vegan” and similar descriptions. The reasons for that are usually casual in nature: They still want to enjoy grandma’s great cake, they don’t wanna cause a ruckus at the company barbecue, and when it’s pizza night, they can’t say no to a good cheese. But other than that - plantbased. And they quickly want to convey that to someone. I still want to urge others to be precise with language. We have words for “almost vegan”. They’re “vegetarian”, or, depending how you mean it, “flexitarian”. When you say you are vegetarian, people will understand that you refuse to consume certain animal products, but still eat some. When you label yourself a flexitarian, it suggests to others that you made the decision to reduce the animal products you consume, but you still consume them. Meanwhile, “vegan” is more restrictive. It is supposed to tell the listener that the person avoids consuming animal products as far as is possible and practicable. People like to forget the latter part, but this is the exception needed for emergencies, medicine and similar pressing matters. And this also applies to non-food items, something I don’t see many vegetarians practicing. When you are saying you are “ basically vegan, but still eat xyz ”, you are making things complicated for others, and reduce the lifestyle choice to merely food intake. I’ve been vegan since 2019. Education about different ways to eat/live is still lacking, and I’ll still encounter people who have trouble keeping vegan and vegetarian apart. “ You eat no animal products? What about eggs? And fish? Wow, no fish! And what about milk? ” and I think, unfortunately, one puzzle piece of it is that what vegetarians do seems willfully inconsistent to most omnivorous people, and makes it hard for them to remember who eats what. They wonder: “ If meat is so unethical, why not milk and eggs too, coming from similar conditions? Why still choose to eat fish, when that is also an animal carcass, and technically meat? ” And then you come on top, saying you’re vegan but still eat this or that animal product, adding to the confusion. You’re then becoming the person people bring up to me like “ But so-and-so is vegan and still eats cheese! ”. Please don’t further add to confusion. Make it easy for people to understand your boundaries and lifestyle, make it easy for them to cook and bake for you if they want to do that. I’ve been wondering: What makes the vegan label so attractive to people who are not vegan? After all, vegans are not very popular. Some people will know none personally, yet have a passionate (hateful) opinion about them. Others invent weird strawmen of the hypocritical vegan who preaches to others and yet flies 200 days a year while gorging themselves on avocados and almonds. Allegedly, the vegan will harass anyone at the table, brings the mood down and makes everyone uncomfortable. They’re extremists and privileged, some say veganism is classist and racist. So what is there to gain? I hypothesize that deep down, surprisingly many people actually have no problem with veganism and think it is good, and that they’d also live that way if it was easier for them - maybe cheaper products, better recipes, better replacement products, better and bigger selection of vegan products everywhere, normalized in society, their caregivers agree to enable it, possible with their illness or allergies, and so on. So they do what they can (for example, becoming vegetarian), but reach their current limit. It hurts though, to be aware of an ideal you have and falling short of it. You know what you think is right, yet you feel hindered from acting like it. This dissonance is unbearable at times, especially when you see others living the life you want to live, or feel like you have to justify yourself in front of others whenever this topic comes up (vegans can tell you all about this awful stage before they finally made the jump!). It usually goes as follows: Person makes an impassioned speech about how eating animals is wrong, and to not seem like a total hypocrite, they follow it up with “I am basically vegan”. It’s supposed to convey: I am almost there, this is just an embarrassing temporary situation, I totally know what’s right, and these exceptions shouldn’t count much! They’re practically non-existent! But I don’t think this is serving you well. In the moment, it saves you some embarrassment and makes you feel better about falling short of your ideal, but further on, it just minimizes your actions and doesn’t hold you to the standards you want to fulfill. It protects you from facing the fact that, yes, no matter how strongly you have reduced anything, you are still by definition a vegetarian (or flexitarian), which means you eating cheese once a week falls under the same umbrella term as vegetarian Aunt Emma who still eats eggs and milk daily and fish on Fridays. It feels unfair, but that is how it is. I also understand that it feels better for some people to claim the harsher, more extreme, more difficult label (in anything, really) because there is some clout in it. You might want the image of being someone who is doing something that is uncommon and regarded as difficult, someone that is going against the grain to do something good; you want the valor, and maybe you wanna come off as morally superior. But you cannot get the valor without doing the work. Your friends still see you eating that kebab while drunk, no matter what you say otherwise. You’re losing credibility, and people might come to the conclusion that you don’t practice what you preach. Plus, you are not going to build rapport with vegans when you do this, no matter if you might do this to impress them. It comes down to respect for me. If you want to acknowledge that veganism is worth doing, but it is difficult and you cannot do it right now, then leave the label to those who can, and acknowledge where you fall short. This isn’t about punishing people who do what they can - even little counts - but about using language correctly, and making it easy for people to understand your habits and lifestyle. You would also not seriously say any of the following: (Though I have to say, saying them as a joke is funny.) So continue to be precise in this aspect as well. There is absolutely nothing wrong with saying “I’m vegetarian.” or “I avoid animal products except cheese.” or “I prefer to eat vegan options, but not all the time.” Published 03 Aug, 2026 “I don’t drink liquor, just beer and wine. I’m almost sober.” “I jog twice a week. I’m basically an athlete.” “I can order tapas in Spanish. I’m kinda bilingual.” “I have a few houseplants. I’m practically a botanist.”

0 views

AI is a Race Car, Not Autopilot

AI-assisted coding feels a bit like being handed the keys to a race car. In the right hands, it’s quick, precise and capable of covering a lot of ground in a very short amount of time. In the wrong hands, it’s still quick - and more likely to end badly. Speed is not the whole storyThe obvious comparison is speed. A race car is built to go fast. AI-assisted coding tools are also built to make software development faster.

0 views
iDiallo Yesterday

Invisible Problems

During the pandemic, we completed one of our largest projects at work. To celebrate, since we couldn't meet in person, we all ordered food on DoorDash and played an online escape room game together. We were on a Zoom call, helping each other out and having fun. The first challenge was to escape a jail cell. To escape, each of us had to find clues in our own cell to figure out how to open the doors. We each had to find an object that solved a piece of the puzzle, and once we put them all together, the door would open. As a first challenge, it was easy enough. Everyone found a brightly colored object in their room and described it to the team so we could piece it together. Everyone but one team member. "Come on, read it, man, we can win this." He froze. Someone jumped in to help: "Mine was the most obvious green object in the room. Just look for something bright. Maybe blue, or orange, something that seems out of place." He didn't respond. He just sat there, frozen on camera. We figured he was having internet connectivity issues. We waited a good five minutes before he finally found it, and we moved on to the next level. I didn't think much of that day. We finished the game, we had fun, it was great. He waited until our next one-on-one to explain what had actually happened. He panicked, and he was embarrassed. It turned out he was colorblind. We were yelling random color names at him, and he couldn't, for the life of him, see any of them. As far as I can tell, I'm not colorblind, and it never would have occurred to me that this was something to account for. Just last week, I learned about Vehicle Motion Cues on the iPhone, a feature that helps reduce motion sickness. I don't think I've ever experienced motion sickness myself, or at least never in a car. Watching a blind person navigate a website was eye-opening for me. I realized that many of my past design choices would have worked against their experience without my ever knowing it. The same goes for someone navigating a computer entirely by voice. I recently rediscovered Windows Speech Recognition, which I found pretty annoying for my own needs. But for someone who relies on it for all of their computer use, it's an essential tool. A coworker once mentioned, almost in passing, that she struggles to read certain fonts because of dyslexia. Tight letter spacing and low-contrast text make some of our internal tools nearly unreadable to her. I had picked those fonts because they looked good on a demo slide. It had never crossed my mind that a font choice could be the difference between someone reading a document easily and someone giving up on it entirely. In some of our zoom calls, a teammate would often ask if he could do audio only before the call. While it didn't bother me at all, the managers kept insisting on everyone turning on their cameras. But after he used the camera for a few minutes, his connection would start dropping. I just assumed he had slow Internet. But the reality was he was located in a rural area and he relied entirely on his phone's hotspot to connect to the internet. The zoom call was using up all his data in minutes. None of these problems were problems for me. That's exactly what made them invisible. Unless you are experiencing these issues, there's little reason to ever notice them. We tend to design our tools, our meetings, and our expectations around our own experience of the world, and then mistake that experience for the default. It takes a colorblind teammate freezing on a call, or a friend who can't ride in the passenger seat without getting sick, to remind us that "normal" was only ever normal for us. You can never anticipate every invisible problem in advance, that's impossible. But at the very least, we should remember that our own experience is rarely the default. We should be a bit more curious on how others experience the tools we build.

0 views

What the bliss taught us

At this exact moment curl’s summer of bliss 2026 ends. We (the maintainers of curl ) took the entire month of July off from vulnerability reporting and in this post I will try to explain how this went. (If you feel like skipping the wordy blab below, the single word answer is: fine ) This was possibly our best project decision in a long while. Already before this, we have been refusing to answer emails about vulnerabilities. Partly because we can’t keep track of them that way but even more so because it makes it much harder to properly disclose and publish the entire report sequence after the fact. On our Hackerone page we informed visitors that we were on pause and that they could come back in August. We had I believe one vulnerability report sent to my private email address in this period in spite of that messaging, but for all intents and purposes this worked out exactly as good as we hoped it would. I just ignored that email. That was easy. The effect was almost immediate. Just a few days into the bliss, my fellow curl maintainers all agreed with me that we felt a sense of relief, of vacation and that a load had been taken off our chests. We felt free, unchained , and now suddenly able to do what we wanted. We could now spend time reviewing some of the queued up pull-requests for features and changes we like. We could suddenly again work on code in areas we had been leaving behind lately as vulnerability reports sucked all the air out the room. We polished details on the website, we found document gaps to tighten. It felt like the good old days again. The fun days. We got reminded why we do Open Source and how fun it is. We took time off, saw some other corners of the world and enjoyed some time away from the keyboards. We truly healed and re-energized. Before we took off on the bliss, we were informed in clear terms that the CNA rules ( we are a CNA ) mandate that we must respond within 72 hours for some critical vulnerabilities so we can’t just ignore them. I told them sure we can, but in the worst case case our “root” could do some emergency assignments. I figured the risk was minimal and it turns out I was right, Nothing like that was needed and no CVE assignments were necessary during the bliss. I got a curious question or two from existing support customers on how the bliss would affect them, but that was easy: it did not affect them. Now, post-bliss, I think they all can confirm that it really did not. As I promised to keep up the contact with and support for paying customers even during the bliss, you could possibly imagine that this would have been an incentive for worried commercial curl users out there to sign up for support contracts . This did not happen – at all. By this I think we should conclude that (commercial) curl users were not worried either. Lots of fellow open source maintainers and most people in my surrounding have been super positive and downright supportive of our taking some time off . I can’t recall having receiving a single negative comment about the curl summer of bliss! I was moved to see that several other Open Source projects followed our example and also took some time off in order to recharge and relax. In addition to giving us a little vacation, it helps sending a signal and a reminder that Open Source is to a large extent done voluntarily and even maintainers need a break at times. Have we opened ourselves up for dangerous attacks and flaws now? Have the bad guys an edge on all curl users out there now because we lived in bliss for a month? We don’t know yet, but it would surprise me. During this slow-down, we slowly got more open issues and pull-requests lingering on GitHub than usual. No surprise there. Once we started to come back to life again, we have since managed to return them back to the normal amounts. Yes, there is an obvious risk that there are now a whole range of queued up reports that will hit us in a short period time as we open up for vulnerability reports again. Presumably the risk for duplicates among these reports should also be significantly higher than usual. I suppose I need to do an update post in a month or two and let you know what happened. We always treat vulnerability reports and project security with topmost priority and we will continue to do so. We will simply work with what we have and make sure our users and by extension, the world, are safe. Since I am a member of a few other (non-curl) security teams that did not have a summer of bliss, I have seen that the flood of vuln reports have not really slowed down so it might depend a lot on the details of each specific project. All individual curl maintainers of course handled this gift in their own ways. We did not all just disconnect to sit on a remote beach for the whole time. Some of us did that part of the time, but we mostly enjoyed the lower stress level and the absence of pressure. It was mentally relaxing. So, even if some of us kept up with emails, occasionally responded to issues or even submitted some pull requests of our own, it was still vacation. It was still blissful. Will we do another summer/winter of bliss? I think yes. It was simply great, with virtually no downsides for the people involved but instead lots of positiveness. Ideally a reduced workload going further will remove the need for another one, but it is not easy to tell what the future holds. After all, curl just does transfers. Fast. Reliably. Secure.

0 views
Unsung Yesterday

Asana’s fascinating Tab shortcuts

If you’re a professional web app, your key shortcut situation is not to be envied. Once the operating system grabs the ⌘ shortcuts it requires (⌘M to minimize, ⌘H to hide, ⌘Q to quit, etc.), the browser has its turn, claiming everything from ⌘R, T, N, L, W for tab operation, to ⌘F, P, O, and S for other things. And then, some input controls inside the browser also need to listen to ⌘Z and XCV, and maybe even A (select all), B (bold), and I (italic). At this point things feel barren, and some web apps start reaching instead for less common modifier keys (⇧, ⌥, ⌘⇧), and others go straight to no modifier zone, or override those of the above shortcuts that they can. Each approach, of course, has its own set of challenges . It’s perhaps not a surprise that someone got fed up, and that someone was people working on the project management tool Asana, which did something relatively unique: it promoted Tab to be a modifier key. The video shows me using Tab+K to like tasks, Tab+Return to open a sidebar, Tab+Q to add a quick task, and Tab+H to return home. Here’s the entire official shortcut list, with Tab shortcuts emphasized: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/asanas-fascinating-tab-shortcuts/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/asanas-fascinating-tab-shortcuts/2.1600w.avif" type="image/avif"> What’s fascinating about choosing Tab is that the key already has so much to do: On top of that, repurposing a key to be a modifier key – especially one that already has a job or two – will also have a long tail of strange consequences. And, Tab is only on one side, which could wreak havoc with the ergonomics of keyboard use. (You are, technically, always supposed to use the modifier key with the opposite hand to the hand you’re pressing the main key with.) I am not ready to hate it quite yet. Tab is not the worst key to use in this context, as it’s really the only available big key other than Caps Lock, which is impossible to mess with on the web. The other big keys – the spacebar, Return, and Backspace – would be radioactive for this purpose. The asymmetry issue? Anecdotally, I understand that both right-handed and left-handed people most often use the pointing device (mouse or trackpad) with their right hand, and consequently often prioritize left modifier keys anyway. Here is how Asana solves some other challenges: What’s interesting and I bet the main reason Asana approached it this way, is that Tab is a separate little island, far away from other modifier keys – and thus not just without any preexisting conflicts, but also impossible to confuse with other modifier keys. Asana could have kept all the shortcuts above but substituted Tab with Ctrl on a Mac and Alt on a PC, but those would then be packed among many other similar-feeling keys . (There is a price for this isolation, as Tab backfires the moment you have to combine it with other modifier keys. Asana doesn’t do it very often – I have only seen Tab+Shift+D, G, and F – but I wish they didn’t do it at all.) Overall, I’m surprised how positively I feel about it. If you use Asana a lot, I’d be curious how Tab-based shortcuts feel to you. If you work at Asana, I would love to know if you consider these a success. The only thing that seems to be missing is an option to go back to regular shortcuts if needed, for people who might want it for motor control reasons. (It is possible to achieve that with tools like Karabiner Elements, but that tool is really unpleasant to use.) Oh, also. Tab+B does this, because, well, “tabby.” Cute. #easter eggs #ergonomics #keyboard #web it moves focus to the next UI control, it indents a bullet point or even just text, it accepts an autosuggestion or a placeholder (and similar things ). When you press Tab to move focus around, the action can now only take place on key up, not key down, so tabbing (or, indentation of bullet points) feels slower . When you hold a regular modifier key and then change your mind and simply release it, no action occurs. But Tab already has a job as a regular key (tabbing or indentation, depending on context), so if you change your mind, something will still happen. This might be annoying. (You can press Tab+Esc or Tab+Space for a safe cancel, but that doesn’t seem very intuitive, especially in a moment of panic .) An action only on key up also means there can be no repeat when holding Tab. I am not sure how important this is, especially in the context of accessibility.

0 views
Justin Duke Yesterday

Near to the Wild Heart

Two friends, upon learning that I wanted to get into Clarice Lispector, advised me not to start with Near to the Wild Heart . Having now finished the book, I think I understand why. The two parallels that come to mind — less in terms of style and message than in terms of how one situates the prose — are Murakami and Woolf. Murakami is, to be clear, the much less stylistically successful of the two. But like Murakami, Lispector's work has been treated with a sense of otherness — not as a method of denigrating it, but to suggest that it sits outside its country's literary tradition. And while you can make a compelling argument that Murakami taps into a distinctly Japanese sense of alienation and ennui in the modern era — and, moreover, that much of his earlier writing is explicitly political — Lispector here is ethereal, barely attempting to give any hint or indication of where and how her protagonists live. Part of this otherness — the sense of the story being completely untethered to any semblance of setting — serves contemporary reading well, in this age of autofiction and, for lack of a better term, idealistic narcissism. There is hardly a hint of whiplash going from Ben Lerner to Lispector. Woolf I evoke for a handful of reasons. First: like Lispector, Virginia Woolf is often praised backhandedly, under the umbrella of feminist literature, or feminist modernism. But Woolf's goals — say, in To the Lighthouse — are directly oppositional to Lispector's. The Lighthouse is an argument toward the permeability of consciousness and shared existence, conveyed with empathy and perspective. Woolf uses the frame of modernism to talk about shared experience , and this pattern forms a lineage in which I can find much of my favorite writing. (See also A.S. Byatt's Possession .) Lispector, conversely — at least in this book — is a solipsist. Her self-insert protagonist is the raison d'être of the entire prose, the sun about which every other character orbits. Any character not named Joana is given time and energy only insofar as they shed light on Joana. And the philosophy of the book — beyond its explicit cribbing of Spinoza — is an argument, if not quite in favor of this, then against the status quo that spawns it. All that aside: this book makes me more intrigued to read the Lispector of her later years, while considerably less excited at the prospect of having found an author I can spend the next decade absorbing. Her biggest asset on display is the prose. Even through translation, her writing is beautiful and serrated, while never being Rococo. And considering her age upon writing this — and this is where the Woolf comparisons begin to feel unfair — one gets the sense of a young master in full control of what she wants to say and how she wants to say it, but who unfortunately does not yet have much at all to say. One last note: the final chapter, a series of monologues from Joana, is indeed placeable among the highest echelons of modernism — beautiful and cryptic and self-indulgent all at once.

0 views

Review: Job-Less Utopia

Marcus Hutter —oldheads will remember him from AIXI —recently published a book: Job-Less Utopia: Macroeconomics in the Age of AGI . I’m always curious what the people building AI think or want the future to look like, and I’m also always looking for non-doomer takes on the post-AGI future, so I decided to read it and review it. The first thing to say is that nearly every sentence is written by AI. To his credit, Hutter says so plainly: Claude also served as the most diligent editor I could have hoped for: While I have a reasonable grasp of economic concepts, I am neither a professional economist nor a native English speaker, so it was invaluable to have someone polish my clumsy English into professional language. No text was taken verbatim without my critical review, revision, and approval. Like many people who use AI to write, he uses this tiresome “I’m not a native English speaker 🥺” argument. But he published an English-language book in 2005—which I read!—and it was infinitely more readable than this. Now, I suspect Claude did more than just editing, because the book is full of unnecessary and convoluted figures, tables, abbreviations, taxonomies, including (and I swear to God this is verbatim from the book): Which is exactly the kind of make-work cognitive dreck that LLMs love to write to pass the time. As a result the book is unpleasant, confusing, verbose, repetitive slop. So, going forward, I’ll be treating Claude as the author. Sorry Marcus! Make something real next time. Now, Claude’s argument is simple: AGI and robotics, which are said to be inevitable, will take all our jobs, and we can tax the vastly increased economic output to create widespread prosperity. Most of the book is about the economic realizability of taxing AGI wealth and paying out UBI. The main problem with the book is the signal-to-noise ratio. Most of it is obvious. Other than “AGI and robotics will take ~all jobs”, which is of course uncertain, everything else is uncontroversial: yes, output in the jobless AGI world would increase rather than decrease; yes, the surplus can be taxed to provide UBI; yes, we still need money even in the jobless utopia to coordinate economic activity. There’s some stuff about self-replicating machines I already know: we’ve all read Drexler and Freitas here. You don’t need 260 pages to explain all this. The one part that is semi-novel is this idea of using Pigouvian taxes to disincentivize so-called “ bullshit jobs ”. God, I hate Graeber so much. There’s an interesting bit about intellectual property. Claude’s argument here is that AGI plus present-day IP law would lead to a massive concentration of wealth, while simultaneously “the traditional justification for IP (incentivizing human creativity through temporary monopoly) weakens markedly once AI systems generate the bulk of patentable inventions and copyrightable works at near-zero marginal cost”. The solutions: shorter patent terms, Harberger taxes , compulsory patent licensing. So, as part of the transition to the job-less utopia, the whole world will have to coordinate to essentially abolish IP. Which seems very hard. I doubt the Disney corporation will go gently into that good night. The most interesting questions around AGI are not economic, but rather questions of political economy. For example: if most humans become materially and economically useless, how do they maintain a political voice? That is: how do we preserve democracy when the state no longer needs its people? Claude admits this is a problem, e.g. on page 132: The “Age of Labor” conferred unprecedented political power on workers (Korinek and Stiglitz, 2021); they could strike, withhold their contribution, and thereby constrain employers and governments (Boix, 2019). Full automation extinguishes this lever entirely: if no human labor is needed, a strike is merely self-imposed privation. UBI restores livelihood but not agency over production. And page 141: The economics are tractable in principle (Chapter 3), but translating them into policy requires political will, social cohesion, and a credible answer to the search for meaning in a post-labor world. When redistribution fails, the consequences range from populism to regulatory capture and a transition-period underclass risk, yet democratic feedback loops nonetheless incentivize corrective action (Section 7.1 and Figure 7.1). A deeper structural question follows: if the state no longer depends on citizen labor for economic output, does the democratic social contract survive? Alright. What’s the solution? There’s a lot of verbiage, most of which is self-undermining. For example: Deterrence and the social contract. Although the ruling class’s reliance on citizen labor in time led to democracy, losing this reliance will not necessarily cause democracy to collapse. As long as the population can physically revolt against dismantling democracy, and threaten the comfortable lifestyle of those in power, the incumbents have an incentive to avoid a civil war. This is perhaps the only good (among many arguably bad) argument for the right of individuals to own firearms: civilian arms serve as a credible last-resort deterrent against state tyranny, the practical embodiment of the revolution threat that formal models identify as the historical driver of democratic concessions (Boix, 2019). However, this deterrent erodes rapidly once autonomous weapons and robotic enforcement become available, allowing a regime to suppress revolt without relying on potentially sympathetic human soldiers (see Table 7.2, row “Military dependence”). The deterrence argument is genuinely contested. In other words: “the people can revolt, wait, no, they can’t, because autonomous weapons—uhhh it’s contested”. Alright, so physical deterrence doesn’t work. What else? The preceding sections painted a sobering picture, but the historical record is not uniformly grim. Democracies have absorbed structural shocks of comparable magnitude before, and institutional innovations ranging from direct democracy to sortition offer structural resistance to oligarchic capture. It is obviously not true that “democracies have absorbed structural shocks of comparable magnitude before”. Nothing remotely like AGI or ASI has happened in human history, let alone the history of modern democracies. This is followed by a bunch of smoke-and-mirrors misdirection about various “democratic innovations” that could keep the state in check. But Claude is just shuffling the papers here, because, ultimately, why does it matter what words you write on a piece of parchment? The material reality is unchanged: the humans in this “job-less utopia” will be economically useless, physically disarmed, and under constant surveillance. Why would they have political power? There’s a bit about the resource curse , which I will quote because it highlights the low standard of reasoning in the book, and how LLMs are more than happy to construct sophistical, self-undermining arguments on command, with no concern for truth or sound argumentation: The theoretical mechanism behind the resource curse is clean: (i) government funded by resource rents no longer needs citizen taxes; (ii) no taxation erodes accountability (“no taxation, no representation”); (iii) citizens lose leverage and democratic institutions atrophy. But empirically, the mechanism is less airtight than it appears. The United States funded itself primarily through tariffs for its first 150 years without democratic collapse; many non-democracies tax heavily (the Soviet Union, China); and the mechanism assumes that fiscal dependence is citizens’ only source of leverage, whereas labor power, military service, and sheer numbers have historically mattered at least as much. You see what I mean? Tariffs are a terrible example, because tariff revenue is not decoupled from labour in a world where all economic activity is human activity. Then there’s the arguments about “labor power, military service, and sheer numbers”. Labour power? The whole point of the book is that: The advent of Artificial General Intelligence (AGI) and advanced robotics will eventually permanently decouple economic productivity from human labor. What labour power? Furthermore, how do “military service” and “sheer numbers” give people political power, in a world where states have autonomous weapons and AI-enabled mass surveillance? The key political economy questions here are: And neither is answered satisfactorily. Besides, there are questions of social organization that the book either grazes or doesn’t touch at all: Finally, I found this sentence ironic: AI sharply lowers the cost of [content pollution], threatening to flood the information ecosystem with synthetic low-value content at a scale that overwhelms human curation. “a Wittgensteinian property-cluster definition of ‘job’ (11 properties × 8 edge cases)” “a formal job–leisure spectrum showing how UBI degrades job properties” “a four-camp taxonomy of positions on automation” “A technology-level taxonomy (five cognitive AI levels plus two robotic levels) is mapped onto a job-replacement matrix showing what threshold automates 10%, 50%, 90%, and 99% of each occupation (Table 3.3).” How will the citizens, who are economically useless, preserve any political voice at all? How will people in countries other than the US benefit from AGI? How do intellectually talented people distinguish themselves when AGI does all intellectual activity? What happens to society when life outcomes become independent of character traits, when the responsible and the irresponsible are equally rewarded? Do we want to live in such a world? Today, the human competitive drive is vented as positive-sum entrepreneurship. In the post-labour world, where does this go? League of Legends? Politics, war? What happens to society when human activity is reduced to zero-sum status war?

0 views
fLaMEd fury 2 days ago

Taylor Swift Moshpit

What’s going on, Internet? Love Story is my favourite Taylor Swift song, I’m defintely a sucker for her earlier stuff. I’m an Offspring fan too, so this cover they performed at the recent Hellfest (never heard of it tbh) is pretty much made for me. I know James is a big Swift fan, I wonder if he’d also appreciate this? Hey, thanks for reading this post in your feed reader! Want to chat? Reply by email or add me on XMPP , or send a webmention . Check out the posts archive on the website.

0 views
ava's blog 2 days ago

book: whipping girl by julia serano

During my break in July, I said I wouldn't read. I partially lied! I did not read any papers, blog posts, or most news articles, and I initially wanted to extend that to books as well. But I ended up ordering and reading some, and one of them was Whipping Girl! Originally released in 2007 and edited a bit in 2015 and with an afterword from 2023, it is a tad older, but such a foundational work in gender studies. It's a feminist analysis about how femininity is punished in society, specifically illustrated on the hatred on, and cissexism enacted against, trans women and their representation in media. It discusses common models of thinking about gender (gender essentialism vs. social constructionism) and where they fall short, as well as different kinds of feminism (and why feminism needs to be trans-inclusive) and theories as to why people are trans that do not serve trans people. It's specifically mentioning trans-objectification (= disregarding trans people as living human beings, reducing them to an unfeeling thing you can speculate over and ask invasive questions, an anomaly to demonize, ridicule, exploit or fetishize), trans-fascimilation (= portraying trans genders as facsimiles of cisgender ones), trans-sexualization (= asserting that trans women transition to attract sexual desire, to attract men, or to become the women they're attracted to; relegating them to a fetish, as merely sex workers, perverts, exotic fucks etc.), trans-interrogation (= obsessively focusing on the reasons why trans people exist, pathologizing them), trans-erasure (= silencing trans voices and preventing them from being visible and coming out, prioritizing cis people's theories and feelings), trans-exclusion (= excluding trans people from events and spaces based on their trans status), and trans-mystification (= turning transition into a taboo, a hidden secret, a scandal instead of a real and mundane thing) as ways trans people, often specifically trans women, are harmed in society. It also covers the way trans people have been historically (mis)treated and mischaracterized by the medical world without giving them a chance to speak, and the way gender transition has been gatekept by dehumanizing standards like attractiveness, sexual orientation, sterilization, secrecy about the trans status, and more, resulting in only letting a small amount of people transition at all, and only if they were most willing to comply with cis expectations and also had the resources (money, changing jobs, moving away etc.). Any gatekeeping of transition resources is done for the well-being of the cis population, and especially the extremely, extremely small portion of them who could transition and regret it, and is never actually done for the well-being of trans people. This is possible because, despite many people rejecting ideas of attaining social status, occupation, political power etc. via birth right (casteism, for example), cis society has no problem seeing gender as a birth right, something you inherit and cannot gain otherwise, and is otherwise not as legit as theirs. This further leads to the ridiculous double-standards and unfair judgment trans women are subjected to: Act feminine, and you are seen as a parody, a facsimile of a woman, a costume, or "leading someone on"; act masculine, and it is deemed a sign of a "true male identity", as not even trying, as a joke for media. Pseudofeminists say women can do anything men can and should be strong and unafraid to speak their minds, yet ridicule trans women for behaviors deemed masculine, especially when they speak out about their oppression. They create standards of what makes someone a "real woman", yet reject the same when men do it. Crossdressing is fine for women and is, technically, done on the daily when you're wearing pants - yet a man wearing a skirt is already classified as a mental illness and used to historically focus on men only ( Transvestic Disorder (F65.1)). The book asserts that the mechanisms behind it are traditional sexism (the belief that maleness and masculinity are superior to femaleness and femininity, and the delegitimization of the latter as weak and artificial), and oppositional sexism (the belief that female and male are rigid, mutually exclusive categories, and the delegitimization of gender non-conformity). Through effemimania (the word she coins for the societal obsession with transfem expressions of femininity), cissexist society is wielding transmisogyny against trans women. She also partially calls out feminists who have aided the societal view that femininity is artificial and needs to be abolished, which is misogynistic and alienates people who naturally gravitate to, perhaps "perform", femininity. Other than that, Julia Serano also develops the intrinsic inclinations model in the book as a path between either bioessentialist ideas or the idea that gender is merely a social construct, opting instead to say that there are both biological and social components to why someone is trans. She also covers how cis people take their gender for granted, as it just happened to be congruent and likely never questioned by them or others in their life, and therefore often doubt that one could "feel like" a specific gender, even though they do, too. If this wouldn't be the case, we wouldn't have so many gender-affirming surgeries and treatments for cis people, and many would freely transition to better fit a role in a movie, go undercover, or to succeed in a field dominated by another gender - but they don't. As an outlook on the future of queer/trans communities and politics, the book explains why identity politics and subversivism in queer/trans spaces are not beneficial; genders outside the gender binary shouldn't be seen as more radical and "good" while binary trans people are seen as "bad" or "reinforcing the gender binary". Alliances are more important than understanding us all as one group, as this has the chance of brushing over different needs and experiences that need to be addressed without being called "divisive". Overall, I found it very pleasant and engaging to read, and one could tell (in a positive and delightful way) that a lot of the book consisted of separate essays published elsewhere before they were combined. It didn't read to me as a particularly dry "book-writing style", no vibe of "I'll sit down to write a whole book now and talk down to readers in a clinical way", but something that could be published in a series of posts on personal blogs musing on social topics nowadays, which made me wish more bloggers would opt to release their works as different chapters in a book some time, instead of leaving them spread on platforms like Substack. Despite the patchwork, the entire book felt so cohesive, in a great order, and approachable, like a longer blog post, but without losing depth or attention. It felt very satisfying how thoroughly Julia Serano covers and debunks everything and still manages to not lose you, to lead from one thing to another with such ease. It was a cathartic read, with a marker in hand. I'm surrounded by trans people and have witnessed online trans discourse since I was about 17, but even I found some sections in the book more difficult to understand with the mixing of terms and knowing a different version of the used concepts and definitions; especially in regards to "transsexual" and "transgender". So in some sentences, both words were used interchangeably or one as umbrella term, but in other sections, they described different things. As the work is older, many concepts, words etc. have evolved and changed quite a bit, and some ideas have become very unpopular. I have also never seen anyone online hold on to the idea that there are 'transgender cissexuals' or vice versa, but this is discussed in the book, and some of it might be labeled transmedicalist. I think it helps to discuss some things in there with trans people you know (if they are genuinely interested to, and you're not burdening them). I don't know if I would give this to anyone that is a complete newbie to the topic for that reason; it's not a "I'm coming out, to understand me, go read this.", especially when some of it is no longer the default in discourse, but it's still something people should have read if they are not entirely new to gender discourse or queer history. Let me end this post with a quote from the Afterword: "As I said at the start, I cannot say how this particular anti-trans moral panic will end. But what I do know is this: efforts to eliminate trans people will never succeed, because we are part of natural variation, and we will persist as long as human beings exist. Anti-trans activists may strive to "disappear" us like they did during the twentieth century, but that outcome is no longer possible. Back when I was a trans kid, we were isolated from one another - quarantined, if you will - due to a lack of access to information and reliable ways to communicate with one another. But now we live in a hyperconnected world, and there are countless trans-centered books, artworks, media and organizations that share our perspectives and trans-related resources. Anti-trans activists may attempt to ban books about us from libraries and censor discussions about us in school settings, but they cannot stop us from finding one another online or elsewhere. Now that we know how many of us there are, we will continue to seek out and learn from one another. Trans people have always been resourceful and resilient, and nobody can take that away from us. " Published 02 Aug, 2026

0 views
マリウス 2 days ago

The TEMU-fication of Software, Digital Goods & Services

Disclaimer: This is an opinion piece and most of it is speculation about a future that has not arrived (yet?), based on a few data points that have. As usual, summary at the end. A few years ago I would have laughed at anyone telling me that there is a serious market for ten-dollar drills, two-dollar dresses, and one-dollar pairs of shoes shipped from a warehouse on the other side of the planet. Today, however, that market exists and it has a name, and it is even publicly traded (sort of, through holdings). TEMU , Shein and a few others have built frankly mind-boggling businesses around the idea that if you make production cheap enough, fast enough, and just barely good enough to look right on a phone screen, an enormous part of the population will buy it, even when the product breaks within a week, when the materials it is made of contain worrying levels of toxic substances , and when the carbon footprint of one delivery exceeds that of an equivalent local purchase by orders of magnitude. The key to this sort of business model is not innovation, but instead the externalization and compression of cost. Somewhere upstream, people work seventy-five hours a week , in conditions most readers of this website would refuse to even visit, so that the rest of us can have a cheap plastic spatula at our doorstep within five business days. While the visible price collapses, the invisible costs get distributed onto landfills, lungs, and ultimately people that we will never meet. What follows is a hypothesis I cannot prove but have been turning over in my head for a while, as we are watching the same thing happen to software, books, music, (film-)scripts, and most of the digital goods and services we consume. The cheap labor in this case is not human, it is a Large Language Model ( LLM ), or what many people these days call “AI” , and the externalized cost is, among other things, quality , which requires craftsmanship to produce, and attention to perceive. And just like with physical goods, we will probably end up with a two-tier market, in which we have a large and massively profitable lower tier of generated slop , and a smaller, more expensive upper tier of work that is still recognizably human. I’d like to call this the TEMU-fication of software, digital goods and services , and describe what it might look like. For decades, the global fashion industry has relied on a workforce that has almost no leverage and no voice, and for which the economics work because someone, somewhere far away, will sew a t-shirt for less than the price of a coffee. Without that skewed arrangement, the entire fast fashion business model collapses. The garment in your hand is only cheap to you because it has been expensive to someone else , in ways that the price tag does not show. Modern Large Language Models occupy a similar position in the economy, with one important difference, which is that there is no human being in the sweatshop, only a stack of GPUs trained on a corpus of work that other human beings produced over the course of decades. The labor that has been compressed is historical and the model is a kind of compressed copy of the work of millions of programmers, writers, illustrators, and musicians, served back at near-zero marginal cost. Well, at least in theory, and only if the hyperscalers find a way to lower the cost per token, but that’s a different topic. However, the result is the same. A class of goods can suddenly be produced for an order of magnitude less than before. And, just like with TEMU , those goods turn out to be just barely good enough . The most direct manifestation of this so far is what is being called vibe coding . The term refers to the practice of describing what you want in natural language to an LLM , accepting whatever it produces, iterating over it with more refined descriptions of the basic idea and eventually shipping the result into production. Whether the developer actually understands what was generated is increasingly considered an implementation detail . And while the output is technically software, the question is what kind of software it is. A 2025 Veracode report found that approximately 45% of AI-generated code samples failed security tests and contained critical vulnerabilities from the OWASP Top 10 , and a multi-language, multi-model academic study that evaluated outputs from Claude , Gemini , Codestral , GPT-4o and Llama-3 across Python, Java, C++ and C, found that a substantial fraction of generated snippets were either non-compliant with basic secure coding standards or actively triggered classified weaknesses (buffer overflows, hard-coded credentials, SQL injection, cryptographic misuse, path traversal, you name it). Even more concerning is a peer-reviewed 2025 paper from IEEE-ISTAS that documents a 37.6% increase in critical vulnerabilities after just five iterative prompts, suggesting that the more you let the model refine its own code, the worse the security posture gets. When these issues compound over time, the result is a higher total cost than traditional development. However, this doesn’t matter when you don’t think long term , but fast fashion instead. Also, none of this is to say that an experienced engineer cannot use these tools well, because they certainly can. The issue is what happens when the same tools are used by someone who does not know what good looks like in the first place, and there is nobody downstream of them who does either. The output passes the basic test of it runs and looks plausible , ships into production, and accumulates the kind of architectural and security debt that surfaces only when something goes very wrong . Note: There are credible voices in the industry, particularly from the AI tooling vendors themselves, who argue that AI-assisted development raises a floor more than it lowers a ceiling. In this view, the median piece of software has always been mediocre, written under deadline pressure by tired humans, copied from Stack Overflow without much thought, and held together by duct tape. If an LLM produces output of roughly comparable quality in a fraction of the time, the argument goes, nothing got worse. We are simply removing a bottleneck. I find this argument partially persuasive, and partially convenient for the people making it. It is true that a lot of software was already not great, but it is equally true that there is a difference between bad code written by a human who at least understood what they were doing , and bad code written by a system that does not understand anything . The first kind can be questioned and corrected, but the second kind tends to compound, because the person shipping it cannot answer why it does what it does. At least for now. Software is not the only place where this is playing out. The book industry is arguably further along, with estimates suggesting that somewhere between ten thousand and forty thousand AI-generated books are uploaded to Amazon ’s Kindle Direct Publishing platform every month, many without any disclosure that a model was involved. In June 2023, the Kindle Top 100 bestseller list was found to contain only 19 books written by humans . Amazon has since introduced limits and disclosure requirements , but enforcement is patchy and authors continue to push back against what looks like a slow flood. Categories that have been hit particularly hard include travel guides (generated guides to cities the author has never visited, with restaurant recommendations that don’t exist), nutrition and health (generated diet advice with citations to studies that don’t exist), and public-domain rewrites (generated adaptations of older books, relying on the recognizability of titles that the actual authors never agreed to). Travel guides in particular have produced a small genre of stories where readers arrive at addresses that turn out to be empty lots, or follow walking directions through neighborhoods that no human would ever recommend. Note: The defense, again, is that the bottom of the book market was always full of filler, that print-on-demand has been around for a long time, and ghost-written business books and assembly-line genre fiction predate generative AI by decades. However, the new thing is the scale at which low-effort content can now be produced, and the speed at which it can drown out the rest of the catalogue. Authors are competing for shelf space against entities that can ship a hundred new titles in a weekend. A 2025 analysis of 65,000 English-language articles published since January 2020 found that a little over half of all new articles on the internet are now AI-generated , and it’s not only the written word that’s being churned out by machines . YouTube has its own version of the problem, where, according to a Guardian analysis, nearly 10% of the world’s fastest-growing channels feature nothing but AI-generated content , and on Shorts specifically more than one in five videos served to a new user is low-quality AI-generated material . Not even the highly creative and (up until recently) human process of making music is immune to this TEMU-fication . Spotify has been removing ghost artist tracks for years, but the practice scaled up dramatically when generative tools made it trivial to produce convincing lo-fi background music in arbitrary volume. The platform has reportedly removed 75 million spammy tracks in a single year , and high-profile acts like the AI-generated band The Velvet Sundown amassed over a million streams before being unmasked. There has been at least one criminal case, involving over $8 million in fraudulent royalties , built entirely on AI-generated music and bot streams. However, that is no reason to applaud Spotify , as the company appears to fight the AI spam only when it’s someone else trying to make money off of it. However, there is a sliver of hope, as engagement with AI-generated articles reportedly dropped by around 40% in 2024, and human-generated content seemingly still gets roughly 5.4× more traffic than AI-generated material in some studies. About 38% of consumers openly express skepticism about AI-created content, and people do still seem to be voting with their attention. Whether that vote is powerful enough to shift incentives at the platform level is a different question, and personally I’m not particularly optimistic, especially given that the platforms profit either way. Let’s take Netflix as an example. From my understanding, the WGA ’s 2023 deal explicitly prevents studios from treating AI-generated material as source material, or from using AI to write or rewrite scripts, and Netflix was seemingly bound by that agreement until at least May 2026. Netflix ’s own Generative AI Production Guidelines also seem to reflect this, stating that AI is permitted in ideation , but that its use should not replace or materially impact work that would otherwise be done by union-represented writers, actors, or crew members, without proper approvals . While that sounds reassuring on the surface, it is, in my view, a delay and not a limit. The same company has publicly committed to going all-in on AI in its production pipeline , has signed deals with VFX automation providers that explicitly put a chunk of the global VFX workforce at risk, and has already used generative AI in at least one of its programs ( El Eternauta ). The trajectory seems to be “use AI everywhere it is contractually allowed right now, expand into the rest the second the contracts permit it, and spin the result as dEmOcRaTiZaTiOn Of CrEaTiViTy” . So here is my specific (and quite possibly wrong) prediction: Within the next five to ten years, Netflix will offer a basic subscription tier whose catalogue consists predominantly of AI-generated or AI-assisted content. We are talking generated procedural shows where each episode is remixed from a small set of templates, generated kids’ content that is vaguely educational and impossible to remember an hour after watching, and generated dramas that recycle plots from existing IP and vibe the rest. For this, the viewer pays the lowest monthly price, while the platform pays nearly nothing in production cost and keeps an enormous margin. The only “upside” for consumers will be the lack of ad breaks, as targeted advertising will quite possibly be injected in real-time into the show you’re watching, seamlessly blending into the storyline without you noticing it, but ultimately still triggering your ape brain to crave a refreshing soda or a sweet treat . Their premium tier, meanwhile, will become the human-made tier. Series with credited human writers, films with credited human directors, and performances by humans whose likeness has not been digitally replicated. The marketing will not call it human-made , because that would be admitting that the cheap tier isn’t , but the price difference will make it obvious. You will pay extra for the same thing Netflix has been selling you all along, except now it is positioned as a luxury. Clearly, I cannot prove that this is what will happen. Netflix ’s own guidelines, as written, prohibit it, and the WGA deal forced a delay. But once the contractual block has lifted, the financial logic is hard to argue with. A streaming service that can produce good enough content for fractional cost will eventually try to. And, mind you, Netflix is just one example. The same logic applies to every other content-distribution business with a subscription model and a margin. If you want to know what the human side of this two-tier world looks like, I think the best existing model is the handicrafts and handmade goods market . By 2025, that market was estimated at roughly USD 987 billion globally, with projections reaching over USD 1 trillion by 2035 . There is data suggesting that U.S. consumers already spend almost a fifth of their money on handmade goods rather than on mass-produced equivalents, and over half of handicraft buyers globally indicate a preference for products that are eco-certified or made from natural materials, going in the exact opposite direction of what TEMU has been doing. What this market shows is that industrialization does not erase the artisans, but pushes them into a different segment. People did not stop buying handmade chairs when factories started making chairs cheaply. While the masses opted for the cheaper, mass-produced items, a small but sustained minority of buyers continued to seek out the human-made version, and over time were willing to pay a premium for it. If the hypothesis holds, software engineering, writing, acting, illustration, composition and the other content-producing professions will undergo something similar. The bulk of the market will migrate to the cheap, mass-produced, generated tier, while a smaller market will continue to value, and to pay for, work that is verifiably the product of a thinking, breathing, opinionated human being. We are already seeing the first signs of this in agencies that explicitly advertise human-only content (at a premium), and in licensing companies flagging tracks as human-composed to distinguish them from AI library music. I think that the interesting question is not whether this segmentation will happen, but what proportion of the market ends up in each tier, and how robust the upper tier turns out to be. There is a darker version of this analogy. Roughly 57-60% of the daily caloric intake of the average adult in the United States and the United Kingdom now comes from ultra-processed foods . Across 22 European countries the share ranges from 14% to 44% , depending mostly on how protected the local food culture has remained. These foods are cheap, abundant, available everywhere, and nutritionally inferior to the alternatives in ways that have been studied at length . People know this, but they eat them anyway, often because the alternatives are slower, more expensive, harder to find, or require skills that have not been taught. I suspect that AI-generated content is on the same path. The cheap tier will not be a marginal phenomenon serving a marginal audience, but it will be the default , the cornerstone of how most people consume software, entertainment, news, and information, because it is what the platforms will serve them and what their monthly subscription covers. Some will care enough to seek out the alternative, but most will not, just as most people, knowing what they know about ultra-processed food, do not change their grocery habits. Probably the strongest counter-argument to all of this is that LLMs are still early, that the quality issues are transient, and that within a few model generations the gap between AI-generated and human-generated work will narrow to the point where the distinction stops mattering or might not even be possible anymore. If that is true, the two-tier picture collapses, because there is no longer a quality difference to justify the upper tier, only a marketing difference. The handmade analogy breaks because, unlike a hand-built chair, a generated novel is functionally identical to a written novel once you can no longer tell them apart. However, I am doubtful that this is going to be the case. There are tasks where I have watched the gap narrow faster than I expected, but there are also tasks where the gap has stayed stubbornly fixed and the failures have just gotten more sophisticated. My instinct is that for narrow, well-bounded technical work, the gap will close further. For long-form work that depends on a coherent worldview, lived experience, and, most importantly, emotions, I doubt it will, because the model has none of those. The second counter-argument is that the consumer backlash will be stronger than I am giving it credit for. The 40% drop in engagement with AI-generated articles is not nothing, and platform incentives may shift if users start to penalize AI-flooded feeds. Apple and others have started experimenting with content provenance and disclosure schemes that, if widely adopted, could stop the worst of the flooding. So it is possible that I am underestimating the immune response . The third counter-argument is, that the cheap tier might not be sustainable at all, because AI-generated content trained on AI-generated content degrades model quality , and the broader ecosystem ends up poisoning its own training data. If that turns out to be the dominant dynamic, the cheap tier could collapse before it becomes entrenched. I think all three of these arguments are valid and have a certain weight to them, but none of them are strong enough, in my view, to make me confident that the TEMU-fication will not happen. They might modulate how it happens, but they probably do not stop it. Initially, I went looking for an optimistic ending for this write-up, to say that software engineering is not going away , and writers are not going away , and actors are not going away . And while all of that is, I think, true, none of it should be confused with things will look the same . What I expect, and what I am to some degree already seeing, is that the people producing software, books, music, scripts, and other human-made work will not disappear , but they will get pushed into a narrower, more specialized, more “luxury” -coded part of the market, pretty much the same way hand-bound notebooks, independent record stores, and small bakeries that mill their own flour did. There will still be a livelihood in it, at times a very good one, but it will look vastly different, and there will probably be fewer people making a living in these fields. My assumption is that they will be more visible inside their niche, but less visible outside it, and they will make their case in part on the basis of provenance , where something was made by a human who knew what they were doing, and you can tell. Meanwhile, the bulk of what most people interact with will, I suspect, be generated. Some of it will be fine, and some of it will be ultra-processed , in the same sense that a frozen lasagna is ultra-processed. It will be functional, calorically adequate food , but it will not be what your Italian grandmother was making. People will nevertheless eat it because it is there, it is cheap, it is convenient, and because the alternatives have been priced out of their daily life. There is no “inevitability” to it, because none of this is really decided yet. There are still choices, made by platforms, by regulators, by consumers, and by the people doing the actual work, that will shape which tier ends up being how big and how durable. The handmade market exists because enough people kept buying handmade goods to make it viable. The human-made tier of software and digital goods will exist because enough people keep buying it, or it won’t exist at all. If you are someone who writes code, or stories, or music, or scripts, by hand, with intent, and with a point of view, I do not think the LLM is going to kill your job . I do think, however, that it is going to change the shape of the market you operate in, push you toward the upper tier (whether you wanted to be there or not) and ask you to make a more deliberate case for why your work is worth the difference in price. For the rest of us, the more interesting question is which tier we are choosing to consume from, and whether we are choosing it on purpose, or just because it was what the algorithm served us by default. I have my suspicions about the answer, but I would love to be wrong.

0 views
Ankur Sethi 2 days ago

Prevent cognitive debt by manually retyping LLM-generated code

Despite what I said in April , I'm still using coding assistants on my personal projects. Using them to one-shot entire features leaves me unsatisfied and disoriented, but I do enjoy using them to fast-forward through the boring parts of my projects. However, allowing my coding assistant to roam free in my projects leaves me with a colossal amount of cognitive debt. I might hate the idea of poring over the Django documentation to figure out how to add tagging to my website, but I still fundamentally want to understand how it works. Just because a problem is boring doesn't mean I want to fully offload my understanding of the solution to a machine. Of course, I could review every single line of code the LLM produces. That's what most developers are expected to do in this cursed year of 2026. Robots raise PRs, humans review them. It's a brave new world. But I don't enjoy reviewing AI-generated PRs. Poring over hundreds of lines of overly-defensive, badly-commented, subtly incorrect code is not fun. I might grudgingly do it for an employer—while making sure said employer becomes an ex-employer as soon as possible—but I'm sure as hell not doing it for my personal projects. Personal projects must be fun above all else. The joy of working on personal projects comes from the process, not from the outcome . So what's a boy to do? How do I offload the boring work to LLMs without ceding control of my own work and cognition to the slop machine? I've come up with a solution that's grossly inefficient and perhaps slightly comical: I ask my coding assistant to generate code in the chat, then manually make all the edits myself. I have these instructions in all the agents files in my personal projects: I want to understand every line of code that goes into this project. Never create, edit, move, rename, or delete project files unless I explicitly ask you to do so. Instead, show me every proposed edit in the chat so I can type it in manually. Do not run commands that modify project files, install dependencies, or change repository state unless I explicitly request that action. Instead, show me those commands in the chat so I can run them manually. I'm an experienced developer. Do not explain syntax, APIs, programming concepts, or implementation details unless explicitly asked. Using LLMs this way allows me to work faster than not using LLMs at all, but I'm still slower than those who are willing to allow the machine to think for them. Instead of being 10x faster, I'm probably only 2x faster. But what I lose out on in terms of speed, I gain in terms of a deeper understanding of my code. As I manually type every single line of LLM generated code into my editor, I build up a mental model of how it works and fits into my existing codebase. If I don't understand an API or algorithm, I can stop to look it up, or just ask the LLM to explain it. Typing the code myself forces me to slow down, which means I'm more likely to detect hallucinations or bad design choices the LLM might have made. I can clean up the code as I go, reorganizing it, refactoring it, adding comments, and generally adapting it to my own taste. Most importantly, this workflow allows me to build a spatial map of my codebase. I know where every bit of functionality lives in the codebase. When I need to make a change, I know exactly where I need to make it. It not only helps me work faster within my projects, it also makes it easier for me to better prompt and instruct the LLM in the future. When I was learning to code as a teenager, experienced programmers would often tell me to never copy and paste code into my projects. If I was learning from a book, I was advised to copy all the examples into my computer and make sure I could run them. If I was learning from a blog post or forum answer, I was advised to type it out and adapt it to my codebase so I understood it completely. Manually typing LLM-generated into my codebase feels like the exact same learning process. It might not be the most efficient way to work with an LLM, but I value comprehension over productivity. I've been doing this for a few months now, and it's been working well for me. I plan to continue using this workflow for as long as I can. I fear the software industry is taking on a large amount of cognitive debt that we'll have to pay back very soon. There will come a time when we no longer understand how large parts of our digital infrastructure are put together. I might not personally be able to change the course of the entire industry, but I can at least make sure I completely understand the software I put out into the world. Anything else would be professional malpractice.

0 views
Unsung 2 days ago

The monkey lives again

Speaking of computers that used to stop running if you looked at them funny , a few years ago, I wrote about the Monkey app that was there on the original Mac. Many software engineers will recognize the premise – Monkey was just a chaos script randomly pressing mouse buttons and keys during the night hours, and if the computer crashed because of Monkey’s random actions, the team would be able to reproduce it and try to fix it. I was also inspired to try a Monkey-like approach for something creative. In hindsight, it’s a very Unsung post , so you might enjoy it! Also, in the post, I showed this boring version of Monkey: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-monkey-lives-again/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-monkey-lives-again/1.1600w.avif" type="image/avif"> Since then, I discovered a different version with its own icon, perhaps designed by Susan Kare: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-monkey-lives-again/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/the-monkey-lives-again/2.1600w.avif" type="image/avif"> (If creative use of randomness rings a bell, here’s also an earlier Unsung post about a different take .) #apple #history #marcin wichary #process #qa testing

0 views
Rodney Brooks 2 days ago

Four Time Scales for Technology Development and Deployment

I have come to understand four very different time scales for development of technologies and their deployments.  And I think people often jump between them and end up making outrageously wrong, and sometimes damaging, predictions of when in the future a technology is going to be able to do what. Time scale 1. New Research Ideas New research ideas take ten to twenty years to form before there is an understanding to bring them to really solid lab demonstrations.  Some things take much longer as there are many,  many false starts, or there is a really hard step which takes decades to crack. Once things really have been established as a solid laboratory technology there is often a gold rush phase where major new tweaks, on essentially the same idea, come along every six months or so and it feels like the ground is shaking under us. The first “computational” models of neurons were published in 1943 (McCulloch and Pitts), but it wasn’t until after a chain other models were tried, that a dominant variety became established in 1960 (Widrow), the linear threshold neurons that are recognizable as the “neurons” of today’s neural networks. Then years more work, were necessary to get to (1) good convolutional networks with (2) back propagation, allowing for learning 2 about objects anywhere 1 in an image. And then it was twenty years until in 2012 (Hinton) the larger structure, the “deep” in deep learning let trained neural network image labelling take over from conventional non-neural vision algorithms. Another decade on we got to today’s LLMs (Large Language Models), the thing that is getting the whole world in a tither.  So this one was sixty years in the research making. And it was declared dead many times along the way, but a few brave, or stubborn, souls persisted. Time scale 2. Hype generation Often there are incredible hype cycles where we go from all but a small number of people having heard of the idea to it appearing daily in the business press. And all manners of researchers and companies re-market their work and claim that they have been doing it all along.  Just look at how quickly “AI agents” went from nothing to decorating the sides of busses on the streets of San Francisco.  None in mid 2025, and now today it is hard to find a bus that has any sort of  AI ads on it that are not about agents.  And they all have AI ads on them. Then the hype dies down as new hype comes along. Above I’ve named a few. If you are 30 years old you may remember block chain and also the metaverse.  Pretty much gone now.  Computers are not heating up the world working the blockchain algorithm for bitcoin mining. Instead it is data centers for training LLMs — itself a new subject of hype, AI training. If you are a bit older you may well remember IBM Watson and even nanotechnology molecular machines. I remember when a maker of chinos had TV ads touting the nanotechnology that they had put in their pants (the ones there were selling).  And if you are old enough to get social security payments you may remember expert systems which were going to capture all the knowledge of experts and let companies lay off their workers. The problem is that many people not steeped in technology understanding may get confused between ongoing research and the hype about how it is going to change everything.  Which it only very rarely ends up doing.  Additionally, there are a lot of  delusional people who really believe things that they say, but which are impossible due to such little problems like fundamental physics.  The ratio of extraordinary hype events to actual extraordinary technologies is way too high. Time scale 3. At scale deployment The next time scale is driven by how long it takes to go from really solidly engineered product to mass adoption. Software has zero marginal cost to manufacture more copies. You don’t really need much in the way of supply chains and raw materials to go from one copy of software running on one machine to having it run on thousands of machines, if they already exist. But even so, software typically takes 20 years or more to scale up. Just because some interesting software exists it doesn’t mean that everyone is going to jump in and re-engineer their business to use it right now. Some people wait to see how well it works out for others. And other people just don’t want to change their existing business practices to adopt the new software. Unix was developed at Bell Labs starting in 1969. Commercial versions of it were shipping 15 years later, but the dominant operating system was Microsoft Windows. Then a free open source version of Unix was developed starting in 1991, known as Linux. Every computer science graduate student had heard of Linux within five years of it being established,  but it wasn’t until 2012 that it was adopted by Microsoft.  Now most backend systems and billions of mobile devices run on Linux. Hardware based systems take even longer to adopt at scale. I first sat through a talk showing a self-driving car running on a freeway outside of Munich back in 1987 (Dickmanns).  It wasn’t until the DARPA Urban Challenge of 2007 that the idea of such cars being practical got into people’s consciousness.  I first rode in a Waymo predecessor (when it was still at Google X) in 2012, out onto highway 101 and safely back to the office. Last night I rode in a Waymo in San Francisco.  They are now licensed to operate about 4,000 vehicles in the city and they are the clear leaders in the US market. But the scale is tiny compared to the number of cars in San Francisco, let alone the whole of the US.  Oh, and despite promising in the app to take me to my house the Waymo didn’t — it dropped me off somewhere else despite me being on the line with “customer support” for over 20 minutes. Getting things to work at scale is orders of magnitude harder than getting them to work at first and having your first few dozen satisfied customers.  Scale has always taken Herculean effort. However, people make the mistake of thinking adoption and scaling up the supply chains, the deployments, and the customer support will just happen.  It doesn’t. Time scale 4. Reshape the economy The themes of the two biggest hype concentrations right now are the same.  Replacing massive swaths of human labor with AI (LLMs to replace white collar labor) and robotics (humanoid robots to replace blue collar labor).  Then everyone will somehow, magically, be so rich that the world will be wonderful.  A new world economy. A new world order.  A reshaping of the economy. Many, many, many technologies have reshaped the world’s economy over the last few millennia, from domesticated animals to sailing ships in the ancient world, from domestic electrification to commercial air transportation to shipping containerization in the 20th century.  But each of these things took over 50 years of continuous at scale deployment. People think that when they hear about a new research result it is going to change everything.  And then they believe the hype about how soon it will do so, as hype-notists manipulate capital markets thought their promises. Some things fail completely in the commercial world despite high hype levels (all the companies formed to commercialize Hyperloop have now shut down, and the Hyper-hype has quietly disappeared). And then, people think that it can change the world economy in one or two or ten years. It really does take decades, essentially a human lifetime (and there is a causal correlation), to deploy a technology at large enough scale that it reshapes the world’s economy.

0 views