4 min read
Independent Development Diary 26: The Thai Learning App Has Started Internal Testing
I haven’t written for a while, mainly because I have been too busy recently. I recently launched the internal test of StudyThai APP and found that the problem is far more complicated than I thought. Like many things, it seems not difficult on the surface, but in fact there are a lot of pitfalls inside.
Flutter turns to Expo
Expo is a framework based on React Native encapsulation. Because of the overall experience deviation of flutter shell APP before, we considered making some native changes and turning the entire course, question type training, and special training to native. The main reason for using Expo is that we hope to reuse some of the libs we wrote in Nextjs, such as our Thai transliteration engine, etc.
Then I used gluetack-ui and nativewind as a whole, similar to shadcn and tailwind. However, I feel that AI currently has too little training in other languages except js. A page requires at least 4-5 rounds of dialogue to be completely improved to basically meet the requirements. However, nativewind is not 100% compatible with tailwind, so there are still differences in some places. For example, the same text size may appear smaller on a mobile phone.
Then the code of bridge basically does not need to be changed. It is enough to change the implementation slightly. The overall migration does not encounter much resistance. One of the pitfalls may be that the underlying audio implementation was changed in the Expo55 version, which caused no sound during playback of my previous test version.
audio playback
The main pitfall is that you cannot use each audio separately like on the web page, but need a unified instance to replace it for playback. Otherwise, there will be no sound after a period of time, especially on Android machines. In addition, recording may also affect audio playback, and the sound may be louder or softer, so the audio track needs to be unified.
Thai display
This should be the biggest pitfall I have ever encountered. Most of the domestically produced Android phones have castrated Thai and randomly created an advertising body (Thai is generally divided into standard body and advertising body. We see English-like words on billboards are all advertising body), so the Thai text displayed on Android phones is all advertising body. However, for beginners, advertising body is more difficult because there are various writing methods. If you don’t understand the standard body, it is difficult to guess which letter it is (of course, it is sometimes difficult to guess). It is similar to giving you classical Chinese before you learn Chinese.
So I later thought of a way to package the fonts, but I found that the characters were truncated. At first I thought it was because the width or height of our components was insufficient, but later I found out that it was not the case. I wrote a page specifically to test the fonts and found out that the fonts were incompatible, so I tested several different fonts before I found a standard font that was compatible.
Then another pitfall is the separate display of vowels. This is also related to the system. Some machines need to add an empty letter before it can be displayed. This is related to the underlying character set. For example, for the same reason, system A may think it is two letters, and system B thinks it is one letter. Because many domestic products are based on the old version of Android, many strange problems are not surprising, so I added an empty letter uniformly so that they can all be displayed.
TestFlight problem
The review of iOS is a mystery. My previous two versions were reviewed the next day, but the later version could not be reviewed and I was always waiting. Some people said it was because there was no demo user, and others said it was because the description was not written clearly. Anyway, it just kept getting stuck. I don’t understand it. The only possibility is that they have no one on duty on weekends.
Typing training
As users began to get rid of the basic level and began to have some input needs, they took out the current sentences and made a typing module. Users can input directly for training, which allows users to individually strengthen their memory and word proficiency.
New version of the course
Two more important contents have been added to the new version of the course, namely sentences and grammar. I observed several other applications. The biggest problem is that they mainly learn words from various New Year scenes and then make sentences.
At first we only memorized words, but later we started to have courses and then levels. But the overall focus is still on words, so this time the overall course has been upgraded. Now some sentence cards and training will appear in the level so that users can learn sentences, and then there will also be some grammar cards for users to learn grammar. The current oral training is simply a spoken input and detection. In the future, it may be integrated into the current course units, but I have no plans to do this yet. After all, many people don’t like to talk, so I basically skip speaking.
AI teacher
The AI teacher has expanded from only teaching words to now being able to chat, expand according to scenarios, and answer chats. However, this is still an experimental function at present. It is not too complicated at present. It is mainly driven by prompt words. In the future, this module will be improved based on user feedback.
There’s not much else. Recently, the internal testing has been very intensive in fixing issues, with one version being released every day.