Tuesday, April 14, 2015

The WPF Evolution of my Multimedia Flash Cards App

In a previous post I wrote about an MVVM model that I called “Factoids” and used in an App that I created for learning to speak Italian (before a trip that we took to Italy in 2012). This post is a follow-on to that since a lot of things have changed — most importantly, I switched from Silverlight to WPF to gain access to .NET classes that were not available in Silverlight 5. This has led to a much more powerful and general-purpose tool that runs on a touch screen (Windows 8.1 — not my cell yet) where you can do everything without having to click a mouse.

In the screen shot on the left you can see a number of conceptual & usability improvements — starting with the name: Now it's “Flash And Learn”, as you see in the title bar. Below that is a title that shows you the foreign language that your flash cards are for, since I've realized my original vision of making the Word-of-the-Day eMail parser be table-driven and have done this for Italian, French, Dutch and Spanish. What I formerly called “Context” is now “Learning Objective”, and the name of the current objective, “Understand The Phrase”, appears on that title line. At the bottom of the screen a new Status Line tells you what's going on.

Within a Learning Objective you can categorize every word in the Vocabulary by assigning it a “Proficiency”, and one of the most useful new additions to the App is that it can draw a Pie Chart, shown on the right, so you can see exactly how much progress you've made on that objective. Since everything in this App is data-driven, you can have as many Learning Objectives as you want, and you can freely make up the names you want for the Proficiencies.

The primary paradigm for this App is that you use Viewing Rules to pare down and specialize which cards are visible, and then via simple Navigation within those cards you use the multimedia information derived from the cards to help you learn. For example, on the left a small deck has been specialized via rules that say: Only cards which are for Adjectives where the Proficiency is “New”. Appropriate to a Learning Objective such as “English Word Listening to Audio”, the right-hand panel is set up to show the Foreign Language card without any English. Typically, the drill would be (a) spin — do a (random) navigation, (b) click the Icon to listen to the audio, (c) update the Proficiency for that card and (d) spin again.

There are several ways to introduce new Vocabulary. The one on the right called “Create Vocabulary Alias”, shows you the currently-selected flash card and lets you create a new one with the only constraint being that the two must share the same audio and phrases. This is very useful when you get a sentence that has a word you don't know — you can just make a card for it directly. Another way to get more Vocabulary is a new command that gets the Word-of-the-Day for Today so you don't need to deal with eMail at all.

The future: My goal all along has been to make this App run on my Windows Phone, so I've looked into Microsoft's new “Universal App” model for which I at least get to keep my Xaml UI — but no Silverlight, WPF, or ActiveX controls. At least my understanding is that if I target WinRT it's more likely that in the future this can be not only a Windows 8.1 Metro App, but also deployed on iPhone and Android mobile devices.