rgb's Books

Robert G. Brown's General Tools Page

Things on the site itself that may be of interest to students or philosophers of any age or generation include complete online books of poetry, various support materials for the study of physics, and links related to beowulfery. All materials on this site that are authored by Robert G. Brown are Copyright 2004. The details of their Open Public License (modified) can be viewed here. If you use or enjoy anything at all on this site -- free textbooks, stories, programs, or other resources, consider hitting to help spread the word so others can find it as well. Note, Robert G. Brown is generally either rgb or rgbatduke on many external sites crosslinked here.

My Books:

My Books

Home Top Flashcard Program DieHarder Program Benchmaster Program Jove (editor) Program The C Book The Tao of Programming Your Brain: a User's Manual (draft) CVS Mini Howto
C project template PVM project template LaTeX project template HOWTO project template Latex Manual (online) random_pvm demo/template The yum HOWTO (draft) Yum Article Contact About
Amazon Sales Rank Toolset A Theorem Concerning God

Site Links







Flashcard Program

Robert G. Brown
Duke University Physics Department
Durham, NC 27708-0305
Copyright Robert G. Brown, 2024


Gflashcard: A Personal Learning Tool

by Robert G. Brown (rgb)

gflashcard Version 0.7.1



gflashcard is a program based on GTK and XML for presenting simple flashcards to students in a standard terminal (e.g. xterm) window. Its license (GPL 2b) can be viewed at the bottom of this page. Its current features include:

  • Arithmetic flashcards (ones that take a numerical answer).
  • Spelling flashcards (it "reads each word out loud" and then checks the spelling. It can handle alternative spellings and homonyms (words with the same sound but different spellings and meanings).
  • True/False flashcards.
  • Multiple Choice flashcards. The multiple choice engine is powerful. One can define up to 1024 possible answers. Multiple choices can be selected to be counted "correct"; the program can manage combinations like "A and/or B" or "A and B" and hence is suitable for type K questions. Up to ten answers and foolers combined can be presented per question. The answers are always accompanied by randomly selected foolers and the choices are shuffled before presentation, so that choice "A" this time may choice "D" the next time you see it.
  • Foreign Language flashcards are an alternative application of the spelling or multiple choice flashcards. For example, an English word can be read and a Spanish translation required, or vice versa.
  • All flashcards can be accompanied by an easily recorded audio snippet. In the case of spelling or foreign language flashcards, an audio presentation is likely the only presentation schema used. In all cases, though, the audio feature means that flashcards that are suitable for the sight-impaired can be prepared. A future version of the program will provide audio feedback on each flashcard as well.
  • Flashcard sets can be presented in random order (the default, in fact) or list order, where the presentation order is determined by the author.
  • Flashcard sets can be mixed type. Spelling, arithmetic, multiple choice, foreign language, true/false -- a whole day's worth of material can easily be reviewed in a mixture less likely to be boring to small children. In fact, "fun" trivia type questions can be mixed in with academic material.
  • The program automatically scores each session.
  • The program automatically times each session.
  • The program has a practice mode where it loops indefinitely, presenting and representing a shuffled list of the same problems.
  • In practice mode, a user can be required to repeat each question that they miss one or more times, to help "drill" them briefly on their mistakes.
  • The program has a test mode where it runs for a specified amount of time and scores all questions that a student answers in that much time.
  • In all modes, each flashcard can include an explanation that appears when a wrong answer is entered. This can be a powerful teaching tool, as a student isn't just informed that their answer is wrong, they are presented with both the right answer and why the right answer is right, or why the wrong answers were wrong.
  • All problems are defined by a simple and straightforward XML tagging not unlike the tagging that produces this web page. Most problem types can be created by any text editor. A (still fairly crude, but functional) scripted recording tool is provided to automate the generation of audio/spelling clips for inclusion in flashcard sets. More advanced tools are under development (developer participation welcome).
  • The XML-based format of the flashcards is both open and easy to read, write, and parse in nearly any programming environment. It furthermore means that with an associated DTD a single set of flashcards can be presented by many tools in many ways. For example, a single set of flashcards might be:
    • presented in an ncurses/tty flashcard engine like "flashcard", which is also included on this site.
    • presented in a GUI flashcard engine like "gflashcard".
    • presented in a web-based flashcard engine using java, perl-cgi, php (not yet written)
    • transformed into simply formatted text with a suitable DTD.
    • transformed into text formatted for printing onto card stock to make real flashcards, again via DTD and tools such as jade.
    • similarly transformed into latex-formatted snippets that could then be included in actual textbooks, quizzes, problem assignments. flashcard's XML offers the possibility of their one day existing a large database of open content from which many people can draw problems for either self-guided or directed study.
  • The flashcard programs' source itself and the XML that specifies flashcards are open source and open standards. This means that anybody can take the sources and write their own derived flashcard presentation engine, as long as that engine in turn remains open source. It also means that anybody can write non-derived proprietary engines for presentation that can instantly present "any" flashcards built according to the standard. Flashcard sets themselves can in fact be copyright protected and sold for money. This combination of open presentation engine and open language and protection of the rights of problem set authors should encourage the development of content, both proprietary (for sale) and free.
  • Although gflashcard (the GTK presentation engine) and flashcard (the ncurses/tty presentation engine) are fully functional already and reasonably bug free, it is an ongoing project. Using XML as the basis of flashcards means that they will be at least moderately extensible -- future evolutions should contain support for graphical presentations, mathematical formulae, foreign character sets, GUI based presentation and authoring tools, web based presentation and authoring tools, problem databases and more. Using new features based on open source tools and standards is straightforward; XML means that each addition shouldn't break existing flashcard sets, only permit more powerful content to be added to them (as XML parsers will generally ignore tags they do not recognize while parsing the ones that they do).
  • Open Source Developers are welcome to participate. Content development is also openly solicited. My most precious commodity is time -- to facilitate the rapid development of this powerful tool requires time and/or money. In the documents directory there should be a tarball of free flashcards covering a number of topics in their own directories -- many lamentably empty. Interested parties should certainly consider writing and contributing content back to this tarball.

gflashcard requires libxml2 and Gtk-2.

flashcard requires libxml2 and ncurses.

Back to top

About flashcard

flashcard is a program I wrote to help my second grader drill basic spelling and arithmetic, my seventh grader drill Spanish and vocubulary, and more advanced students get immediate feedback on "conceptual" or memory building multiple choice questions.

flashcard is not a game. No imaginary space aliens are harmed as one learns vocabulary or arithmetic. It is a very, very efficient way to get the practice and immediate feedback necessary to memorize a large number of dry, boring factoids. It never gets tired, impatient, angry, or has to cook dinner. It doesn't require lots of little cutout cards or pieces of paper to get lost. Suitably installed on a local area network of student-accessible computers, it can be used as a memorization aid for nearly any sort of factoid and as a relatively weak "deep" learning tool.

Based on my own personal experience so far with it, young kids initially find it at least intriguing (doing flashcards on the computer is kind of neat), then boring and to be resisted, and finally just another daily homework chore to be done as quickly as possible. Older kids progress through these stages more rapidly as they can see that using flashcard to e.g. learn their vocabulary words beats the hell out of trying to do it by just reviewing their handout list or writing each word three times. By the time any student is in the latter stage, the program is generally "working".

I've been quite pleased with the results. My second (now third) grader went from getting an average of 60% or worse on timed arithmetic tests to getting consistent high-90%s (and occasional 100%s!) in about one month of three or four time a week drill.

His spelling is improving as well, but more slowly as he learned to spell phonetically and is a bit stubborn (literally) about the non-phonetic spellings and multiple possible spellings that abownd in English. He initially exhibited a similar stubbornness about memorizing arithmetic versus using his fingers to compute the answer, but repetition and time pressure eventually take their toll and he ended up memorizing the right answers in spite of himself.

One thing that I'm doing that may or may not be the right thing to do (and may be responsible for his initially relatively slow progress) is having him drill on all the second grade core vocabulary words at once, instead of doing a small list every week in phase with his class. In the short run this leaves him behind, as he sees his current vocabulary words only occasionally and mixed in with all many others. However, I expect that very soon, with consistent drill, he will suddenly know the entire list (this is the way it worked with arithmetic) and be not only ahead but done with learning second grade vocabulary half way through the year.

Back to top


New! gflashcard GUI!
The material displayed is the included "demo" tutorial that both demonstrates gflashcards abilities and serves as a template for building your own content.
Multiple Choice Flashcards
The material is chemistry questions for an academic bowl team.
Arithmetic Flashcards
Times tables for third graders.
Spellilng Flashcards
Although a screenshot cannot show it, the words are read out loud by the program and then typed in by the student.

Back to top

Practice Strategies

I'd suggest the following strategies for using flashcard for yourself or with your kids:

  • Use practice mode a lot more often than test mode. Practice mode (the default) actively drills the kids with no external time pressure. Each time they make a mistake they have to enter the correct answer (which is then presented to them) at least one time. This is just annoying enough to make them try, a little bit, to remember, and repetition aids memorization anyway. The number of "reps" can be varied in a flashcard file with the count tag.
  • Don't get angry with your kids for poor performance either in practice or in test mode. gflashcard will work over time -- believe it and just let it work. My kids beat themselves up over mistakes so much that I've had to tell them to relax and let the program teach them when they make mistakes. Keep short-run expectations, and pressure, low.
  • Do insist on a consistent, regular schedule of using flashcard to "do their flashcards" in all subjects you're using them for. For younger kids, every day is ideal, every other day acceptable, every week probably not enough. gflashcard will not work if the students don't use it regularly and get used to it and start working with it and not against it (see notes above). We try for every day and get maybe every other day. Use it regularly until mastery is achieved, and then occasionally to reinforce it and make it permanent.
  • In practice mode, you can specify the number of problems or just run it "forever" (until they q(uit)). When younger kids first start using it, 30 or 40 arithmetic problems or 20 vocabulary words is "a lot" and they won't be very good at entering answers. Start them easy until they get to where they can read a problem and enter an answer in less than 10 seconds. Then you should be able to crank up to 100 arithmetic problems and 50 vocabulary words, which should take them about fifteen minutes to run less as they get better. Much less.
  • There is no harm at all in offering performance or participation rewards (I mean "bribes"), especially to younger kids. Tell your child that when they first get (set your expectation here) you'll buy them a toy or a treat, take them to a movie, do something they enjoy with them. You're going to make them use the program whether or not they like it (and of course they "won't like it") -- at least give them something to look forward to when they do.
  • Remember that the computer is "stupid" (or if you prefer, my grading program is stupid). If you type an extra space after a word it will mark the spelling wrong. It probably can't cope with 1.0 as an integer answer or 1 as a floating point answer. Typing on a computer is also error prone, and your kids are probably learning to type at the same time they are drilling the words! I make a few mistakes per 100 doing bone-simple arithmetic in a hurry. Take all this into account when assessing performance; a score in the high 90%s may well really be "perfect" from the point of view of the child's grasp of the material being drilled. Try the program yourself for a few hundred problems (presuming that you know simple arithmetic perfectly:-) and you'll see what I mean.
  • Feel free to contact me at rgb@phy.duke.edu with suggestions, comments, remarks, bug reports. Note well that I'm planning to add various features, especially "explanations", multiple choice problems, and "instructions" in future releases as I have time to cut the code. Check this site from time to time for the current revision number/snapshot.
  • I may or may not be willing to author flashcard files to add to the package that your child needs (depends on my time and whether my own kids can use them). I will gratefully accept and add flashcard files and supporting audio directories authored by others to add to the package. It would be nice to have ALL the vocabulary words for K-12, listed by year, spoken in a pleasant voice with a usage sentence added to differentiate words that are homonyms, already in the package, wouldn't it? I don't plan to sell it, and it will be GPL'd forever, but if I ever DO sell some packaging of it I probably won't pay you for any contributions so made. Sorry.
  • On the same note, I'd cheerfully accept and add to the GPL package anything like bug patches, additions to the program itself (probably should check with me before writing them), extensions to or corrections of the flashcard xmlish tagset, webware or Gtk or "other" versions of the basic program. Given the open nature of the xmlish flashcard files, it should be pretty easy to write a "flashcard program" that displays them and does the flashcard rituals in many venues, including just plain printing them out formatted for being cut up into, well, flashcards!

Back to top

Caveat, Warning, Read This!

As is the case for all drilling/memorization tools, gflashcard can be used for great evil as well as great good. As a professional teacher, I am constantly made aware of the difference, and you should be to if you are going to use this program to "teach", either in the classroom, as a parent, or (to teach yourself) as a student.

There is a significant difference between memorization of factoids and true learning. To speak metaphorically, factoids are the many tiny rocks which are cemented together by experience and conceptualization into the edifice of our full understanding. One should never confuse successful memorization of a large body of factoids with real comprehension.

It is entirely possible to comprehend things deeply without memorizing lots of factoids. Mathematics is not arithmetic, although arithmetic is a useful skill that underlies some mathematics. History is not a bunch of events and their associated dates. Language is not a collection of words. Science is not scientific data. The abstract rule is not the many concrete realizations of the rule. One could embark on a long discussion of semantics and epistemology, semiotics and psychology -- and indeed I'm working slowly on a book on these subjects -- but not here. The main point is to recognize that memorization can be a soul-sucking process for a young mind (or an older one!) when unsupported by any sort of reason.

For many of these subjects, of course, memorizing factoids is one essential step in beginning to comprehend the subject. It is difficult to understand American History without knowing when the American Revolution occurred and whether it occurred before or after (say) the American Civil War. It is difficult to read and write clearly and effectively if one's collection of vocabulary factoids is inadequate. For that reason I think flashcard can be a useful component of teaching and learning, but it does not teach anything like real comprehension of a subject, only its associated and foundational factoids, and its only real virtue here is its efficiency -- by drilling those factoids with a tool, one can quickly build up a base of factual knowledge sufficient to be a foundation for deeper learning.

I would therefore recommend that this tool be used ONLY as a factoid memorization tool, and NOT as a classroom "testing" tool or "teaching" tool, although it does have a timed test mode and other things that might be construed or abused into a classroom role. Don't expect flashcards to be more than they are or do more than they can do.


Document TypeSize (K)Last Modified
Download Repository N/A
License Info

The documents linked from this page are all provided under a modified Gnu License appropriate for the document type (OPL for text, GPL for software/source). Please read the relevant license(s) before redistributing the document(s) in any form -- an explicit agreement with the author is required for certain kinds of for-profit redistributions. In all cases the license makes the documents generally available for unlimited personal use and non-profit distributions (for example, linking or posting copies on a website, distributing paper copies to a class for free or at cost).

The author cherishes feedback. If you like or dislike the document(s) and would like to say so, wish to redistribute a version in any medium to be sold at a profit, would like to contribute or comment on material, or just want to say hi, feel free to contact the author

Home Top Flashcard Program DieHarder Program Benchmaster Program Jove (editor) Program The C Book The Tao of Programming Your Brain: a User's Manual (draft) CVS Mini Howto
C project template PVM project template LaTeX project template HOWTO project template Latex Manual (online) random_pvm demo/template The yum HOWTO (draft) Yum Article Contact About
Amazon Sales Rank Toolset A Theorem Concerning God

This page is maintained by Robert G. Brown: rgb@phy.duke.edu