Back to top

What I learn from build Noat.cards

It is about one year from the day I launched Noat.Cards. Today, I want to share about what I learned from building the service.

For beginning, I would love to share about the story of how I came with the ideal.

The ideal of build noat.cards was came when I prepared for an Interview :). While preprearing for the interview, I question myself that why I always replay the preparing interview routing over and over again. Want to change the job, take interview , prepare for the interview. Have any service to cut off the process here ? If I want to change the job, just take an Interview Don’t need to prepare anything.

The purpose of building noat.cards is quite simple, help me always is the best version of myself when take an interview.

Spaced Repetition Technique

The technique already applied to many successful service like Duolingo, Anki to optimize the learning routine

Spaced repetition is the process of repeating active recall study on a routine basis. If you only revise the general facts once you can expect to forget the majority by the time you reach the exam or test. Repeating the content brings your understanding back to 100% while also reducing the amount you will forget. Typically, after 4 or 5 repetitions you will be able to remember the majority of the content and be ready for any test. The chart below represents the forgetting curve after each repetition.

Existed service and what is the problems

  • Anki : Spaced repetition system app
    • really wellknown
    • User can add new card by themselves
    • or Download/import existed card package
  • Memrise: ignored , they only focus on learning language
  • Mochi: markdown, applied Spaced repetition technique

Anki is really great and they have huge community but the problem is that

  • Anki card package is sqlite + some magic from anki team (apkg).
  • Really hard to modify the card package and contribute back. Special process to create Anki card package we can say it is one man contribute model.
  • Again, to edit/view a card need to use Anki App
  • We are good with Anki, but we have problems with Contribute Model

Ideal

Architecture and Knowledge Pipeline

  • The LearnEngine will apply Spaced repetition technique to optimize the learning process for user
  • BotClient: stateless service maintain UI feedback and render the UI
  • Redis: cache layer for back stack and other
    • Easy to help user navigate forward and backward Telegram User will communicate with the bot, The UI of the bot is service-side rendering

Why GIT and what is knowledge repo

Why GIT

  • Great contribute model
  • Great CDC(change data capture) tool
  • Easy to identify the change by parse the patch file or just simpe git diff
    • Line level change detection

What is Knowledge Repo

The structure of knowledge repo is quite the same with book:

  • Deck (*.md) <=> Chapter
  • Cards <=> small paragraphs in a chapter

Why Markdown

  • Text base
  • Easy to versioning with GIT
  • Simple markup language and already dominated
  • Simple to parse with regular expression and have a lot Markdown parser libraries
  • Easy to add new markup
  • Already have many wellknown knowledge repo was written by markdown

Example for custom Markdown markup

reference here

Why Telegram Bot

  • Telegram already has about 500 millions user
  • Telegram Bot is really fast: 500ms rsp with normal mode , 50 ms rsp with local server bot
  • I think that beside of learning , we need to sharing. With telegram, we can easy to share
  • Easy to access knowledge-base in middle of conversation
  • I have no ideal about mobile app development :)

Benefit

Challenge ?

  • As technical view, I thought I hard but not it really easy if you build a good momentum by time , like build habit
  • Real life is harder, I thought it is quite nice and will have many user use the service, but no one, even me :)
  • Maintain whole service with 1 man power , it is complicated sometimes. Need some trick
    • keep balancing between design pattern, anti design pattern
      • Keep the core (the most complicated) simple (anti design pattern)
    • Strict all logic to the main flow (No Adhoc)

Look Forward

  • Adapt to Knowledge graph (graph database)
  • Rebuild the service focus on User
  • Mobile app (possible) for main purpose, ChatBot for communicate