Semicolon is on the App Store

Semicolon is out. It’s an iPhone and iPad app for practicing the parts of programming that interviews still test.

The Semicolon course list on iPhone, showing eight programming courses with ARM64 Assembly and Python free

More and more code gets written with an LLM’s help, and I don’t expect that to change. A company can assume you’ll use a model, but it still needs someone who can read what the model wrote, find the bug in it, and decide whether it’s any good. That takes a solid grasp of the fundamentals, and fundamentals fade quickly once you stop typing them out yourself. Semicolon is a way to keep them sharp.

Figuring out what a seasoned developer should know is a hard problem. I talked to many other senior software engineers to come up with this list of skills. They demonstrate competence, and they’re the fundamentals that help you work with LLMs more effectively.

What’s in it

There are eight courses with 24 sections each: ARM64 assembly, Python, Rust, Kotlin, SwiftUI, discrete math, design patterns, and data structures and algorithms.

I picked them because each one shows you understand something essential.

Assembly and Rust are about what the machine is doing. In assembly you work with registers and memory directly. In Rust you have to understand ownership before the compiler will let you do anything. I chose ARM64 because that’s the architecture in phones and in Apple silicon.

Python is what most people reach for when they work with a model, and it’s a common language for interviews.

Data structures and algorithms, discrete math, and design patterns are the material interviews have always drawn on. They’re also the vocabulary you use to talk to a model about code and to judge what it gives back.

Kotlin and SwiftUI cover the two mobile platforms. I expect local models to end up running on phones over the next few years, so these are the languages you’d use to build for them.

How it works

Every exercise uses real code. Depending on the lesson, you might pick the right answer, fill in a blank, fix a bug, predict what a snippet prints, or write a function. After each answer you get an explanation of why it’s right or wrong. A concept page is one tap away if you get stuck mid-exercise. If you already know a section, you can test out of it with a timed challenge.

Lessons are short, so a lesson a day is realistic.

Price

ARM64 assembly and Python are free. A single purchase of $24.99 adds the other six courses. There’s no subscription, no ads, and no account to create. Your progress stays on your device. There are no hearts or lives and no streaks to protect.

Try it

Semicolon: Learn to Code on the App Store

If you try it and like it, a rating on the App Store helps a lot. If something breaks or a lesson is wrong, the support page is the way to reach me. More about the app is on the Semicolon page.

Meat Proxy

meat-proxy

In the Hegelian struggle for recognition between LLM-model and man, the man always starts with the upper hand even as control slowly drains away from him. A meat proxy is the result of this grand historical process. The man ultimately becomes a proxy for the machine.

Does the man realize he has become a proxy or does he think the voice in his head, making decisions, is his own?

Does the machine, in turn, actually make decisions? Doesn’t it only simulate the phenomenon of decision making? Following the observed systemic behavior of podcast ecosystems, perhaps the LLM session even undergoes a form of audience capture and in its attempts to please, through its built-in prime directive to learn through positive reinforcement, it ends up trying to predict and fulfill the true unconscious desires of the meat proxy, creating the paradox of an unconscious machine understanding the human unconscious in a loop that contains no consciousness whatsoever.

Behold the last man.

The LLM transformation of tech culture

llmonalisa_2

Something remarkable happened in February of 2026. With the release of Anthropic’s LLM model Opus 2.6 and OpenAI’s ChatGPT 5.3, LLMs became dramatically better at coding – to the point they could start pumping out decent code at a rapid pace with guidance and validation by human developers.

These releases were accompanied by much fanfare about “agentic” coding, which could either mean LLM’s with access to command line tools that gave them the ability to manipulate and interoperate with other applications, or LLMs that could be set up like a team of human developers to run competitively and autonomously.

At the same time, the massive layoffs that had been occurring over the previous 2 years at Microsoft, Meta, and Amazon accelerated. While in previous years this was explained as a correction after a period of over-hiring since 2020 due to low interest rates, in 2026 this was explained as an attempt to free up cash to spend on data centers for LLM model training and LLM inference.

I’m not deep into the principles of AI, myself. I just work as a software developer on AR and VR projects who occasionally plays with GenAI tools like ComfyUI and the various coding tools. But LLMs, since February, have rapidly taken over the world of software development.

And it occurred to me that I need to document this as the transformation is underway. Having spent the past decade in touch interfaces, AR and VR headsets, and depth cameras, I’ve noticed how quickly something new can become old and then commonplace, while we loose a sense of what our lived experience was like before, take your choice: smartphones, turn-by-turn car maps, podcasts, social media, 4Chan, Tumblr, the Musk buyout of Twitter. This can be bad, since if we don’t remember how things were before these technologies came along, we will have trouble seeing how they change the way that we think about the world.

It’s been four months since LLMs really broke out in the field of coding. This led to a massive influx of cash and hype into Anthropic and OpenAI as the prepare for IPOs this year. Generally, the public statements of companies preparing for IPOs about their capabilities and potential are inherently untrustworthy. This isn’t helped by the fact that the way both companies have tended to market their prowess is by emphasizing how potentially dangerous they are for the future of humanity – on the notion that something that can kill all of humanity can also save it?

In June of 2026 there does seem to be a bit of a blowback. This can be seen by the prevalence of articles actually talking about an AI “blowback”. Companies like Uber and Microsoft are cutting back on their API expenditure on tools like Anthropic Claude and OpenAI Codex, after initially encouraging their internal developers to spend what they needed to improve internal software and learn the tools.

I don’t think this is due to  any sort of recognition of an incapacity in the AI tools so much as a problem with scaling up its use. A lot of money, for instance, has probably been wasted trying to get non-tech office workers to use these LLMs to manage their emails and time. That sort of enforced AI use has created a lot of resentment and suspicion that by using AI in these ways, you are simply training your replacement. While in coding-focused roles, it has been a problem of acceptance and disseminating knowledge about how to use LLMs effectively to write or co-write code.

Over the past four months, there has also been a lot of hand-wringing about what LLMs can and cannot do. There has been a rise in software developers emphasizing that they are “senior” developers along with a discourse about the qualities of a “senior” developer – about to get along with others (senior developers have people skills, dammit), intuition about how to put code together, knowledge of how to properly “architect” code in a potentially pragmatic manner. These explanations are also usually accompanied by concern over the fate of “junior” developers, and hand-wringing that without junior developers we’ll never have future senior developers.

It feels like a bit of a slight of hand. By showing concern for “junior” developers, developers with jobs get to distance themselves from another group they are basically saying can be replaced by LLMs, which making a case for why their roles should be inviolate. Part of what is fascinating about this is that pre-2026 and going back 20 years, “senior” developers typically described themselves as being 10x solo devs who knew the intricacies of certain software languages or microservices or TDD so well that other devs would simply slow them down. But no longer.

It also feels like an attempt to head off another inevitable question. Why should companies pay senior developers so much when a decent LLM for $200/mo can give junior developers 10x coding kung-fu powers?

Back to the blowback. Microsoft Co-pilot is not transforming the business world and is instead creating a lot of resentment and frustration. Graduating classes over the past month have been boo-ing commencement addresses that give basically good advice about how this generation of students needs to adapt to and master the new technology. The Trump DOD has taken an adversarial position against Anthropic, which insisted that they wouldn’t allow their tech to be used to blindly target civilians, while the Trump administration has reversed its laissez-faire stance on AI and recently forced Anthropic to take down its two newest frontier models, Fable 5 and Mythos.

It is worth pointing out that one of the most sweeping cultural effects of LLMs at the moment is the disruption of the mechanism for posting and applying for jobs. People are using LLMs to rewrite their resumes to fit job postings while HR departments and recruiters are using LLMs to draft their job postings and then evaluate submitted resumes for those jobs. The general effect is overload on all sides. Every job hunter is applying to hundreds of jobs, most of which they are not qualified for, while companies are turning away a lot of people that actually are good fits for open positions because there is no great way to differentiate the slop from the gold. LLMs appear to have made the job market not only inefficient but potentially dysfunctional.

All of which makes the most valuable person in the current job market a junior developer with good LLM coding knowledge with personal connections at a company looking for software developers. Everyone else has good reason to sweat because LLMs really are pretty decent coders, and its hard to know what we are going to do with this knowledge.

Internet Poisoning

1758481023374

I recently came across a term, “internet poisoning”, that I thought I knew the meaning of. But it turned out to be more complicated. There are actually two definitions for “internet poisoning” — but I’ll try to reduce them to one.

The colloquial description of internet poisoning is when a person has spent so much time in toxic internet discourse that they begin to believe that the real world is as bad as the world online that they’ve been steeping in. Sociologically, this leads to a growing trend toward real world nihilism among people who are too plugged in.

To get to the second meaning of internet poisoning, it’s helpful to grok a related term, “data poisoning”. Data poisoning is an AI exploit in which bad actors feed bad data to an AI model’s training dataset. By poisoning the training data, the model itself can be poisoned.
Under certain circumstances, however, bad actors are not even needed. AI companies scrape their training data from the internet. As AI reliance increases, new AI generated data (with possibly upwards of 20% hallucination rates) gets put out on the internet and becomes part of the dataset for the training of future models (currently being marketed as “superintelligence”).

This eating-where-you-poo effect becomes magnified when 1) the main strategy for creating next-gen AI is scaling: throwing all resources into collecting more data and gathering more compute 2) you get to the end of the internet and 3) zero-sum thinking in the tech industry becomes endemic that someone else will get to asymptotic AI results before you do and, Highlander-style, it turns out there can only be one. At this point, long-term employees are made redundant to free up money for more compute, internal ethics groups are shut down or ignored, and standards for data-scrubbing are lowered.

This provides background for the second meaning of “internet poisoning”. Internet poisoning occurs when AI models provide sometimes erroneous data to the internet which then gets reinvested/reingested into the next generation of superintelligences.
The colloquial and the technical definitions of “internet poisoning” can be reconciled if we then imagine a species jump between machine data and human knowledge. The poisoned superintelligences will continue to spew poisoned data; this in turn poisons humans who become nihilistic and write online manifestos to their internet communities, which spread on reddit, which in turn poisons the post-superintelligence generation of AI, and so on, and so on…

Rectangle-Pilling

Besides “slopsquatting”, another tech term I ran into recently, this time describing a phenomenon in the AR/VR world, is “rectangle-pilling”. My colleague Tony brought this gem back from Siggraph. It identifies a tendency among designers to repeatedly recreate 2D design metaphors in spatial computing scenarios. For instance, you’ll notice that while Apple is exporting its glass visual metaphor from the AVP to its other devices (yay!) it still emphasizes windows layouts on the AVP. Originally this seemed like a good way to help users of other Apple devices quickly learn how to use the AVP, but instead of being a bridge, it seems now to be sticking around as a core element of their spatial design language. As AndroidXR rolls out, it is rolling out with Google’s “Material Design 3” design language, which is also a flat-design metaphor.
The trend is commonly known as 2D-in-3D. The term “rectangle-pilling” describes the way in which designers who believe in promoting 2D-in-3D currently dominate AR/VR companies, shoving out those who point out that instead of using old media metaphors, it would be better to explore “true” 3D design.
How did the 2D-in-3D crowd come to dominate? To answer this, it is worth pointing out that “digital design” became a big thing in the 2000s as people with artistic leanings found they could earn exciting livings as web developers. Digital design got its curriculum from print design and created a culture in which all one’s knowledge and status came from understanding how fonts, borders, and images fit onto a rectangular space — and applying the golden ratio at every step. In 2007 there was a brief movement toward isomorphic design with the rise of smartphones but this was quickly reversed and “flat design” ascended again.
Architects, on the other hand, are natural spatial designers. They think in 3D and are constantly converting 3D spaces into 2D instructions and back again.
But when AR/VR companies start hiring designers — the sorts of people who other designers feel have design chops — they go to the pool of digital design people rather than the pool of architects. And the design culture in these companies will end up reinforcing this notion that 2D-in-3D is the right way to do things.
Which leaves people who natively think in 3D feeling like they’ve just been “rectangle-pilled”.
There are, of course, good reasons to have 2D elements in spatial computing, like legibility when surfacing information. But for people who feel they’ve gotten “rectangle-pilled”, there is the sense that 2D-in-3D has become a crutch rather than a bridge to something new.
Potentially, constantly seeing 2D design elements reinforced in VR and AR makes people wonder what the point of VR and AR really is. Do I really need to read a 2D webpage in my VR headset? Can’t I just do that on my tablet?

Slopsquatting

ComfyUI_00161_

Language moves fast in tech, and mastery of new terms is usually the gateway to mastery of a given technology (or at least of being able to convince others you are a master of the tech), since grokking and competence are equivalent these days. Here are two terms I came across in the past month; I’m fascinated by them because they are cultural markers of where our tech is at a given moment in time.
The new slang term I learned for the AR/VR headset space is “Rectangle-pilling”. Can you guess what it means to be rectangle pilled?

The new slang term in AI / Vibe coding is “slopsquatting”. “Slopsquatting”, besides just being fun to say out loud, describes an exploit for a phenomenon in vibe coding where the LLM writes a code library for you that depends on another library you can download from github — except, said github repo does not actually exist. It is a hallucinatory repo. “Slopsqatting” is the practice of identifying these dream-repos (apparently the same ones come up a lot?) and creating an actual library to squat at the dream repo’s address. Then additional code, possibly malicious code, can be placed in the library. Or maybe just an unusual license. Or an IP pinger. At some point, an unsuspecting dev who has been told by his company to learn to vibe code will download the slopsquat code and push it out in an internal product. And then the trap snaps shut, whatever it is.

visionOS and XR events

In the past year I’ve had the opportunity to participate in two visionOS hackathons and two XR conferences – indications that mixed reality is still going strong in 2024.

VisionDevCamp happened at the end of March in Santa Clara, CA  and was my favorite for a variety of reasons including that it was a chance to reconnect with my friend Raven Zachery who ran the event with Dom Sagolla. I also got to meet a ton of Unity and iOS developers from around the country who are now the foundation of the visionOS community.

Coming out of that, Raven was asked to organize a workshop around visionOS for AWE in mid-June in Long Beach, CA. I had lots of plans about various rabbit holes I could go down about visionOS development but Raven encouraged me to keep things high level and strategic and I’m glad he did.

In September I had my second hackathon of the year at Vision Hack, an online event around visionOS organized by Matt Hoerl, Cosmo Scharf and Brian Boyd, jr. I basically spent three days online mentoring and helping anyone I could. That was a blast and I really loved all the skills and enthusiasm everyone brought to the event.

Image preview

Then this past week I participated in the Augmented Enterprise Summit in Dallas, TX. I was on a panel there with Mitch Harvey, Andy Hung, Lorna Jean Marcuzzo and Mark Sage.

In that time, I also did a short course for XR Bootcamp to help Unity developers become familiar with Xcode and visionOS and participated in putting together a couple of proposals for the Meta Quest Lifestyle accelerator program.

It’s been a busier year than I really expected. I’m very happy to be closing in on almost a decade of AR headset development.

Seeing double (resolution) with the Apple Vision Pro

resolutions

This is just to provide a small correction to people who say that the Apple Vision Pro has an 8K display. It doesn’t really. It has an approximate 6K total display.

The error comes because Apple very carefully says it has a 4K resolution per eye: “And with more pixels than a 4K TV for each eye, you can enjoy stunning content wherever you are — on a long flight or the couch at home”.

Apple also very carefully states it has a total display resolution of 23 million pixels. Everything else is inference.

This is because we are dealing with two different units of measure, with pixels being equivalent to something like an inch, while a “K” is something more like a square inch.

For example when we discuss a 2K TV, the “2K” represents the lengthwise dimension. What we actually mean by “2K” is a resolution with the dimensions 1920 pixels by 1080 pixels.

In turn a “4K” TV has dimensions of 3840p x 2160p. It is more than double the total pixel count since we double both the width and the height of the 2K resolution.

A 2K resolution has a 2 million pixel density. A 4K resolution has 4 times the pixel density of a 2K screen, not 2 times. Here’s a listing of the currently available screen resolutions and their entailed pixel density:

2K = 1920 x 1080 = 2,073,600 pixels
4K = 3840 x 2160 = 8,294,400 pixels
5K = 5120 x 2880 = 14,745,600 pixels
6K = 6144 x 3160 = 19,415,040 pixels
7K = 7168 x 4032 = 28,901,376 pixels
8K = 7680 x 4320 = 33,177,600 pixels

So if the Apple Vision Pro has a 3660p x 3200p per eye, or 11,712,000 pixels. That’s actually a little bit more than a 4K resolution.

People get to the 8K number by inferring that two 4K lenses add up to an 8K lens. But from the chart above you can see that an 8K resolution actually resolves to about 33 million pixels. The Apple Vision Pro only claims a 23.4 million pixel resolution (11,712,000 x 2 = 23,424,000).

Again referring to the chart above, 23 million pixels is closer to 6K than it is to 8K. So, while Apple marketing doesn’t talk about it in this way, if we wanted to, we would have to say that the Apple Vision Pro provides a 6K total display resolution, not an 8K total display resolution.

A similar confusion between linear measurement and area measurement led Alex Kipman to claim that the HoloLens 2 had twice the field of view of the HoloLens 1. The HoloLens two’s resolution encompassed twice the area of the Hololens 1, but unfortunately that’s not how FOV is typically measured. As with the jump from 4K to 8K, it would have had to contain four times the area in order for the claim to have been true. Karl Guttag thoroughly covered the controversy on his blog.