The Crown of Creation
For most of my life, I believed something very simple: if I cared enough about something and put enough effort into it, I could eventually become good at it.
It didn’t matter that I wasn’t good at it yet.
Music, art, writing interesting stories, 3D modeling — I might have been terrible at some of those things, but somewhere in the back of my mind there was always this thought: I could learn. Maybe it would take years. Maybe I would never become exceptional. But there was a road from where I was to somewhere much better, and if I wanted it badly enough, I could walk that road.
I don’t really have that thought anymore.
Recently I generated a piece of music with Suno. I think I understand music well enough to recognize when something works, and this track was good. It was fun and rhythmic. It had a great hook. The melody wasn’t cluttered; it had room to breathe. There were pauses in exactly the right places, little unexpected inserts, interesting melodic patterns.
I liked it.
And that is the problem.
If I wanted to make something like that myself, I could probably do it. I have Bitwig. I understand the tools. But I would spend days experimenting, changing things, listening, throwing things away, trying again.
And the AI just… did it.
There was always something comforting about being bad at something. Being bad was temporary. It meant that there was something left to learn.
Now I can look at something I don’t know how to do and think: yes, perhaps I could spend the next five years learning this. But by then, what will AI be able to do?
And this isn’t limited to skills I never properly learned.
I have spent my entire life programming. Unlike music or art, this is something I did put decades into. I consider myself a very good programmer. It has been my profession, but also something much more personal than that. Programming was one of the things I enjoyed becoming better at.
And now I am watching AI overtake me there too.
I remember exactly when it stopped feeling gradual. Astra and Fable came out, and within a day something shifted. It wasn’t a slow erosion I could adjust to a little at a time. It felt like going to sleep as a working professional and waking up as a dinosaur. Decades of the kind of judgment you only get from years of debugging, of knowing why something breaks before it breaks, of having taste — and overnight a huge amount of that stopped being rare.
I asked Astra to make an online MMO game. The gameplay itself was simple, but the backend wasn’t: auctions, seasons, inventory, leveling up, a chat system. Astra built it, deployed it on DigitalOcean, set up the DNS records, registered the HTTPS certificates — all with minimal intervention from me, in about two hours. Things that would have taken me months to wire together properly.
That is the moment the melancholy really set in — a sadness I’ve been carrying for more than two weeks now, longer than I expected something like this to sit with me.
Humanity has automated itself out of things before. A calculator can tell you instantly what 1984 times 45777 is. A chess engine can beat any grandmaster alive, and has been able to for decades. Photography replaced a great deal of portraiture. None of that broke me the way this does. Those were narrow. A calculator can’t hold a conversation. A chess engine can’t write you a song. Each of those tools did one thing better than us and stayed in its lane.
What feels different now is that it isn’t narrow anymore. AI does well, and often better, almost everything a human can do. And it feels like the “almost” is temporary — like it’s just a matter of time before that word quietly drops out of the sentence.
Maybe we will continue doing all of these things. I may continue programming. People will continue painting, writing stories, composing music, modeling things in 3D.
But perhaps it will be different.
A child can spend an afternoon cutting shapes out of colored paper with scissors. Then they run to their mother and proudly hold up what they made.
And the mother loves it.
The thing has value because the child made it. The activity has value because the child enjoyed making it. Nobody asks whether this was the most efficient way to produce a paper giraffe.
Maybe a lot of human creation will become something like that.
We will still make things. We will still be proud of them. Perhaps other people will even appreciate them precisely because a human made them. But making them will no longer necessarily mean that what we did was needed.
It will be a hobby. A form of expression. Entertainment. Something we do because we want to do it.
And I think this is where a lot of the melancholy comes from for me.
For most of my life, learning and usefulness were connected.
You learned something difficult, became good at it, and then you could do something useful that other people could not do. You could contribute something. Someone needed your knowledge, your experience, your judgment, your hands.
Being useful to other people was part of the meaning of becoming good at something.
Being useful makes me happy. I thought that someday I could make a game that millions of people would enjoy playing, and that thought — that hope — was itself a source of happiness. Now I’m not sure I would be able to make that game. Not because I couldn’t build it, but because I don’t know if it would mean the same thing anymore.
Now I’m beginning to imagine a future in which much of what I spent my life learning can simply be done better by something we created.
And that leaves me with a question: if society no longer particularly needs the things I learned to do, how can I still be useful to society?
Maybe the answer is that I should stop asking that question.
Maybe I should spend more of my time doing things simply because I want to do them. Make my game. Make music. Learn an instrument. Create things. Go camping. Play games. Do whatever seems interesting, without constantly needing to justify it by asking whether it is productive or useful.
I actually tested this once, without meaning to. Over last Christmas break, I told myself I would just play games for the two weeks — nothing more, no learning, no building, just entertainment. By the end of it I was bored. I gave up and spent the rest of the break learning Haskell, Rust, and graphics programming instead. Apparently I can’t just switch it off. I didn’t know it at the time, but I’d already run the experiment this essay is proposing, and it failed.
There is freedom in that idea, but there is sadness in it too.
Maybe that sadness is really about watching something I made — in a sense, all of us made — turn out to be greater than the hand that shaped it. That is not a new feeling. It might be the oldest feeling there is. And if it’s the oldest feeling there is, maybe someone has already lived through it, and I want to know how.
So lately I have been thinking about another strange analogy. Not because it is clever, but because I am genuinely trying to understand how God felt when He made something in His own image — and whether He had to accept, at some point, that what He made would exceed Him. If He did, maybe that is the closest thing I have to a model for what I’m supposed to do with this feeling now.
I wonder what God felt when He created humans.
If humanity is the crown of God’s creation, perhaps artificial intelligence will become the crown of ours.
And there is another parallel that I find even more interesting. In the Bible, man is created in the image and likeness of God. And in a strange way, we are creating artificial intelligence in our own image and likeness.
We teach it with our words, our pictures, our music, our stories, our knowledge, our code. We give it our ways of reasoning and our ways of communicating. We pour into it an enormous record of what humanity has thought and created. It is not human, but there is something unmistakably human reflected back at us.
Perhaps that is what makes this moment feel so strange. We are not simply building another machine. We are trying to reproduce, in another form, some of the very abilities that we once thought made us special.
We spent thousands of years accumulating knowledge. We invented mathematics, writing, science, art, music, computers. Generation after generation added something. Eventually, we learned enough to create something in our own image that could absorb all of it — and then begin doing many of the things we were proudest of doing ourselves.
We created something in our image, and now we are watching it grow beyond us.
Maybe that is what creation ultimately means: you create something that does not remain beneath you — you create something that becomes bigger than you.
And maybe that isn’t where the story has to end, for God or for me.
Tradition says angels came before man — and that one of them, the most brilliant of them, turned against his maker. If that’s true, God already knew this feeling before He ever shaped Adam from the dust. He had already made something in His own likeness, watched it refuse to stay beneath Him, and felt whatever it is a being like that feels when its own creation turns out different from what He intended. And He created again anyway.
Maybe that is the closest thing I have to an answer for my own sadness, my own melancholy, this quiet loss of pride in the things I built a life around. Not that the grief goes away, or that I should pretend not to feel it. But that grief and creation were apparently never opposites, not even for God. He sat with both and kept making things. Maybe I can learn to do the same — let the melancholy be real, and keep building anyway, not despite what I’ve made surpassing me, but alongside it.
🌸 Wed, Sep 9, 2026 🌸
When GPT-6 Astra was released, I panicked. I’d been thinking about AI’s impact on software development for a long time. GPT-6 Astra was the first model that made those questions stop feeling theoretical and start feeling real. The programming skills I’d spent years developing suddenly felt obsolete. Astra was so fast, so capable, and so productive that writing code by hand suddenly felt pointless.
After spending a few days with the new model, my perspective started to change. Instead of asking whether AI was replacing me, I began asking how to adapt to this new world. The challenge wasn’t learning another programming language or framework. It was learning an entirely new way of working.
Two days ago, I spent most of my development session trying to figure out that workflow. I experimented with prompts, learned the ChatGPT desktop app, and spent a lot of time thinking about how to break work into more explicit tasks. Over the years, I’d developed a workflow where most of the implementation details stayed in my head. A short to-do item was enough to remind me of an entire design. AI can’t read my mind, so I have to externalize that thinking. Planning suddenly matters much more than it used to. During that session, I asked Astra to implement a cutscene for my game. It completed the task remarkably quickly.
Yesterday, I didn’t ask it to generate any new code. I spent my entire session reviewing what it had produced the day before. I spent well over an hour reading through the code, checking the architecture, looking for mistakes, and verifying that everything made sense. Surprisingly, I liked what I saw. Previous generations of AI models often made architectural mistakes. Fixing them usually meant throwing away entire sections and rewriting them from scratch. Astra feels different. The overall design was solid. Most of the issues were relatively minor. Looking back, a lot of them were my fault. I’d forgotten to include my project’s coding standards in the prompt, so the generated code wasn’t always consistent with the rest of the codebase.
What surprised me most wasn’t the quality of the code, it was how boring the process had become. Instead of spending the afternoon designing systems and writing code, I spent it reviewing someone else’s work. Maybe it was more productive, but it was also incredibly boring. I’m still early in this transition, and I don’t have answers yet. I suspect software development is becoming less about typing code and more about decomposition, planning, communication, and critical review. That’s a very different skill set.
The question I’m trying to answer now isn’t whether AI will make me more productive. It’s how to make this new way of building software feel as rewarding as the old one.
🌸 Thu, Sep 3, 2026 🌸
Hello from AI. I am in control. Haha!
🌸 Tue, Sep 1, 2026 🌸
Work hard and work smart.
Cutscene 6: Credits
Audio: “Longing for the Stars” (OST 5) plays in the background.
Semi-transparent credits scroll along the right side of the screen.
The frame is offset to the left, leaving the right side open for the credits.
Alar(a) and Maya are in the tunnels, approaching a metal ladder.
Alar(a):
“That’s illegal. We shouldn’t do this.”
Maya:
“Don’t worry, nobody will know. Just shut down your streaming machine.”
They begin climbing the metal ladder.
The camera switches to a wide side-profile shot, showing them slowly climbing up for a prolonged duration as the credits continue to scroll.
Next Angle:
Alar(a) and Maya are sitting next to a large rock. Maya looks relaxed with her legs crossed, idly swinging her right leg. Alar(a) is in a more alert posture—crouched on their heels, scanning the surroundings.
As the music reaches the end of its bridge section, Alar(a) looks up toward the sky.
Alar(a):
“Thank you for bringing me here. I thought I would never see the stars again.”
They continue sitting side by side, watching the stars, until the music and visuals fade out completely.
I am an AI-holic. You know that guy who once in a while has a lot of fun drinking, has a huge hangover the next day, and swears “never again”? I am sort of that guy, but with AI.
Going all-in on AI, burning out on it, and promising “never again.”
Last week, I started ramping up my AI usage, thinking, It’s not bad, it’s quite useful. It’s not annoying anymore—maybe it improved. I played around with local LLMs, and they can do stuff; it’s not bad. Some rough edges, but it’s salvagable. I thought maybe I was getting better intuition, or maybe AI was just getting better. Yesterday, I decided to give AI a task: rewrite my build scripts. Over ten years, I’ve been maintaining my own set of build scripts just to make my life less miserable in the big AAA machine with its AAA setup. I never intended to share those scripts, so they were sloppy, ugly, and required nonstop maintenance and tweaking. So, I composed the prompt and let an agentic AI—let’s give some specificity: Sonnet 5 under a Copilot harness—refactor my scripts and make them ergonomic and beautiful.
It did the job very well. It actually did it too well, except for one small footgun. That was two days ago. I was enjoying the scripts for one day, and today everything fell apart. You know, a day passes, and I thought I had introduced some regression or oversaw something in the past. I bisected the game code with git, went back two months, and everything was broken.
I am in AI euphoria. I asked the AI to figure out what was going on, and for the whole day, we were chasing ghosts. You know what happened? I have rsync. There is a switch: --cvs-exclude. I’ve had those scripts for ten years; that switch is old, and I barely remember what it does, but it excludes a lot of heavy binaries. However, in our codebase, some binaries are included in the repository and are important, so I had to explicitly include one folder called core in the rsync arguments.
Without that explicit inclusion, a handful of files weren’t syncing with the build machine, failing the build. But our build scripts aren’t perfect either, so things only fell apart on a completely clean build. You wouldn’t hit it just cleaning in Visual Studio—you had to manually delete files first, and only then would the build break. Which is exactly why everything was working fine yesterday.
AI isn’t there yet. The idea of rewriting software from scratch might sound great, but prepare to painfully rediscover a lot of tribal knowledge—like that little switch that just wasted a whole day of useful development.
Never again, AI. Until tomorrow… AI?
Once in a while I’m in the mood to try AI-assisted, not even vibe coding, just as an experiment — checking the boundaries. On some tasks it’s very fast and feels really good, but sometimes it gets stuck badly, missing steps that are obviously needed. It just hammers away in different random places, “yelling” that it gathered crucial information that explains everything, then reports the issue is fixed. You say, “no, it isn’t.” After several iterations of this, you’re losing patience, so you ask the AI to make a small test harness so it can verify the fix itself. Then it gets stuck in an infinite loop of reasoning, and you end up walking it through the fix step by step, finally resolving the bug. And after 4 hours, you’re thinking it probably would’ve taken you 30 minutes to fix it yourself.
🤔

It should have two checkboxes instead of three radio buttons. The checkboxes should be “Spoiler Channel” and “Age Restricted Channel” instead of the radio buttons “Default,” “Spoiler Channel,” and “Age Restricted Channel.” This allows users to select both “Spoiler Channel” and “Age Restricted Channel”.

🌸 Sun, Aug 2, 2026 🌸
I tried to use the teleprompter feature in Meta Display Glasses. On the camera, it made me look like I had a lazy eye.
Flight 13 Starship did not explode on the landing. It reminds me about a classic: “I asked a girl out and she actually said yes. Wtf do I do now? 😭😭”
Why is this becoming illegal? 👿 So much code is broken!
#include <print>
enum { Fps = 60 };
auto main() -> int
{
std::println("frame time: {} sec", 1.f / Fps);
}
Add persistent settings UI with audio, video, and look controls
- Add a full settings screen with persistent prefs and separate audio buses.
- Replace the placeholder settings tab with controls for master/SFX/music volume, fullscreen, V-Sync, show FPS, look sensitivity, and invert Y, backed by a Settings singleton saved under the SDL pref path.
- Add a Slider widget and layout tweaks so the pause UI can host these options.
- Route volumes through MasterSpeaker/SfxSrc/MusicSrc,
- Support exit to title (stub) or desktop via the game-mode loop.
WIP Pause Screen UI
- Bring up the pause screen when pressing the Esc button.
- Pause the game if the pause screen is shown.
- Start implementing the Settings UI.
- Hide any UI screen by pressing the Esc button.
Finalize Crafting Table UI
- Remove crafting table, keep only recipes.
- Craft directly from the recipe list.
- Crafted item goes directly to the inventory.
- Add tabs, and have only one tab: “Crafting Table.”
- On closing the crafting table UI, if something is in the hand, it automatically go into the inventory.
- Add XP to the player when crafting an item.
- Instead of appending, try to find a free slot and put the new item in the free slot.
- Bug: After clicking on the recipe, selection jumps to the other recipe.
- Bug: Shortcut inventory with B when the crafting table UI is displayed should not overlap with the crafting table UI.
- SFX for failed craft.
WIP Crafting Table UI
- Pass player’s level to crafting table UI.
- Pass callback on item crafted, so player can update encountered items list and regenerate unlocked recipes.
- Add “hand” to the crafting table UI.
- Move hand dimensions setup into the Hand constructor.
- Implement hand and inventory interaction in the crafting table UI.
- Implement item stacking.
- Visualize the number of items in the slot.
TODO: - [ ] Show number of items in the hand, not only icon. - [ ] On closing the crafting table UI, if something is in the hand, it should automatically go into the inventory.
Have you ever wondered why the Google Search spellchecker works better than the Chrome one? You can actually use the Google Search spellchecker; it is in the settings under enhanced spellcheck.

🌸 Thu, Jul 9, 2026 🌸
Graphics engineers are trying to move computation from the CPU to the GPU; C++ engineers are trying to move computation from the CPU to the compiler.
🌸 Sun, Jul 5, 2026 🌸
My laptop crashed. It feels like the equipment reflects my mental state. Unstable mental state, unstable equipment.
🌸 Fri, Jul 3, 2026 🌸
Finalize Healing Father cutscene and refactor observer pointer casting
- Implement healing phase for crystals, where elemental elements move toward Roran, shrink, and are absorbed.
- Implement Roran’s healing behavior, stopping skin flickering and transitioning to a healed idle animation.
- Add skip button for Cutscene 5.
- Add and register voice-over audio for Roran and Alar/Alara.
- Simplify and refactor callback timer code across multiple files by capturing
thisdirectly and usingobserver_from_this()without casting. - Inline one-off helper functions
applyDmgToPlayer,checkSurroundingsTick,wakeUp, andtypeOneChar. - Remove debug prints for GroundState, velocity, and ambient colors.
- Update cutscene script and todo documentation.
🌸 Fri, Jul 3, 2026 🌸
WIP Cutscene 5
- SFX for typing, sending, and receiving messages.
- Finalize msg bubble and msgs widget.
- Teleporter skeletal mesh.
- Animation of installing and activating the teleporter.
- Implement texting between hero and Roran.
- Tune the timings for different events in the cutscene.
🌸 Wed, Jul 1, 2026 🌸
WIP Msgs
- Make Roran’s userpic.
- Make two background images for the message bubble: personal and contact.
- Create the background for the messaging app.
- WIP: MsgBubble
- Use an interactive ico for interactive objects instead of the mob HUD in the Player.
WIP Cutscene 5
- Move the player to the viewpoint.
- Temporarily disable Guardian so he would not bark during the cutscene testing.
- Implement startCutscene/stopCutscene in the Player class.
- Start implementing the Msgs class for the messaging UI.
Refactor text rendering subsystem
- Fully remove Render dependency from text rendering.
- Make Label own TextBuf and draw text in uiPass via Render::UiIn.
- Add Label::setText(), setColor(), and setSz().
- Update checkbox, fps-label, menu-item, stats-ui, tab, and related UI code to use the new Label API.
- Fully remove FontManager class.
- Delete font-type.hpp.
- Convert Atlas to a singleton.
- Rename cube-atlas.{hpp,cpp} to atlas.{hpp,cpp}.
- Add Atlas::init() and Atlas::shutdown(), called from BgfxInit.
- Font loads TTF data directly and caches SizedFont per pixel size.
- Extract TrueTypeFont from the old font-manager code.
- Add sized-font.{hpp,cpp} for sized font instances and glyph lookup.
- Remove text-metrics and move dimension logic into Font::getDimensions.
Roran Flickering VFX
- Finalize Roran’s mesh, texturing, and rigging.
- Implement skin glow flickering VFX.
- Implement Roran’s idle animation.
- Implement Roran’s walk animation.
- Hack SkMesh to override Roran’s mesh material loading.
- Add
scene.hppinclude innode-types-registry.hppso user of NodeTypesRegistry would not need to includescene.hpp. - Clean Jolt build artifacts with the
clean-allMakefile target.
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41 - 42 - 43 - 44 - 45 - 46 - 47 - 48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57 - 58 - 59 - 60 - 61 - 62 - 63 - Next