Sunday, January 11, 2009

Flashcards Project Status

For those of you who don't know, I've been working on a new project for the past several months. My initial desire was to create a simple little app which would help me learn Python, and would also facilitate my learning of Classical Greek endings. Verb and noun endings in Greek are vitally important to understand, and there's so bloody many, I felt a learning application would be a fun project.

The last 4 months of coding have been some of the most fun I've had.

Though the project is still in its infancy, and though I'm struggling with massive amounts of scope creep, I have an "alpha" which is almost ready to be released.

Here are the initial requirements/specifications:
1. The system will provide "questions" and allow users to provide "answers"
2. The system will check the user's response and either accept it as a match, or reject it
3. The "questions" posted by the system will initially be in the form of Classical Greek verbs, nouns, or prepositions. Answers will be posted in English.
4. Verbs and Nouns can be put together by the system as a "cross product" of two sets: roots and endings. In other words, the system should be able to take a list of roots and apply endings to each one.
4a. In addition to this, the system should be able to discern the correct answer
5. The system will use Leitner's System (or a modified version) for "learning" which words the user knows and which ones they don't.
5a. The system will provide "questions" for those less-known words more often than those of well-known words
5bi. The system should have a means for accessing less-known words more often than well-known words (see point 8b)
6. The system will provide a means of "hinting" at the answer
6a. The hint system should be configurable
7. The system will provide statistics for the learner to gauge their progress
7b. The system should output information regarding the number of successes, failures, and hints posted or requested by the user
8. The system will allow the user to modify the underlying details of the Leitner Algorithm while currently engaged with the application
8a. The user should be able to modify the number of "piles" (called "buckets") in which the cards are distributed, within the range of '1' or '10' buckets
8b. The user should be able to modify the means in which the buckets are distributed (e.g. 30% of the time, the system will pull cards from the least-known bucket, 5% of the time it will pull from the well-known bucket)
9. The system should use a QT-based GUI for viewing
10. The system should be able to preserve the current state of user-execution
10a. The system should allow the user to save/restore the current state whenever they desire
11. The system should be configurable via XML configuration files, allowing users to "hot-swap" different card-input algorithms
12. The system will provide detailed documentation for use, administration, and flashcard development.
13. The system will host 'hotkeys' for easier navigation

These are the basic requirements. All but 10 and 11 are pretty much finished, though there are a number of defects and design issues which need to be addressed.

One requirement I'd really like to investigate and get working is #11. My buddy Bump suggested this: apparently, the current Flashcard systems don't have very well abstracted algorithms which can be swapped out. I'm not sure what this will mean, but it sounds interesting and fun.

In the meantime, here are some screenshots of the GUI in action. In order they are:
I. The main GUI and dialog for choosing the card "set"
II. The main flashcard GUI -- note the Unicode characters for the Greek words and the statistics in the lower left corner
III. Main flashcard GUI -- posted failure when user guess is incorrect
IV. Main flashcard GUI -- posted hint when user requests
V. Main flashcard GUI -- posted success when user guess is correct
VI. Main Algorithm Admin GUI -- note the Leitner and Hint system administration options












Saturday, January 3, 2009

Brief Update

We just returned from SD yesterday. It was a great trip, albeit pretty short. We flew out from Denver on Tuesday morning and arrived in Sioux Falls (about 45 miles northeast of Freeman) around 1 in the afternoon. All in all, the flight was ok. Our departure was an hour late; apparently, the plane was falling apart and they needed to piece it back together. Such things do not instill massive amounts of reassurance in those of us who are a bit trepidatious when it comes to flying.

We stayed with Jenn's family over the duration. Her family on both sides visited over lunch on the 31st and 1st. I didn't spend much time with her mother's side: it was only the women, and I had the opportunity to have lunch with her younger brother and father. It was a worthy trade off.

We left yesterday morning at 11 and arrived here at 12:30pm. Ofelia did very well throughout the entire trip. The first time she fussed during travel since Tuesday was yesterday as the plane was descending. Other than that, we could tell she enjoyed the adventure immensely. She made friends with people all over the airport and in the plane, her smiles inspiring others everywhere she went. I'm amazed at how much happiness she seems to bring to those around her. She's very friendly, and has a way of endearing herself to everyone. While we were sitting on the plane waiting to take off, she kept peering through the gaps in between our seats, giggling, squeaking, and smiling at the elderly couple behind us. She did the same for several people behind and next to us as well. It was cute, and very fun to watch.

Of course, I was primarily focusing on not freaking out over being 30,000 feet in the air, but that's another tale for another time.

She was also baptized a week ago tomorrow. The ceremony was held in a local Confessional Lutheran Church (Missouri Synod) and we've established a nice relationship with the lead pastor. I don't think the liturgical service is for us, per se, and we have disagreements with Lutheran doctrine, but it was an interesting exposure to a historical side of the Christian church which we hadn't seen prior.

That's all for now.