Now that I’ve identified a useable hosting candidate, my final test of their service will be to roll out a full implementation of the websmith deployment scheme. But in contemplating how I’m going to do that, I’ve realized that I may not have broken the project into distinct repos properly. So I’m going to figure it out by explaining it to the rubber duck. (Meaning you. :-)
As I continue to use Frankie in more ways and with different types of content, I’m beginning to see some friction points. Some are just a function of the limited graphics of the TUI interface I’m using, but some are about the actual information layout itself. Before I start tinkering with it, I want to talk my way through it. And that means: It’s rubber duckie time again!
For reference, here’s the current TUI lesson screen for individual sentences, which has the same basic layout whether you’re focusing on text or audio. The capture was taken during an ear training session, so this shows audio study mode.
The orange section near the top is for the prompt. In an audio lesson, the prompt autoplays when you load the new sentence, so the prompt area becomes a replay button. For text lessons, this would display the text of the sentence. Beside the prompt, that up arrow will copy the text version of the prompt to the clipboard, which allows you to quickly dip into an external tool, like a translation app.
Below the prompt is the hint area that shows any text hints that have been revealed. In this case, the Norwegian text (no-tx) was revealed first, and then the English.
Quick Primer On Sentence Codes
Codes are in the form LL-MM, where LL is the two-letter language code, and MM indicates which medium the sentence is rendered in.
For most of my posts, LL will be either no (for Norwegian), or en (for English). In some cases though, especially when I’m talking about the abstract case, I’ll use L1 and L2, meaning the user’s base language and target language, respectively.
Frankie currently manages 3 media codes: tx for text, ar for audio (regular speed), and as for slow audio.
The next row shows the available hints. When you first enter a new sentence prompt, these will all be displayed in green, but they’ll change to white once they’ve been revealed. In this example, we can see that both the English and Norwegian texts have been revealed, as has the Norwegian slow audio (no-as). The row below that is for navigating through the lesson, and the bottom A-D buttons are for scoring how you did with either translating or pronouncing the current sentence, depending on which mode you’re in.
Frictions
Now that you understand the current layout, let’s talk about the problems I’m finding.
Parsability: Reading the prompts is easy enough, but deciphering the 4 hint button labels is a noticeable cognitive hurdle. They’re not full words, so the part of my brain that automatically reads text for me has no familiar chunks to work with. I actually find myself having to stop and decode each one to find the one I want. In a proper GUI, I could use icons to differentiate, and rely on my visual processing rather than text, but in a TUI I can’t use emojis or unusual Unicode symbols because I don’t have control of the font being employed by the text shell that I’m running in, so I’m pretty much limited to standard Latin text symbols.
Ordering: The hints are always shown in the same order: English audio, English text, Norwegian audio, Norwegian slow audio, Norwegian text. Depending on what kind of lesson we’re doing, one of those will actually be the prompt, so it will not be shown as a hint. The remaining four are shown from left to right. The problem is that the best hint to use depends on which mode you’re studying in, so I can’t rely on muscle memory to help me choose either, since the current layout is the same regardless of mode.
If the prompt is Norwegian audio and I’m working on tongue training, both English text and English audio are virtually useless, since they do not help me pronounce the Norwegian sentence. I consider the Norwegian slow audio to be a minor hint - helping me parse the faster audio, but still using my ear to do it - while norsk text is a more substantial hint, telling me explicitly what the words are that I’m trying to pronounce. But if I’m doing translation practice of Norwegian text, the Norwegian audio clues become less useful and the English clues pretty much give away the answer.
Rumination
In each lesson mode, the different hints have different utility. One way of reorganizing would be to show the hints in revelation order, starting with the most subtle hint at the left, followed by increasingly bigger reveals, until we reach the answer button on the right.
This would allow me to develop some degree of muscle memory, and simplify the cognitive decision being made inside each sentence exercise. Currently I have to think too hard: What mode am I in? Reading English text and trying to pronounce the Norwegian translation? Okay, that means no-ar is the answer, no-as is a huge clue, no-tx is a biggish clue, and en-ar is useless. Therefore no-tx is the most subtle clue I can give myself…
By placing the buttons in revelation order, I would always know that the leftmost button is the gentlest hint, and the rightmost would reveal the answer.
But this still leaves a problem: depending on mode, the degree of revelation is not consistent from left to right. In the scenario of the previous paragraph, English audio was deemed completely useless, and only one hint (Norwegian regular audio) was considered a complete giveaway of the answer. But as outlined further back, for a Norwegian tongue training exercise, both English audio and English text are essentially useless, and there isn’t really any hint that that can be considered the answer, because the prompt itself is the answer.
Solution
I think the core problem here is that I’m getting distracted by the fact that I have 5 full versions of every sentence, so I’m trying to make all the hints available, every time. In addition to making it harder to judge the value of each hint in any given context, this embarrassment of hints also tempts me to use them too easily. If I’ve got 4 hints, it doesn’t seem like a big concession to reveal one of them. But what if I only had a single hint? Revealing that would feel more consequential.
So the solution, I think, is that for each lesson mode, I have to decide which form of the sentence is the prompt, which form is the hint, and which is the answer, then ignore the other two. This lets me display the hint on the left, and the answer on the right. Easy peasy. It cleans up the interface a bit, and means that muscle memory will always lead me to the correct action. I won’t have to parse the hint labels at all. The left button will be labeled “Hint” and the right one will be “Answer.”
Invocation
Currently, whenever I launch a lesson, the lesson “mode” I’m in has nothing to do with the app - it’s entirely determined by how I use the app, and which hints I choose. But if we’re going to create a mode in the app itself, I’m going to have to create a user interface to select it. I considered having each saved lesson be encoded with a specific mode, but the more I think about it, the more I think it would be more fun to choose my mode each time I start a session.
For example, I’m currently reading Råta, by Siri Pedersen. In every session so far, I’ve been reading text sentences, but it would actually be awesome to be able to switch to ear practice for a while, and still make progress through the book. Or, today I’m going on a road trip, so I’ll start a session in tongue practice mode and work on pronunciation, (hands-free of course) so I’m getting in my daily Norwegian practice, but I don’t have to give up reading my book just because I’m driving.
To handle this, I’m going to define distinct modes in the code, like this:
Tonguework: prompt=L2-tx, hint=L2-as, answer=L2-ar
Earwork: prompt=L2-ar, hint=L2-as, answer=L1-ar
Eyework: prompt=L2-tx, hint=L2-as, answer=L1-ar
There will probably be several more modes, but regardless of how many there are, every time I open a lesson, I’ll throw up a choice of which one to use, and that session will proceed through the material giving prompts and offering hints as defined in the current mode parameters.
I also like how this fits with the metaphor. Each lesson is already being characterized as a “creature” I’m working with. Now these modes simply describe what kind of work we’re doing. It’s almost like I’m not so much using the creatures to work on my skills, but instead that my job is to teach the creatures how to communicate.
FrankenTongues: Learn a foreign language by teaching monsters how to communicate.