Robert G. Brown
Duke University Physics Department
Durham, NC 27708-0305
Copyright Robert G. Brown, 2018
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
- 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
- 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
- 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
gflashcard requires libxml2 and Gtk-2.
flashcard requires libxml2 and ncurses.
Back to top
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
Times tables for third graders.
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
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
- 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 email@example.com 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
- 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
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
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.