Extension:Wikibase Repository/Mobilize Wikidata

Mobilize Wikidata

 * Public URL: http://www.mediawiki.org/wiki/User:Pragunbhutani/GSoC_2013_Proposal
 * Bugzilla report: https://bugzilla.wikimedia.org/show_bug.cgi?id=43065
 * Announcement: http://lists.wikimedia.org/pipermail/wikitech-l/2013-April/068845.html

Name and contact information
Name: Pragun Bhutani

Email: pragun06@gmail.com

Location: Gurgaon, India

Timezone: UTC+5:30 (IST - India)

Typical working hours: 10 pm to 3 am until July, 6pm to 3 am after July

IRC or IM networks/handle(s): pragunbhutani

Synopsis
My project is aimed at extending Wikidata to make it accessible on mobile devices. Setting up Wikibase with MobileFrontend shows that while MobileFrontend can be used to achieve a mobile-friendly version of WIkidata, some problems arise due to JS based UIs not rendering properly through MobileFrontend (here's a sample entry).

However, the following changes should allow us to integrate WIkibase and MobileFrontend with better results.


 * No-JavaScript Wikibase (make Wikibase usable on mobile devices):
 * Currently, JS based UIs do not render properly through MobileFrontend. To circumvent this problem, I propose to make Wikibase print UIs without Javascript. The No-JS Wikibase thus created should be compatible with MobileFrontend. Having a no-JS Wikibase gives us the added advantage of reaching users who prefer to browse with Javascript disabled.
 * Certain hooks will also need to be added to MobileFrontend to recognize Wikibase specific data formats.


 * Adding new Special pages to maintain functionality (make Wikibase editable on mobile devices).
 * Currently, we only have Special pages that allow us to edit the values of Items. There are no Special pages built for the purpose of editing Property values. If a no-JS version of Wikibase is implemented, I will also need to build new Special pages to maintain this edit functionality.
 * To limit the scope of my project to 6 weeks and to make sure I don't end up working on a project that's actually two projects put together, I've decided to NOT include this as a required deliverable. It will be really nice to be able to edit Wikidata on mobile devices, but that functionality can be added at a later point of time as well. I plan to include developer guides in my documentation to aid future developers in adding different functionalities to the mobile friendly version of Wikibase.


 * User Interface
 * I think it's best to keep the UI consistent with that of MobileFrontend. The user interface of MF is clean, works well and is already familiar to current users so I see no need to make any changes to that.
 * While the format of data in Wikidata requires the use of tables rather than text, they'll be formatted so as to suit the UI of MobileFrontend.

Once the first two have been implemented, I plan to include mobile-specific JS to improve the UI and usability of our mobile Wikibase.

Required deliverables
Based on Sumanah's conclusions drawn from last year's GSoC, I've decided to scope my project for 6 weeks instead of 12. After this period, I'm going to allocate 4 weeks for code review, documentation and bug fixes, so that (hopefully) my code is ready to be merged! The deliverables listed below should allow Wikibase to be rendered correctly on mobile devices. However, the mobile view so created will be limited to 'research' mostly, since Special pages for adding properties to items and editing property values don't exist at the moment.
 * Implement an extension that prints a no-JS version of Wikibase.
 * Add hooks to MobileFrontend to allow it to recognize Wikibase specific data.
 * Make suitable changes to the HTML structure.
 * Changes to be made to the mobile CSS, as per requirement.
 * Documentation, including notes for future development and enhancement.

Optional deliverables
If time permits, I would like to work upon improving the functionality of the mobile view to include editing. At the moment, we have Special pages that allow you to create items and properties, set descriptions and add aliases. However, adding properties to an item and editing property values is done through JS.
 * Introduce new Special pages to maintain functionality being provided by JavaScript at the moment.
 * 'Add' property values.
 * 'Add' properties to an item.


 * Introduce mobile specific JS to improve UI and usability.

Estimated project timeline

 * Community Bonding Period (2-3 weeks)
 * Study WikibaseRepo code and familiarize myself with its structure.
 * Create UI mock-ups and discuss them with the community.
 * Althought the 'box' structures remain, the layout may need to be changed a little to suit smaller screens.
 * Study MobileFrontend to understand how it renders content skins.
 * Fix some bugs along the way and get my hands dirty.


 * No JS Wikibase (3 weeks)
 * Implement an extension for Wikibase that renders UIs without JS


 * Mobile specific HTML/CSS fixes (1 week)
 * Certain mobile specific HTML/CSS fixes might need to be implemented to accommodate the No JavaScript UIs.


 * Testing on mobile devices with different screen sizes. (1-2 weeks)
 * Smartphone screen resolutions can be as low as 240X320 and go as far up as 1920X1080
 * Will have to make sure that my solutions looks good across all screen sizes.


 * Submit code to Gerrit.


 * Milestone Complete: No-JS Wikibase for Mobiles implemented.


 * Code review, bug fixes and documentation (4-5 weeks)
 * Documentation
 * Introducing the changes I've made.
 * Notes for developers to aid future development. Particularly, I'd like to inform people about how they can add functionality through 'Special' pages and incorporate them with the mobile friendly version.
 * There may be certain edge-case exceptions (because of the huge variation in mobile screen sizes) that are noticed. Future developers will have to be notified about these as well.


 * Any remaining time afterwards will be spent on improving functionality and the user interface.

About me
I'm Pragun Bhutani, a final year engineering student from Gurgaon, India. I like learning about web technologies, user interface/experience and design. I code in CSS, JavaScript and PHP, and I enjoy reading about everything under the sun (and beyond!). That happens to be the reason why I've spent countless hours on Wikipedia, which gave me the idea of contributing to Mediawiki in the first place.

I've read about and done a college project on Ontologies before so when I learnt about Wikidata on this year's GSoC page, I found it to be an immensely interesting concept. I'd love to work on this project because extending Wikidata's reach to mobile devices would go a long way towards making it more accessible, encouraging greater usage and contribution!

Participation
I stay online on the IRC during my work hours and can be found on #mediawiki, #wikimedia-dev, #wikimedia-mobile and #wikimedia-wikidata.

For queries,feedback and discussion, I will communicate with the community through the mailing lists (Wikitech-l and Wikidata-l). I will maintain a copy of my work on Github for people to view, give feedback on or fork.

Amenities: I understand there have been power/internet issues with students from India in the past. I have a stable, always-on internet connection and live in a housing society with 24-hour power backup, so that will not be a problem.

Past open source experience
I've been an active participant of the Open source developers club at my university. I've contributed to WIkimedia and a few other Open source organizations in the past. I share all of my work on Github.

I fixed a bug on Mediawiki core and have contributed to a few other Open Source organizations as well. I've contributed a patch here and a patch there to Wordpress. I collaborated on an extension for Google Chrome. I've also contributed a patch to the Mozilla support forums.

I've been discussing my project with the community through the mailing lists (Wikitech-l and Wikidata-l). The discussions can be found here, here, here and here.

I have also attended numerous Open source meet-ups at my university including a Firefox 4 launch party, OSSCamp 10.11, Meteor.js workshop etc.