Page MenuHomePhabricator

Outreachy proposal for Create new Python library to serialize Wikimedia Quiz format
Closed, ResolvedPublic

Description

Name: Anna Liao
Email: aliao22@gmail.com
IRC or IM networks/handle(s): aliao
Web Page: http://anna-liao.github.io/
Resume: http://anna-liao.github.io/images/gh-resume-2016.pdf
Location: Calgary, Alberta, Canada
Typical working hours: M-F start 8-9am, end 5pm (Mountain Time Zone, UTC-7 during internship period). I'm an early to bed, early to rise person. I'm usually up at 4:30am, but I do a morning swim workout to start my day.


Detailed project updates and weekly progress reports will be posted here: Python Library to serialize Wikimedia Quiz format

Outreachy proposal on outreachy.gnome.org

*Synopsis*

This project will be to develop a Python library to serialize Wikimedia Quiz format, GIFT quiz format, and perhaps other quiz formats. This library will take a Wikiversity quiz and allow export to other quiz formats.

Possible Mentors: @jayvdb, @Mvolz

*Deliverables*

Preparation tasks

  • Design work for T148161, and build a draft python class to demonstrate this.
  • Become familiar with existing Python packages that implements other standard quiz formats, as detailed for pyslet in T148315.
  • Manually convert complex Wikiversity quiz into other standard quiz formats T148314.
  • Analysis to find features missing from each format, so we can work out acceptable modes of degraded exporting.

Objectives

  • Evaluation of existing Python packages that implement standard quiz formats.
  • The functionality is to be able to serialise and deserialise between quiz formats. The data model should be generic, but it needs to retain style/token information so that the round trip has very few dirty diffs.
  • Work with the developers of these existing Python packages to contribute Wikiversity Quiz support.
  • If we can't get an existing package to take the code for Wikiversity Quiz support, then we will release a new pypi packaged library that extends the existing pypi packaged library to add Wikiversity Quiz format.
  • Goal is general python library that loads any standardized quiz format.
  • This package would be used by Pywikibot for bot operations, and for other applications and purposes.
  • Use cases:
    • Import quiz from other systems into Wikiversity, usually to back up their materials due to other mooc/quiz systems going offline, or being upgraded and they are told they will need to rebuild all their quizzes, etc.
    • Generate custom/personalized quiz (in Python) and push to Wikiversity user page
    • Gamification of Wikimedia, using Python web apps deployed on the tool labs.

Milestones
Midterm: Minimum viable product of Python library for round-trip conversions between
Wikimedia Quiz format and GIFT or other standard format. Bi-directional support tool to parse and update Quiz data on Wikiversity.
Testing and Documentation: The remainder of the time will be allocated for testing, bug fixing, documentation, and packaging for Pypi. Testing will include serialise and deserialise the same quiz content to check that the conversion doesn't alter the content.
Final: Adding Wikiversity Quiz support to existing Pypi package, or new Pypi package for Wikiversity Quiz format extension.

Obstacles

  • The biggest obstacle is that the Wikimedia Quiz format is not well documented. There could be large differences or gaps that could cause difficulty in this project and/or require a scope change.

*Proposed Schedule*

The internship period is from Dec. 6, 2016 to March 6, 2016. Weekly progress reports will be posted on Friday of each week. Midterm and Final reports will be posted as specified in timeline.

PeriodTask
Before Dec 6Community bonding. Investigate existing Python libraries to convert between Wikiversity Quiz and other standard quiz formats.
Dec 6 - Dec 23Develop Python library, ideally contributing to existing Python conversion library.
Dec 26 - Jan 27Testing and bug fixing. Refactoring code. Packaging in Pypi. (Applied to attend Wikimedia Dev Summit Jan 9-11)
Jan 27Midterm evaluation due
Jan 30 - Feb 17Testing PyPi package with Pywikibot.
Feb 20 - Mar 3Documentation and wrap up any loose ends.
Mar 6Final evaluation due

*Participation*

  • Project updates and progress will be documented at this project page: Python Library to serialize Wikimedia Quiz format.
  • Discussion with mentors of preferred communication modes via email, irc, or slack. During proposal preparation, discussion with mentors will be via conpherence.
  • Source code will be published on GitHub and packaged in pypi.

*About me*

Education and Work Experience
I have a M.S. degree in Robotics from Carnegie Mellon University and B.S. degree in Electrical Engineering and Computer Sciences from University of California, Berkeley. After graduate school, I worked as a Microdevices Engineer for 4.5 years at NASA Jet Propulsion Laboratory supporting research on extreme environment sensors. I then decided I wanted to apply my tech skills to benefit the environment (on Earth) and worked as a general purpose hardware/software engineer at Lawrence Berkeley National Laboratory (U.S. Dept. of Energy) supporting energy policy research, specifically in the areas of energy efficiency in buildings and impacts of renewables and distributed energy resources on the distribution grid.

How did I learn about Outreachy?
I heard about the Outreachy program through social media, and thought this was an excellent opportunity to work on an open source project with guidance from mentors. I am only applying for Outreachy (not eligible for GSoC).

Time commitment during internship period
I plan to work full-time on this Outreachy project from Dec 6, 2016 to March 6, 2017. I do not have any planned vacations during that time. I also volunteer (5 hrs per week) as a project manager for a non-profit called Code for Community (Code4C) to build a software enhancement or feature for other non-profits. The time I spend on Code4C will be outside of the (at least) 40 hours per week that I have planned for Outreachy.

Open source community
I am excited to be giving back to open source since I have been able to use many open source libraries and packages for my projects. I also like the community aspect of open source. Just this past year, I really enjoyed the experience of attending PyCon, and also looking forward to attending PyCon Canada in November 2016. I like building systems that are useful, and writing code for open source and MediaWiki will be a benefit to many users. The feature I would be building for this project is an enhancement for Wikiversity. I have taken MOOCs and it would be an honor to be able to contribute to an open online educational site.

*Past experience*

I developed in Python, mostly on Linux, for our projects at LBNL to understand energy use in buildings and on the distribution grid. I used several FOSS python modules and libraries to build these systems.

At LBNL, I built systems that used open source systems created by graduate students in the UC Berkeley Software Defined Buildings group. I also used many Python modules including requests, jupyter, matplotlib, django, flask, etc. During these years of using these open source packages, I was amazed at what was available for free, built by people around the world. It was also fun to explore different possibilities and features, and since it was all free, I could try building many things just with a basic Linux platform.

Event Timeline

@Miriya52 , Thank you for starting this application. It is good to see you have some relevant programming experience (unfortunately this project wont use your extensive IoT experience ;-) ). There are many parts of the template application that you need to fill in yet , which you can do by clicking edit. Some of the details will the outcome of discussions between yourself and the mentors , and we can have a private discussion about the project to clarify the details (The mentors also dont know all the answers -- this is your project, and the scope can be adjusted to suit your interests.).

My preferred method for communication during this proposal drafting/ preparation phase is a private Conpherence.
@Mvolz , does that suit you also?

cc @Sumit , I dont think this application is submitted yet. I do not see it in https://outreachy.gnome.org/?q=manage_projects&prg=7 . Am I looking in the wrong place?

@Miriya52 thanks for the application, as @jayvdb said, make sure you're in touch with him and @Mvolz to chalk out the final version of the proposal and begin contributions to pywikibot.

cc @Sumit , I dont think this application is submitted yet. I do not see it in https://outreachy.gnome.org/?q=manage_projects&prg=7 . Am I looking in the wrong place?

@jayvdb ,you're right, the application is not submitted in Outreachy system. @Miriya52 *please ensure* that a copy of this is submitted there too before Oct-17. You can edit the same till sometime afterwards.

My preferred method for communication during this proposal drafting/ preparation phase is a private Conpherence.
@Mvolz , does that suit you also?

Yes, that is fine with me.

@jayvdb @Mvolz Hello! Thanks for your comments. I started a private Conpherence and invited you both.

@Sumit Thanks for the reminder about submitting the application. I am definitely going to be working on this over the weekend and will get it in the system before Oct-17.

Cheers!

That would indeed be a great subject. French wikiversity community recently had (fr) a discussion about ability to conduct a MOOC with our technology. But currently we don't have, as far as I know, any way to store account data relating to Quizz scoring. Implementing that would be great, and having some legal support on how to manage this "personal" data, as well as a community feedback would be awesome. Thus said, I don't know if such a project may fit into this outreachy scope, should I write an other ticket?

That would indeed be a great subject. French wikiversity community recently had (fr) a discussion about ability to conduct a MOOC with our technology. But currently we don't have, as far as I know, any way to store account data relating to Quizz scoring. Implementing that would be great, and having some legal support on how to manage this "personal" data, as well as a community feedback would be awesome. Thus said, I don't know if such a project may fit into this outreachy scope, should I write an other ticket?

Yes, that sounds like a different ticket, doesn't look like it's on the board yet: https://phabricator.wikimedia.org/project/view/289/

Thanks for linking the relevant discussion on fr wiki, there is also one on en wikiversity here of a similar topic: https://en.wikiversity.org/wiki/Wikiversity:Colloquium#Software.2Fextension_to_increase_functionality_of_courses

@Psychoslave you might also be interested to know that some en wikiversity users have received a grant to create a new MOOC extension; it is still in development and not deployed, here is the code: https://github.com/wikimedia/mediawiki-extensions-MOOC/tree/develop

Miriya52 updated the task description. (Show Details)
Miriya52 updated the task description. (Show Details)
Miriya52 updated the task description. (Show Details)

@Mvolz That's indeed interesting. Thank you for making aware of it. :)

Thank you for your proposal. Please add a link to your outreachy proposal in https://outreachy.gnome.org on top of your project proposal. This can be something like Outreachy Link: https://outreachy.gnome.org/?q=view_projects&prg=7&p=xxxx Good Luck!

@01tonythomas Got it, I will add the Outreachy Link to the top of this proposal. Thanks!

@Miriya52 a small clarification needed:

I plan to work full-time from Dec 6, 2016 to March 6, 2017

I guess you mean full-time for Outreachy here?

@Sumit Yup, full-time for Outreachy from Dec 6, 2016 to March 6, 2017. Thanks!