yijing in python
Date: September 6, 2026
Just a quick little update:
I've uploaded a new git repository that has the first (beyond-the-basics) program I've written in a while: the Yi-jing (or I-Ching) in Python.
You need Python to run it, of course. It's designed to be something that generates a hexagram from the Yijing at random and display it in your terminal along with some of the relevant data.
I'm sure I'll be expanding on this initial effort in the future, but for now I just wanted to have something that autostarts whenever I open up a terminal.
Nothing like a good bit of spiritual-philosophical wisdom to keep you grounded.
You can clone the repo here, if it interests you: Click here
Of course, you're also free to build on it and share it if it makes you happy. :D
dancing the night away
Date: August 31, 2026
First time for everything isn't there? I'm not used to clubbing. Or those music venues that might as well be a club. When I go see a show, there's usually chairs to sit at—not a dance floor. And I think that's partly because I never learned to let loose like that. I always felt observed when I danced like that. Judged. But you know what the truth of it is?
Look at this photo:
See any faces? No? That's because no one's looking. Maybe it's the fact that I'm an anxious sort of person, but I always felt they were. Yet there I was, dancing like no one was looking—because they weren't.
In a way, this reminded me of my first meal at a monastery. Meals took place in a grand-looking hall. It was generally quiet, although sometimes there was monotonously chanted readings to accompany your food. Monks sat at tables around the perimeter, while male guests sat at their own table in the centre of the room. I was the only one, surrounded by some 30-40 men in monastic garb. And I distinctly remember feeling like I was being watched, while of course the monks simply minded their own business.
To be fair, if I felt like the centre of attention, that might be because I was in the centre of the room. Nevertheless, the fact is that in both the monastery and the dance cave, my anxiety directed my attention to others more than to myself, dancing, or even the music.
Thankfully I settled in, and by the end of the night I must have really looked ridiculous. I certainly wondered about this the next morning. But it was fun. I felt free of expectation. I didn't think of myself as someone with a certain job, education, or purpose in life. Instead I could be rapt away by a symphony of sounds, tapping into something that felt much more primal and long-forgotten.
The highlight for me was Depeche Mode's Personal Jesus. When that song came on, I completely stopped giving a shit. I danced, I sang along, and I even made the sign of the cross. In that moment I felt like I was in a new, postmodern kind of church. Post-church church, if you will. There was no ritual or expectations for the congregation. Our DJ-Priestess was a true facilitator, connecting us with some joyous sense. Maybe that's why Christianity isn't what it used to be. I've heard people say that they used to love Church, then they realized they just loved music. Lots of people talk about more "serious" forces at work that have undermined traditional religion, but maybe it's as simple as the record player and iPod. Would the monks approve? Some might, others not. Rather like Christians in general.
This past year, as I've had the good fortune to see legendary artists like Ghost and Iron Maiden, I can't help but feel that this is something essential to music that's glossed over. It's not just about sound. Otherwise, why would we pay to see concerts? We'd put the money towards something like a good pair of Sennheisers, and we'd enjoy crisp, lossless audio at home. In fact, the sound at concerts is arguably worse if you factor in the claps, cheers, or person coughing several rows back. We go to experience something that music helps us to connect with but is only a part of. You see, something happens at those concerts that have a particular flair for showmanship that you don't find elsewhere.
It's ritual without being ritualistic. Moral without moralizing. Meaningful without being overbearing. It doesn't talk down to you. There's no bullshit about it, no talking in circles. Just dancing and singing the lines you know the words to. Most importantly, you're permitted to just let out what you're feeling. It's a rather nice feeling.
I unironically enjoyed Niu Lai
Date: August 24, 2026
Let me begin by saying that I'm not an animator. And even given five years to learn, I'm not remotely confident that I could produce the film that this mother-and-son duo did.
If you've heard of Niu Lai, you probably know it because its animation style has made it something of a meme. It's definitely not fantastic by 2026 standards (or even 2006 standards), but you've got to admire the heart that was put into it. And say what you will, but I was entertained! Five years of work, knowing nothing about animation and film-making, $200, and we get an absolute banger of a movie with a heart-warming message about a mother's love for her son and a young calf coming-of-age.
I won't spoil the plot (yes, it has a plot), but I wanted to talk about why this movie became so popular. We've got a number of blockbuster hits that cost millions that have come out or are coming out this year. They're all financed by big studios, of course, and have a lot of star power behind them. (How many movies is Zendaya in?) I enjoyed The Odyssey, and I'll probably enjoy Dune 3 and Spiderman: Brand New Day when I get around to watching them. I don't want to knock them. But honestly, they'll probably blend together in my mind in five years, and we'll all be onto the next big thing. Niu Lai's distinctive style (if you can call it that) isn't something I've really seen before, and probably won't see again, not anytime soon.
It's cliche to say it, but we live in an age of generative AI. Not that this is used much in film-making, but even as a general trend, I've noticed CGI becoming a lot more prominent in films over the last little while. If you compare some of the big hits from my really young days to what's made today, I'd argue it holds up or is better in terms of effects. Let's look at Doctor Who. I remember tuning in at 5 years old for the first time, and I was immersed. Maybe the effects show their age a bit, but then I remember watching Jodie Whittaker's first episode at the Doctor and being enormously distracted by how obscenely polished everything looked. It couldn't be natural. In its quest for hyper-realism, it looked unreal. Hell, look at Cats: big budget, same thing. Niu Lai, by contrast, is at least honest about what it is: a passion project.
Underneath the laughs and memeing about poor animation, I reckon this is what gave the film some steam. One comment I read said something to the effect of: "forget AI. human slop is back!" And that precisely illustrates my point. I won't sit here and pretend the film is a technical masterpiece (although I wouldn't call it slop: they worked hard on it). However, there's something endearing—beautiful, even—about art that is just made by humans because it has a story that wants to be told. And in the case of Niu Lai, the story behind the scenes is as powerful as the one it tells.
Xin Yumeng wanted to make a movie. His mother, Sun Lifang, learned screenwriting to help him. They were the only two cast and crew on the film (hence why you see people laughing at the end when only two names come up for all the roles). They composed and sang the soundtrack (quite well, I think, but I'm no expert in Mandarin). They used second hand hardware, and an architectural modelling program. Animation programs, after all, can get expensive both in terms of price and the tax you pay on your CPU/GPU. That's right. They made this thing in fucking SketchUp, like a CAD program, and it shows, but I just love that creativity. Human creativity. I didn't feel numb. I didn't feel bored or taken for a ride. It was just fun and sweet.
Go ahead and laugh, but don't shit on this movie. It's too fucking wholesome for that.
EDIT: did some research and remembered that SketchUp is something I used in school as a kid. I take it back: this film is a technical masterpiece.
Adventures in npx and the Philosophy of Good Code
Date: August 23, 2026
Hello, world!
Trying to put together this website was like trying to put together a house with a glue stick. Somehow it's holding (for now), but my god was it painful.
I've been slowly starting to work through Pico's Heavy Wizardry 101, and I've been having a lot of fun with it. I was even inspired to write a dig against Elon Musk and upload it as a git repo at git.elfilosofo.net/hello-world.git. Check it out, if you want; but to cut a long story short, I reduced the size of a hello world program from some 78k to 400 bytes. I stripped headers, merged binary sections, removed comments and build info, and eventually eliminated the C library altogether—that is, as well as learning what all those things mean! Say what you want about Assembly, but it is simple. It is so simple, in fact, that it defies common sense. Now compare that with my next day's project of putting this beast of web 1.0 nostalgia together, and you'll understand why I have appreciation for it.
At the bottom of the page, you'll see a little tag telling you that this site was built with 11ty. That's true. And I'm very grateful for the tools, the tutorials,etc. Still, it was agony for me. The builder uses several different kinds of coding languages to stitch everything together, and it's not always clear what the syntax is supposed to be. The way I described it in my doc files captures the experience fairly well:
Imagine speaking French to someone only for them to reply in Italian, which you respond in, but then it's speaking Spanish. Welcome to web dev. That's what it's like.
I'll grant you that I'm not a web-developer, or even particularly talented as a programmer. I'm very much learning. Nevertheless, having been tempted to put my head through a wall, I instead did the healthier thing, and started to ask myself what I thought "good code" should be; and sure, there is an element of what I have to say that is eminently concerned with what I value. I'm not going to sit here and pretend that I'm somehow the arbiter of a world of which I have a very small part. There are programming legends who might push back against something that I say, or who may at least offer more nuance or insight into the languages themselves and how they can be used. But maybe, at the same time, there is insight in hearing from someone like me, who isn't buried in this stuff from dawn til dusk. I hope that's true, and that even if you disagree with what I say, you at least find it constructive or thought-provoking.
Preamble
One of my earliest lessons in programming was that the term itself can be quite broad. In grade eight, I was excited to finally get to use programming in our class, but I was disappointed to find that this meant using Scratch. By that point, I'd played around with a few programming languages like Java or Python or JS, so Scratch was child's play—not something I thought of as "programming". And you know, despite my own disappointment, that was kinda the point. Scratch exists to teach learners the basic structures of programs using an intuitive drag-and-drop interface. You don't need to look through docs or google solutions to problems. What you can make it limited, but you're learning to think as a programmer thinks: through loops, evaluative statements, objects, functions, etc. And for kids, that's great! Power to them.
How many other types of "programming" exist in our world? We talk about things like programming a remote, but most times we tend to avoid the "programming" language because something doesn't involve code. Usually, this is at the highest level you can possibly get without passively or not interacting with a system at all. For instance, you can program your alarm to go off at a certain time, or your phone to play a particular ringtone when a particular person is calling. When you think about it, anytime you give a system instructions how to behave under certain conditions, you are programming it to do something.
Like Scratch, this has limits that exist within the confines of a system, which you can perhaps break or bend, but which is eminently the rule. If you want to change that rule—for example, if you not only want your phone to play a ringtone but (and this is silly!) dance/vibrate to its tune and send a text to the caller with the song lyrics—you're going to have to get creative. You could call this meta-programming, if you like, since you're changing the rules of a system; but that doesn't really matter. What matters is that programming can mean many things that we don't ordinarily assume it means. (You could say, my use of the term exploits a linguistic ambiguity vulnerability and injects a new understanding.) But at the end of the day, programming will boil down to working with conditions, logical operators and evaluators, and functions.
The Problem with Your Remote Control
Imagine a brand new, blank remote control. The annoying thing about learning to program it is that it's only really useful for this one remote (and probably only that one model of it). It feels like a waste of time because you can't use it anywhere else. You're just teaching it to recognize your instructions so it can do something you actually want it to do, but then you get a new remote control or TV set, and you have to do it all over again. Yay.
So let's put ourselves in this situation: what would make this easier? I can think of a few ideas:
- If models of the remote emitted a standard set of signals so TVs could (attempt to) recognize their instructions out of the box.
- The ability to export configurations en masse so they can be imported and remapped onto another remote.
- Good documentation, so we're not stuck guessing what we have to do to program the remote in the first place. That's just off the top of my head. This may seem a far cry away from computing, but already we can see a few things that make programming easier and more valuable to know:
- Interoperability: diverse tools can communicate with each other easily because they operate according to a common standard. (Tracking my metaphor earlier, that would be like two people speaking and responding to each other in one language.)
- Portability: the ability to take and move your code for use elsewhere when it becomes useful.
- Documentation: this one's still the same. Good documentation has always been valuable with new technologies. Given these three things, programming my remote control doesn't seem such a waste of time since it can be re-used and applied elsewhere in a predictable way.
KISS
By extension, we may infer a fourth principle of good programming: simplicity. Of course, in this context "simplicity" is a term relative to the complexity of the system that it describes, but it applies nonetheless. If I had to break-dance to properly program my remote, I would probably have to pay someone else to handle it for me. Now that's obviously ridiculous, so let's consider a real life example to demonstrate.
Morse code was cutting edge for its time and is well worthy of note in the history of technology. But you've got to admit, it is rather hard to understand. Imagine we spoke in Morse code: instead of English, we are now reduced to caveman grunts, long or short, for the time being. How do you imagine that would affect the quality of our conversation?
- We would spend a lot of time flipping through references to decipher each other's grunts.
- Similarly, we would spend time translating our own thoughts into long and short grunts.
- We'd spend more time grunting at each other than we would speaking.
- I give up.
Come to think of it, this is probably why cavemen didn't leave us with a plethora of literature. Until the tools were developed to convey complex thoughts in a more convenient way, the technology of our communication would be limited by our means to communicate. Is that a circular claim? Yes, I'd say so, but it just goes to show how technology adapts to humanity and vice versa. Words may be more complex, but they are also more simple in that their meaning is intuitive to us and well-suited for the task at hand. That's why I say, "Keep it simple, silly."
Okay, so we've established that the written and spoken word is preferable to caveman grunting. What does any of this have to do with computers?
Grunting at Silicon
Programming isn't like talking to another human being. Human beings, at least in their native communities, have a lingua franca they can rely upon to communicate effectively. Even if our tongues differ, there are symbols common to our experience that we can use to make sense of what someone else is trying to say. Maybe the best (and one of the most dramatic) examples of this is putting our hands to our throat to indicate that we're choking. That simple act of displaying symbols does a lot to communicate without the use of more abstract words:
- The placement of the hands indicate the source of the problem.
- The motion of the hands indicates the pressure of choking.
- The context shared by human beings (i.e., that we understand the possibility and danger of choking) implies the rest of the message.
- The sound of choking, too, indicates that you're choking.
This is something that we can surmise as human beings, but we do not share the same context with machines and (probably) never will. Not to mention, we have entirely different hardware: we're carbon-based, they're silicon-based. That's an entirely different way of existing in the world. So I can promise you now that if an android is ever at the dinner table (where it's hanging out just to be polite), we would have a hard time understanding what it's trying to tell us when it short circuits. And that's where programming comes in!
Imagine we're at the dinner table with an android, who has short-circed. If he were to communicate with us in our native language, he might say something like this:
010010001100011111000000000000010000000000000000000000000100100011000111110001110000000100000000000000000000000001001000100011010011010000100101001011110001000001000000000000000100100011000111110000100000111000000000000000000000000000001111000001010100100011000111110000000011110000000000000000000000000001001000110001111100011101000101000000000000000000000000000011110000010101101000011001010110110001110000001000000110110101100101001000010010000001110011011010000111011101100100011101000010000001100011011010010111001001100011011101010110100101110100001000010000101000000000
Yeah, I wouldn't know what he wanted either. But now imagine he had a translator that helped him to bare his soul for us. We'd end up with assembly instructions to print "help me! short—". That might be a bit confusing still, so add a couple more translators on, and we'd have something looking like a C program or a Python script. Even if we were to adopt caveman grunting in an effort to communicate in binary, we'd still need to explain to the android that long_grunt=1, short_grunt=0. And we would probably communicate that too slowly to save them. (Poor fellow!) This is all computer programming is at its lowest level: a stack (pun intended) of translators between us and the processor, so it knows what we're talking about.
If we want to think about it in this way, we might think of another principle of good programming: brevity, not to be confused with simplicity (which has more to do with the organization of a system than the length of instructions). In philosophy, there's a long-running joke that you shouldn't say in 100 words what you could say in 1000. (In reality, brevity was encouraged in our writing—isn't it obvious?) We are fortunate in computer programming that CPUs don't angrily tell us to get to the point because some code can be quite verbose and could be reduced to something much shorter. This would make debugging much easier and manage memory more efficiently. Our android would thank us for it.
Concluding Thoughts
Unfortunately, my adventures in npx haven't quite panned out this way. A multitude of backwards compatibility layers, plugins, and programming languages each talking past one another has seen to that. Although, in fairness, this isn't really the fault of 11ty, or any other static site generator. As I said, simplicity is something relative to the complexity of a system, and my-oh-my is the web complicated.
But I hope what my adventure shows is that it's not just about sparing yourself a headache. Good code has philosophical implications not just for the way we interface with technology but how technologies interface among themselves.
Interoperablity allows larger ecosystems and communities to flourish.
Portablity allows people and tools to collaborate.
Documentation lowers the barriers to entry for those who wish to create cool things.
Simplicity creates transparency in systems, fostering accountability.
Brevity helps keep things simple, and leaves less room for error.
This isn't a political manifesto, but insofar as we increasingly rely on code for our political, social, and economic arrangements, I do believe it has political consequences. How we code is almost as important as what we code, and if one believes there is an art to programming, it is high-time we embrace this.
Babel, or Goodbye to All That
Date: November 16, 2025
Sadly, Osamu Dazai has to step aside now that Babel, or The Necessity of Violence: An Arcane History of the Oxford Translators' Revolution by RF Kuang has replaced The Flowers of Buffoonery as my favourite novel. I have long been partial to fantasy stories since I was a little kid, but it's not just the magical systems that Kuang constructs that beguiles me so. (For another excellent example of this, I would recommend her book Katabasis, which just came out this year.)
Babel, for me, is incredibly compelling because it is not purely fantasy—and I know, I know! What I'm about to say may attract the ire of many fantasy readers, but it must be said: Babel does not romanticize notions of "good versus evil" like many other stories do when they offer social commentary. We see a lot of the nuance and anxieties ridden in the characters, and there were times when I was reading the book when I was made incredibly conscious of my own biases, social location, and moral compass. What would I do in their place? Would I be any better? Would I have the courage? Is this truly what is necessary? And I think a lot of this owes to the fact that Babel is largely a fantasy-reworking of something that really happened: British colonialism.
For the record, I'm a British citizen. I wasn't born there, but most of my immediate family is from there, and so I had quite the different experience learning about the Empire than did many of my friends, whose families hail from other parts of the world: India, Sri Lanka, Pakistan, China, Quebec, Kenya, Botswana, Ireland, Scotland, etc. I cried when the Queen died. I've sung the anthem proudly. I've held Churchill up as an icon. I've defended many of the notions and institutions of British "culture" that, around the world, has caused great harm. And I have, though maybe quietly, lamented the fact that British power and influence has waned dramatically over the last hundred years. (Literally, one hundred years ago, Britain was still a powerhouse!) Hell, even my favourite show growing up in the early 21st century, Doctor Who—which has often had progressive messages, certainly for its times—has had characters portrayed as laudable utter phrases such as:
No, no. Only Britain's "great".
—The Doctor in The Voyage of the Damned
and
We may be losing the Empire, but we can still be proud!
—Wilfred Mott in The End of Time, Part 1
You want to know how much I love that show? I didn't even need to look those quotes or episodes up—I've got it all bloody memorized! So, don't get me wrong: this isn't to take away from Doctor Who. (It's had enough taken from it already.) Rather, I want you to see just how deep, how subtle that imperial attitude is in British culture. That even the Doctor has a line like this—you know, someone who's not actually British but an alien from outer space—should serve well enough as proof.
And when I look at a lot of the rhetoric around Brexit, including rhetoric I'd have used at the time, I daresay the empire was still an undertone: a humiliating loss that was compounded further by demographic changes in the country and a reliance upon Europe. Why else would Nigel Farage, a key player behind Brexit, say that the day the UK left the EU should be called an "independence day"? People felt like they were "losing" an idea of their country. But here's the thing: that idea wasn't lost. It was bullshit to begin with.
Brexit and Babel actually have a lot in common. On the surface, the ideas sound noble: either it's about protecting something great, or spreading something that's great. Such is the justifying logic of all empires. And yes, on the surface, there's a lot of talk about British values or Judeo-Christian values (another favourite of mine), but what does it come down to? Love? Liberty? The pursuit of happiness? Free markets? That last one is close, but no cigar: the answer is money. In the case of Brexit, let's be honest, how different are British values from European values? And in the case of Babel, as in the case of the real-world British Empire, we see pure, old-fashioned economic extraction done "the hard way".
Did you know, for instance, that Britain was the OG drug smuggler? The East India Trading Company would find ways to smuggle opium into China to make up a trade deficit. China didn't want much from Britain, but the British went mad for teas, spices, and other "exotic" oriental accoutrements. Tea alone is a shit-load of money leaving the British economy for China's. And when the Chinese put measures in place to protect their citizens from opium, we get the Opium Wars, which concluded with the British (and the French the second time around) forcing the Chinese to adopt a policy of free trade. How about those British values? And that's what empire is about. That's what capitalism is about. The freedom to do what the bigger, more violent guy says.
I got to thinking about all of this because in Babel there's a character named Letty, who is the only native-Brit among her cohort of people of colour—neither Robin, Ramy, nor Victoire were British or even white for that matter, and each of them were extracted from their homelands to study translation at Babel, ultimately for the benefit of the British Crown. How does translation help the Crown? Well, that's where the magic comes in. Their identity as foreigners, immersed in another language completely, gives them an edge that the native-British scholars don't have. But through a curious series of events, they join the Hermes Society, which is a revolutionary movement of translation scholars that fights back against the Empire.
SPOILERS AHEAD:
And Letty betrays them .There is a "proper" way to fight back against the Empire, but what they're planning to do is not the right way. She can't take it. She can't examine her privilege. She can't reckon with the lie that she's been told her whole life: that we're "the good guys" here! She couldn't entertain that future and the price it might cost them, so she ratted them out. In doing so, ironically, she ended up making it so that the survivors' choices were either imprisonment, torture, and slavery in service to the Crown, or burning the whole fucking thing to the ground. Guess what they chose?
The novel doesn't present this choice with any lack of moral ambiguity. There are arguments and debates, people leave the movement, people die. There is a moral cost to their revolution, that much is clear. But then, what is the alternative? To reason with people who won't be reasoned with? Certainly, the Empire does not engage in good faith. It's never been about that, so good luck with it. And this is sometimes the reality of historical process: sometimes, when there's a bully, instead of appealing to his more enlightened nature (providing they have one), do they not just need a good punch to the face? Maybe that's not prudent. Maybe that goes against some abstract moral code. Maybe that won't stop them entirely, and maybe it will end poorly for you. But maybe they'll think twice before they bully the next person, and maybe that's enough.
I love how Kuang didn't simplify this. These are important questions to consider when proposing radical social change. There is some measure of success but also tragedy in the story. And that's partly why, though I'm not proud to say it, I can relate to Letty. I have to contend that there is a part of me that is like her, that would love to cling to the myths that can justify my own comfort. But this fantasy isn't a fairy tale. As I said, there is a moral cost, and there is a cost to either side. But these are not costs paid for a common cause: the causes are different, so which cause do you choose?
A generation of nihilists
Date: September 15, 2025
In my first ever philosophy course (back in high school), I made the mistake of thinking Nietzsche was a nihilist. My teacher gently corrected me, albeit in a way I misunderstood.
Now, seven years later, I think I get it. Now I understand the death of God as the death of meaning, at least in the collective meaning of Western consciousness. And when meaning dies, what follows is inevitably the crisis of nihilism, which Nietzsche sought to overcome.
Arguably, meaning is always something which is lost and found. I'm sure every generation has their struggle with it. Nevertheless, I feel there is something particularly nihilistic at the core, buried deep in the basement of my own generation. A kind that has never so desperately needed reckoning with. Of course, this sounds a tad dramatic. But such is life.
Let me tell it as I see it: my generation (Z), and to an extent the millennials who came before us, have come of age in a time when I think it's safe to say the great promises of the crescendo that christened the end of the twentieth century—the "end of history", as some call it—have fallen remarkably flat.
There is a lot of anger—myself included—and it's justified. There's wars, human rights abuses, wealth inequality, the rise of the far right, affordability crises, and—if that doesn't kill you—the looming climate catastrophe that has noticeably become worse since I was a wee boy. All this in a time where traditional structures of religion and politics have, let's be honest, failed in their attempt to resurrect their most crucial function: hope. Hope of a world worth living in. Hope of a world that we'll be able to build.
There's obviously a lot of disagreement about how to do this. And I think this explains in large part why my generation has mysteriously skewed so conservative so young, particularly in the demographic of young men. The certainty of the past offers us an attractive vision, but that past cannot be a future. It's as pointless as an old man trying to relive the glory days of his youth: no matter how close he may come, he cannot contain the self-consciousness that developed through living. Pandora's box, once opened, cannot be closed again.
So I would argue that something new—something radical—must be tried if we are to do as Niezsche would have us do: forge a new meaning in which we "live and move and have our being".
I suspect the multitude have tried that. Many, I'm sure, have been frustrated by failure. I have. But this is not yet the time when the book is closed and the story laid to rest. There's still a bit of history to be lived. What matters, I suppose, is that we are on the right side of it.
"The ultimate hidden truth of the world is that it is something that we make, and could just as easily make differently."
— David Graeber
