GSOC 2014/Student Application hammadhaleem/College

From FedoraProject

Jump to: navigation, search
Note.png
please use this template to organize your proposal


Contents

Fedora College

Project description

I would be devoting my summers to the google summer of code, under the mentorship of fedora. I would be working on this project “Fedora College”. This project works to create a virtual classroom for new fedora contributors. Acts as a platform for new contributors to engage with the community and learn how they can contribute best in the community. Mostly this service will be used to run online courses on contributing at various levels be it documentation, bug-fixing or packaging. The project would certainly increase the activeness in the community and certainly make it easy for newer members to craft their way around the fedora community. The use of virtual classroom environment for training new contributors to the community using know educational resources by a combination of written, images and video content.

The need you believe it fulfills

When someone asks, how can I become a fedora contributor? What do we say to him/her? Or becoming a fedora contributor. Where to start?

He/she now faces as to what we can call our monster of ten heads “Our Wiki”. Our wiki have much information very useful, but buried under many links. Due to that, many new contributors sees the wiki of superficial way. New contributors have many questions, the communication on the wiki is unidirectional. Is almost impossible have a detailed index of the information there are many communities or websites in the world doing this in this moment

  • showmedo.com
  • railscasts.com
  • perlcast.com (only podcasts)
  • podfeed.net

Also, get in to the different groups of Fedora require always the intervention of a qualified sponsor in the area, for accept the contributor in the groups based on their last contributions in the FOSS world. Many times, this contributors wants contribute but not have any contributions and needs learn about the work that does in the fedora groups and some experience. Due to it, this classrooms can be the better choice for training of the new Fedora contributors

About me

I am Hammad Haleem, a senior year undergraduate student from India. I am currently studying computer engineering at Jamia Millia University, New Delhi India, one of the premier institutes in India. I am fluent with Python, PHP, C/C++, Java, and HTML along with English. It had been quite a lots of time since I am coding. I have quite experience working with web-technologies and database systems. After the completion of my Undergraduate studies I will be moving to Hong Kong university of Science for Masters in Computer engineering which is quite an exceptional university for further studies. Currently, I am working with the local community and building this event, BootConf.in. In its third edition it’s the annual FOSS conference at my university. It happened that, previous one we had was actually called fedora Un-conference. Aimed at educating people about the free and open-source software available and contributing to open-source. The event is list here: http://fedoraproject.org/wiki/CONF@JMILUG


Any relevant experience you have

During my intern-ships I worked on many Webbased project. I worked on various languages. PHP & Python to be specific. Professional experience (My Internships): I, during my first year at the university interned with CMC, a subsidiary of Tata Consultancy Services. Here, I was first introduced to professional work environment and industry standards. Most of the work here was in PHP and Web application development. During my second year, I did my internship with TCIL (Telecom consultants of India Limited) during this, I worked closely with data-center team at TCIL’s Data centre in New Delhi. The team was responsible maintaining and monitoring the Pan-e-Africa Network, this facility was used by Government of India to enable people from poor countries in Africa to get online medical consulting and professional courses. During my third undergraduate year, I was engaged as an intern with National informatics center (NIC) i.e. Government of India web-services organization. Here I worked with a senior scientist responsible for online office project a suite similar to Google Docs but indigenously built. I was given task of designing the backend for an upcoming module i.e. Discussion forum. I designed and partially implemented the module, this module was quite on the similar lines with the Facebook. Scientist who was guiding me was really impressed with my skills and I was offered a Job on successful completion of the project.


Research Interests

I have also had the opportunity to co-author four research papers with my learned fellow students and faculty members.


  • My first research paper “A management scheme for Hierarchical mobile IPv6” was co-authored with Prof MN Doja, Head of the Department in Computer Engineering at my University. The paper was presented in international conference and accepted for publication at “IJSDGE”.


  • My second paper titled “Effective Probabilistic model for website classification” was co-authored with fellow students and teachers from my university. The paper has been accepted in a national conference and would be subsequently published in journal, Lecture notes in Electrical Engineering, Springer after the conference. I extended my research on web page classifiers and sequential patterns to generate a better algorithm to classify web pages. The work was conducted as a part of my minor project and the results were quite encouraging. We wrote a research paper publishing those results, the paper is pending review in one of the conferences.
  • Apart from my interest in Data Mining and knowledge discovery. I also worked along one of the faculty members on Security and Cryptography during my summer break. The work was subsequently compiled with help of one of the faculty members and was submitted to international conference and is currently under peer review. The Title for the publication was “A New Chaotic Substitution Box Design for Block Ciphers”, the results obtained in this work was quite encouraging and it was well appreciated by senior members of the Department.
  • All my Projects have been predominantly developed in Python
  • Apart from my theoretical knowledge I have also been constantly developing my practical knowledge. I can safely say that I have spent the time and effort towards learning in this field to the best of my abilities and I still long to learn more, as a wise man once said “Learning is a never ending process’. I strongly believe, that the more I learn, the better will I be able to perform in my field

Leadership Qualities and contribution to the Open Source During the course of my undergraduate studies I have also been engaged with various student bodies. I joined Computer Society of India, JMI student chapter during my first year of undergraduate study, Meant for individuals interested in Computers and Computer Science functions, not only to provide opportunities to students of Computer and Electronics engineering, but also to spread awareness about the latest technologies to other disciplines.


I have been part of various clubs in the university like the Linux User group and the Google developer group. I was one of the Founding member of Google Developers group at my university. The main objective of being a part of these group is to promote technical skills among students. We have been delivering various lectures, Workshops and organizing competitions for propagation of various technical skills among the students. The focus on adaptation and promotion for good of various open-source technologies among students have been main focus for these groups. I myself was engaged in delivering lectures on various topics like HTML, Python, Apache Server and Linux. These groups work closely with many different open-source foundations like Mozilla-Foundation, Fedora, OpenSuse-foundation and Openstack foundation to introduce students with cutting edge technologies in the industry.

Technical Details

Mainly our task is to develop a web application and a rest API strongly integrated with the fedora authentication services. The project would be mainly having 3 parts, An API rest, Backend for management of content and user friendly as well as responsive front end.

How you intend to implement your proposal

  • Rest API
  • Back End
  • Front End

Rest API

We would be developing a REST API which will offer access to large amount of data available on the Web platform. We are planning an API, which supports uploads, delete and revisions of data among other commonly available API endpoints. The main features of the API are :

  • Support for Upload, Delete and Upload of revised version of Media content like video and images.
  • Ability to perform video conversion from open source video format to standard OGV video format. The API will not support conversion from any proprietary formats. We would be using the package GStreamer from the fedoras feature would be a limited one, with capabilities to convert only non-proprietary formats. We intent to have this feature provided time permits. Conversion from proprietary formats would be left for future development.
  • The API would use the python-babel library for language conversions and localizations
  • The API would support JSON format for data exchange.
  • Each user will be issues an access token which would be used for API access. The access token would be set to de-authenticate after 7 days. The user need to generate access token from the UI in the web portal. /api/user/<userid/acess_token/<token>/ , We would be having a format similar to this for API access.
  • With the API, the API consumer can easily access the following Endpoints. Also, these endpoints will provide for methods to access following features.
  • We will be using flask-oauthlib plugin for design of the oauth capable api.
Endpoint Features Description
/api Home page , documentation General api documentation and usage
/api/user/ User profile, list users, get user by ID, name or email. Get Information about the user and ability to edit and delete profiles. According to privilege level.
/api/media/ media information, get media by ID, version , date , tags Get information about the media content and publish revisions, edit information and delete media.
/api/content/ content information, get content by ID, version , date , tags Get information about the content and publish revisions, edit information and delete content.
/api/comments/ Get a thread, edits, add more, delete. Manage Comment stream
/api/search by Tags , by author , media / content ID Offer an abstraction for easy searching.
/api/tags Add / remove tags Manage tags.

Backend and Content Management:

A backend for managing uploads, comments, and access level of the contributors. We will divide the backend into number of modules for easy development the whole web application has been divided into following modules

  • Content management
    • This module deals with the static content delivery and handles requests to the Web-Pages.
    • We have divided content into two parts media and textual content.
    • Media content is images and videos. We will be having a system to manage media. Add / remove and update revisions for media.
    • Textual content: It houses all the text present on the website. It will have a foreign key relation with the media.


  • Authentication
    • Authentication module uses the FAS, fedora authentication services for authentication and subsequent login into the Web Application. The platform will only offer login by Fedora OpenID and not by any other means. The default user level in the fedora groups will map to a user level in the web-platform making it quite integrated into the portal.
    • The website will redirect the client to the fedora authentication URL, where he/she will grant the required permissions and data to share. These information will be shared with our platform. We will be mainly taking Username, OpenID, Email, User group (for access levels) and other general details.
    • We will have various access levels demarcating the user access. We will be having these levels Admin, content creator, moderator, registered user and anonymous user. Each with a special set of privileges.
    • We will map all the existing groups in the FAS2 with groups at our web-application. Fedora authentication system returns a list of groups a user is present in. We will be selecting few parameters to map existing groups into our application. <fs.object>.fas_groups returns a list of groups a user is present in. We can find a detailed list of groups here https://admin.fedoraproject.org/accounts/group/list/


  • Administrator
    • Admin module deals with the website administration. Managing content, user and maintenance of the website.
    • User Interface for the admin panel.
    • Permissions to add, remove and ban people from the web application.
  • Core
    • Core has the models and views for the core of the application. This module enlist the various models that have been mapped with the database. Also, it will have the main media management and content management system of the web portal.
  • API
    • Rest API, we have already discussed it above.


The Entity relationship model for development of backend, with detailed class description is given below. The diagram show all the models we will be creating along with foreign key relations. This model is a tentative and quite flexible in the approach. Final models will be more clear and definitive and would come out after careful discussion with the project mentor. Media:Databse_college.png

Frontend design

Currently the GUI has been adopted from the Koji website but we intend to recreate whole of the GUI in the foundation CSS framework. A frontend, we are thinking in something like Railscasts.com. But with a profile section where you can ask questions to the experienced contributors about thing on published videos. Also, I have attached finalized few wireframes for various pages. Mainly we will be creating templates for the Profile page, the screencast page & the general content pages (about home etc.).


GUI mockup 1 GUI mockup 2 GUI mockup 3

Technology Used and dependencies

We would be using the python programming language and some frameworks for development purposes. Primarily for web application development we will be using flask. For database and ORM abstraction sqlalchemy will be used. For language conversion and localization python-babel comes to help. We are using the jinja2 templating engine. We will be using some tools for testing. A list of all packages is given below.


  • Testing
    • pytest==2.3.5
    • py==1.4.15
  • mock==1.0.1
  • Linting
    • flake8==2.0
    • mccabe==0.2.1
    • pep8==1.4.6
    • pyflakes==0.7.3
  • Test running
    • tox==1.5.0
    • virtualenv==1.9.1
  • Documentation
    • Sphinx==1.2b1
    • docutils==0.10
    • Jinja2==2.7
    • MarkupSafe==0.18
    • Pygments==1.6
  • Miscellaneous
    • Paver==1.2.1
    • colorama==0.2.5
  • Development
    • flask-sqlalchemy
    • flask
    • flask-oauthlib
    • PostgreSQL

Deliverables

After the end of 13 weeks of summer of code, I will be delivering a fedora platform web application that provides facilities for enriching the community interaction amongst the fedora community members and educating new members using resources created by the members.


Need For this project?

When someone asks, how can I become a fedora contributor? What do we say to him/her? Or becoming a fedora contributor. Where to start?


He/she now faces as to what we can call our monster of ten heads “Our Wiki”. Our wiki have much information very useful, but buried under many links. Due to that, many new contributors sees the wiki of superficial way. New contributors have many questions, the communication on the wiki is unidirectional. Is almost impossible have a detailed index of the information there are many communities or websites in the world doing this in this moment showmedo.com railscasts.com perlcast.com (only podcasts) podfeed.net


Also, get in to the different groups of Fedora require always the intervention of a qualified sponsor in the area, for accept the contributor in the groups based on their last contributions in the FOSS world. Many times, this contributors wants contribute but not have any contributions and needs learn about the work that does in the fedora groups and some experience. Due to it, this classrooms can be the better choice for training of the new Fedora contributors

A rough timeline for your progress

I will be following the following timeline for the project.

Week Task
Week 1 : May 19, 2014 -- May 25, 2014 Discussion about the Fedora College database models and implementation of the database models.
Week 2 : May 26, 2014 -- June 1, 2014 Develop an authorization module for Fedora College.
Week 3 : June 2, 2014 -- June 8, 2014 API Development for the Database abstraction queries and to Manage Video (Upload, delete and revisions).
Week 4 : June 9, 2014 -- June 15, 2014 API Development for the functionality to Manage Images (Upload, delete and revisions).
Week 5 : June 16, 2014 -- June 22, 2014 API Development for the User Profile functionality.
Midterm Evaluation Midterm Evaluation
Week 6 : June 23, 2014 -- June 29, 2014 API Development to Manage comments.
Week 7 : June 30, 2014 -- July 6, 2014 Work on the Backend module and the Administration interface.
Week 8 : July 7, 2014 -- July 13, 2014 Complete the work for the Backend module and Perform testing.
Week 9 : July 14, 2014 -- July 20, 2014 Work on the Frontend module.
Week 10 : July 21, 2014 - July 27, 2014 Work on the Frontend module.
Week 11 : July 28, 2014 -- August 3, 2014 Work on the Frontend module.
Week 12 : August 4, 2014 -- August 10, 2014 Final work on the Frontend Module and Documentation about the work done for the community and Fedora users about the functionality and working of the Fedora college.
Week 13 : August 11, 2014 -- August 18, 2014 Final week to scrub the Frontend and Backend code, write tests, perform and improve documentation.
Final Evaluation Final Evaluation

Any other details you feel we should consider

For the past few weeks, I have been constantly in touch with the project mentors Eduardo Echeverria and Yohan Graterol.

In the last few months , we had many successful talks. We talked about possible structure of Models, gui and api. I have also pushed some code to the github repository of the project.

Have you communicated with a potential mentor? If so, who?

For the past few weeks, I have been constantly in touch with the project mentors Eduardo Echeverria and Yohan Graterol.