User:Miriya52/Outreachy13 Final Report

Outreachy Final Report

The overall goal of developing conversion between different quiz formats is to make it easier for an educator to move, copy, or backup their course materials amongst multiple learning platforms. Parsing a GIFT format to conform to the Pyslet structures will facilitate porting of course materials between LMS QTI supported platforms and Moodle.

A challenge is that QTI is much more complex than GIFT. The specification defines how the questions are displayed, how user interaction affects following questions displayed, and other features not specified in the GIFT format. It took some time to read through the pyslet structures to determine which aspects are relevant for the GIFT format and which aspects can be ignored.

I started by reading the pyslet source code to figure out how to parse a GIFT formatted text to the pyslet structures. Pyslet was implemented for the LMS QTI format, which is an XML format. I determined that the primary files to focus on are:


 * pyslet.xml.parser: for parsing a XML QTI format
 * pyslet.xml.structures: for storing data of a XML QTI format
 * unittests.test_xml_parser
 * unittests.test_xml_structures

Since QTI supported many more features than GIFT, the first thing I did was copy what I considered necessary functions to pyslet.gift.parser, pyslet.gift.structures, unittests.test_gift_parser, and unittests.test_gift_structures. Eventually, I added functions as needed if the GIFT format required it. I adapted the functions to the GIFT format. pyslet.gift.structures remained mostly the same as pyslet.xml.structures, because the objective was to parse a GIFT format to pyslet structures. I then worked on developing the parsing logic in pyslet.gift.parser so that it can successfully parse the basic GIFT types to the pyslet structures, and pass the associated unittests. I then worked on bi-directional support, such that a GIFT format can be generated from the pyslet structures.

What was the hardest part?
The hardest part was to figure out where to start. The QTI format is more complex than GIFT, so there were many files, functions, and structures that were not relevant for GIFT. I needed to understand the QTI format to understand how the GIFT format maps to the structures defined in Pyslet.

How did we overcome the challenge?
After reading a tutorial on the XML format, the names and structures became more clear to me.

Could we have done it better?
It would have sped up the process to read the tutorial on XML before the internship started. Aside from that, it was mostly just working through the software development process to figure out how to accomplish the overall goal.

What lessons did we learn?
Before the Outreachy internship, I have wrote code in Python for my own self-contained projects. With this internship, I spent a dedicated amount of time working with an existing code base, the product of multiple developers over many years. This was my first open source project, and I learned the tools, techniques, and culture with Free and Open Source Software. In addition, I was able to meet the core developers and learn about the Wikimedia culture by attending the Wikimedia Developer Summit.

Here are my blog posts during the internship:
 * Start of internship
 * Background work before development
 * Adapting GIFT to XML QTI structure
 * Wikimedia Developer Summit report
 * Project update near end of internship

Summary
This was a valuable experience to learn about contributing to FOSS, and a non-profit organization running a FOSS platform. I want to thank my mentors John Vandenberg and Marielle Volz for their time to provide feedback and advice, and the Outreachy coordinators who facilitated this program and giving us this educational experience.