Enlightenment is Overrated

/images/_5fb4ef3e-b588-497c-856b-253ea4f58a89.jpeg

Remember how I went on and on the other day about my brave new architecture? Turns out there were some unanticipated flaws in that scheme that have forced another sea change.

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

As brilliant as it felt, the all-browser plan didn’t quite live up to its promise. I’m not going to turn this into a long technical post-mortem, but for the sake of any coders in the room, I’ll summarize the issues:

  1. Manipulating large zip files from Javascript in a browser session is fragile. Especially on Android. With the battery miser shutting down background tasks and continual process priority changes, the FNKT files were getting corrupted regularly.

  2. The processing power available on my phone was sufficient for building small FNKT files, but to process an entire novel, break it into sentence chunks, and then babysit those chunks in round-trip calls to LLM services for alignment and TTS generation proved to be WAY too slow. An entire day waiting for a novel to become a FNKT? Nobody is going to wait that long, but server-side processing is a door I don’t want to open.

So, long story short, I think my in-the-browser app scheme is not viable for this particular kind of data. I still like the delivery mechanism, but it would have to be used in a situation that needs a lot less compute power, and can survive the whiplash of a constantly changing memory context.

What’s Old is New Again

So I’m back to my old friend Kivy. Although this time, I’m leaving CLI and TUI off the table. Or more accurately, I’ve built some CLI-only tools for creating, editing, and validating FNKT files, but the study tools are Kivy-only.


Read More


/images/_21787e10-6139-46e9-9c35-b018bf7caafa.jpeg

Frankie Achieves Enlightenment

There is a particular failure mode that has bedeviled my project life for decades. I call it the “extra mile” problem. I build things because they solve a problem for me. Once I get a solution that works for my particular case, that itch has been scratched, and the remaining work — onboarding, explainers, error messages, edge cases, polish — is an extra mile of annoying minutiae that never seems as appealing to me as the next problem waiting to be solved. So I tend to move on without ever sharing the results with anyone else.

It’s a shameful, totally selfish habit, but fighting your own subconscious is a constant battle that you’re doomed to lose in the end anyway. So instead of fighting my own nature, I look for ways to trick it. And with FrankenTongues, I think I’ve finally done that.

But the epiphany required was so profound that it had to arrive in three parts.

/images/file_00000000a844722f9d1c66ec6d854aec.png

Tormenting AI For Fun and Profit

I’ve come up with a fun way to practice written conversations in norsk—by taunting my AI practice partner.

If that sounds like fun, just step behind this curtain and I’ll show you the game.

/images/1766259149033.jpg

The Rip-Cord Protocol

Every language course I’ve ever taken began with how to have a simple conversation, but I don’t think I’ve ever been taught what to do when those conversations break down. And they do break down. All the time. Especially for beginners.

This post recaps a conversation I had with ChatGPT about what I think is a crucial - yet often missing - first lesson in language learning: How to keep conversations moving when the bottom falls out.

I call it The Rip-Cord Protocol.