Saturday, September 5, 2026
Solarpunk
Though I had seen screencaps from this video, I hadn't realized that the (probable) apex of solarpunk media was a Chobani ad. I'm not mad. I do like yogurt, but I buy storebrand.
Sunday, October 19, 2025
Monday, September 1, 2025
What to Build
I listened to the Cheeky Pint podcast with Cognition CEO Scott Wu. I like his take that "AGI is here" and yet the role of human software engineer is still viable over the medium term. Perhaps motivated reasoning on both his and my part though? Regardless, his point that deciding what to build will become a larger part of the role of software maker is clearly true.
So here I am in Texas on Labor Day 2025, with my son sitting next to me, learning to read on the Duo ABC iPad app. What should I be building?
Sunday, May 25, 2025
Psychohistory
Is somebody running large scale agent based simulations with LLMs as the agents? As in, some three-letter agency that wants to predict political unrest worldwide. Some years back I read Martin Gurri's "Revolt of the Public" and Philip Tetlock's "Superforecasting". Prior to reading these, I imagined working in American intelligence to be something from a Hollywood movie: Cold War intrigue, fog, sinister motives. Maybe it's because I'm getting old, but my impression today is that most "spies" are more like investment analysts. They've got some area of specialized knowledge, maybe some biases from their course of training, probably quite a few spreadsheet models / favorite newspaper subscriptions / twitter alts.
But, has anybody made a really ambitious simulation of political activity? You could have detailed simulations of conversations between the most powerful 0.1% of the folks in the world, plus some random sampling of conversations between the rest of us. The "rest of us" conversations would be to generate summary statistics like: fertility rate, consumer confidence, etc. Most of the juice would be in the detailed scheming of the powerful, and the diffusion of opinion in those social networks. Surely the intelligence agencies have for decades been "simulating" conversations between the leadership of adversaries. This is just Kremlinology: talking about what they are talking about.
Having LLMs do the talking-about makes it less accurate (possibly), but much more scalable. So instead of the top 20 characters getting a voice, you've got 145,000 voices. What do Timur Ildarovich Yunusov and Anton Pinskiy say to each other about Putin's impact on the economy while they are planning real estate acquisitions to support Starbucks Russia?
Wednesday, April 2, 2025
Optimal Barista Theory
I have this idea that in the future (after AGI), the best remaining human job will be the barista. That is: service jobs will have a special sort of staying power because the human touch is the entire job.
There will still be the desire for third places like cafés, right? In fact, given that our second places (work) are gone-ish in this scenario, maybe there's only first places (home) and third places. And the barista is the king or queen of the café. So imagine that the most socially visible job is being a barista. Then that job attracts the most talented people in the world. The barista becomes a philosopher king. Master of riffs and vibes.
Saturday, March 29, 2025
AGI podcast episodes - early 2025
Wednesday, March 19, 2025
Your System Prompt
An LLM's "system prompt" is like a mantra or personal mission statement. Imagine that "system prompt" becomes such common parlance, so that when future self-help authors write about self-talk / motivation / personal codes-of-ethics, they call this "your system prompt".
It is the case that we use the language from cutting-edge science and engineering to describe the non-scientific. For example, new-age "vibrations" or corporate "DNA". A more extreme language shift would be if English mostly dropped the word "word" and just said "token" instead.
Saturday, March 8, 2025
Modernism Re-enactors
The Amish are (sort of) re-enacting a previous era of technological development. It seems to be hard work.
Imagine that the people who idealize the 1950s were to build re-enactment towns where they would have picnics on gingham and hand-wash red Thunderbirds. Or that postmodernism re-enactors would rebuild historical Xerox machines for period-accurate zines in a reconstructed Olympia, Washington.
Two challenges to living in a world that is technological and yet far from the leading edge of technology: 1) finding replacement parts is a challenge, 2) everything is more expensive because of the lack of economies of scale. Both of these seem surmountable in a post-scarcity economy, where dexterous robots can craft one-off replacements parts for old Thunderbirds or Xerox machines.
Friday, February 28, 2025
Ramadan Mubarak
Ramadan Mubarak, y'all!
I have the app "Pillars" on my phone. Which today presented this (to me) bewildering offer to automate my Laylatul Qadr.
Here's all the different religious apps on my phone right now:
- Echo: a (Christian I think?) prayer app.
- Pillars: a Muslim prayer app (with cool features like a compass that points you to the Qibala).
- Hallow: a Catholic prayer app.
- Sefaria: a Jewish holy text reader.
- Quran: a Koran reader, with a mode where Mishray Al-Afasy will sing the verses to you.
- Bible: unfortunately doesn't sing aloud, but has a mode for making inspirational-poster style images with a verse on a stock photo background.
Firmware Liberation Party
At the playground this evening, I saw a mom who looked marginally cooler than me, but she was wearing a t-shirt that said "Austin, Texas". Which is uncool, right? Wearing the band's t-shirt to their show.
As I was considering berating myself for not doing my part to keep Austin weird, I wondered what t-shirt I ought to be wearing. What would be cool? And my brain provided: "firmware". Lower-case, cryptic. As a band name, cool. Like "Floating Points". But somebody might think it's a startup. Uncool. So maybe make it punk? Firmware Liberation Now!
Friday, February 21, 2025
2025 in Preview
I love that Blogspot is still here. Assuming that I find the time / motivation / focus, here's a list of things I'd like to write about in 2025.
- LLMs broadly, but particularly:
- tool use,
- chain-of-thought / inference-time-compute,
- organizational and business structures that include LLM agents,
- Tyler Cowen's "writing for the LLM" idea.
- AGI + society, as in:
- unemployment,
- decoupling of labor and capital,
- meaning and purpose,
- acceleration of robotics,
- what percentage of Americans will be a streamer or influencer in 30 years.
- Optimism
- the era of flash mobs, what was that all about,
- lucid dreams and Linklater,
- children's books,
- bespoke detritus,
- ceramic tiles,
- lifestyle prototyping,
- spaghetti noodles for throples
- water tower passport stamps,
- etc.
Wednesday, March 9, 2022
Diana says it's time to go to sleep.
Diana says: "Are you blogging again?"
As soon as a press this button I am!
Saturday, January 31, 2015
Blogging Again?
Diana told me about 750words.com, and I gave it a try. I've typed out 750+ words every morning for that last 12 days. My joint pains and mental fog have decreased each day! I'm breaking through into a new realm of consciousness! Just kidding, but it has been nice.
I like the name of this blog, and I like the banner image that I made for it (seven years ago!). The name "shiftpop" sounds like a musical micro-genre, and also like an instruction in a stack-based programming language. In 2008 when I started this blog, I was at the apex of my cellular automata (the banner image) and non-mainstream programming languages (the blog name) phase.
I'm a bit nostalgic for that era, but I don't expect to write about either of those topics now. I do intend to write about technical issues, but I'm more likely to write about computer graphics and hardware verification.
Tuesday, December 30, 2008
PHP's strtotime
The closest Python equivalent to strtotime seems to be dateutil.parser.parse, though it's much less flexible from a cursory glance. Of course, if a person is only trying to compute "common moveable Christian feasts that can be deduced from the date of Easter Sunday" they need look no further than the mx.DateTime.Feasts library (which includes translations into German and French). Weird. And awesome.
Friday, December 5, 2008
Not Lazy Enough
One reason for being non-lazy (some say: strict) is to ensure consistency across your dataset. If exact consistency is not a requirement, object/document stores like CouchDB or AppEngine's datastore can provide inexpensive "ALTER TABLE" behavior. With these systems, outdated/unaltered rows only need to be upgraded/altered when they're fetched from the datastore. Here's a case where deferring the "ALTER TABLE" code allows us to write more flexible/dynamic programs because our data management is lazier.
Code can be too lazy though, resulting in bad caching behavior and sometimes huge memory space growth.
Any other examples of cases where laziness/demand-driven-evaluation would be a performance win?
Friday, October 10, 2008
Ten Years of Progress
Hello from October 10th 2008. The Dow Jones Industrial Average closed yesterday at 8,579 which is a little bit under its close of 8,643 on March 10th 1998.
Does this mean that the global economy could have been put on hold ten years ago and life would be just the same today?
Probably not. People have to eat.
Does it mean that ten years worth of free market profit motive could have been thrown out the window, that executives could have been told to just keep 'er runnin' and life would be just the same as today?
Probably not. There have been winners and losers, and markets have adjusted for changing consumer preferences over the decade.
I don't know what it means.
But it does seem like an appropriate time to ask:
"Have we been making progress?"
I think that the answer is: Yes!
Though we may have to scale down our retirement plans, and start buying the less expensive brand of veggie burgers, our Wikipedia Content Index (WCI) just keeps growing:
And lest we ignore the importance of emerging global cute funds, think of how far we've come since 1998: a world without lolcats.
Thursday, September 25, 2008
Compiling x264 with MP4 support on OS X
wget http://downloads.sourceforge.net/gpac/gpac-0.4.4.tar.gz
open gpac # lazy-man's untar
git clone git://git.videolan.org/x264.git x264
cd gpac
find . -name os_net.c | xargs perl -pi -e 's/u_long/unsigned long/g'
./configure
make lib
make install-lib
cd ../x264
./configure --enable-mp4-output
make
Then, to test that everything worked, run this:
wget notlime.com/2008/h264/foreman_part_qcif.yuv
./x264 -v -q 20 -o foreman.mp4 foreman_part_qcif.yuv 176x144
open foreman.mp4
If you don't have git installed, you can find a nightly tarball of the x264 source code at ftp://ftp.videolan.org/pub/videolan/x264/snapshots/. Hope this helps someone!
Tuesday, September 2, 2008
Growing Triangle Vines
The first is a visualization of a geometric computation that we used in the ICFP contest: Arcsin of R / D
And the second comes from a pen-and-paper sketch made on a legal pad during my WTC tenure: Iconic Growing Triangles
Tuesday, August 26, 2008
Persistent Refactorings
Imagine for a moment though, that your revision control system was aware of refactorings, and recorded the refactoring command itself, not just the source text changes. You (or your IDE) might run this command:
svn refactor pullup myFunction
Which would record the refactoring and which could be used to inform merges with other branches. Everyone loves easier merges of course, but if your automatic merge of two significantly-differently-structured-branches was nearly flawlessness, it would be possible to support two functionally equivalent, but architecturally different branches over a long timespan. In practice you could commit to either branch, and then pull from the other branch, relying on your version control system to refactor your changes so that the merge succeeded.
Why do this?
Perhaps you have a refactoring that reduces code-duplication but makes your codebase less readable, scannable, coherent. In this case you can branch and refactor, ending up with one easy-to-read branch, and one safe-to-modify-without-fear-of-missing-a-copy-pasted-version-of-the-same-function-in-another-module branch. Because the refactorings that we're considering here don't change the code functionally, these aren't really even branches, but simply two views on the same trunk.
What other cases can you see this being handy for?
Wednesday, July 30, 2008
Prolog Instantiation Modes (and Python exit contexts)
So, Prolog doesn't have functions, but it has something called "predicates" which are just as good. Predicates don't return a value, but any argument to a predicate can be an "output" variable, like a C reference parameter. Unlike C though, Prolog predicates often treat all of their parameters as outputs. For example, the function append can be used in (no less than) three different ways.
/* Appending, mode = input,input,output */
?- append([1,2,3],[4,5], X).
X = [1,2,3,4,5]
/* Trimming off a shared starting sequence, mode = input,output,input */
?- append([1,2,3],X,[1,2,3,4,5]).
X = [4,5]
/* Trimming off a shared ending sequence, mode = output,input,input */
?- append(X,[4,5],[1,2,3,4,5]).
X = [1,2,3]
Through these three operations seem very different from the perspective of an imperative language, in Prolog append can be defined in two simple lines. The intuition about Prolog is that the runtime doesn't think of variables so much as inputs and outputs, but as "things I already know" and "thinks I don't know yet".
We can translate Prolog's append into Python (at some loss of conciseness and functionality), and then use the Python macro mentioned above to check that the variable bindings at the end of the function maintain the invariant that we expect:
context = append_exit_context(None,[4,5],[1,2,3,4,5])
assert context['head'] + context['tail'] == context['result']
So, this is pretty cool, we can pretend that we're writing a predicate instead of a function, assigning computed values to variables when we're able to discover them, and then examine those bindings after running the predicate.
Of course, Prolog's append can also be called with the first two arguments uninstantiated, but that sort of magic is much harder to fit into Python.
