The purpose of this task is to provide a full identities manager built on top of Korma technology that allow to update that information in a simplified way through an user interface.
Korma is the place where all of the community software development metrics are aggregated. This also provides profiles information (e.g.: http://korma.wmflabs.org/browser/people.html?id=341&name=raymond) and we need a way to update such data. This is done in a manual way nowadays.
From a technical point of view, this task is divided into three main parts:
* Develop a UI interface with authentication access to deal with unique identities, affiliations and countries. The initial technology selected is AngularJS.
** This would allow to add/remove/modify identities, add/remove/modify organizations, add/remove/modify domains for an organization, affiliate/remove/modify people to organizations, merge identities, merge enrollments.
** This would also help to list identities, affiliations or organizations.
** And this would also provide a search identitiy, affiliations and organizations interface.
* The second part would be focused on the development of a REST API. The initial selected technology is Flask.
** This second step links the UI interface the actual actions in the database.
** This REST API will follow the SortingHat API (https://github.com/MetricsGrimoire/sortinghat/blob/master/sortinghat/api.py).
* Improvement of SortinHat heuristics. This tool is python-based.
** This task would improve the current set of unique identities matcher. This is needed to improve the information provided to the final users in the web front-end.
** This would be done extending the current matching module of SortingHat at https://github.com/MetricsGrimoire/sortinghat/blob/master/sortinghat/matching/simple.py
On top of this, this tool is expected to have two different users: admin and anonymous. The latter would be the link added to all of the profiles found in Korma that will allow users to update their identities. This would a subset of the accessible information by user admin. Thus, the tool will have a simple user authentication process.
- Primary mentor: @Acs
- Co-mentor: @Dicortazar
- Estimated project time for a senior contributor - 3/4 weeks
- Skills - Python, AngularJS
- Microtasks -
== Name and contact information ==
**Name:** Sarvesh Gupta
**Email:** email@example.com(primary), firstname.lastname@example.org
**IRC or IM networks/handle(s):** s1991
**Location:** Roorkee, India
**Timezone:** Kolkata, INDIA, UTC+5:30
**Typical working hours:** 1pm to 2am untill 20th July, 5pm to 2am after 20th July
== Synopsis ==
This project was thought up for providing a way for contributors to manage their identities, update or make possible changes to their information by providing a web interface above korma technology. Along with this develop a dashboard for admin, so that she can have control over contributor's profile and identities. For now contributor of MediaWiki has to go through a process which consumes more time in updating information to database for updating their profile and also there is no admin control due to unavailability of web interface, so it is a kind of necessary for community to have a web interface which facilitates them to have an easy access to their profile. Moreover, sortingHat is required to implement REST API and provide more precise method for identity matching, so this project also aims to improve as well as implement the sortingHat to flask framework.
=== What it means to accomplish? ===
Extends the functionality of [[http://korma.wmflabs.org/browser/ | MediaWiki-Dashboard]]
**Step 1:** Develop an angularJS based UI providing contributors with authentication access to deal with their identities, affiliation.
**Step 2:** Presenting information to the users i.e. identities, affiliation or organizations.
**Step 3:** Allowing users to update their information, add new identities and so on.
**Step 4:** Allow contributors to search for their profile using some sort of identity and to perform actions like sync or merge with their existing multiple identities which will be handled by sortingHat.
**Step 5:** Work on [[https://github.com/MetricsGrimoire/sortinghat/ | SortingHat]] so that it fulfill the requirement of our project.
=== How it will benefit MediaWiki or Wikimedia projects such as [[https://www.mediawiki.org/wiki/Community_metrics | Mediawiki Community Metrics]]? ===
- It will help improving the information about Contributor's activity in tech Community metrics for example [[http://korma.wmflabs.org/browser/top-contributors.html | here]].
- It make less cumbersome for contributors for submitting and editing their data by providing a web interface.
- It'll provide an search method for identities to further sync contributor's account.
=== Possible mentor ===
- [[https://www.mediawiki.org/wiki/User:AlvaroDelCastillo | Alvaro del Castillo]]
- [[https://www.mediawiki.org/wiki/User:Dicortazar | Daniel Izquierdo]]
== Deliverables ==
The main deliverable will be a working web application for contributors to manage community identity.
=== Required Deliverables ===
- The angularJS technology based web interface of each and every page of the web application required (**milestone 1**)
- Flask (python based web-framework) based back-end part with implementation of templates(front-end) part to it (**milestone 2**)
- Optimized search facility with autocomplete feature. User can search and filter the data or information (**milestone 3**)
- Working and modeling SortingHat so that our project can took full advantage of SortingHat (**milestone 4**)
- Implementation of Authentication techniques to our project (probably [[http://keystone.openstack.org | openstack-Keystone]]). (**milestone 5**)
- Testing and Documentation.
=== Optional Deliverables ===
- An admin dashboard, so that admin can manage/control contributor's activity.
== Schedule ==
==== Envisioning phase (May 5 - May 24) ====
- Remain in constant touch with my mentor(s) and community.
- Getting myself familiarize with community and development environment.
- Getting myself familiarize with working of Flask.
- Study required docs.
- Fix some bugs along the way and get my hands dirty.
==== Community bonding period(1 weeks, May 25 - May 31) ====
- Further discussion with my mentor(s) and my community about the prototype and its implementation.
- Make a Roadmap or workflow for development phase
==== AngularJS implementation (2 weeks, June 1 - June 14) - __Milestone-1__ ====
- Thinking of using [[https://github.com/ngbp/ngbp | ngbp]] repo to get kick-started with AngularJS, Bootstrap
-- Get myself familiar with repo's architecture and implementation
- Design AngularJS UI, which will be implemented in Flask framework.
-- Methods for Login/Signup, will work on authentication at last.
-- Methods for Contributor's profile view
-- Methods to list the identities, affiliation, etc
-- Prototypical implementation of search tools.
- This will require use of AngularJS or may be Ajax
==== Flask implementation part (2 weeks, June 15 - June 28) - __Milestone-2__ ====
- Getting myself familiarize with Flask (already familiar with Django, so won't take too much time)
- Setting up Flask project
- Implement the back-end
-- Contributors to view her/his profile
-- Updating information and identities.
-- List identities, affiliation
- In parallel to above step, syncing angularJS to Flask
- This will require use of Flask framework, python, angularJS
==== Mid-term evaluation ====
- For mid-term, I will be submitting the working model up-till now.
==== Implement search and filter (1 week, June 29 - July 5) - __Milestone-3__ ====
- Investigating search options
-- Discussing with mentor about search techniques that can be implemented, such as Flask libraries aiding to search techniques such as Woosh or Haytack.
-- Understanding the library that needs to be implement.
- Script for search and filter implementation in which contributor can search for his/her other existing identities.
- Syncing it with front-end.
==== Research Period (1 week, July 6 - July 12) ====
- Getting my self familiar with working of sortingHat.
- Discuss with mentor(s) with the future work on sortingHat related milestone.
==== Implementing sortingHat (2 weeks, July 13 - July 26) - __Milestone-4__ ====
- Improving the sortingHat heuristics, so that it can be implemented to our project.
- (Not so sure about milestone for now, need to figure out in Research Period)
==== Implementing Authentication Technique (1 week, July 27 - Aug 2) - __Milestone-5__ ====
- Discuss with mentor about existing techniques for authentication (probably openstack-keyston).
- Getting myself familiar with finalized technique
- Implementing the technique to project.
==== Deploying phase (2 weeks, Aug 3 - August 16) ====
- Code Review
-- Conduct code review by myself, then mentor(s)
-- Inact information gained by code review
-- Further unit and integration testing
-- Conduct several rounds of testing for real-world users.
-- Write approach program and functional descriptions
-- Document deployment and testing.
==== Pencil Down ====
- August 17: Soft Pencil down - A weak for final polishing
- August 21: Firm Pencil down
- **Submission to Google**
== Participation ==
==== Communication of progress ====
- **IRC channel**: I'll stay online on IRC at #metrics-grimoire in freenode, in my working hours.
- **Email**: I will make several check points (within 24 hours) for reading emails and replying as soon as possible.
- **Mailing list**: [[https://lists.libresoft.es/listinfo/metrics-grimoire | metrics-grimoire]] will be used to communicate progress
- **Blog**: Though I've need started blogging, I would surely try to maintain a blog throughout the project.
==== Publishing Source code ====
- [[http://github.com/sarvesh-onlyme | Github]]
==== Where I would turn for help? ====
- **Solve by myself:** Read documentation, search online, etc
- **Seek helps from community:** Discuss on IRC, mailing list or mentor(s).
- **Seek helps from outside the community:** My work has a lot to do with Flask, authentication techniques, so can turn to different communities for help.
**Amenities:** I understand, there have been power and internet issues with students from India in past. I've a stable and always-on internet connection and live in a housing society with 24-hours power backup, so that will not be a problem.
== About you ==
I'm Sarvesh Gupta, third year student at [[https://en.wikipedia.org/wiki/IIT_Roorkee | Indian Institute of Technology - Roorkee]] with major Computer Science. I enjoy trying out and learning new things related to web technology.
I want to go for organisation which is mostly used by people. Also I would feel better is my project could work beyond GSoC and used by as many users as possible.
Lastly, I promise to work for at least 40 hr. per week. No other obligations interfere throughout GSoC project.
== Past experience ==
I’ve worked for Oregon State University Open Source Organization in last summer during GSoC-14, [[http://www.google-melange.com/gsoc/project/details/google/gsoc2014/sarveshgpt1991/5766466041282560 | here]] is the link of abstract of work done to last year’s GSoC.
My github link can be found [[http://github.com/sarvesh-onlyme | here]]
Wikimedia will be my third encounter with Open Source. I've fix some bugs([[https://bugzilla.mozilla.org/show_bug.cgi?id=965354 | #1]], [[https://bugzilla.mozilla.org/show_bug.cgi?id=965342 |#2]], [[https://bugzilla.mozilla.org/show_bug.cgi?id=909368 | #3]]) for Mozilla organization related to Automation and Tools. My commits can be seen [[http://hg.mozilla.org/automation/orangefactor/ | here]] with username 'sarvesh-onlyme'.
For now, I'm planning to contribute for MediaWiki through GSoC.
== Links ==