2 weeks to build a language app (a music-style language trainer)

All about language programs, courses, websites and other learning resources
User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Thu Sep 10, 2020 2:03 pm

Cainntear wrote:
ryanheise wrote:On an unrelated note, the file format will be similar to what Cainntear proposed, but with room for multiple translations and transcripts.

Code: Select all

{
   "translationLanguages": ["en"], // ISO 639-*
   "segment": {
      "translations": ["..."],
      ]
   }
}

Personally I'd favour using a dictionary for the translations rather than parallel arrays. That would save having a whole load of null values floating around while a translation is work in progress. It also avoids having to add in all the nulls as soon as a new translation is started, if the format is used as a live datatype rather than just the archival format. (For example, if someone built a Vue app to work off the same data or to browse it online, JSON would obviously be the native format.)
That said, you might have solid architectural reasons for your choice.


I'm not tied to that decision apart from the fact that I want the transcripts to be ordered with the primary transcript appearing first (e.g. in dropdown menus). The translations don't particularly need to be ordered (Well, Netflix happens to order available subtitles and audio tracks, but there's not really any inherent or universal order here so translations could be a dictionary with the display order being decided in some other way).

start/end/transcripts/translations can be omitted from parent segments and they will be automatically inferred from the child segments.

"Can be" as in "optional", or "can be" as in "will be...?"


What I'm referring to here is that if the node "AB" lacks a transcript but its children "A" and "B" both have transcripts, then the transcript of "AB" can be inferred by concatenating "A" + "B". Who does the inferring? It is up to whichever program opens the file whether it wants to do that. The same applies to translations. In some cases, it may be useful to insert a special translation for "AB" which is different from the simple concatenation of "A" and "B", particularly if the translation language is very different from the source language with a different word order. The natural translation of "AB" may involve placing words at different ends of the sentence that could not be reconstructed through simple concatenation. The start/end times can easily be inferred. The start time of "AB" comes from the start time of "A" and the end time of "AB" comes from the end time of "B", and this is advantageous since if you edit the timestamps of "A" or "B" they will automatically propagate up the tree.

I'm thinking about materials specifically designed for learners with a pause for response. In certain use cases, the gaps may be considered part of the data, whereas in others they might not, and in certain situations that will correspond to the levels of grouping. Or maybe that can be obviated by automatic silence insertion in your app.


The plan is that there will be gaps, but they will be part of the training routine (which is a separate data structure) rather than baked into the content. The training routine will allow you to vary the gaps depending on the maturity of the segment, for example.
1 x

User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Thu Sep 10, 2020 6:46 pm

Day 12: Goal achieved (although it's now 4:45 in the morning...) Published an update to Google Play. (Since I haven't written the audio analyser yet, this just cuts up the audio randomly, but it then uses the proper algorithm to merge those segments simulating what would happen if the segments were correctly cut. Only one training routine type has been implemented for now, but I spent most of the day actually sketching on paper how all of the other ones would work.)
1 x

User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Fri Sep 11, 2020 6:12 pm

Day 13: I've built a rudimentary audio segment splitter and published to Google Play (with lots of bugs). One more day to go...

I was going to create a video of the thing in operation, but it's getting late again, so here is a sketch from yesterday's brainstorming session on how the app's review system is going to work:

Image

I wonder if anyone can figure out what it means? (After I wake up tomorrow, I wonder if *I* can figure out what it means?)
2 x

User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Sat Sep 12, 2020 6:53 pm

Day 14. Drum roll... Tada!



Success! Well, it's probably not ready to release to the public, and the UI needs a complete redesign (so that it doesn't look like it was designed by a programmer), but I'm happy with what I was able to build during these two weeks, and I'm quite pleased with how the automated segment splitting worked out. I managed to get a lot done on the last day, probably because it was the first day of the weekend.

As you can see in the video, I have implemented my first attempt at some different training sequences in the top-right menu, but these will need some tweaking. We won't really know how these will feel in practice until we use them.

And to that end, my focus will now turn to the following:

1. Getting the training session to run on auto-play, where it can be programmed to repeat each segment a certain number of times before continuing (I'm pretty sure I can finish this tomorrow).
2. Get the review system working. I expect I'll be able to start using the app within a few days, but it's through using it over several days that I'll notice if anything in the review system needs to be fixed.
3. Get this out on iPhone, too.

After that, I'm going to keep improving it until it's a lot easier to use.
5 x

User avatar
Adrianslont
Blue Belt
Posts: 760
Joined: Sun Aug 16, 2015 10:39 am
Location: Australia
Languages: English (N), Learning Indonesian and French
x 1588

Re: 2 weeks to build a language app (a music-style language trainer)

Postby Adrianslont » Sun Sep 13, 2020 8:46 am

Congratulations, Ryan. I’m eagerly awaiting its arrival on iPhone.
1 x

User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Mon Sep 14, 2020 4:27 pm

Thanks! I will take a rest from coding for a couple of days since I'm feeling a bit burnt out.

Instead, I've recently been thinking about this thing which I've drawn up below:

Image

While coding the app, I made some rushed decisions on how I wanted to structure the app and came up with the concept of a "routine". I knew that I wanted to use the app to study Peppa Pig intensively, i.e. listening and repeating over and over again for a long time. But I also wanted to do my listening attention span-stretching exercises where there is still a lot of repetition, but the daily throughput is higher.

That was when I came to the realisation of the above chart. Those 3 pipelines are what I was earlier referring to as routines. The top pipeline is the material I'm studying intensively at a slow pace. Each circle represents material I'm studying (e.g. a new Peppa Pig episode). As it passes through the pipeline from left to right, the days pass, and eventually it will come out the other side where it will be retired and I'll move onto the next material I want to study.

The middle pipeline has a higher throughput rate but essentially works the same way. This is about the rate at which I would study audio stories where I'm not trying to memorise, I'm just trying to understand it and maybe shadow or echo it, while also maybe practicing my listening ability as the review segments will be merged into longer and longer segments as they make their way towards the right exit of the pipeline.

The bottom pipeline is even faster where maybe what you listen to passes through the pipeline completely within a day and you never hear it again, sort of like extensive listening (if that's a word).

I think this more accurately reflects how I would want to design my personal study routines. I'd want to have a good mix of extensive and intensive listening, and something in-between, and I'd like to use different preferences for each pipeline for how repetition, merging and reviewing would work within that pipeline.
3 x

Cainntear
Black Belt - 1st Dan
Posts: 1745
Joined: Thu Jul 30, 2015 11:04 am
Location: Scotland
Languages: English(N)
Advanced: French,Spanish, Scottish Gaelic
Intermediate: Italian, Catalan, Corsican
Basic: Welsh
Dabbling: Polish, Russian etc
x 4254
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby Cainntear » Tue Sep 15, 2020 4:34 pm

ryanheise wrote:The bottom pipeline is even faster where maybe what you listen to passes through the pipeline completely within a day and you never hear it again, sort of like extensive listening (if that's a word).

Yes, it's a word. Extensive listening isn't a true opposite to intensive listening, although they are in many ways opposites in a practical sense. Intensive listening is about listening to something closely and deliberately, whereas extensive listening is focused on listening to lots of different material. Listening to lots of material necessitates listening at a decent pace, clearly...

So listening at full speed isn't extensive listening in and of itself, and within the SLA community, you'd probably find some disagreement over whether repeated relistening to something counts as extensive listening at all, or if it has to be new material to count.

TL;DR: probably best to avoid the word. ;-)

Anyway, good going there. I'm going to copy you and set myself public goals here. I've been noodling around with my FSI project prototypes recently, so I'll try to get something up this week about that.

Looking forward to seeing how your tools develop!
2 x

User avatar
ryanheise
Green Belt
Posts: 289
Joined: Tue Jun 04, 2019 3:13 pm
Location: Australia
Languages: English (N), Japanese (beginner)
x 888
Contact:

Re: 2 weeks to build a language app (a music-style language trainer)

Postby ryanheise » Tue Sep 15, 2020 5:15 pm

Cainntear wrote:
ryanheise wrote:The bottom pipeline is even faster where maybe what you listen to passes through the pipeline completely within a day and you never hear it again, sort of like extensive listening (if that's a word).

Yes, it's a word. Extensive listening isn't a true opposite to intensive listening, although they are in many ways opposites in a practical sense. Intensive listening is about listening to something closely and deliberately, whereas extensive listening is focused on listening to lots of different material. Listening to lots of material necessitates listening at a decent pace, clearly...

So listening at full speed isn't extensive listening in and of itself, and within the SLA community, you'd probably find some disagreement over whether repeated relistening to something counts as extensive listening at all, or if it has to be new material to count.


I suspected as much, and I'll take your advice and try to use different words.

Anyway, good going there. I'm going to copy you and set myself public goals here. I've been noodling around with my FSI project prototypes recently, so I'll try to get something up this week about that.

Looking forward to seeing how your tools develop!


Thanks! And good luck with your own goals. Sometimes you need to push yourself a bit to make things happen. I was SO intent on trying to build something in two weeks that I ended up going to sleep at around 4:30am for the last several nights in a row. I'm not sure if that's such a good thing! However, I DID get it done in the end, just in the nick of time, and I'm happy about that because the hardest part is now over. I can now relax a little, start using the app, and just tweak it as needed.
2 x


Return to “Language Programs and Resources”

Who is online

Users browsing this forum: No registered users and 2 guests