Welcome back everyone 👋 and a heartfelt thank you to all new subscribers who joined in the past week!
This is the 91st issue of the Gorilla Newsletter—a weekly online publication that sums up everything noteworthy from the past week in generative art, creative coding, tech, and AI.
If it's your first time here, we've also got a Discord server where we nerd out about all sorts of genart and tech things — if you want to connect with other readers of the newsletter, come and say hi: here's an invite link!
That said, cue the news 👇
All the Generative Things
1 — Running Pong in 240 Browser Tabs: Nolan Royalty, who you might remember as the creator of One Million Checkboxes, returns this week with a new web-experiment — this time hacking the favicons of his open browser tabs (precisely 240 of them) to run a playable game of Pong. He details how he did it in a blog post of his:

Recently there's been a new creative indie trend (I don't know what else to call it) of doing stuff inside of the favicon of a webpage — rather than doing stuff inside the webpage itself 😆 this started with Tru Narla programming an entire game of Flappy Bird inside of the page's favicon:

So, where do you even start with recreating Pong across several favicons? Not only do you need to arrange the tabs you also need to actually display the game in them. Nolan uses AppleScript to automate the process of opening and arranging the tabs, having them self-assemble into 8x30 grid, then using web workers and broadcast channels to project individual square areas of a canvas into the favicon grid, as you might've already guessed, synchronizing them ended up being quite a challenge.
Make sure to also check out the thread he made on the topic:

2 — Psychedelic Graphics: Ben Pence started a series of articles that attempts to explain computer graphics — particularly those of the trippy, psychedelic kind — in an accessible manner that doesn't assume any prior knowledge of graphics or programming. Because I'm a sucker for evergreen resources like this one, I'm putting this one high up the list.
In the introductory part part Ben provides us with a breakdown of how computers interpret UV coordinates, as well as how UV mapping works, in essence, wrapping flat 2D graphics and textures onto 3D models, particularly useful in video games (Ben seems to be in the process of developing one). In the first proper chapter, Ben tackles sinusoidal animation of colors and how to create trippy repeating patterns.

3 — XOR Deep Dive: XOR, short for "exclusive OR," is a logical operator whose negation is the logical biconditional... in simpler terms, it's an operation that compares two boolean values and returns true if only one of its inputs is true, but false if both inputs are the same. Simon Tatham wrote a massive deep dive on the XOR operator, not just to provide an intuition on the logical operator, but also showcasing many of the applications in which it makes an appearance and where it is a useful/necessary tool.
One interesting application is in computer graphics actually. In the mid‑1980s, when home computer systems were extremely limited by memory and color depth, one innovative and efficient drawing method revolved around XOR: Rather than storing entire screen images to keep track moving objects, reversible XOR drawing was used, where each pixel of a moving object is combined with the background, such that drawing it twice would automatically erase it. Even though it would sometimes produce minor artifacts like missing pixels where lines crossed, it was a reasonable price to pay.

One other interesting appearance Simon highlights is the game of Nim (or Nim-Sum); a simple two-player game where each player takes turns removing (or "nimming") any number of objects from one of several piles (at least one), where the goal is to avoid being the player who can’t make a move because all the counters are gone.
This sounds much simpler than it actually is — the key to winning ends up being calculating the “nim-sum,” which is found by applying the XOR operator to the numbers of objects in all the piles. If the nim-sum is zero, it means the current position is losing if both players play perfectly, while a nonzero nim-sum means there is a winning strategy.

There's also a good Wikipedia entry on the game of Nim.
4 — JesseSort: A New Sorting Algorithm faster than Python's Default: this one's a bit out of left field; Jesse Lew introduces a new sorting algorithm that operates differently from traditional sorting algorithms by leveraging a unique data structure called a Rainbow.
JesseSort operates in two main phases; first it goes through a given unsorted list and assigns each item to a specific group, called a band, by comparing against a set of key values that make up the first and last item of each band — where these key values are stored in a separate list known as the base array. The Rainbow is thus simply an organized collection of these bands — lists of items in almost sorted order.

This way the algorithm can quickly determine the appropriate group for each new item simply by looking at those boundary values, before merging them into a final sorted list. Jesse claims that his sort performs comparably well to well-known sorting algos like QuickSort and MergeSort in worst case scenarios, but can take advantage of data that's already partly organized — outperforming traditional methods in practical settings.
The discussions in the accompanying Hacker News item are as always quite heated. Apparently there's also unspoken rules about the naming conventions of sorting algorithms 🤔

5 — The History of Algorithmic Composition: I also did a little bit of web archeology this week, and found this article all the way back from 1999 about the history of algorithmic composition. It traces its evolution from ancient practices all the way to modern computer-aided techniques and contains some interesting nuggets of information.
I particularly enjoyed this quote from Brian Eno in the introduction, one that I haven't encountered before, but that I believe will resonate with many of those that make generative art today:
"Since I have always preferred making plans to executing them, I have gravitated towards situations and systems that, once set into operation, could create music with little or no intervention on my part. That is to say, I tend towards the roles of planner and programmer, and then become an audience to the results" -Brian Eno (Alpern, 1995).
6 — Size Coding Botto: if you've been keeping up with the genart x AI x NFT scene you'll likely have heard of Botto, the autonomous AI that's been community guided into creating a bunch of P5 sketches. The concept, and the heated discussions around the project are quite interesting, the art itself is kinda "meh" tbh — you can view them here.
The important thing I want to share is that I took a satirical a stab at tsubuyakifying (size-coding) one of them — the replies got quite out of hand with some of the size-coding legends like Piter Pasma, Frank Force, and Koma Tebe pitching in with their own attempts at it, check them out here.

If I find the time I might even write a little post about it, if you're curious about P5 size-coding, I have this older post of mine about it here.
Dev & Web Tech
1 — The Challenges of Building a Calculator App: while building a calculator app might seem trivial at first, in re-framing it as software that can correctly evaluate any of the mathematical expressions it allows you to feed into it, does make it seem a bit more complicated. Chad Nauseam recounts the story of how Hans-J. Boehm was tasked with developing Google's Android Calculator App — originally as an X thread and later as a blog post:

The first challenge right off the bat are imprecise floating point numbers; for instance, you can't actually represent fractions like 0.3 or big numbers like 10^100. And although you can circumvent these imprecision problems using bignums, that let you represent very large numbers, there's more problems — like irrational numbers such as π for example, how do you handle these precisely?
The solution Boehms found was Recursive real arithmetic (RRA); a technique where each real number is represented as a function that, when given a precision, computes an approximation guaranteed to be within that error margin — in essence a kind of arithmetic that can generate real numbers to any desired level of accuracy. That's just the tip of the iceberg however, I'll leave you to explore the rest of the thread for yourself — now if you ever want, or have to, build a calculator app, you have a starting point 😆

2 — When Imperfect Systems are Good, Actually: Bluesky's Lossy Timelines: designing distributed systems for millions of users is challenging, particularly when you're trying to be sensible about it, and not build a timeline like TwiX's curated stream of BS. Jaz from the Bluesky team explains how they approach this task in an imperfect manner with their "Lossy Timelines":

Bluesky's database is fragmented into smaller shards that group users together (so that the database can scale horizontally) — each shard being capable of handling its own load perfectly well in theory, however, when some users abnormally follow hundreds of thousands of other users, it creates a huge load, slowing everything down for all other users on the same shard.
To solve this, instead of trying to update every single follower perfectly, the system is allowed to skip updates at random at a rate relative to the number of inbound writes — as a result, Jaz was able to improve the overall performance dramatically, reducing P99s by over 96%.
3 — NASA's 10 Rules for Software Development: Gerard J. Holzmann writes about NASA's 10 software development rules that were originally crafted for building reliable embedded systems in spacecraft. While these rules might be quite restrictive for other types of software projects, they provide a set of principles for writing mission-critical software — Gerard notes at the very start that he offers his thoughts from the POV of writing software in general, emphasizing the importance of adapting guidelines to fit the specific context of a project rather than following them blindly.

Besides that, these rules provide a glimpse into a different kind of programming that I'm happy I don't have to do — I don't think I could handle the stress of writing software that people's lives depends on ☠️ I can also recommend the Hacker News discussions about the post with some insightful perspectives.
4 — uchū: the color palette for internet lovers: and to cap off this section, here's a cool color palette that's been specifically designed for the web 👇

AI Corner
1 — GenAI is the Least Imaginative Use of AI: There's beauty and joy in making things just for the sake of making them — some of the most viral internet experiments, like Nolan Royalty's experiments, are these kinds of creations/explorations. Ge Wang, professor at Stanford comments on this in the context of AI, and how it robs us of the joys of creating meaningless fun things:

Ge believes that the challenges and frustrations involved in making art are what make the process meaningful and fulfilling — if we simplify things too much, AI services can strip away the personal growth and satisfaction that come from working through these creative difficulties.
2 — SmolModels: ML models with Minimal Code: I haven't tried it yet, but it looks really cool; a python library for building machine learning models with minimal code simply by describing what you want them to do in plain words. You explain the task, and the library builds a model for you, including data generation, feature engineering, training, and packaging.
Music for Coding
After last week's recommendation I explored some of the other bands signed by Gondwana Records, one of them being GoGo Penguin, a British instrumental trio from Manchester with an incredibly dynamic sonic range; a modern, cinematic dimension of jazz that I've come to particularly enjoy these days.
The live performance I linked here is absolutely sublime, the double-bass riff that kicks off "Everything is Going to Be OK" at 14:15 gave me real shivers, and then in the track after "An Unbroken Thread of Awareness" they just incorporate a modular synth sound seamlessly with their playing. Besides that, it's really impressive how the band’s able to fill up so much mix space with just a piano, double bass, and drums!
And that's a wrap — hope you've enjoyed this week's curated assortment of genart and tech shenanigans!
Now that you find yourself at the end of this Newsletter, consider forwarding it to some of your friends, or sharing it on the world wide webs—more subscribers means that I get more internet points, which in turn allows me to do more internet things!
Otherwise come and say hi over on TwiX, Mastodon, or Bluesky and since we've also got a Discord now, let me shamelessly plug it here again. If you've read this far, thanks a million! And in case you're still hungry for more generative art things, you can check out last week's issue of the newsletter here:

You can also find a backlog of all previous issues here:

Cheers, happy coding, and again, hope that you have a fantastic week! See you in the next one!
~ Gorilla Sun 🌸