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.
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.
◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
The original idea behind FrankenTongues was that, for later-stage learners, the key study unit is no longer the word - it’s the sentence. Unfortunately, most language study materials are full of dry flavorless example sentences written by language learning academics. Frankie was intended to free you from that flavor-gulag by giving you a way to take real-world L2 materials - novels, poems, screenplays, news clippings - and turning those into study materials.
It did so by chopping them up into sentence-sized chunks for its database, adding TTS audio recordings of each one, plus translations of both text and audio into L1. After that was done, you could study your sentence hoard in a bunch of different ways: as quizes, drills, or recognition exercises (audio first or text first); in either original book order, or as custom lessons that gave you real-world examples of the words and phrases you were struggling with.
My recent epiphanies have changed none of those key features, but they have turned just about everything else on its head.
The first problem I was stuck on was the rapid prototyping problem.
Having a database of sentences is only the first step. Students also need fun ways to study them, so Frankie needed to have multiple choice quizes, listen-and-repeat exercises, guess the missing word drills. All the usual techniques.
But coming up with the right layouts and workflows was a time-consuming exercise. Frankie had a fairly large code base, so teaching that monster new tricks was a constant battle to keep older code from breaking, and I often had to brainstorm five or six different approaches before landing on one that felt right. The weight of the codebase was constant friction against progress.
Eventually I set the monster aside entirely and started writing stand-alone sketch versions. Instead of dealing with the big database, I could jam a bunch of sentence clips into a zip file and just work with that while I tinkered with workflows and screen layouts. The plan was that, after working out the right sequences, I would then rewrite them back inside Frankie.
Only I never did that part. Once I had a drill working on its own, I couldn’t resist playing with it.
I told myself this was just a quality control exercise - making sure everything actually worked before migrating the idea back into Frankie. But the truth was that I was having too much fun studying to bother with the migration headache. I just kept creating new study files - taking new source materials, chopping them up, and stuffing them into zip files so I could use them in the growing list of “temporary” tools. My Norwegian was rapidly improving, but Frankie remained motionless on his slab, lifeless and going nowhere.
His death sentence came on the morning of my first epiphany:
I didn’t actually need a master database.
My temp tools were working just fine with each document bundled in its own zip file.
In one stroke, this change resolved several questions that had been gnawing at the back of my mind:
How can users share learning materials when they’re inside a giant database blob?
Even if we solved that, how would I filter out copyrighted materials from the shareable stuff?
For that matter, how could I even share lessons with myself so I could have the same material on my desktop and my phone?
After realizing the benefits of individual study files, Frankie v1 and his central database were doomed.
The second problem to fall was that “last mile” problem I mentioned.
With Frankie now dead on the scene, I was left with just my sketchy study tools, but these were raw Python scripts held together with staples and bailing wire. They only worked when the light was right and the wind was in the east. There was no way anybody else would ever run them. Not even another experienced programmer would bother. So how could I share them with others when I couldn’t even be bothered to tidy them up for myself?
The original Frankie had flatlined and there was no resucitation team in sight, and the thought of rewriting that monster of code sent shivers of dread down my spine. Besides, the world did not need a desktop-only Python-driven language study tool. Not enough people would ever use it to make it worth the trouble of writing it.
The biggest problem was the UI. Between the CLI, the TUI, and a full-blown GUI, there would be a mountain of work to get even a simple tool running in that monster. If only I could take the functioning sketch tools and implement those in some easier to code interface…
Cue my second epiphany:
Instead of wrestling with desktop GUI packages code, I could use a lightweight web renderer to read files from my local drive and display them using Javascript.
And if I served those tools from an actual web server, anything I could use myself would also be available to anyone else who wanted to try it. It turns out that the trick I needed to play on my subconcious was easier than I thought : publish before the tool is working, not after.
The rule I live by now is that I’m allowed to test code locally using tiny test files in French - a language I’m familiar with but not actively studying - but if I want to study Norwegian, I have to use the public version of the tools.
And just like that, FrankenTongues was reborn. He leapt to his feet in the middle of the night and ran off to join the Internet circus, where he is still thriving. (I know this because I visit him every day.)
So with Frankie back in action and already useable by anyone who wants him, why is there a third step in this journey?
The answer to that is rooted in the final puzzle I’d been wrestling with: startup effort.
Frankie is only as good as the lesson files you have for studying. They’re called FNKT files, since that’s the file extension the system uses. But they were taking a lot of effort to create. And money.
First I had to buy an L2 ebook. Then I had to buy the matching audio book. After that, I devised a herculean process to cut the EPUB text into sentences and match each one to a corresponding segment of the audio. It was extremely fiddly work and could take days to prepare a single novel. I managed to develop some forced alignment software techniques that brought that down to just one day, but even that would be an unacceptable burden to the average user.
Nobody in their right mind wants to spend a full day preparing a lesson for their language study. And that was assuming they had the skills to follow the complicated dance sequence I had choreographed. I realized that the only way Frankie would ever succeed in attracting users was if users could create their own lessons effortlessly. In other words, Frankie has to be able to do it for them.
But there was no way my process could be transferred to a web app. It was too slow, it required complicated judgement calls to be made at several stages, and it relied on buying L2 books at full price - twice - to get both audio and text. Then, after all the work of preparing it, there was still a good chance that you wouldn’t even like the book, or that you’d find it too difficult for your current language proficiency.
This last barrier looked like it might be the hurdle that killed poor Frankie. Again. How could I give people a way to create study materials automatically, for free, and that were guaranteed to be interesting to them? If I could solve that, Frankie’s chances of finding an audience would finally be within reach.
And that’s when my third epiphany clubbed me from behind:
Most language learning theorists push the importance of studying material created originally in your L2, and that is still enormously important for reaching fluency. But why not build yourself an easier on-ramp to get there?
All the research I’ve read suggests that the biggest hurdle for intermediate language learners studying L2 materials is that it’s hard to stay engrossed in the story when you’re still struggling to decode the language. And if you aren’t engaged, you don’t stick with it.
But studying the books you already know and love removes all that. You already know the story, so you know what the L2 words are trying to tell you, which makes it so much easier to decode.
The only question is how to get your existing L1 EPUBs and TXT files into L2. Fortunately, that’s a step that LLMs have gotten very good at. Not as good as having a human-authored translation, of course, but at the B1-B2 level, losing 5% of the nuance in order to gain access to a rich vein of material that you already love, in genres and topics that actually matter to you, is a price well worth paying. It will still be important to study L2-native materials if you want to become fluent, but save that step for later. First get yourself to the point where you can read the sentences and understand them. The subtleties of register and nuance can come later.
So that’s my tale. I built a monster, killed him with neglect, realized I missed him, and then reanimated him and set him free.
FrankenTongues has no login accounts, and sends no data to the web¹, so there are zero privacy issues to worry about.
Just feed him the books you already have and he’ll use those to help you study your new language. Totally awesome, totally for free. (And yes, if you already have some L2 books, you use those too.)
You can use Frankie directly from the website I’ve created, or, if you have some basic IT skills, you can even download the parts you like and point your browser to your own server instead of mine.
Either way, you’ll want a few sample books to try before you start creating your own, so I’ve built a few FNKT files to get you started, available as free downloads in all the major European languages.
¹ For complete data privacy, you’ll need to be running your own local LLM stack, like Ollama or something similar. Otherwise, Frankie will use your cloud-based LLM account to turn your EPUBs into FNKT files. But no personal data is ever shared with the cloud, and once you’ve created the FNKT, nothing is ever sent to the cloud again.
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.
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.
As I focus more specifically on ear-training, I’m noticing stages of progress in my ability to unpack the noise into recognizable chunks, but how many stages should I expect on this journey? And what do they look like?