Italiano English
Modifica History Actions

Differenze per "GSoCIdeas2015"

Differenze tra le versioni 6 e 7
Versione 6 del 2015-02-15 21:54:48
Dimensione: 9145
Autore: Nemesis
Commento: Nodeshot debian installer
Versione 7 del 2015-02-15 22:20:42
Dimensione: 11386
Autore: Nemesis
Commento: Proxoo
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 115: Linea 115:
== Proxoo: distributed SMB/CIFS to HTTP proxy for ninuxoo ==

'''Difficulty''': Intermediate developer

'''Required skills''':
 * Python (networkx and beautifulsoap libraries knowledge is a plus)
 * WSGI
 * CGI
 * Basic security notions

'''Brief explaination''':

[[https://github.com/ninuxorg/ninuxoo|Ninuxoo]] is a search engine for SMB/CIFS and FTP shared folders.
It is a popular service inside the [[http://ninux.org|ninux.org]] community network and its source code can be found here: [[https://github.com/ninuxorg/ninuxoo]].

Web browsers do not support the '''SMB/CIFS''' protocol natively, thus the files provided in the search results of ninuxoo cannot be accessed directly.
Users must instead copy and paste the '''smb://''' URLs provided by the ninuxoo search results into other programs (typically file managers) on their systems.

To circunvent this problem we would like to develop '''Proxoo''': an SMB/CIFS to HTTP proxy to be deployed in several locations inside the community network.
We imagine Proxoo as a CGI application that takes an smb:// URL as parameter (e.g. through an HTTP GET request) and returns the content of the file pointed by the smb:// URL through an HTTP response.
We would like Proxoo to be deployed on many different web servers (apache, nginx and possibly uhttpd), perhaps with different implementations (e.g. Python-WSGI, Bash-CGI).

Moreover, to avoid loading a single point on the network (and following a decentralization philosophy) we would like ninuxoo to point users to their nearest Proxoo instance.

To achieve this goal:
 * ninuxoo should be aware of the Proxoo instance locations. These could be listed, for the moment, on a wiki page that can be parsed through e.g. the beautifulsoup python library.
 * ninuxoo should be aware of the network topology graph to compute the shortest path between the user and the proxy (this sounds hard but it's instead quite easy to achieve through an already provided JSON description of the network and the networkx python library)

'''Expected result''':

Fill me!

'''Mentor''':

Claudio Pisa, active ninux contributor and creator of ninuxoo.
Linea 153: Linea 189:
The package creation must be automated with a python script, ideally using the fabric library, a good example can be seen on the LXC-web-panel project: [[https://github.com/claudyus/LXC-Web-Panel/blob/master/fabfile.py]].
This automation is crucial because core devs will have to release new packages at each new release.
The package creation must be automated with a python script, ideally using the fabric library, a good example can be seen on the [[https://github.com/claudyus/LXC-Web-Panel/blob/master/fabfile.py|fabric debian package generator script of the LXC-web-panel project]]. This kind of automation is crucial because core devs will have to release new packages at each new nodeshot release.
Linea 156: Linea 191:
The result will also be automatically tested by a jenkins instance, the student will be helped in setting up this last task. The debian package will also be automatically tested by a jenkins instance, the student will be helped in setting up this last task.

Google Summer of Code 2015

https://developers.google.com/open-source/soc/images/gsoc2015-300x270.jpg

The Ninux community is applying to become Mentoring Organization for the Google Summer of Code 2015.

Ninux participated in the GSoC several times:

Recently one of our community members also wrote a guest blog post on Google Open Source Blog: Orgs Get Ready: Preparing for GSoC 2015 with Freifunk.

What is Ninux?

Ninux is a Community Network, that means we are a community of volounteers that are using the open source approach in building and interconnecting wireless and wired networks in the Italian peninsula.

Our networks, according to the Picopeering Agreement, are free to join, everybody is welcome!

We invest quite a lot of time and energy in teaching new people how to use, build and extend the network.

Our key aim is freedom of communication through electronic means.

We are not an internet service provider, we don't provide free internet connection, although some community network members might share their internet connection with anyone or a few other friends through the network.

If you're curious to see where our networks are located, check out our community map or our experimental new map.

What is the Google Summer of Code?

The Google Summer of Code is an international program that offers student developers stipends to write code for various open source and free software projects.The program offer funds for several open source, free software, and technology-related projects over a three month period. Since its inception in 2005, the program has brought together nearly 2500 successful student participants and 2500 mentors from 98 countries worldwide, all for the love of code. Through Google Summer of Code, accepted student applicants are paired with a mentor or mentors from the participating projects, thus gaining exposure to real-world software development scenarios and the opportunity for employment in areas related to their academic pursuits. In turn, the participating projects are able to more easily identify and bring in new developers. Best of all, more source code is created and released for the use and benefit of all.

Find more info about the GSoC in the Frequently Asked Questions page.

Why do we want to participate in the GSoC?

There are several good reasons for which we participate in the GSoC:

  • it's a nice way to help young people learn how to participate to FOSS projects

  • it's a fun way for us to become better at teaching technical things to newcomers

  • it's a good way to attract young developers in our community

  • it's an effective way to get stuff done in a shorter time

  • it's a great way to make mentors and participants feel part of a community!

Ideas

Here is a list of our project ideas.

Ninuxoo: Enhanced search engine crawling

Difficulty: Beginner developer

Required skills:

  • Python
  • MySQL (for database queries)
  • FTP protocol general knowledge
  • HTTP protocol general knowledge

Brief explaination:

Ninuxoo is a search engine for SMB/CIFS and FTP shared folders. It is a popular service inside the ninux.org community network and its source code can be found on github: https://github.com/ninuxorg/ninuxoo.

Currently, the crawling of FTP shared folder is broken and we are aiming at adding new features to the crawler.

Expected result:

A new version of ninuxoo with:

  • fixed crawling of FTP shared folders
  • added possibility to crawl files shared through HTTP
  • the crawler should be aware of possible loops caused by symlinks

Mentor:

Claudio Pisa, active ninux contributor and creator of ninuxoo.

Netdiff: add support for NetJSON

Difficulty: Beginner/Intermediate developer

Required skills:

  • Python
  • Routing protocols
  • JSON

Brief explaination:

Netdiff is an experimental pure python library that we are developing to parse network topologies from routing protocols like OLSRd 1 and batman-advanced and detect changes in network topology.

We want to be able to parse more routing protocols and convert their output to NetJSON, a draft standard JSON format we are working on with other community networks, more information here: https://github.com/interop-dev/json-for-networks and we also want to be able to easily calculate changes in the network topology (new links, dropped links).

Expected result:

The goals of this project are the following (ordered by priority):

  • design a class which is able to convert a networkx topology in a NetJSON topology
  • add a clean way to calculate differences between two networkx topologies
  • write a parser which understands the output of the OLSRd1 jsoninfo plugin and converts it to an internal networkx topology
  • write a parser which understand the output of the batman-advanced JSON topology tool (alfred / vis) and converts it to an internal networkx topology
  • write a parser which understands the output of the OLSRd2 JSON topology tool and converts it to an internal networkx topology
  • propose an experimental integration with nodeshot: read topology data and update the links in the database

Each one of the main features will need to be unit tested and documented in the README. The library needs to maintain compatibility with python 2.7 and python 3.

At least 4 tasks out of 6 will need to be done in order to consider the project successful.

Mentor:

Federico Capoano, active ninux contributor.

Proxoo: distributed SMB/CIFS to HTTP proxy for ninuxoo

Difficulty: Intermediate developer

Required skills:

  • Python (networkx and beautifulsoap libraries knowledge is a plus)
  • WSGI
  • CGI
  • Basic security notions

Brief explaination:

Ninuxoo is a search engine for SMB/CIFS and FTP shared folders. It is a popular service inside the ninux.org community network and its source code can be found here: https://github.com/ninuxorg/ninuxoo.

Web browsers do not support the SMB/CIFS protocol natively, thus the files provided in the search results of ninuxoo cannot be accessed directly. Users must instead copy and paste the smb:// URLs provided by the ninuxoo search results into other programs (typically file managers) on their systems.

To circunvent this problem we would like to develop Proxoo: an SMB/CIFS to HTTP proxy to be deployed in several locations inside the community network. We imagine Proxoo as a CGI application that takes an smb:// URL as parameter (e.g. through an HTTP GET request) and returns the content of the file pointed by the smb:// URL through an HTTP response. We would like Proxoo to be deployed on many different web servers (apache, nginx and possibly uhttpd), perhaps with different implementations (e.g. Python-WSGI, Bash-CGI).

Moreover, to avoid loading a single point on the network (and following a decentralization philosophy) we would like ninuxoo to point users to their nearest Proxoo instance.

To achieve this goal:

  • ninuxoo should be aware of the Proxoo instance locations. These could be listed, for the moment, on a wiki page that can be parsed through e.g. the beautifulsoup python library.
  • ninuxoo should be aware of the network topology graph to compute the shortest path between the user and the proxy (this sounds hard but it's instead quite easy to achieve through an already provided JSON description of the network and the networkx python library)

Expected result:

Fill me!

Mentor:

Claudio Pisa, active ninux contributor and creator of ninuxoo.

Nodeshot: debian installer

Difficulty: Intermediate developer

Required skills:

  • Python
  • Debian Linux
  • Django (minimum knowledge)
  • Fabric python library (optional, can be learned while working on the project)

Brief explaination:

Nodeshot is a crowdsourcing platform for geographic data with some features that are specific for community networks.

You can see the development version in action in our experimental network map.

Performing the manual development install described in the documentation is time consuming and often seen as serious barrier for new potential contributors.

The goal of this project idea is to simplify the basic installation of Nodeshot in order to lower the barrier for new users, potential contributors and mobile app developers. We don't want a mobile developer to give up developing a simple mobile app just because he cannot setup a nodeshot development instance in the first place.

Expected result:

We want to reach a point in which one can perform a basic installation of nodeshot on debian based systems by simply doing:

wget <deb-package-url>
sudo dpkg -i <deb-package.deb>

That command should replicate a result similar to what one would achieve by performing the following steps of the manual install procedure:

  • install dependencies
  • create database
  • install python packages
  • project configuration

In addition a daemon script to start/stop/restart the django development server also needs to be written.

The package creation must be automated with a python script, ideally using the fabric library, a good example can be seen on the fabric debian package generator script of the LXC-web-panel project. This kind of automation is crucial because core devs will have to release new packages at each new nodeshot release.

The debian package will also be automatically tested by a jenkins instance, the student will be helped in setting up this last task.

Mentor:

Federico Capoano, nodeshot core developer and active ninux contributor.