Skip to content

khoitnm/language-note

Repository files navigation

language-note

An application for learning languages.

There are already many applications for learning English. But most applications force me to practice on predefined vocabularies, phrase, idioms, exercises. Some applications allow me to define my own vocabularies and other expressions, but I have to write the meaning of those vocabularies by myself, so exhausting, and most of them don't allow me to put images or video into the expressions' description.

This applications try to avoid those issues. This application will help users to memorize their vocabularies, phrases, idioms: users can create different topics which contain their own expressions (vocabularies, phrases, idioms).

When user input an expression, it's definition and examples will be loaded automatically from dictionaries. Then the user can change that definition and examples to make it easier for him to understand.

After that, he can do some test for his expressions. Those testing exercises will be generated automatically based on the examples and definitions of those expressions. There are many kinds of exercises (recall the meaning, or filling blanks, etc.)

The user will get a score for each word, the words with the most failure answers will be more likely to appear in later tests.

Priorities

Business logic: At first, I am only focusing on the English language. And vocabularies learning is the top priority, idioms, synonym, family, etc. will be enhanced later.

Technology: This is just a low priority. Realization the idea is the most important thing. KISS principle is the best here. Security is minimum with a very simple approach at first (username/password with the session). After that, we will consider OAuth2 and JWT

Far future enhancement

  • Add automatically reminder for new expressions
  • In the future, I can support other languages, not only English.
  • A bigger steps, create a game dynamically which users can play on their interesting expressions only.

I. Requirement

There are some requirement we have to satisfy:

  • I would like to collect some Expressions in the global Dictionary or in other users' Dictionaries into my own Topic.
  • I can practice on my own Topic.
  • I will answer Questions inside a Topic, and I will have an Answer Result for each question. The Practice Result of a Topic will be aggregate from the Practice Result of each Question in the Practice Session.
  • I can practice with the new Expressions first.
  • The next time I practice, it must show either Expressions I have never tried or Expressions I didn't get max points in last 2 Practice Results.
  • Add a Chrome plugin to look-up the vocabularies' meaning. The looked up words will be added in to a topic (the name is the title of web page). When you look up a word, the app will consider it as an failed answer for an expression-recall question.

II. Project modules

  1. language-note-server This module provides main business services for client applications.

  2. language-note-client The web application which provide UI for end users. It will connect with language-note-server via REST API.

  3. language-note-chrome-extensions The Chrome Extensions which also connect to server to load vocabularies' meaning.

  4. language-note-common Provide common codes so that other modules (language-note-server & language-note-client) could be reuse.

III. Technologies stack

The used technologies of each module will be described in each module's README.md

Quick note for future ideas

Speaking practice: Recognize voice, use it to control games.

Project structure:

I try to separate packages as the business domain (features), not by layers. It this way, those components might be separated into smaller microservices if necessary. You can read more in here: Screaming-Architecture
Some more specific explanation:

However, I do not totally follow the clean architecture which was described in The Clean Architecture. That architecture is very good for decouple the main business logic from technologies, and it needs some abstraction, interfaces... to do that. However, in my case, even the business logic is unclear and they could be changed very quickly (Note: I'm going to change the current main business logic in the near future). So with KISS, YAGNI principle, it keep it simple at this moment.

Note:

This project would be replaced by microservice architecture. The future project will be implemented with the motivation from this article: https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do (with an proof-of-concept code)

About

An application to note your own vocabularies and phrases. Then help you to practices with your own notes.

Resources

Stars

Watchers

Forks

Packages

No packages published