Tuesday, September 18, 2007

Help Create a Killer Flash Card Application

What?

Almost everybody has used paper flash cards to study for a test or learn a language. This project is the same idea, only in electronic form. Using Ruby on Rails.

Required Features:
  • Customizable number of sides (eg. Studying Japanese requires a minimum of 3 sides: Japanese, Pronunciation, Definition).
  • Spaced repetition. 1000+ flash cards without some sort of intelligent repetition algorithm is worthless. Given a rating of how well you know a card, the computer will tell you when you need to study that card again in the future.
  • One card can belong to many categories. If I'm studying a language and I run across a word in a book, and in a movie, I want it to belong to both categories.
  • Programmer-friendly. Be easily able to import data, export data, and query data. I keep a database of word associations and would like to be able to programatically update it.
Desired Features:
  • Mobile. Use those idle minutes at the bus stop.
  • Hierarchical categories.
  • Visual display of learning progress in the form of graphs (eg. Number of cards studied vs. Date, etc).
  • Rich history of all cards.
  • A web service for other programmers (XMLRPC, SOAP, JSON, simple HTML GET..... anything)
Why?

Surprisingly, the majority of existing flash card programs (free and pay) only have two sides (this makes it useless for my study of Japanese). None combine every feature on the list. I also haven't found any open source application that provides an extensible enough base that I can easily add in my desired features. I have been looking for almost two years.


How?

Ruby on Rails will provide the framework to rapidly develop an application for both PC (rich interactive websites) and connected mobile devices (HTML only pages, JSON/XMLRPC/SOAP etc). It is also dynamic enough to dynamically manage relationships between words. Gruff Graphs are beautiful. But really these are all implementation-specific details.


In Addition...

I have created several applications for managing relations between words, example sentences, and chinese characters. The idea is that, given a word, you should be able to see every instance where it appears. Given a chinese character, you should instantly be able to see all words that use that character. Given an example sentence, you should be able to see all words and all chinese characters that appear in that sentence. This is working great.

In this project, I would like to implement it in the most general case: the user can define types of flash cards and create links or relationships between them. For example, they create a flash card of type 'word' and 'example'. They then specify a 2 way "to many" relationship between the two types of cards.


What I've done

I have implemented every feature (required, desirable, and word/kanji/example association) at one point in the last year -- although not in one project -- and not dynamically for any language. That's why I'm restarting this project one final time: to create the most general case, and to provide a useful application (not just a quick and dirty utility for my own use). So now I'm just seeking programmers who will help me implement it one last time in Ruby on Rails and polish everything up.

The rest...

My biggest weaknesses are
  • Creating a visually pleasing design.
  • AJAX and interactivity.
  • Advanced ActiveObject relations and dynamically managing relationships (this may not be needed for the project depending on implementation).
So I'm especially looking for anybody who excels in those areas.

Who to contact

flight16@users.sourceforge.net

Thanks for reading.