Eric Bouwers Thesis Page

Students

Project

Project title: Improving Automated Feedback
Advisor: Johan Jeuring
Start date: 05-03-2007
End date: 27-09-2007
Topic / Area: Generic programming, Rewrite rules, Educational programs

Abstract

Although research shows that high-quality feedback can be generated in educational tools, the current level of feedback leaves much to desire.
In order to improve the quality of immediate feedback in educational tools, we propose the implementation of a generic framework that can be instantiated for different domains.
By combining the most promising lines of research into a single framework the knowledge about algorithms is centralized, allowing it to be easily accessed by manufacturers of educational tools.

Proposal

You can download the proposal for my thesis here.

Thesis

You can download the thesis itself here.

Code

The code of my thesis can be found in the following repository:

Thesis defense

The page of my thesis defense, including an abstract and the slides used, can be found here.

Progress

For the latests thoughts about my thesis you can always look at my blog under the label Thesis.

Week 10

  • check.gif Initial set-up of the wiki on http://ideas.cs.uu.nl/wiki
  • check.gif Created (read: shamelessly stolen from Thomas who stole it from Stefan and Andres) a nice layout for the thesis
  • check.gif Improved layout of the thesis with a nice title-page
  • check.gif Set up the repository for the project here. (Explanation)
  • check.gif Small attempt for a logo for the ideas-website

Week 11

  • check.gif Finished initial structure of the thesis
  • check.gif Copied parts of the proposal to the thesis
  • check.gif Studies papers and Thesis of Hennecke (See attachment table)
  • check.gif Contacted Hennecke with my understanding of his algorithm
  • check.gif Attended Feedback meeting

Week 12

  • check.gif Initial design of GUI
    • check.gif Drawing of screens
  • check.gif Initial prototype
    • check.gif Generic code relying on library functions
    • check.gif Three libraries with specified functions
    • check.gif Instantiation of the generic code with different libraries
  • check.gif Description of GUI design
  • check.gif Check whether part I is indeed the parts from proposal

Week 13

Week 14

  • check.gif Finish initial GUI
    • check.gif Interactive feeling, using javascript
    • check.gif First interaction with backend
  • check.gif Describe design GUI
  • check.gif Rough description of phase three
  • check.gif Rough description of phase four
  • check.gif Discuss rough descriptions with Johan

Week 15

  • check.gif Reread Phase 3 and Phase 4
  • check.gif Reread Design GUI
  • check.gif Tried to integrate rounded corners based on CSS, failed horribly
  • check.gif Start implementation GUI for fractions
  • check.gif Discuss RFG design with Johan
  • check.gif Read up on confluence
  • check.gif Discusses algorithm with math-teacher (aka mom)
  • check.gif Work out new algorithm on examples

Week 16

  • check.gif Finish GUI for fractions
  • check.gif Finish chapter on the design of RFG
  • check.gif Meet with Johan for discussion
  • check.gif Feedback meeting
  • check.gif Read:
    • paper: 'The Ergonomics of Computer Interfaces'
    • paper: 'TGraphics in the Views System'
    • Information about JSON, AJAX andPrototype.
  • GUI:
    • check.gif Added unit-tests for scripts written by myself

Week 17

  • check.gif Implement parser for fractions
  • check.gif Implement parser for equations
  • check.gif Implement solver for fractions
  • check.gif Implement generic structure for library
  • check.gif Implement phase 1
  • check.gif Implement phase 2
  • check.gif Implement phase 3

Week 18

  • check.gif Rule-parser for fractions
  • check.gif Added command-line options
  • check.gif Read through Classroom-based Research in Mathematics Education
  • check.gif Read papers about generic programming in Haskell:
    • Programmable Rewriting Strategies in Haskell
    • Generics for the Masses
    • Type-Safe Functional Strategies
    • A Generic Programming Extension for Haskell
    • A Strafunski Application Letter
    • Scrap Your Boilerplate Reloaded
    • A Generic Recursion Toolbox for Haskell
  • check.gif Read paper Plugging Haskell in

Week 19

  • check.gif Apply for fractions (with wheres)
  • check.gif Feedback Meeting
  • check.gif Implement rule-calculator for fractions (with proper restrictions)

Week 20

  • check.gif Implement Diff-algorithm for rules
  • check.gif Define tests and criteria correctness for rules

Week 21

  • check.gif Implement guess-rule algorithm for phase 3
    • check.gif Implement for single case
    • check.gif Implement recursion
  • check.gif Cleanup code implementation phase 3
  • check.gif Implement checks for rules
  • check.gif Make remapping of variables external from distance algorithm
  • check.gif Implement merging of rules with matching RHS and LHS
  • check.gif Add names to rules
  • check.gif Finish the fraction tool to be callable from the command line

Week 22

  • check.gif Implement command line tool for logic
    • check.gif Instances for logic
    • check.gif Parser for logic (+ tests)
    • check.gif Solver for logic (+ tests)
    • check.gif Tests for rules
    • check.gif Test scenarios for phase 3
  • check.gif Add more tests for scenarios of third phase for the fraction tool

Week 23

  • Fine tune the third phase
    • check.gif Make sure that '+', '*', '/\' and '\/' have a list of children instead of always 2
    • check.gif Check the effect of removing Parens from data-types
      Has no effect, makes less tests pass even after adjustements. The parenthesis seem to capture the intentions better and are therefore allowed in the data-type.
    • check.gif Rewrite test-framework with reuse, lots of duplication right now
    • check.gif Make code third phase more clear, split up definition
    • check.gif Think about better matches
      A better match in the rule-generation causes some of the tests to pass because the actual rule is more precise, the noise is cut down to a minimum. This is implemented with an inspection of the commutativity and associativity of an operator.
    • check.gif Think about how to deal with the arbitrary 5 in the calculation of the PT-distance, this should be less arbitrary
      The arbitrary 5 is replaced by an parameter that represents the extra costs of the steps. This parameter is increased in every recursion, so steps that are further away are less likely to be the closest match.
  • check.gif Attend feedback-meeting

Week 24

  • check.gif Fine tune the third phase
    • check.gif Think about how to deal with different sizes of children
    • check.gif Look into the merging of the rules for logic
      Solved by adding the condition that rules may never merge with themselves. This is checked by finding the name of the rule within the name of the joining rule.
    • check.gif Look into the last failing tests
      Problem that arises is that the precedence in the parser can lead to a less accurate rule. Unfortunately, there is nothing that can be done to prevent this in general.
      Most of the problems can be solved by a better match. This is done by inspecting a constructor whether it has a single child. When this is the case the child is matched against the original other. The extra costs involved is one for the adding of the 'missing' constructor. This solves several problems and introduces only one new problem. In the end it makes the algorithm better.
  • check.gif Write about third phase (see the blog)
  • check.gif Implement configurable feedback-message
  • check.gif Think about implementation of the fourth phase
  • check.gif Meet with GP team

Week 25

  • Write chapter about third phase in Thesis
    • check.gif Made a new structure, more organized according to steps in reasoning.
    • check.gif Tested whether it makes sense to alter the matching of a leaf and a node in the calculation of a rule, it doesn't.
    • check.gif Explain how the algorithm for calculating rewrite rules works.
  • Make web-application available for fractions
    • check.gif Make the parser of the frontend equal to the parser for the backend
    • check.gif Solve problem for none-displayed text-input
    • Solve problem for selecting in graphical view only
      Idea is to generate the representation form the parsed AST within JavaScript? . Then it becomes easier to make links that set the cursor to the right position. Johan and I agreed that this was out of the scope of this Thesis.
  • check.gif Read paper about Uniplate

Week 26

  • check.gif Work on algorithm of phase 3 (again), the restriction of 'looking like original PT' does not make sense. Find out following things:
    • check.gif Is the problem indeed in the recursion because terms are getting smaller?
      Problem was not in recursion.
    • check.gif Are the generated rules accurate enough?
      Actually, the rules are too accurate, the meta-variables in the rules introduce dependencies that might not be there. Therefore, the rules are without meta-variables again.
    • How can we incorporate better matches other then size of the environment, maybe bonus points for getting complete LHS correct?
      check.gif Not needed after update of rewrite-rule calculation.
    • Algorithm of term-distance seems oke, does it work correctly in the implementation?
      check.gif The algorithm is extended to take into account the properties of operators, just like with the rule-calculation. This gives even better output then before.

Conclusion is that the algorithm benefits from being easy, the simplest solution provides the best results.

Week 27

  • check.gif Test the ICFP contest
  • check.gif Cleaning up of code
    • check.gif Remove dead-code
    • check.gif make use of crush :: a -> ([a],[a] -> a) instead of current solution.

Week 28

  • check.gif Write chapter about third phase in Thesis
    • check.gif Explain rule-calculation
    • check.gif Explain term-distance
    • check.gif Explain General recursion
    • check.gif Explain rule-merging
    • check.gif Small conclusion
    • check.gif Proof-read it

Week 29 - 32

  • check.gif Attend World Scout Jamboree

Week 33

  • Finish coding for GUI
    • check.gif Make interface available in dutch
    • check.gif Add help-facility (both languages)
    • check.gif Add button to go the next exercise
    • check.gif Add a thanks page
    • check.gif Add actual tool
    • check.gif Add way to tell the user he is doing well
    • check.gif Test page in different browsers (partly done, have to get JS working in IE)
    • Try to implement Ajax update (4 hours) (to be done when really necessary)
  • Finish coding for framework
    • check.gif Implement phase 4
      Core functionality working now. The available tests pass.
      • Better apply, takes into account operators
      • Main function and function to apply rules and keep the history
      • Function to update assessment of buggy rules
      • Tests for functions
    • check.gif Finish up loose programming ends
      • Move all configuration to separate module
      • Make all message configurable
      • Do some profiling for optimization, seems to not be necessary
    • check.gif Generate special output when an exercise is done
    • check.gif Add option to give feedback in other language
    • Implement equations
      • check.gif Finish parser
  • check.gif Incorporate initial feedback from early tester(s)
    • Adjusted third-phase message
    • Fixed GUI problems
  • check.gif Process design up until section 5.4
  • check.gif Start finding testers (sending mail and writing about the web application)

Week 34

  • check.gif Initiate and process more test results (fractions + logic)
  • check.gif Write implementation section
    • check.gif GUI part
    • check.gif RFG part
  • check.gif Write appendix about rules
  • check.gif Write appendix about test results (but removed appendix again
  • check.gif Reread thesis up until chapter 6, adapt where necessary
  • check.gif Implement equations
    • check.gif Finish solver
    • check.gif Write tests for phase 3
    • check.gif Make GUI for equations
  • check.gif Ask Jurriaan for feedback on thesis

Week 35

  • check.gif Initiate and process last test results (equations)
  • check.gif Finish rough version of Thesis
    • check.gif Write abstract
    • check.gif Finish evaluation section
    • check.gif Write conclusion
    • check.gif Write future work section
  • check.gif Reread complete thesis, adapt where necessary
  • check.gif Ask Jurriaan for feedback on thesis and adapt

Week 36

  • check.gif Ask Johan for feedback on thesis and adapt
  • check.gif Go through code, add comments where neccesary (RFG)
  • check.gif Start on presentation

Week 37

  • check.gif Add README with top-level design for GUI
  • check.gif Re-read README
  • check.gif Get feedback on thesis from Johan and adapt (Up to chapter 5)
  • check.gif Work on presentation

Week 38

  • check.gif Work on presentation
    • Main outline, concrete examples
  • check.gif Adapt thesis given remarks Johan

Week 39

  • check.gif Work on presentation
    • Finish all slides
    • Practice
  • check.gif Give presentation

-- EricBouwers - 28 Sep 2007