 So, I wanted to show off this program that I made for Studying Japanese. It's a program that I started working on over a year ago, though originally it was much more of a vocabulary and kanji drilling program, but eventually I had second thoughts about the best way to study a language and I eventually gravitated more towards the story-based approach. And so the primary concept here is that you have a set of stories and here I can click on the story and you see it has the text of the story with timestamps. There's an audio player because this comes from an audio source and I can click on words and get the definitions plus all the information about the kanji and I can also drill the words in the story. So I still obtain the kanji and vocabulary drilling aspect, but in general what I primarily do in this program is I just simply read through the story as I listen to the audio. And one of the primary sources I use for story material is this site called Comprehensible Japanese. There's a YouTube channel, but if you subscribe to the Patreon then from their site you can also get a lot of members-only content. Here I'll just pick a random free, yeah I'll pick one of the free stories. I'll just pick this one and let's say we want to add it into our set of stories in the program. So I'll need the title, copy that into the top entry field and then I will get the link, plug that in here, I will get the transcript and I generally, yeah I want I want them separated by lines so this is actually conveniently what I want to copy. The footer gunna will get not included in the copy but I don't actually want it anyway, I don't tend to like reading the footer gunna. Okay so that's what I need but also I want the file from the mp3. If your story is from a YouTube source then you can just plug in the YouTube link but otherwise you'll need to get an audio file so here I'll save this. I'm going to copy that name because I'm going to need that name and then in this field that copies it into a directory under the application directory and then I have it in a subdirectly called ignore and then the name of the file. Okay so now I'm ready to create the story. It creates the story. You can see here at the top go in and well it doesn't have timestamp information. I'm going to have to fix this. I'm going to go through the story and settle the timestamps so one of the first things I'll typically do is I will well I can click on any timestamp to immediately play from that timestamp or again of course hit the play up here in the left so here I'll just make it very quiet. So I'll just sit here listen and then when I get to a certain timestamp and when I get this sort of this line I'll just alt click on the timestamp that will set it to what are the current timestamp of the audio is so I just listen line by line the first time and as I go I'll just click at the appropriate moment for each line and then I could very easily edit also if I select the line click it I can then hit minus and plus to adjust the timestamp by half a second. So it's fairly easy to add in timestamps for each line though you know it'd be nice if we're automatic but it's it's not too onerous and I mean you end up listening to the story for the first time anyway so I don't find it like actually all that much extra work. Another thing you want to do in some cases you want to split up the lines or join them so I can control click on a timestamp and it'll just join it with the previous line I'll split that again I can I can split I can just control click on any word and it'll use it'll split that to its own line so sometimes that's useful particularly for very long sentences or maybe the original text wasn't properly broken into sentence by sentence I tend to prefer each sentence being its own line except in exceptions are very short things like this that aren't even proper sentences and actually in some cases with long long sentences with many clauses I will sometimes like split on the clause so like maybe here I would I would split this onto its own line anyway that's my that's my preference let's see one more thing you can do kind of a hidden feature is you can alt click sorry yeah alt middle click on a timestamp and it'll take that line and open it up in google translate here I'll do it with a more interesting line yeah so that's an easy way to get a translation arguably there should just be some you know if google provided an easy to use and of a free API I would just automatically get all the translations for every line and just show it in line here but this is the the hacky next best solution I found another features I can middle click on a line to just mark it and I find this useful for particularly well if there's a word with interesting vocabulary or interesting grammar I will just mark those lines as interesting and so when it comes time to review a story repeat it again I will in many cases just first go through all the the marked lines and maybe not even read the rest because maybe the rest isn't very interesting so it's just sort of a way to get you know more efficiently get more out of each story when you when you repeat it okay so actually go back to the catalog here the main menu so a key idea is that I think a key part of the process is that you do repeat these stories you don't want to just read each one once I do find when I when I go through a story the first time well first I listen through and mark the timestamps but aside from that a key thing I need to do is I need to basically do an intensive reading process I need to go word by word look up every word figure out grammatically how it all fits together what it means you know one thing I'll do is I'll open up the translation and if I can't figure out like what some part means I'll like delete the rest and see what you know what translation Google gives me for one subsection of the sentence tricks like that anyway whatever it takes to try and figure out what all the pieces of the sentence mean and how they work together I will do that and at least one time it is a slow intensive process it takes me you know 30 minutes to get through five minutes of audio often when I when I read that way but it it's a valuable exercise it's an investment each time you start a new story and go through this intensive process but I think it's basically what you have to do to understand what you're looking at oh so importantly one feature here is you can click on a word and you get the definitions and plus the kanji information though I use this plugin 1010 you can see as I hover over on any web page not just this web page I just hover over and it gives me definitions and also you can get the kanji information I find this extremely useful in fact I generally use this instead of clicking on the words I don't click on the words very often important feature that you may have noticed but I didn't explain and that is the fact that the text is syntax highlighted based on part of speech so verbs for example are in this dark red and then the auxiliary portion is in this pale red pink color the term runners as you might call them are in this blue particles are yellow nouns are white etc etc so I'm using this open source library that does analysis a grammatical analysis of Japanese text and it does a pretty good job it's not perfect of course it but it's pretty good in some more advanced text I do find it you know makes more mistakes but for the most part it's quite accurate and so I use that not just to identify the parts of speech but also to effectively identify what the drill words are like for example for verbs instead of adding every single form of every verb into the drill word set it'll it identifies the base form and so only the base form gets added as a word in your in your drill set also it'll add the kanji of every word into the drill set so anytime you add a story and it has a new kanji that's ever been seen before that'll be added as a as a word to drill also you'll notice that some words are highlighted and the idea there well if I click a word I'm going to hit the keys one two three or four to set its rank as you at the bottom setting the rank of the word and the highlighting changes based on what the rank is well the idea of the rank is that for drill purposes you want words to have a cooldown every time you drill a word it gets marked with a timestamp and it goes on cooldown and rank one words go on cooldown for three hours rank two words go on cooldown for three days and then rank three words go on cooldown for 30 days and then lastly rank four words go on cooldown for a thousand days which is effectively forever so in practice like like saying kind of word that I happen to already know and I don't want to ever see it in my drills again so I'll just simply mark it as four and effectively dismiss it from my drills entirely um but otherwise the idea is that when you encounter a new word you want to like have it you know promote it up the ranks like you'll drill it a few times and and as I drill same deal I can I can hit for the word of the top here I can hit one two three or four to to set its rank as you see here so yeah maybe if I decide okay I'm actually pretty good on this one so maybe I'll inch it up to two or no it's even a three already whatever it's all up to my own discretion and I can change any of this at any time really notice also in the drills I can filter based on rank so currently it's matching all words of all ranks currently it says it's only drilling me on words and kanji that are off cooldown but I can say only show me ones that are on cooldown or show me both I can also filter based on type I can drill just the kanji characters or katakana words which I sometimes find useful or or verbs which I find also sometimes useful uh yeah so a number of options there um notice also it's giving you the breakdown for the story of of the words in the story and how many are on cooldown at this moment so currently this story has a 209 rank forwards 58 rank one words 58 of which are currently off cooldown which I guess is all of them anyway so back to the story page there's this option here you can toggle whether it is highlighting all rank one three words or just the ones that are off cooldown by default it's only the ones off cooldown you can adjust the playback speed for the the player and then generally the idea is that every time you read a story you want to hit this button to mark the story as red and what that's going to do is it's going to it's going to for each story increment the the the total count of times you've read that story and then we also have this read countdown which currently set to three I could just at any time modify this to anything I want and so if I want to repeat the story five times then I would set the countdown to five and then over the course of the next few days the next week I would read it up to five times and when I hit the mark story as read button it'll not only increment the total read count it'll also document the countdown if it's greater than zero again though what story is a read and what order is entirely up to you this is just sort of a tool to help you track what you were planning to do sort of loosely keep track of of how often you were supposed to do something or plan to do it so back on the main page in fact here you also can set the countdown here every time you read the story it sets a timestamp and so here in the left column it's it's sorting the stories based on the time you less read it here's the total read count and then unknown and weak those are rank one and rank two words respectively so this first story is 106 rank one words because I just added it and 16 rank two words notice also this checkbox which is on by default when this is on we're only seeing stories with the countdown greater than zero if I disable it now I'm seeing all the stories and lastly there's this link here to drill all the words and all the kanji of all the stories rather than just one story and honestly I don't find this particularly useful all that much I don't I don't actually really use this feature except sometimes for drilling katakana or sometimes for drilling verbs those are the two primary use cases where I sometimes find this useful so if you want to use this program you just need to go to the repo on github and well you just clone the repo and if you're on windows you can just use the executable that's in the app subdirectory that'll run the program and then you just go into your browser and navigate to localhost 8080 on other platforms though you'll need to build the executable that's pretty easy though all you need is to install go and then from the command line you run go get and then go build and that should work there's this link here where I give some advice about how to go about using input and at the bottom here I have some other recommended sources of input like for example this is very good Japanese with a notical so let me actually demonstrate adding one more story here let's see I'll just randomly pick some some story she has the transcripts here freely available that's very handy so I'll just grab this transcript added in the content I will need to oh right in this case I'll actually go to your YouTube yes so this is an example of we'll use the YouTube link instead because otherwise it's not I don't know of a better way to get the an easy way to get the MP3s so I'll copy this link there if I have a YouTube link I don't need an audio file path because the player will be an embedded YouTube player and then the title there we have title and I create come in here and all the same controls work so I can just click on any I'll have a bad example here I'll just jump to random yeah so all the controls work the same with the YouTube embedded player anyway that's my Japanese training program I hope it's useful to someone there's a number of ways in which could be improved for sure if you had feedback let me know one obvious thing is I could adapt it to support other languages right now it assumes you're entering Japanese text and uses a Japanese parsing but but there's really no reason it couldn't support other languages if you're interested in that let me know in fact if you're interested in trying to contribute yourself I encourage you to do so the the code is really very simple there's not well you know it's not perfect code by any means but it's relatively clean and well there's just not a lot of it really it's actually in the end a quite simple program for as many iterations I went through in many variations of how the program functioned over the over the years so I developed it in the end it's it's really quite simple