Parley Practice NG 23rd attempt

Work on the parley practice happens in a branch here: Browse WebSVN online

Check it out: svn co svn://anonsvn.kde.org/home/kde/branches/work/parley-practice/


  • DONE: remove old practice code F
    • there is still a practiceold folder: leave it until merge is done! Frederik
  • TODO: does Paraphrase make any sense at all? no - remove paraphrase - it is not used in any single document we could find
  • TODO: remove Antonym completely
  • TODO: find an icon for stop practice (toolbar)
    • idea: use the start practice with media-stop instead of media-play
  • TODO: filter out empty entries for practice - F
  • DISCUSS: timeouts during practice ???


  • TODO: get rid of current way of handling them in the lib? BIC!!!???!!!
  • TODO: use a stringlist instead
  • TODO: make it possible to edit them in the table - how to separate two of them? semicolon?
  • TODO: change/rewrite dock widget
  • DISCUSS: practice options (is this really really needed?):
  • DONE: Check synonyms as part of written practice (BEN_SCHL)
    • DONE: accept any synonym as correct (BEN_SCHL)
    • DONE: ask to enter all synonyms (BEN_SCHL)
    • DONE: show already entered synonyms in list (BEN_SCHL)
    • DONE: ask until the exact word that is wanted is there, but don't count other synonyms as wrong on the way there (BEN_SCHL)
    • DONE: Check user options if he really wanted synonyms to be counted as correct by now we always accept them as correct (BEN_SCHL)
    • Let other modes benefit from synonyms. Maybe similar to the hint button show a synonym if it exist?
    • DONE: If in written mode a synonym was entered, check if that synonym is in this practice mode and increase its good count ? (BEN_SCHL)

LaTeX support

  • TODO: write a class to convert latex code to images, with error handling etc
  • TODO: integrate LaTeX in written and flash card practice modes
  • TODO: write a dock widget to support the user editing latex (line edit, preview, checkbox to toggle math mode?)
  • check cantor, there is some rendering code

Fullscreen mode

  • TODO: implement fullscreen mode (and add to toolbar?)
  • TODO: implement auto-hiding of toolbar (like gwenview, firefox etc)

Configure Practice

Main page:

  • DONE: Currently check boxes and radio buttons are shown ->remove radios F
  • DONE: move multiple choice options to advanced - Kolia
  • DONE: move checkboxes in Practice->Options to Advanced page in config dialog - Kolia
  • DISCUSS: Tenses - where should they be selected? only needed for conjugation practice
  • DONE: language selection: instead of having two lists, just have one list containing "French → German" and "German → French" (Kolia) I'm sorry, I just did it - Frederik
    • check if with 2 languages are always in the right order now!

The layout could be like this:

Parley practice settings.png

  • TODO: it would be nice to replace the checkboxes by listviews with multi selection and icons (and optionally drag and drop to change the order)

Other pages:

  • TODO: threshold: word types are broken here?

Parley practice settings advanced.png

Notes Advanced page:

  • DONE: Remove direction switching checkbox until implemented - Kolia
  • TODO: Time limits: only let the user select if the time limit is active, use show solution after answering
  • TODO: enable button xyz: not applicable any more, only the hint button, so remove them from the ui file
  • TODO: rearrange the widgets in the advanced page
  • TODO: comparison forms: make no distinction between adjectives and adverbs
  • IDEA/TODO: maybe it would make sense to put the most common options into the statistics page that is shown before practice is started
    • maybe replace the checkboxes again with radio buttons -> it's so easy to change now
    • only show one bar of grades - the one that corresponds to the current language selection

Parley start statistics with options.png

Completely Missing

Still missing are:

  • TODO: Conjugations
  • TODO: Vocabulary test (school like) with good summary and "grade"
    • no button for hints
    • add buttons to "go back and forth"
    • don't show if the answer was right
    • DISCUSS: do we want to have some type of "grade" and if yes, how should it be calculated?

Easy ones reusing the written front end should be:

  • TODO: Example sentences (easy indeed) Frederik

Article/Gender of Nouns

Two cases: we have the articles in the grammar section or we don't Example: German die Flasche is female == bottle

  • a) We know the articles, this is presented:
    • bottle
      • der Flasche
      • die Flasche
      • das Flasche
  • b) We don't know the articles
    • bottle
      • Flasche is masculine
      • Flasche is feminine
      • Flasche is neuter


  • definite articles by default, fall back to indefinite

For the implementation: just use the Multiple choice front end and subclass (if possible, otherwise make it possible!) the multiple choice backend

Comparison Forms

You know? Adjectives and adverbs - words that describe other words.


  • unordentlich
  • Absolute: chaotic (the base form)
  • Comparative: [more chaotic] (user inputs more chaotic in line edit)
  • Superlative: [the most chaotic] (user inputs most chaotic in line edit)


  • caption (the word in the other language)
  • 3 labels and line edits

Flash Card

  • DONE dani_l: replace [Continue] with [I didn't know the answer][I knew the answer] in flash card mode

Multiple Choice

  • DONE Kolia: Unset the selected choice after an answer (radio button)
  • DISCUSS: Showing the "I knew it"/"Did not know it" below the other radios looks bad
    • DONE dani_l: implement a toggle under the ✓/✗ image
      • DISCUSS: do we like it?
  • DONE Kolia: Make number of multiple choice answers configurable in the config practice dialog
  • keyboard focus?!?! if I press enter and no choice is selected, it will always be wrong
  • hotkeys (maybe in menu? even configurable??) for the choices: 1 for first, 2 for second...
    • use kactions
  • TODO: continue when a radio button is selected
  • TODO: check that only entries from the right languages are taken - I just had the choices taken from different languages (Frederik)


  • DONE: Hint needs to be implemented in a sane way (now it shows the solution directly) - done (Frederik)
  • DONE: Feedback - when a new word is shown, it still says "Your answer was wrong" - done (Frederik)
  • DONE: Ignore capitalization mistakes (BEN_SCHL)
  • DONE: Ignore accent mistakes (BEN_SCHL)
  • DONE: Create a class that does voodoo on strings to correct answers: (BEN_SCHL)
    • DONE: Takes into account the options above (accent/capitalisation) (BEN_SCHL)
    • There is a class like this, "answervalidator.cpp" but it's ugly old and eats kittens. Cleaning it up would be ok. Things like word similarity are in there.
      • Moved some of the code to the new WrittePracticeValidator class maybe move more cuntionality there ?
    • how far do we want to go when comparing answers? what feedback should the user get?
      • you made a spelling mistake (this can be done by running spellcheckers and comparing what they suggest for a word with the solution)
      • you wrote nonsense
      • DONE: you have the accents all wrong (BEN_SCHL)
      • DONE: you have wrong capitalization (BEN_SCHL)
  • TODO: make sure that "I did (not) know it" actually does the right thing
  • TODO: I think I just had an empty word shown - make sure they are filtered away
    • how do we get this kind of feedback from the class to the ui?
  • DONE: when pressing enter and the input is empty, directly continue to solution. don't ask for another try. (BEN_SCHL)
  • TODO dani_l: only show right/wrong when the solution is shown

All Practice Modes

  • TODO: every word that was answered correctly is shown as "right on first attempt" in summary - no way to get anything wrong :D maybe change that...
  • TODO: remove statistics that don't make sense any more from the TestEntryManager (like "skip known")
  • TODO: feedback text: not "wrong idiot", not "I fear this was wrong.." but good sentences
  • DONE: set grade to 1 when a word was answered incorrectly (BEN_SCHL)
  • DISCUSS: define our terminology, e.g. is it grade or box, answer or solution, correct or right, incorrect or wrong etc.
  • TODO: fix spacing and layouting issues in the ui
  • TODO: implement support for showing pronunciation for every practice frontend
  • TODO: implement support for sound for every practice frontend
  • TODO: add a "Auto-play sound" option to the practice settings and implement it


Grades are equivalent to boxes (leitner), they are:

  • 0 not practiced
  • 1 lowest level
  • ...
  • 7 best level
  • Words are answered correctly:
    • a correct answer gives grade += 1
    • a word that has been answered correctly is not asked again
  • Words are answered wrong:
    • a wrong answer gives grade = 1 (reset to lowest level). Wrong anserws are:
      • If a hint message has been used (may change policy here later if it doesn't work out)
      • If an accent and/or capitalisation mistake was made (might be accepted as right if the option is chosen in the config)
    • If answer stays the same after enter is pressed a second time assume the user doesn't know the answer and continue.
    • Just print a different message if the user corrected himself and the answer was right
    • words that were incorrectly answered will come up again until they are answered correctly (or the practice is stopped)
    • DISCUSS: when a word is answered after being answered wrong before, it ends up on level 2, if the practice is stopped before, it stays in level 1 (Leitner says it stays in 1 ?)

  • TODO: implement grading as described above and make sure it works in all modes
  • TODO: Respect Leitner option to ask for the correct answer three times in a row.
  • DISCUSS: If you answer an unknown word wrong or right doesn't matter as by definition above wrong words get set to level 1 (from 0) and right words get increased to 1 (from 0). I changed that correct new words end up in level 2 ? (BEN_SCHL)
  • DISCUSS: what happens when practicing with multiple modes? does only the last mode affect the grading? make in configurable? (DOES THIS STILL APPLY?)
  • DISCUSS: find out if restricting the grading for each mode makes sense (e.g. saying "if i practice in multiple choice, the word can only rise up to grade 3")
    • TODO: figure out a sane way to configure this or give different grades for each practice mode ?
  • TODO: pass in 3 int from backend to frontend: current, good, bad (so that the selection of right/wrong can be previewed correctly)

Result States

  • User hasn't entered anything
    • Status image: ?
    • Status image toggle: inactive
    • Line edit: black
    • Counted as: nothing yet
  • User entered a wrong solution
    • Status image: ✗
    • Status image toggle: active (?)
    • Line edit: black
    • Counted as: nothing yet
  • User entered a wrong solution, got feedback and pressed enter without changes
    • Status image: ✗
    • Status image toggle: active
    • Line edit: red, disabled (Solution is shown)
    • Counted as: wrong
  • User entered wrong solution(s), got feedback and entered the correct solution
    • Status image: ✓ (?)
    • Status image toggle: active (doesn't make sense!)
    • Line edit: green, disabled (Solution is shown)
    • Counted as: wrong
  • User entered correct solution on first try
    • Status image: ✓
    • Status image toggle: active
    • Line edit: green, disabled (Solution is shown)
    • Counted as: correct
  • User revealed answer only using hints
    • Status image: ✓ (?)
    • Status image toggle: active (doesn't make sense!)
    • Line edit: green, disabled (Solution is shown)
    • Counted as: wrong

Summary Page (after practice is finished)

  • DONE dani_l: One page only
  • DONE dani_l: Bar on top with colors that indicate how good the practice was
    • DONE dani_l: tooltips on the bar that indicate the meaning of the colors
    • DONE dani_l: caption under the bar
  • DONE dani_l: Table below (sorted, most mistakes on top)
  • TODO fregl: add a button to print a list with $number words you should practice

General (not practice related)

  • STILL VALID?: New rows are appended when pressing enter in the row above the last one, not in the last one - Qt 4.6 regression?
  • TODO: changes in dock widgets are not reflected in table -> model needs to emit dataChanged for the view to update (not working since the editing happens without models knowledge)
  • TODO: table: add column for grades (including combo box for changing the grade)
  • TODO: summary dock widget: make word type work (or remove it)
  • TODO: remove leitner box classes
  • TODO: get rid of old kDebug() messages that don't make sense out of context
  • TODO: check if the column visibility is saved correctly in all cases
  • TODO fregl: there is a broken version of the 5 language document in the files on edu.kde.org (and there should be a *version with and without* images which you can clearly separate from each other, right?)
  • Settings
    • TODO: the languages that will be practiced should be per document, not global
    • TODO: other practice options should probably be per document as well
  • TODO: implement undo support
  • TODO: frederik be ashamed! Danish document -> 4000 words to sublessons a 20 doesn't work
  • TODO: creating a new document: title is not carried over for root lesson and window title
  • big todo: configurable special chars per language - come with language definition - configurable hotkey ...

Word types

  • TODO: newly created sub word types should inherit their parent's grammar type -> Frederik?

Profiles and config and zip

  • DISCUSS: Instead of using current kvtml files, use the same with compression
  • add images, sound and other media into the zip file

Missing Artwork

  • TODO Icon for stop practice - idea: like start practice: flash cards with multimedia stop
  • TODO Icon/image for states:
    • User answered correct (✓)
    • User answered wrong (✗)
    • User has not answered yet (?)

TODO: screenshots that explain the above

Regressions in trunk

  • Title is broken (documents show up with 0 as title, chainging root lesson behaves weird, it doesn't get saved)
  • TODO fregl: Auto-save in practice mode


(Frederik does all of this unless someone else wants to punish himself)

  • Comparison forms: use keduvoctext for forms (make grades possible)
  • make grades for articles possible

Stuff to discuss today

  • artwork
    • what/how/format
    • who
    • write request with lots of screenshots?
  • correct/wrong states, it it ok how they are currently implemented (especially in written mode)
    • great, but: longer ? in written (see above)
  • what grammar modes do we need and how can they be implemented
    • can we reuse/extend our frontend/backend modes?
  • grading for grammar training
  • create example document(s) making use of all our advanced features for testing
    • grammar training
    • multiple choice options
    • two images per entry, pronunciation, sound
    • ...
  • blockers before merging the branch back to trunk
  • timeline for merging, release schedule
  • synonym/antonym: what to keep? what about semicolons?

Merging to trunk - timeline

Release blocker:

  • lib-grammar grades do not work yet
    • Frederik - until April 15th do the freaking lib!
    • Daniel: implement grammar modes
    • April 22: Frederik: conjugation done wrong again before
  • synonyms and accents have to work in practice again


  • April 20: Decide if branch gets released: tentatively
  • Frederik: away April 22-30
  • Frederik: probably away May 12-17
  • edu sprint: (work work work on Parley) May 20-26
  • April 26th - soft feature freeze - most things should be there, stop doing big new features
    • Frederik: create packages with build service, get user feedback
  • May 11th -> Freeze - no new features, stabilize!
  • May 19th: Soft Message Freeze
    • NO NEW STRINGS, NO STRING CHANGES ANY MORE (ask Frederik if you need to change strings and let him take the flames)
  • June 2nd: Documentation/Handbook Freeze
    • Have an updated documentation, work with Burkhart to get it from userbase to docbook

Content is available under Creative Commons License SA 4.0 unless otherwise noted.