User:Connorschlesiger/GSoC 2013 Proposal

My name is Connor Schlesiger and I am applying for the Google Summer of Code 2013. Constructive feedback is greatly appreciated. You may contact me by email, IRC, or via the talk page.

Curriculum Wiki

 * Public URL: https://www.mediawiki.org/wiki/User:Connorschlesiger/GSoC_2013_Proposal
 * Bugzilla report: N/A
 * Announcement: Link

Name and contact information
Name: Connor Schlesiger Email: connor@undefinedschlesiger.ca Timezone: EDT Typical working hours: I am very flexible about my working hours, but I would prefer a steady routine. IRC: wallzero (freenode)

Synopsis
Educational resources are growing online at increasing rate. From encyclopedia's, textbooks, syllabi, courses, quizzes and exams; these resources have become digital and public. Availability online, however, does not equal accessibility.

How do you learn what you need to know? How do you know what you don't know? Curriculum and syllabi forge a path of knowledge. They map a sensible learning strategy. Today, the content is available online, but the path to knowledge can incomplete or disjointed.

I call my solution, "Curriculum Wiki". The "Wiki" aspect of the project would focus on data relations, instead of content. Wikidata would set the basis for content, and a new interface would be designed.

Interface
A clean, uncluttered interface would be used, and minimal data would be initially represented. Data would be contained by nodes. Straight lines would connect nodes. The lines would contain arrows representing the path of content. Nodes would contain very little text, to keep them as non-intrusive as possible - and to save on window real estate. The nodes expand as the user selects or hovers on them. Nodes move out of each others way and can also be dragged. A small node would only contain a title, while a focused node would also contain content links. Browsing through nodes would be like reading a map. The nodes would continue off-screen, and the user will bring them into view by dragging the background of the screen (similar to Google Maps).

Content links would point to encyclopedia's, textbooks, articles, and applicable quizzes and exams. Users can add content links to each node or create new nodes. Users can also create there own semantic network from scratch or copy sections of others. Users can edit node connections by dragging an edge of the focus node to the edge of another node. With user editable connections, this starts to become a true Wiki. The URL would be used to focus on profiles and focus nodes.

Diagrams
''Confused? Rough diagrams are coming...''

Problem Addressed
With this tool, curriculum's can be globally and collaboratively organized. Content and quizzes from educational institutions can be incorporated. Users can create and share profiles of completed readings, courses, and quizzes. The educational resources from institutions around the world become accessible.

Technology Involved

 * PHP
 * MySQL

I would also be interested* in testing:
 * Node.js
 * NoSQL with HyperDex.

\*Note, I that I have no objection to PHP and MySQL if required.

For the user interface, I suggest using HTML5 and CSS3. Modern browsers will initially be a requirement.

A draggable interface would require Javascript and JQuery. AJAX will pull data and nodes as the user moves across the page.

Key Features

 * Navigable semantic network initially derived from Wikidata
 * Easy to build, collaborative curriculum/syllabi
 * Collection and organization of educational materials

Examples
Here are some examples: Draggable divs and other elements are possible Here is a similar interface to what I am proposing: Music Map Note the above creator has also used this example with books and movies as well... Another example - also with music artists - but uses flash: Tune Glue Music Map
 * Draggable div Tag

What About Wikiversity?
Wikiversity is a terrific site among many great learning tools. My major gripe is that the content does not reference any outside lessons or quizzes. Also, it falls short in design and aesthetics. I feel very claustrophobic using Wiki-style pages for tasks other than reading.

Perhaps one day all educational content will be located on one site, but that is unlikely. Many wiki-esque sites already exist for very special purposes (For example, Star Trek Wiki's, Pokemon Wiki's, etc.). What I am proposing would not only serve as a collaborative curriculum, but also as an aggregator of educational links. Educational tools can be developed by others and wiki users can link those lessons and quizzes to the appropriate nodes. The content is provided by others and linked in the relative node. By separating the content creation, the focus is only on semantic network, links, and interactivity.

Wait... User Semantics?
Currently I don't know how solve this concept, if if "user semantics" even makes sense. Perhaps a school could be selected, and the nodes and connections would load. For example, if I was learning about the history of math, and then switched from School:History to School:Mathematics, the node for Pythagoras would disappear or be replaced by Pythagora's Theorem. It will become clearer after analyzing Wikidata's progress. Also, it most definitely out of scope for the proposal anyway.

Summary
I don't believe Curriculum Wiki is a very good name. I am open to suggestions. Semantic Network Wiki is too scary.

I feel the really hard work is done, by the creation of the content by the vast contributors to Wikipedia. Wikidata has also begun digesting that content into accessible data. Let's begin aggregating content not only from Wiki sources, but around the world, into digestible, accessible, educational tools. Let's organize that content into collaborative, interactive data.

Also, folks are already collecting great sources of educational tools. Here is a wonderful list compiled on reddit.

Mentors
None so far. I am late to the party.

Deliverables
This proposal is likely out of scope. The initial project should focus on design, and content and semantic retrieval.

Required Deliverables

 * 1) Curriculum Wiki Design: How and where information is represented will be complete;
 * 2) Curriculum Wiki Functionality: The basic interaction of the site - dragging nodes, navigating across the page, populating nodes - must work;
 * 3) Curriculum Wiki Semantic Retrieval: The project will need to retrieve data from Wikidata and represent it in the semantic network;
 * 4) Curriculum Wiki Navigation: Navigation via dragging the page and bookmarks;
 * 5) Curriculum Wiki Documentation: Proper documentation of completed works;

Potential or Future Deliverables

 * 1) Curriculum Wiki Aesthetic Design: This project will need to work around the functionalities and navigation, while maintaining the feel of MediaWiki;
 * 2) Curriculum Wiki Search: Searchable nodes, subjects, curriculum, user profile;
 * 3) Curriculum Wiki Modifications: Node modifications, adding additional data;
 * 4) Curriculum Wiki Creations: User created semantic networks, with ability to copy or partially copy other networks;
 * 5) Curriculum Wiki Profile: Tie user accounts to MediaWiki;
 * 6) Curriculum Wiki Languages: Integrate translational functions;
 * 7) Curriculum Wiki Export: Some form of export;
 * 8) Curriculum Wiki Accessibility: Incorporate accessible and empowering tools for those with disabilities and special needs;

Resources
I have the ability to host the project myself. I manage a couple personal Debian VPS's that I am comfortable using for early prototyping.

Before May 27
Learn more about MediaWiki infrastructure and the Wikidata project.

May 27 - June 17
Community bonding period I have recently been lurking the MediaWiki IRC channel. I will be participating in the community before and during this period.
 * Study the Wikidata or MediaWiki API. Determine primary technologies;

June 17 - June 23
Communicate with mentor. Develop a concrete plan and schedule.
 * Setup prototyping machine.
 * Setup Nginx, MySQL, possibly Node.js and HyperDex
 * Setup Github page
 * Install relevant API's from MediaWiki
 * Begin early testing; learn the API

June 24 - July 14
Produce Preliminary Documentation: Begin coding Deliverables: Design Deliverables: Functionality
 * Requirements Specification
 * Design Documentation
 * First develop rough HTML model and corrosponding CSS
 * Develop scripts for interactivity
 * Develop PHP to generate page, with AJAX (or Javascript?) repopulation
 * Follow best practices for future updates (ex. additional languages)

July 15 - August 4
Start pulling data from Wikidata Deliverables: Semantic Retrieval
 * Figure out how to only store changes of Wikidata data, not all of Wikidata or MediaWiki (No users profiles or changes at this stage)
 * Finally show off some form of a semantic network
 * What!? No bugs whatsoever? ...sure to be bugs at this point.
 * Unit Testing

Mid-term evaluation
Count the sheep

August 5 - August 30
Complete navigation.
 * Navigate via dragging screen, bookmarking nodes. Perhaps search?
 * Begin checking off deliverables and bug fixing.
 * More Unit Testing

September 1 - September 10
Final cleanup of code and documentation. Fix any outstanding bugs and document those unfixed. Final merge.

September 11 - September 15
Complete Documentation Deliverables: Documentation

September 16 - September 22
Submit project. Continue tinkering, bug fixing, etc. Perhaps begin fixing and merging extra deliverables which were too buggy for launch.

About You
I just finished my 5th year of my computing systems undergrad. I enjoy programming and systems administration as a profession and hobby. I try to be security conscious. I enjoy reading about industrial and functional design. Please visit my profile for further information, contact info, and links to my website and blog.

Participation
I hope to capture as much unique knowledge I can into my blog. I will be posting weekly on my progress and issues I have solved. I will primarily be using Github for collaboration. I currently use Github but have only managed a single project in the past. I have a copy of "Version Control by Example" by Eric Sink that I hope to read in the upcoming weeks.

I often use IRC for communication. I setup a ZNC server to record and relay my messages when I am away. I have subscribed to the #mediawiki and #wikimedia-wikidata channels. I am also aware of the Wikidata-I and Wikitech-I mailing lists for further assistance.

I setup a Murmur server in case anyone wants to participate in voice communication. I also can be reached anytime by email.

Past open source experience
I have been using open source software for years now. The first project would be XBMC starting around 2004. Starting a few years ago, Debian was my go to operating system. Now I use Debian primarily for servers. I have used FreeBSD and NAS4Free to manage my NAS box. I currently use Linux Mint on my laptop.

I have not contributed any significant code to open source communities. The last I can recall was submitting a patch to Squid to allow authentication using Dovecot's password hashing scheme. I've kept very poor records of my participation which is something I hope to change with my new blog. I have previously participated in forums assisting others with technical difficulties, along with IRC when I am online. I recognize that my participation in open source communities is something to be improved.

Thank You
I appreciate your interest. I hope and look forward to further discussion. Connor Schlesiger (talk)