User:Hackbegin/GSOC-14/Proposal

PERSONAL DETAILS

 * WikiEducator user name:Hackbegin
 * E-mail:pulkitagarwal2k8@gmail.com
 * IRC Nick:HackBegin
 * Other contact channel
 * Skype ID – pulkit.agarwal112
 * Twitter Handler - pulkit_iiit
 * Facebook Profile - http://www.facebook.com/pulkitagarwal2k8


 * Academic Background:Currently I am pursuing my bachelors with majors in computer Science and Engineering at International Institute of Information Technology – Hyderabad
 * Location:Hyderabad, India
 * Working Hours:I doesn't follow a fixed routine for working hours. I could easily work upto 5-6 hours a day anytime between 5:00-00:00 UTC (10:30 - 5:30 IST) including weekends.
 * Wiki page link:http://wikieducator.org/User:Hackbegin/GSOC-14/Proposal

GOAL OF THE PROJECT
Main goal of the project is to :-  Replace existing WikiEducator map widget with one built using Leaflet. Add authoring convenience features for scaling and adding pushpins to the maps. User can add text/images/audio file along with pushpins. Pull details associated with a pushpin from wiki-table. Provide user an option to offline cache the map in a PDF or ePub export format. Adding Mediawiki extension 

OUTPUT
The outputs would be the following:  Provide a map widget built using leaflet and Open Street Maps for rendering maps and adding other overlay features. Open Street Maps is used singe google maps doesn't support offline caching</li> User would be able to add pushpins by single-click on the desired location over map. While adding pushpins the user could also add text/images/audio along with it.</li> User could share his current location.</li> User can offline cache map in PDF or EPub export format by adding 4 pushpins surrounding the area he want to render statically.</li> </ol>

Implementation Details:
Major tasks involved in the projects are: <ul> Displaying maps on widget.</li> Adding/Deleting pushpins and data along with it.</li> Sending and Retrieving data relevant data from MediaWiki database in fixed format.</li> Offline caching of the region selected. This is challenging as tiles has to be pulled from the wiki table, Even if it is converted to PDF of    ePub format the space issue will be notable factor. So implementing error handling for each such input will be challenging.</li> Create account and login feature.</li> </ul>

How I plan to do my implementation.
When user will open the map-widget there will be option of LogIn or SignUp. If the user already had an account he need to just login and he will be redirected to his home page. If the user doesn't have an account he will first create an account and fill in the following details:  Personal Info (Name,E-mail,Phone No etc)</li> Specify a location or set current location as default location.</li> Select his default language out of the options available.</li> </ol> Then there will be an email verification before the user could actually login into his account. After email verification the user is ready to use the application. After logging in the default page will display a map with a marker over users current location.  User can add pushpins by a single click or by tapping over mobile. This will open a small canvas window where user can fill in details he want to add along with the the default information that issent like latitude-longitude,time-stamp etc pushpin.</li> There will be an option to view added pushpins which will show the selected pushpin over map with details in small window over pushpin. The user can double click or long click over mobile to delete a pushpin recognized by its unique latitude longitude pair.User will be asked for confirmation before it actually gets deleted.</li>

When user want to statically render the map he drops in pushpin at the 4 corners he want the map for. Then he request for offline rendering which involve pulling the tiles from wiki table. The exported tiles can be put in order by Leaflet and we can build a PDF or EPub converter on top of it.</li> </ol> https://github.com/aratcliffe/Leaflet.print Leaflet.print is plugin for Leaflet which deals exactly with converting the maps to different output format. This can be incorporated in the application for static caching.

Various api's involved:
<ol> <li>Leaflet api - For displaying map and other functionalities implemented over it we need Leaflet.</li> <li>WikiMedia Rest api - For sending and retrieving information from server's database. A good documentation describing how to make various request can be found at (http://www.mediawiki.org/wiki/API:Tutorial) and (https://en.wikipedia.org/w/api.php)</li> </ol>

What I have done till now?
<ol> <li> I have set up a local server and tested few of REST api's queries locally. </li> <li> I have started reading various documentations like one on Bing Translator, REST api, Phonegap. </li> </ol>

TENTATIVE TIMELINE
<ul> <li>Before 19th May - Properly understanding all the api's and plugin involved an formulate a well structured implementation approach.</li> <li>Week 1 - Decide on various project specifications, funtionalities to be implemented and UI of application after discussing it with the mentor. Draft a 'Software Requirement Specification'              including class diagrams and UML diagrams which will display the basic implementation architecture.</li> <li>Week 2 - Make a map widget which displays map with basic functionality of adding pushpins by clicking without details. Testing of the implementation on the widget.</li> <li>Week 3 - Allow user to add details along with the pushpins. As this involve sending and receiving data from server I have given more time in its implementation. Testing of the implementation on              the widget.</li> <li>Week 4 - Allow functionality to statically renfer the map using leaflet.print plugin. Testing of the implementation on the widget.</li> </ul> Midterm Evaluation <ul> <li>Week 5 - Incorporate the changes done before mid term evaluation into original widget after getting it evaluated. Add feature of deleting the pushpins both in the widget. Testing involved.</li> <li>Week 6-7 - Add login feature. Also other details about user will be stored. Regressive testing of all the functionalities on both mobile and widget.</li> <li>Week 8 - Finishing and functionality which I couldn't finish within specified deadline.</li> <li>Week 9-11 - Working on UI of the widget. Regressively testing of each functionality both on the widget.</li> <li>Week 12 - Incorporate the changes. Update wiki sub-page. Update documentation.</li> <li>After week 12 - final evaluation - Code re-factoring. Testing regressively.</li> </ul> Final Evaluation

BENEFITS TO WikiEducator
Project benefit WikiEducator by providing user a better experience with improved interface and additional functionalities. <ol> <li> A better implementation done using Leaflet api. <li>In the current implementation the user needs to know the latitude-longitude of a place in order to add pushpin at the desired location which is really inconvenient for them. As an output of this project users would able able to add pushpins and add associated data just by clicking on that location.</li>

</ol>

LONG TERM GOAL AND PERSONAL DEVELOPMENT
I am new to open source software development and consider this project as my first major open source contribution. Also as the project fits into my area of interest of building maps related application, the project would boost my personal knowledge. I'm also new to mediaWiki so by doing this project I'll be a lot more comfortable in using its api's.It will also allow me be a part of WikiEducation and would form a base for my contribution.

WHY I'M THE BEST PERSON FOR THIS PROJECT?
I consider myself as best for the project as I have enough knowledge of almost all of the platforms the project works on like Open Street Maps, leaflet, Android development, Mapquest, javascript. As a part of my Software System and Development course our team was assigned a project named Campus Mapping Software which aimed at building a cross platform offline mobile/web application which provide the features like search,navigation,adding pop-ups with associated details( text/image) specific to our campus map. Through this project I have gained sufficient knowledge of the above mentioned platforms. All the functionalities in he project were implemented using leaflet api hence I am very much familiarized with using Leaflet. I have already started researching about various wiki apis and I am sure would have build a solid implementation plan before the actual coding starts. Also I am a quick learner. I could easily grasp new concepts. So I am completely confident of successfully completing the project according to organization's standards.

WHAT Mediawiki EXPERIENCE DO YOU HAVE?
I have not much experience with mediawiki. It is through this organization i came to know about mediawiki. I have seen few introductory video and read resources available on internet. What i have learnt about it is that mediawiki is similar to wikipedia. It is used to store and share information over internet either individually or in a big group.

WHAT OTHER OPEN SOURCE PROJECTS HAVE YOU WORKED ON?
I have contributed in solving few enhancement bugs for Sympy and few exercises for OGDF apart from this I have not contributed much to the open source community until now but I want to take GSoC as an opportunity to increase my contribution to the community.

WHAT OTHER COMMITMENTS DO YOU HAVE BETWEEN 19 MAY AND 18 AUGUST?
I have no plans other commitment between the this time period. I would be in college for the entire duration.In order to accomplish the opportunity I seek through this project, I would dedicate a whole-hearted 40 hours a week to work completely according to the timeline. I plan to be an active wikieducator developer even after GSoC time-period and would continue the work I would undertake this summer.