Giter Club home page Giter Club logo

kanji-dojo's Introduction

Kanji Dojo

Learn & practice writing Japanese characters

Features

  • Study kana (both Hiragana and Katakana) and kanji
  • Practice by following JLPT levels or school grades
  • Create your own list to study, more than 6000 characters in total are available
  • Works offline

There is separate repository for dictionaries parser and data here: Kanji-Dojo-Data

Screenshots

Downloads

Android

Get it on F-Droid Get it on Google Play

Or get the latest APK from the Releases Section.

Desktop

To run the app install Java 17 or higher. Download jar from Github Releases for your platform, open it with double click or use command java -jar <filename>.jar

Version comparison

Feature Fdroid Google Play Desktop
Analytics - Firebase, enabled by default -
Other - Play services in app review -

Contributing

  • Pull-Requests are welcome!
  • Before making PR create and discuss the issue
  • Use proper code formatting

Project details

Used libraries: Compose Multiplatform, Kotlin Coroutines, Koin, SqlDelight

Most parts of the app are implemented in the core multiplatform module. The app module only contains some specific parts for the Fdroid and Google Play versions (flavors)

Under the main package path there are 2 different packages:

  • core - contains app's general logic for features like repositories, databases, app state managers and handlers
  • presentation - contains UI, navigation logic, screen specific logic and use cases

Typically a feature under core package is placed in a separate package and consist of an interface and implementation.

The presentation package contains common UI and screen infrastructure. A single screen contains:

  • <ScreenName>Contract - an interface with screen's view model and screen state data
  • <ScreenName>ViewModel - handles screen's logic
  • <ScreenName><Action>UseCase - components that handle some specific action, invoked by view model
  • <ScreenName>Screen composable that handles navigation and communication between UI and view model
  • <ScreenName>UI - composable function that represents UI, it depends only on data so it can be covered by previews
  • <ScreenName>Module - a koin module that defines how to provide all screen specific components.
    Note: View models should be additionally registered in androidViewModelModule since on android they're additionally wrapped by a platform specific component
  • (Optional) Content interface for screens that can be replaced in flavors, like SettingsScreenContract.Content

There is a single Koin's module for all features under core package, but there are also separate modules for a platform (platformComponentsModule) and flavor (flavorModule) specific features. All screens have their own koin modules

Credits

License

(c) 2022-2023 Yaroslav Shuliak

This is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this app. If not, see https://www.gnu.org/licenses/.

kanji-dojo's People

Contributors

poussinou avatar sl08154711 avatar syt0r avatar yaroslav-shuliak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

kanji-dojo's Issues

Japanese version of app

It would be cool to make app useful for natives as well. To accomplish this following changes are required:

  1. Find dictionary to include japanese definitions for already exiting expressions. Seems like can be solved by parsing japanese version of Wiktionary, maybe there are already preprocessed data like on kaikki.org
  2. Update database to support multiple languages
  3. (Optional) Update all relevant text fields across application to support furigana + make parser for resource strings to convert them to furigana string
  4. Move any existing hardcoded strings to resources
  5. Translate resources

Depending on size of parsed definitions might be worth considering making this feature not pre-packed to apk

Mismatched/Incorrect Input Prompts

Hi, there. Thank you for creating this app, first of all.
I just tried it out for the first time today and encounted a pretty serious issue on my first Hiragana Writing session. お was the first one and went fine. But, when I tried い (the next one shown), it kept rejecting my attempts to draw the first stroke. I thought it was just being very strict on following the nuances in the font/style used, but then it gave a red "hint" to draw a short dtroke straight across the top. I did that and it accepted it as the first stroke. The second stroke was the same deal, except it prompted a vertical stroke down the middle. That worked...
When I tried to draw い for the second stage, I completely missed what the first stroke was "supposed" to be, but it accepted what I tried to draw, and the second one was the second stroke of お!

I'll continue and let you know which other ones it does this for and how often.

The device I'm using is a Galaxy Note 3 running Lineage OS. Android version is 11.

Additional flexible kanji sets options

Recently I've got an email request to add genki 1 deck from JPDB.io.

Using this opportunity it might be a good idea to make present character sets more flexible and introduce a feature to dynamicly load new sets from file or network, maybe even host such sets in this or separate repository

Enable kanji compound (expressions) practice

Hi, to help make the step from individual kanji learning to learning common expressions, it would be great if there was a mode that, instead of presenting a subset of selected kanji for revision, presented a subset of expressions written with the selected kanji. For example, for a user choosing to review expressions written with JLPT N5 kanji, the app might show the hiragana/furigana for «nihon» , possibly the english meaning «Japan», and expect the two kanji to be drawn successively on the sketch surface. Could mix kanji/hiragana as well e.g. for verbs or adjectives.

(Great app, thanks!)

Enabling Notes for Mnemonics

Hello,
It would be really helpful if you add a feature which lets us add notes about a kanji, which we can use for our mnemonics, or other extra information about a kanji we need to know.

Improve app usage retention

According to analytics user retention is not very good, people are either don't want to use the app but keep it installed or just slacking off

image

I'd like to give users a little push to keep them study. I think following features would help:

  1. Practice daily strike calendar, or something similar. Can put it either on top of practice dashboard screen or make a new screen for it
  2. Reminder notification. It might contain not only action button to enter application but also a useful information, like info about character that is pending for review, etc

Radical search bug?

I was searching for the 猫 kanji. I selected two radicals, and the last radical was blocked.

Screenshot_2023-08-12-18-57-35-288_ua.syt0r.kanji.fdroid-edit.jpg

No continue button after writing the kanji

This bug happens sometimes. Maybe the reason is too fast writing.

  • My device: Poco X4 GT
  • Android version: 13
  • MIUI version: 14
Screenrecorder-2023-03-14-12-33-59-714.mp4

Multiplatform support

Since Compose is multiplatform it would be nice to make Kanji Dojo available on multiple platforms, for now I'm considering only desktop version, since other targets are experimental and I don't have apple device for ios support

Support requires following steps:

  • implement multiplatform key-value and database storages (probably will go with SQLDelight)
  • migrate resources
  • migrate DI from dagger to multiplatform koin
  • support multiplatform navigation

Reading practice

It would be nice to incorporate reading practice mode. I can see 2 potential features:

  1. Simple one, will be like an addition to writin practice.
  • By using already available dictionary data build a practice screen that will present word or expression and present several possible reading to pick from. To make it challenging presented options can contain other readings of current character or readings of other recently studied characters, or reading with similar endings like tsuttsu, kyokyu, etc.
  • Add a section related to this mode to group info menu in practice preview screen
  1. Big feature with additional data - sentence reading mode. Sentences from tatoeba project can be used to implement it. Maybe for start it would be cool to use sentences tagged with 'haiku'. As I can see this:
  • Implement tatoeba parser
  • Preprocessed sentences with morphological analizer to annotate terms in sentences
  • Create minimalistic practice screen where sentences will be presented to user, make terms clickable. Can make it similar to anki with options like repeat/good/easy. Maybe separate furigana toggle. Vertical text mode would be cool too.
  • Create additional screen for presenting term and possible meaning, for unknown terms can send user to look for it at jisho.org
  • (Optional) Option to mark terms/sentences as favorite and export data to anki supported format

Add sound

The voice reads automatically, so I can learn to pronounce it while writing by hand.

off-topic

I really hate kanji. Japanese Hiragana Katakana, it's cool and easy to learn.

The Japanese government doesn't do anything useful, and never abolished kanji.
Korean abolished kanji a long time ago

Add radicals information to kanji

Add radicals information to kanji already available in kanji vg

In result following features are expected:

  • Update parser and database to include radicals info (each stroke will be associated with radical and radical's position in character to highlight differently multiple instances of same radical)
  • New section on character info screen - with colored radicals and list of them
  • Highlight radicals when study mode for writing practice is used. Maybe made toggable with uncolored mode

Add Voice Prompts (for Kana, at least)

When I first started learning kana, I used an app that had voice recordings to go with the characters and it helped immensely with learning and memorizing.
There is another app on F-Droid that also does this: Fun With Kanji
Perhaps they might be willing to point you to where they got their samples from. I can also spend some time searching for free-to-use (and redistribute) sample packs. At worst, I could maybe open something on CastingCall.Club or elsewhere. Lol

Regarding the inevitable concern over file size, voice packs could be optional and downloaded through the app from Github or elsewhere. They could even be sparated into different packages for different levels (eg one for kana, one for N5, etc.).
For the files themselves, Ogg-Opus is a God-level codec and these samples could be reduced to low double-digit kilobytes each without losing much (if any) nuance in pronunciation (that first app I used had some samples that were hard to discern between).

Bad translation of 里

SAVE_20230403_202048.jpg

The main translation is just onyomi of the kanji.
It should be "village" for example.

Optimize loading time

Got an 'encouraging' 😅 review on Google Play regarding slow loading so I want to address this issue
image

There are several places in app that can be optimized:

  1. Writing practice screen. Currently it's loading all data at the beginning so if count of characters to review is big it might take a lot of time to load. I'm thinking about load only current and following character info at the moment, maybe making expressions load only if bottom sheet is expanded
  2. Search screen. It loads all possible expressions at once, so 1 character search takes a lot of time. It can be improved by implementing pagination logic to load only small portions of data. This is also important for multiplatform branch since sqldelight transactions are probably single threaded and kotlin won't interrupt them so 1 character search can hang following searches when typing for some time.
  3. Maybe reading review screen as well, will investigate it too

Enhancement Request: Set all the configurations and preferences in the main settings, not the Practice Settings

The Practice Configuration is not practical.
These options don't need to be reminded every time we start a new practice:

  • users won't suddenly turn right-handed depending on the characters they're reviewing;
  • the "Study new characters" option becomes obsolete once we've 100% the set;
  • and, at least me, will prefer to have all my practices randomized, and the hints (translation layout) hidden by default.

These configurations would be better placed in the main page's settings.

Starting a practice already takes too many steps:

  • Select the Practice.
  • Select the group you want to practice, or the option to select multiple groups. Then, select the groups.
  • Press Play.
  • Select how many characters you want in the Review options.
  • Confirm Practice Configuration settings.
    and then you can finally start.

If we can cut the number of steps by at least one, it's already a win.

Integrate the radical keyboard also in the create/edit custom deck

The Kanji selection to make custom sets doesn't work, I tried writing in kana and the whole kanji but nothing to select appears, also, wouldn't be a great idea to implement also in this section the search by radicals "keyboard"?

Btw, great app if you need help I'm here

Practice preview screen configuration indicator

Configuration turned out very extensive but there is almost no distinction within user interface so it might get confusing which configuration is currently used

Planning to add a line above list with information about practice type - whether it's writing or reading, filtering and sorting

Change practice configuration buttons behavior

These buttons are opening the same menu:
Screenshot_2023-03-29-18-50-42-082_ua.syt0r.kanji.fdroid-edit.jpg

It'd be better to change the first two buttons' values on tap, without any menus.
The sorting button should open only this part:
Screenshot_2023-03-29-18-55-30-273_ua.syt0r.kanji.fdroid-edit.jpg

That will make the interface more simple.

Space characters disappear when pressing backspace when adding/modfiying the name of a practice set

Description

When adding or modifying the name of a practice set, using the backspace key to delete characters sometimes deletes space characters earlier in the text.

Steps to reproduce

Create a new custom practice set (or edit an already existing one), press the save button and when prompted for the name, type a few words ("abc def ghi jkl" for example). Then start pressing backspace multiple times. A space character that shouldn't be removed will be.

issue.mp4

My system

My phone is a Fairphone 4 running /e/OS 1.13 on Android 12.

Suggestion: Easier way to select all groups

I'd like to have a way to review all groups without having to manually select each and every individual group.

This could be accomplished by allowing the user to start a review with zero groups selected, and interpret that the same as if they had selected all groups (possibly with verification), or by adding select/deselect all buttons.

Screenshot

Enhancement Request: Allow an option to sort the practices in the main page

When creating the practices, they are sorted in the order in which they were created. If we want to rearrange them, we'd need to delete them and recreate them in the order we want them.

An Edit option to move them to a different order would be more flexible, allowing us to move down practices we no longer need to review that often, bringing the new ones to the top.

Allow to choose user-preferred romanization system.

Recently romanization of some characters have been changed within the app, partially due to avoiding confusion between Kana characters pronounced/romanized the very same way. However, changing "ji" (じ) into "zi" may give much confusion, especially for English students, because many may find "ji" much more intuitive pronunciation-wise than "zi".

Therefore, given different romanization schools may fit various students, it may be very helpful to allow users to choose their own preferred romanization style within the app's settings (e.g., Hepburn, Nihon-shiki, Kunrei-shiki - see the implementation here: https://github.com/theblackwidower/KanaQuiz ) . Would You be willing to do so?

[Suggestion] Import kanji from Wanikani

Hi,

First of all thanks for the app!
I would like to make a suggestion, I'm using Wanikani to learn kanji and it would be great to be able to import automatically in the app the kanji I know from the Wanikani API!

Thanks :)

Review All Button

Hello,

I'm really liking the app and have been using it for a while now. That being said, I was wondering if we could get some sort of way to review all the kanji marked for review automatically.

See, I'm pairing this app with Wanikani which has 60 levels. The app already gives me the ability to create this groups. Great! however, I have close to 20 levels now and the home screen doesn't tell me which level need reviews just when it was last reviewed. I have to click on each to check. Moreover, getting inside of a group shows you the actual kanji in the group that needs review (assuming you filter by it) meaning you actually get to see the kanji you need to review before you review it like it or not. This is a big spoiler and gives you the answer before the question.

so in short it takes too much time to click on each group to check reviews and the reviews are spoiled by characters showing before you reviewing them.

Having just one button above the plus in the home screen to do my daily reviews would be immensely helpful particularly once i get to having 30+ groups of kanjis if i catch up with my wanikani.

Anyways, just my two cents. I appreciate the hard work.

Adjust Review Frequency

It would be great to be able to adjust the time after which the color indicator for a group changes from "Recently reviewed" to "Review recommended".

Ideally there could be different intervals depending on how often it has been reviewed so far, as well the option to no longer recommend review after a certain number of completions or by manual setting it to done don't remind me anymore for a group.

This has psychological effects on motivation and satisfaction, the indicator going back to review recommended each day may create an invalidating feeling. By allowing the user to have their learning reflected in the review indicator it can create a feeling of satisfaction and success.

Thank you for the wonderful app! It has become my favorite learning app for kanji together with a book.

Backup / Restore.

It would be of a great help and importance to be able to backup and restore the user's character sets in order to be able to smoothly continue learning and practice on (e.g.) another device or once the current device has been factory-reset.

Dark theme

Dark theme to allow users who study at night to harm their eyes a little less than usual.

TAG: enchancment

Option to offset daily reset time

Currently it looks like the review counters reset at midnight. Occasionally it's just after that that I get my reviews in, which interferes with the daily limits.

It wouldbe useful to set a custom hour when the day resets -- e.g. Anki has such an option and defaults to 4am, which is probably a better default (as a time when more people are asleep).

Alternate romanization of ぢ and づ

In the app, both じ and ぢ are romanized as ji, and both ず and づ are romanized as zu. The same applies to ジ / ヂ and ズ / ヅ . While this makes sense because they're both pronounced the same, it creates confusion when you need to differentiate between them, such as when trying to quickly practice kana.

To avoid this issue, ぢ and づ are sometimes romainzed as di and du, because that was their original pronunciation. This is also the way you type them when using a romaji IME. So I think it would be great if this app also had an option to use di and du for ぢ / ヂ and づ / ヅ .

Apply SuperMemo algorithm.

There is an algorithm of memorising out there which may make learning Kanji much more effective than traditional ways. Since I've seen its implementation within the other learning app (https://play.google.com/store/apps/details?id=pl.idedyk.android.japaneselearnhelper ; although it was about vocabulary, not drawing Kanji) I wonder would it be possible to implement this algorithm within the Kanji Dojo. The algorithm should be freely available to use (its older version should be open). It would take the learning effectiveness to a completely new level.

Hide On and Kun readings during practice writing mode

Hi, I know this suggestion overlaps with the reading mode a bit but I wanted to ask if it's possible to add the option to hide the On and Kun definitions during practice writing mode, the same way the kanji is hidden, until the kanji is correctly written or when a reveal button is tapped? Personally, I don't use the reading mode very much. I like to test my On and Kun reading while doing the writing practice, and I'd have to physically cover up the On and Kun readings with my thumb until I'm ready to move onto the writing.

No update in fDroid

I watched the repo today and found out, that there are two new versions of the app.
Is it alright that there are no updates in fDroid?

Suggestion: Editable sort order (Drag & Drop?)

Would it be feasible to make it so that the Create and Edit screens allow the user to customize the characters' sort order?

I'm envisioning long-pressing to pick up a character, dragging it, and releasing it where desired (drag & drop), but IDK how easy/difficult that would be to implement.

Screenshot - Kanji Dojo - Create screen Screenshot - Kanji Dojo - Edit screen

Be more strict

Currently, the kanji writing practice tolerates up to 2 mistakes. This leads to some kanji not being properly learned, like always guessing the order of the first two strokes of 左 and 右.
While I understand why you wouldn't want the review period to be reset from just a few mistakes, I'd prefer something like kanjis being kept in the queue until they are drawn without mistakes and whether to reset the review period being decided based on the total count of mistakes since the last time the kanji was drawn without mistakes.

Clickable radicals on kanji page

Hello, it would be really helpful if clicking at radical opened a subpage about it (the same behaviour when you click at kanji in Expressions tab).
image

More options for selecting characters for review

First versions were really flexible from perspective of choosing characters for practice, but the visibility was too overwhelming. I'd like to make current version more flexible. For now considering following possible features:

  1. Add one more button to toolbar on practice preview screen with eye icon that opens a dialog with option to change count of characters in groups
  2. Make it possible to select multiple groups with long press to review with options to review all or random part of selected characters

Fuzzy/pixelated lines in writing practice area

I recently discovered this app, and I like it, but there's one thing that I find really annoying. Both the demonstration and user input lines in the writing practice area are quite pixelated and fuzzy, like they are being rendered at a lower resolution and scaled up. The screenshots in the readme and on both the F-Droid and Google Play listings seem to show lines with sharper, crisper edges, so I'm guessing the issue either got introduced in an update, or doesn't affect all devices.

I've included a screenshot of the issue as seen in version 1.1 on a Samsung Galaxy S7 Edge (Model SM-G935V) running Android 8.
Notes:

  • My phone has options to render the display at 1280x720, 1920x1080, and 2560x1440. This issue is present at all of these resolutions.
  • This screenshot is from the F-Droid release, but I also tested with the Google Play version, and the APK downloaded from this GitHub project's releases page. They all behaved the same.
  • The colored demo graphic above looks like it might be a little pixelated too, but it's not as obvious because it's smaller.

Screenshot

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.