Changes

Obsolete
Line 1: Line 1:  +
{{Obsolete}}
 +
 
{{TOCright}}
 
{{TOCright}}
 
==Question Support API==
 
==Question Support API==
 +
{{:Math4Team/RIT/Projects/Question_Support_API/status}}
 
===Project Information===
 
===Project Information===
 
{{Definition_table
 
{{Definition_table
 
|Primary Project Contact| [[User:Enimihil|Greg Stevens]]
 
|Primary Project Contact| [[User:Enimihil|Greg Stevens]]
|Project Members| [[User:Enimihil|Greg Stevens]], [[User:Jfinney|Jameson Finney]], [[User:Bbl5660|Brian Long]], TODO: Add yourself here...
+
|Project Members| [[User:Enimihil|Greg Stevens]], [[User:Jfinney|Jameson Finney]], [[User:Bbl5660|Brian Long]]
 
|Source Repository| http://git.sugarlabs.org/projects/question-support-api
 
|Source Repository| http://git.sugarlabs.org/projects/question-support-api
 
}}
 
}}
Line 13: Line 16:  
** Packaging
 
** Packaging
 
** Documenting Dependencies and how to enable them in a development environment (Simple tutorial on setting up your Question API Development Environment)
 
** Documenting Dependencies and how to enable them in a development environment (Simple tutorial on setting up your Question API Development Environment)
 +
** Question Authoring guidelines
 +
** Integrate within lesson planning
 +
** How does an instructor get the questions they have written/found into an Activity?
 +
* Liase w/ other Math4 teams and Sugarlabs (What would it take to be included in the Sugar core?)
 +
* Future Development (Needs / Wants — collect proposals from other teams)
 +
* Discovery / Plugin  (How do activities find questions, i.e. how to get URIs to load questions from?)
    
===Setting Up a Development Environment (For Newbies)===
 
===Setting Up a Development Environment (For Newbies)===
These are links, tutorials and things that [[User:Bbl5660|Brian Long]] has found along the way, as well as help gained from [[User:Enimihil|Greg Stevens]].  Brian is new to the Linux / OpenSource community, and is working on documenting a development environment.  The small amount of information below is meant to help someone new step into the world of developing for the Sugar environment, from Ubuntu and have all  dependencies and things setup to continue development of this API.  <b>Next</b> Brian would like to document how to setup these sort of items for Activity developers to include our API and be able to extend it.
+
These are links, tutorials and things that [[User:Bbl5660|Brian Long]] has found along the way, as well as help gained from [[User:Enimihil|Greg Stevens]].  Brian is new to the Linux / OpenSource community, and is working on documenting a development environment for <b>you</b> and for us to continue developing this API.  The small amount of information below is meant to help someone new step into the world of developing for the Sugar environment, from Ubuntu and have all  dependencies and things setup to continue development of this API.  <b>Next</b> Brian would like to document how to setup these sort of items for [http://wiki.laptop.org/go/Creating_an_activity Activity developers] to include our API and be able to extend it.
    
* For development environments, you may consider consider first installing a linux OS and the the LAMP stack with PhpMyAdmin.  Brian is choosing Ubuntu, Aptana as a (free) Python IDE that can be used with PyDev to easily allow Python writing.   
 
* For development environments, you may consider consider first installing a linux OS and the the LAMP stack with PhpMyAdmin.  Brian is choosing Ubuntu, Aptana as a (free) Python IDE that can be used with PyDev to easily allow Python writing.   
Line 22: Line 31:  
** http://www.sqlalchemy.org/docs/04/ormtutorial.html
 
** http://www.sqlalchemy.org/docs/04/ormtutorial.html
 
** http://docs.python.org/
 
** http://docs.python.org/
 +
** http://andrewbleakley.com/blog/2008/11/01/installing-and-running-aptana-on-ubuntu-810/
 +
** http://forums.aptana.com/viewtopic.php?f=37&t=7147&p=32918&hilit=ubuntu#p32918
   −
* Dependencies that are required now, and going forward are
+
====Dependencies====
SQLAlchemy  http://www.sqlalchemy.org/docs/04/ormtutorial.html
  −
 
  −
 
   
<!-- Development for Linux / Python / Sugar Newbies! -->
 
<!-- Development for Linux / Python / Sugar Newbies! -->
*** sudo apt-get install python-setuptools
+
;The following are required by the Question Support API.
*** sudo easy_install pyparsing
+
:python-setuptools
*** sudo easy_install peak-rules
+
:pyparsing
*** sudo easy_install sqlalchemy
+
:peak-rules
**** See here: http://www.sqlalchemy.org/docs/04/ormtutorial.html
+
:sqlalchemy
   −
** Question Authoring guidelines
+
;You can install these via a linux terminal in this manner:
** Integrate within lesson planning
+
        sudo apt-get install python-setuptools
** How does an instructor get the questions they have written/found into an Activity?
+
        sudo easy_install pyparsing
 +
        sudo easy_install peak-rules
 +
        sudo easy_install sqlalchemy
   −
* Liase w/ other Math4 teams and Sugarlabs (What would it take to be included in the Sugar core?)
+
;Exception: When developing on a Fedora based distro, you'll need to install python-setuptools-devel for easy_install
* Future Development (Needs / Wants — collect proposals from other teams)
  −
* Discovery / Plugin  (How do activities find questions, i.e. how to get URIs to load questions from?)
      
===Motivation===
 
===Motivation===
Line 82: Line 90:     
Currently, (14 May 2009) the API supports parsing the GIFT file format well enough to import Multiple Choice and True/False questions, along with complete implementations for basic functionality of the corresponding question objects.  No support for partial credit answers is currently implemented, nor are other question types working correctly (though most can be parsed to some extent).  Export to CSV works as intended, though it is intentionally simple.  Documentation on usage and integration of the API into an activity is in the doc/ directory of [[http://git.sugarlabs.org/projects/question-support-api the repository]]. A simple, but complete usage example, using a console interface is available in tests/complete_test.py.
 
Currently, (14 May 2009) the API supports parsing the GIFT file format well enough to import Multiple Choice and True/False questions, along with complete implementations for basic functionality of the corresponding question objects.  No support for partial credit answers is currently implemented, nor are other question types working correctly (though most can be parsed to some extent).  Export to CSV works as intended, though it is intentionally simple.  Documentation on usage and integration of the API into an activity is in the doc/ directory of [[http://git.sugarlabs.org/projects/question-support-api the repository]]. A simple, but complete usage example, using a console interface is available in tests/complete_test.py.
 +
 +
===Current implementation===
 +
1. Ensure that PyParser and PEAK-Rules are installed <br>
 +
2. Include the quizdata module
 +
    import quizdata
 +
3. Select plain text output
 +
    from quizdata.text import plain_text
 +
4. Select desired question types
 +
    from quizdata.question import MultipleChoiceQuestion, MissingWordQuestion
 +
5. Import when function to assist with question sorting
 +
    from peak.rules import when
 +
6. Handle questions (this section should be rewritten as needed for your activity
 +
    # this is the base case for any question type we don't handle otherwise.
 +
    def do_question(q):
 +
        print "Unhandled question type.", type(q)
 +
    # for multiple choice questions (incl. subclasses) we do this...
 +
    @when(do_question, (MultipleChoiceQuestion,))
 +
    def do_multi_questions(q):
 +
        print plain_text(q.text)
 +
        for a in zip('0123456789', q.answers):
 +
            print "%5s: %s" % a
 +
        answer = int(raw_input())
 +
        q.answer = q.answers[answer]
 +
        print q.correct
 +
    # for missing word-style questions, which aren't implemented correctly yet, and
 +
    # are a subclass of multiple choice questions... we make sure to ignore them
 +
    # with a more specific rule.
 +
    @when(do_question, (MissingWordQuestion,))
 +
    def do_mw_question(q): # XXX: inheritance is annoying here...
 +
        print "Unhandled question type. (MissingWordQuestion)"
 +
7. Open questions
 +
    questions = quizdata.open("file://%s?format=gift" % path.join(base_path, 'tests', 'multi_choice.txt'))
 +
    for q in questions:
 +
        do_question(q)
 +
===="How to Play/Use" for end user====
 +
This is a requirement of the RIT OLPC seminar.  The question doesn't exactly pertain to the API team's project, a more applicable question might be “How development of the API is done?” and “How do activity developers include / extend our API?”.
 +
* The API is written in Python and has a set of [[#Dependencies|dependencies]], documented above.
 +
* For activity developers to include our API into an activity, we're hoping to have the Sugar development team create a mechanism for developer's to install or include components.  [[User:Enimihil|Greg Stevens]]'s has a bit more knowledge on this than  [[User:bbl5660|Brian]] or [[User:Jfinney|Jameson]], but we will be looking into how to package our API, and how it can be accessed by other Activities.  The issue with this later concept, is that Activities running on Sugar's platform are intentionally meant to be restricted to their own space inside of the Sugar environment.  This means that we'll either need to hack something together to make other Activities include our API, or we'll need to collaborate with people at Sugar and figure out the best practice to include our API.
    
===Education Standards===
 
===Education Standards===
 
As a general API and not a standalone Activity, along with the nature of the API in specific, this project does not directly address any specific education standards or learning outcomes.  It is reliant on educators to write questions, or have questions available to them in usable formats.  As such, the potential educational standards this project could help to meet includes **any** standard where drilling or question/response evaluation is appropriate. (This includes a wider range of topic areas than the Math4 focus, even.)
 
As a general API and not a standalone Activity, along with the nature of the API in specific, this project does not directly address any specific education standards or learning outcomes.  It is reliant on educators to write questions, or have questions available to them in usable formats.  As such, the potential educational standards this project could help to meet includes **any** standard where drilling or question/response evaluation is appropriate. (This includes a wider range of topic areas than the Math4 focus, even.)
 +
 +
====A Teacher's Guide Abstract====
 +
* Per the nature of this API, we've decided that our “Teacher Guide” will be more of an abstract.  Below is a hypothetical situation of the Question Support API:Imagine a school manages a repository of quiz material that fit's some curriculum, and this repository is located at Moodle.org (for example the 4th Grade Math curriculum see: http://wiki.sugarlabs.org/go/User:Gdk/4th_Grade_Maths ).  The teacher's use of our API design might go something like this:
 +
 +
* An activity that has extended / implemented our API is started by the teacher.  The teacher is presented with an input field that requires a URI (URL).  The teacher enters the URI of this week's quiz (i.e. http://moodle.org/SchoolName/ClassName/Week_11_Quiz/ )  The activity fetches the specified quiz data from the web, and presents the teacher with a summary and confirmation dialog box.  Upon confirmation, the teacher can send / assign the quiz to the class.  The class starts their corresponding activity which then also has a mechanism to either grab the assigned quiz from the Moodle.org server or from the local “School Server” (also-known-as the XS server, see: http://wiki.laptop.org/go/School_server ).  The student's complete their assigned quiz, and data is sent back to the server for reporting / grading.
    
===Milestones===
 
===Milestones===
Line 109: Line 160:  
|Fun Towers| No API need or usage.
 
|Fun Towers| No API need or usage.
 
|Reporting Team| Simple export format documented at [[{{PAGENAMEE}}/API_Design|API Design]].  Futher integration work would be nice, but there is more work than could be done in a year along these lines (and neither team is prepared to embark on it).
 
|Reporting Team| Simple export format documented at [[{{PAGENAMEE}}/API_Design|API Design]].  Futher integration work would be nice, but there is more work than could be done in a year along these lines (and neither team is prepared to embark on it).
|Muthris| No contact from? Probably no API need or usage.
+
|Muthris| No API need or usage.
 
}}
 
}}
 +
 
===See Also===
 
===See Also===
 
{{Special:PrefixIndex/{{PAGENAMEE}}/}}
 
{{Special:PrefixIndex/{{PAGENAMEE}}/}}