Italiano English
Modifica History Actions

Differenze per "GSoCIdeas2012"

Differenze tra le versioni 5 e 71 (in 66 versioni)
Versione 5 del 2012-01-13 19:44:41
Dimensione: 3661
Commento:
Versione 71 del 2012-04-04 21:23:19
Dimensione: 22782
Autore: ppp-69-91
Commento: aggiunto privacy@home
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 2: Linea 2:
For the year 2012 the Ninux.org community decided to participate to Google Summer of Code (GSoC 2012). {{attachment:ninux-gsoc-2012-web.jpg}}

Ninux.org has officially been accepted as a mentoring organization for the Google Summer of Code 2012 program.
For more information, check out the official page on google's website:
[[http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux|http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux]]

/!\ '''Message to all the students that want to participate with us''': you have to submit your idea to google '''BEFORE the 6th of April''' (afterwards is too late!). Please [[http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux|proceed in submitting your application NOW]].
Linea 5: Linea 11:
Here some info on GSoC

From the [[https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/home|Google Summer of Code 2012]] webpage:
Linea 15: Linea 21:
'''Mentors'''

  * TODO

'''Students'''

TODO

= GSoC Project Ideas 2011 =

== Mapserver Improvements ==

 * Integration with django's user management framework (django.contrib.auth.user)
 * Possibility for admins and user to login in the frontend and be able to perform different actions depending on their privileges (eg: some info might be configurable to be seen by a certain group of users only)
 * New graphical user interface
 * Email app to ease the communication with node owners (possibility to send an email to all the nodes, possibility to send an email to only a group of nodes)
 * Possibility to use placeholders for distance calculations on the fly
 * New overviews with IP addresses
 * Differentiation between different types of devices (antennas, servers, others)
 * New DNS app with the possibility to associate hostnames with devices or servers
 * Traffic statistics with graphs
We are aiming to get slots for 10 students this year. More students might be able to join us depending on the number of slots we get. We hope that there will be enough slots for those who are motivated and skilled.

= GSoC Project Ideas 2012 =

== Mapserver database and server side refactoring ==

The goal of this task is to push forward the development of [[https://github.com/ninuxorg/nodeshot|Nodeshot]] in order to make it mature, stable and more flexible. The final goal is to promote this software so other wireless communities around the world can start using it and participate in the development. At the moment this is '''only''' partially possible because the software is not very flexible and has been developed to satisfy our needs only.

A joint effort from several wireless communities is being done in order to use a common database scheme and make a new flexible and pluggable map-server. This could be the first step in that direction.

 * Integration with django's user management framework (django.contrib.auth.user) and permission system
 * Possibility for admins and users to login in the frontend and be able to perform different actions depending on their privileges (eg: some info might be configurable to be seen by a certain group of users only)
 * Refactor the database model so to become compatible with the common node DB project proposed in Athens at the Wireless Battle of the Mesh v5
 * Better DB abstraction, eg: differentiation between different types of devices (antennas, servers, others)
 * Improve caching
Linea 40: Linea 40:
 * RESTFUL api in json and or xml to retrieve data from the database

'''Level 4''': Web developer<<BR>>
'''Technologies''': Python, Relational Databases<<BR>>
'''Frameworks used''': Django

== Map-server Frontend improvements ==

The goal of this task is to improve the user experience of Nodeshot, our community map-server. We'd like to develop a new, better graphical user interface and to add new useful functionalities.

 * New graphical user interface, easy to use and understand
 * Javascript refactoring: define a standardization of the methods to interact with the GUI
 * Easy registration and login
 * New overviews with IP addresses
 * Visual traceroute
 * Possibility to use placeholders for distance calculations on the fly
 * Elevation chart and Fresnel Zone calculation
 * Email app to ease the communication with node owners (possibility to send an email to all the nodes, possibility to send an email to only a group of nodes)
 * Integration with Agumented Reality for mobile phones
 * Divide javascript and css files so that they are easier to modify
 * Use django-compressor to automatically minify/compress the javascript and css files

'''Level 4''': Front-end developer<<BR>>
'''Technologies''': Python, Javascript, HTML5, CSS, Relational Databases<<BR>>
'''Frameworks used''': Django, jQuery

== DNS Management App for wireless communities ==
We implemented our own DNS system in our community which is integrated with the map-server. At the moment the integration is more like a temporary hack and not a piece of good software. We would like to separate this functionality and make it an indipendent application that can be integrated easily into the map-server but also run in standalone mode. The Goal is to make a system which calculates the hostnames of the nodes automatically but also gives the possibility for community networkers to manage their own DNS records indipendently (each node owner should be able to change his/her hostnames or add new ones).

Features:
 * Backend web interface for administration
 * Frontend application in which each node owner can manage hostnames of his/her node
 * Pluggable into Nodeshot (integration with Nodeshot)
 * Integration with Opensource DNS software (PowerDNS, myDNS, ecc)

'''Level 3'''<<BR>>
'''Technologies:''' Python, Javascript, HTML5, CSS, Relational Databases<<BR>>
'''Frameworks:''' Django, jQuery

== Distributed node monitoring and management application ==
We use different monitoring systems but we are not completely satisfied with any of them.

Problems we face:
 * Different monitoring systems are hard to maintain. When we change anything in our network we have to remember to change also the information in all the systems we use
 * One of the systems is proprietary, closed source and it works only with a very limited set of devices
 * We need to be able to diagnose problems quickly with a cross check on different protocols (SNMP, OLSR, BATMAN)
 * We need more flexibility
 * We need a decentralized system
 * We want it Open Source
 * We need network usage and traffic graphs

Solution proposed:<<BR>>
 * Develop a new pluggable distributed app for the map-server which can be deployed in different parts of the network which automatize the synchronization of the operations and eases our pain in the management of our network.
 * Maybe instead of reinventing the wheel we could integrate one of the existing open source monitoring applications with our map-server, the integration should take care of synchronizing the several systems in use.

'''Level 4:''' Web Developer<<BR>>
'''Technologies:''' Python, Javascript, HTML5, CSS, Relational Databases<<BR>>
'''Frameworks:''' Django, jQuery

== Robust OpenWrt based firmware ==
To build our community network we use a lot of embedded devices, they often have closed source firmware that offer good performance and services but they are done in a way that put us in a vendor lock-in.

To avoid that vendor lock-in we want to use OpenWrt but it miss some necessary features that we want to implement

 * Make it manageable trough NodeShot distributed management plug in
 * Improve monitoring support ( more information trough SNMP like links dBm, rate, traffic...)
 * Make remote configuration easy ( It will use SSH, but the manager will see only interesting option on NodeShot management interface )
 * Make it modular so we can eventually support more routing scheme and plug in
 * Make it completely auto-configuring in case of missing management

'''Level 4''': Semi-Professional

== Filesharing suitable for Community Networks ==

Many people want to share files in our community network but they step into some problems:
 * Existent major P2P solutions depend on the Internet ( like emule or torrent )
 * Most of major existent P2P solutions doesn't support ipv6
 * Folder sharing like samba doesn't provide efficient file search
 * People prefer to share depending on relationships, for example you want share some photos with your school companion but not with your headmaster.
 * Internet bandwidth on our network is going towards exhaustion
 * RetroShare cover just a part of our needs

To solve these issues we need to:
 * Add group support to RetroShare
 * File access policy is strongly based on users groups.
 * Add ipV6 support to RetroShare

'''Level 4''': Semi-Professional

== Videoconferencing suitable for Mobile Phone and Mesh Networks (MPMN ) ==

Many people want to use VOIP in our mesh network but they step into some problems:
 * Existent major videoconferencing solutions depend on the Internet ( like skype or gtalk )
 * Most of major existent videoconferencing solutions have not a good mobile phone integration ( like skype )
 * Most of major existent videoconferencing solutions don't have support for ipv6 ( our network is primarily ipv6 )
 * Internet bandwidth on our network is going towards exhaustion
 * They doen't want to learn to use another VOIP app

To solve these issues we decided to implement Videoconferencing suitable for Mobile Phone and Mesh Networks:
 * Create a good app, fully integrated in android/iphone/(other?) addressbook ( call someone trough MMPN must me simple as call him with phone number without learn to use other apps or have different gui).
 * Separate MMPN backend from addressbook integration ( like telepathy framework do on desktop ).
 * Make the backend extensible for newer protocols
 * Offer good privacy with encryption
 * Preferable completely serverless protocol such as retroshare

'''Level 4''': Semi-Professional
Linea 42: Linea 148:
This project aim to realize a web-based social application for music composition.
It will allow the creation of jam session (non real-time) in this way: users will upload tracks (e.g. piano track) and then they can merge them with other tracks (e.g. bass track) putted in the system by other user. Users could play a bunch of selected tracks creating a composition (e.g. bass+piano+vocal).

Using the linux audio plugin and a proper backend engine, they can also apply effects on tracks.

It rely on [[Soundmanager|http://www.schillmania.com/projects/soundmanager2/]] a javascript library (adopted also by [[http://soundcloud.com|SoundCloud]]) for the front-end, and a [[http://www.ladspa.org/|LADSA]] compatible command line script as for a backend.

Every track is under version control (git or whatever) so to keep track of branches and merges.
'''Idea'''<<BR>>
This project aims to realize a web-based social application for music composition.<<BR>>
It will allow the creation of jam session (non real-time) in this way: users will upload tracks (e.g. piano track) and then they can merge them with other tracks (e.g. bass track) that other users pushed in the system. Users can play a bunch of selected tracks creating a composition (e.g. bass+piano+vocal).
<<BR>>
Using the linux audio plugin and a proper backend engine, they can also apply effects on tracks.<<BR>>
Conversely, if a user doesn't like an instrument track of a song, he can create his own version by substituting it with her own track.<<BR>>

'''Technology'''<<BR>>
  * It will use a web framework such as [[http://djangoproject.com|Django]] to manage users, file upload and dynamic content.
  * It will rely on [[http://www.schillmania.com/projects/soundmanager2/|Soundmanager]] a popular and portable javascript library (adopted also by [[http://soundcloud.com|SoundCloud]]) for the front-end and mp3/mp4/ogg/wav playing. By default this library supports loop creation, volume, pan, set position, mute, peak volume level, pause/resume all, eq data (FFT). It supports also HTML5 (iPhone friendly). <<BR>>
  * On the backend it will handle files using linux programs. It could add effects (such as reverb or delay) on tracks by interfacing with a [[http://www.ladspa.org/|LADSA]] compatible command line script. In this way we will reuse the tons of linux audio plugin.
  * Every track is under a kind version control (git or whatever) so to keep track of branches and merges. Git seems not suitable for [[this reason|http://stackoverflow.com/questions/984707/what-are-the-git-limits]].
  * Given the heavy burden on the server that the server should manage, a cloud solution can be investigated. For instance we can use Ubuntu Orchestra and Juju.

== Improve the OLSRd mDNS plug-in ==

The OLSRd mDNS plug-in allows the distribution of mDNS (multicast DNS i.e. avahi/bonjour/zeroconf) messages over an OLSR network. This is substantially achieved by sniffing for mDNS packets on the final users' networks (usually HNA networks), encapsulating them inside OLSR protocol messages, exploiting OLSR native message transfer mechanisms, and decapsulating the mDNS packets at all the other end users' networks.

The plug-in has been developed by ninux.org members, however we would like to address some important issues that have arised during deployment:
 * '''loops'''. If two mDNS plug-in enabled OLSR routers are attached to the same HNA network, then mDNS packets will loop back and forth between the two, also flooding the whole OLSR network. For the moment the temporary solution to this problem is to enable the plug-in on one router at a time on the same HNA. A real solution to the problem would be the following:
  * usually mDNS packets have a TTL != 1, so:
  * capture only mDNS packets with TTL != 1
  * when decapsulating mDNS packets, set TTL = 1
  * where TTL is the IP Time-to-live field
 * '''capture rate'''. mDNS packets are incapsulated into OLSR messages, which in turn are contained in OLSR packets that are sent at the wireless basic rate (i.e. 1 or 2 Mbps) over the whole network. Thus a big amount of mDNS captured packets in a small time can slow down the whole network. A solution to this is to add a plug-in configuration option to set the maximum packet capture rate.

'''Programming Languages''': C

''' References '''

 * [[http://olsr.org/git/?p=olsrd.git;a=blob;f=lib/mdns/README | mDNS plug-in README]]
 * [[http://sesame-project.net/raw-attachment/wiki/PublicationsPage/mdns-plugin-paper.pdf | The OLSR mDNS extension for service discovery ]]
 * [[https://tools.ietf.org/html/draft-cheshire-dnsext-multicastdns-15]]
 * [[http://www.multicastdns.org/]]

== Improve the ninuxoo search engine ==

We have started the development of a community-network-wide open-source search engine called [[https://github.com/ninuxorg/ninuxoo|ninuxoo]]. Written in Python, it is formed by a samba and ftp share crawler and of a cgi-based website, with a common database. We would like to enhance it by adding some features:
 * show results whith a number of hops distance, based on the IP address of the user that is performing the search. This needs to interact with the routing daemon (i.e. olsrd in our case) by periodically retrieving the graph of the community network (through the txtinfo or dot olsrd plugins) and running standard graph search algorithms (e.g. Dijkstra's)
 * add a "what's new" web page that shows the newest files found by the crawler. This needs changes to the [[https://github.com/cl4u2/ninuu/blob/master/ninuxuu0.sql|database schema]]
 * reengineer the ftp crawling code

'''Programming Languages''': python, mysql

== Maturing external application APIs and introducing Event managing support for DIASPORA* Distributed Social Network ==

Diaspora is a free and open source application implementing a distributed social networking service which is made out of “pods” (i.e. servers), which in contrast with the centralized approach can be run directly from the users who can have full control of their online identity thus allowing information not to be controlled by a single party. Furthermore communications and content sharing between users are secured by the Salmon protocol.

The project is still inching towards a first beta release and at the moment lacks a mature API set which would be vital for the growth of the project itself as it would allow the development of external applications by independent developers who want to exploit the power and the possibilities provided by such platform.
As of now, only the draft of a preliminary version of the basic APIs is available (Reference [3]).
This project aims at developing a REST application API set that will provide developers with endpoints to the core functionalities of the social network, allowing them to manage the social graph with objects representing the main 4 Diaspora resources (People, Aspects, Posts, and Comments) and the connections between them (e.g., friend relationships, shared content, and photos).

Furthermore, an external application that will interoperate with D* will be developed on it as a proof of concept. This application will aim at providing Event managing support for the users as an external service that will allow the community to create and manage events, invite other users to them and publish related content.


''' Useful Skills '''

Ruby on Rails, Javascript, Rspec, JSON, XML, MySQL, HAML, SASS.
 

''' References '''

 * [[http://diasporaproject.com]]
 * [[http://joindiaspora.com]]
 * [[https://github.com/diaspora/diaspora/wiki/API-v1]]


== Mobile application to do AR aided wireless device pointing suitable for Wireless Community Networks ==

Description:
A new user that wants to join a Wireless Community Network is required to install a wireless device on his roof and to detect near stations to connect to. This can be arbitrarily difficult in a big city environment due to line of sight problems and lack of precise information about geography.
In this scenario we want to develop an iPhone application that helps, gathering information (coordinates, direction,..) from GPS and compass hardware present in almost every mobile system and the information gathered from a mapserver system containing the database of all the nodes, to easily find and then point a node where we want to connect all in an augmented reality system. To do so the application will exchange information with a mapserver both to obtain information of the nodes and also to insert his own position in to the database. The app wants also let know to as much people as possibile about wireless community through the app store system that this devices have built-in.

''' Technologies '''

Objective-C, Google Maps API, MySQL, SOAP

== PGP cryptography plugin for Jitsi ==

[[Jitsi|http://jitsi.org/]] is a promising IM software with builtin support for audio/video calls and conferences, desktop share, remote control and OTR cryptography.

We already use PGP to encrypt sensitive emails that contain login information to critical parts of our network, we developed a good web of trust and for this reason we would prefer PGP to OTR for our sensitive communications.

Since Jitsi is pluggable, this feature could be added as an additional plugin.

''' Technologies '''
Java, OpenPGP

== Mesh-Internet boost ==
Suppose you are the only one user of a large wireless mesh network. If you had several Internet gateway, how could use use ''all'' the bandwidth of all
those gateway in order to download your files faster? Build the solution!

Our idea is to realize a module that take packets and send them to internet using multiple gateway via the [[http://en.wikipedia.org/wiki/Loose_Source_Routing|Loose Source Routing]] option of the IP packet. With that option you can force packets to pass to one or serveral different router! Conversely nowadays packets usually do the same path to reach a destination, so if you are alone on a WCN with several internet gateway, right now you are doomed to use only the bandwidth of one gateway, typically the nearest one. Whereas the iptables target is not yet supported to put the loose source routing option, this option is supported by the Linux kernel.

  * improve [[https://svn.ninux.org/ninuxdeveloping/browser/xtables-addons|this software]] to add the Loose Source Routing target to iptable
  * develop a software/script that take a list of gateway and send packets to them according to a given policy (round robin, using connection track etc)
  * develop a script that takes olsr information and populates the gateway list of the former point.

== Node Security ==

Scenario:

Ninux's nodes are installed on the privete roofs. Electronics devices (Poe
power supply, ethernet switch etc...) are in a waterproof box closed to
antennas mast.
Due monitoring harware integrity against unauthorized access at the box,cable cutting and vandalism, we need a utility running on very low cost SoC
(requirement: TCP Stack, Ethernet port and some GPIO for the sensor)
integreted with our network monitoring.

Steps:
 * Indentify the platform: cheap, simple to found in electronics stores,support Open Source (uclinux, Arduino etc...), Ethernet interface, accessible GPIO (at least 4), small size.
 * The sensors to manage: door sensor, cable cutting sensor, proximity sensor, shake sensor via GPIO.
 * Interfacing data with SNMP protocol.
 * Develop a plugin for Nagios and/or AirOS for manage the alarms.


== Privacy@Home ==

'''Background''': lots of cheap but good enough "plug computers" are available; they are perfect for home servers, but there is nothing that will fit Average Joe.

The idea is to do a little step towards the goal of realizing it: not a complete distribution that will fit every scenario, but a simple way to manage some service
and configuration files through a web UI.
The focus is on privacy related services (tor relay, privoxy, polipo, firewall) and basic networking (network configuration, dhcp/dns server) but of course there is room
for everything.

 * Make some configuration tools
 * Make a middleware to manage configuration tools better
 * Make a WebUI for the middleware
 * Make this simple to install on a standard debian distribution (or openwrt)
Linea 52: Linea 279:
About GSOC 2012: __http://www.google-melange.com/__

Info about ninux participation on previous years:
About GSOC 2012: [[http://www.google-melange.com/|http://www.google-melange.com/]]

Info about ninux participation in previous years:
Linea 61: Linea 288:
If you are interested to participate please contact

contatti@ninux.org .
If you are a student interested in one of these projects please check out the application template on [[http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux|http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux]] and send the answers to

contatti [AT] ninux [DOT] org
Linea 66: Linea 293:

/!\ '''Message to all the students that want to participate with us''': you have to submit your idea to google '''BEFORE the 6th of April''' (afterwards is too late!). Please [[http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux|proceed in submitting your application NOW]].

Google summer of Code 2012

ninux-gsoc-2012-web.jpg

Ninux.org has officially been accepted as a mentoring organization for the Google Summer of Code 2012 program. For more information, check out the official page on google's website: http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux

/!\ Message to all the students that want to participate with us: you have to submit your idea to google BEFORE the 6th of April (afterwards is too late!). Please proceed in submitting your application NOW.

About the Google Summer of Code

From the Google Summer of Code 2012 webpage:

Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects. We have worked with several open source, free software, and technology-related groups to identify and fund several 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.

Participants

We are aiming to get slots for 10 students this year. More students might be able to join us depending on the number of slots we get. We hope that there will be enough slots for those who are motivated and skilled.

GSoC Project Ideas 2012

Mapserver database and server side refactoring

The goal of this task is to push forward the development of Nodeshot in order to make it mature, stable and more flexible. The final goal is to promote this software so other wireless communities around the world can start using it and participate in the development. At the moment this is only partially possible because the software is not very flexible and has been developed to satisfy our needs only.

A joint effort from several wireless communities is being done in order to use a common database scheme and make a new flexible and pluggable map-server. This could be the first step in that direction.

  • Integration with django's user management framework (django.contrib.auth.user) and permission system
  • Possibility for admins and users to login in the frontend and be able to perform different actions depending on their privileges (eg: some info might be configurable to be seen by a certain group of users only)
  • Refactor the database model so to become compatible with the common node DB project proposed in Athens at the Wireless Battle of the Mesh v5
  • Better DB abstraction, eg: differentiation between different types of devices (antennas, servers, others)
  • Improve caching
  • History for all the changes in the database
  • Better notifications, 2 examples:
    • Possibility for non-admins to receive notifications when new potential nodes are added
    • Possibility to be notified if new potential nodes are added in a specified distance range (eg: notify me if a new potential node is added in a range of 10km)
  • RESTFUL api in json and or xml to retrieve data from the database

Level 4: Web developer
Technologies: Python, Relational Databases
Frameworks used: Django

Map-server Frontend improvements

The goal of this task is to improve the user experience of Nodeshot, our community map-server. We'd like to develop a new, better graphical user interface and to add new useful functionalities.

  • New graphical user interface, easy to use and understand
  • Javascript refactoring: define a standardization of the methods to interact with the GUI
  • Easy registration and login
  • New overviews with IP addresses
  • Visual traceroute
  • Possibility to use placeholders for distance calculations on the fly
  • Elevation chart and Fresnel Zone calculation
  • Email app to ease the communication with node owners (possibility to send an email to all the nodes, possibility to send an email to only a group of nodes)
  • Integration with Agumented Reality for mobile phones
  • Divide javascript and css files so that they are easier to modify
  • Use django-compressor to automatically minify/compress the javascript and css files

Level 4: Front-end developer
Technologies: Python, Javascript, HTML5, CSS, Relational Databases
Frameworks used: Django, jQuery

DNS Management App for wireless communities

We implemented our own DNS system in our community which is integrated with the map-server. At the moment the integration is more like a temporary hack and not a piece of good software. We would like to separate this functionality and make it an indipendent application that can be integrated easily into the map-server but also run in standalone mode. The Goal is to make a system which calculates the hostnames of the nodes automatically but also gives the possibility for community networkers to manage their own DNS records indipendently (each node owner should be able to change his/her hostnames or add new ones).

Features:

  • Backend web interface for administration
  • Frontend application in which each node owner can manage hostnames of his/her node
  • Pluggable into Nodeshot (integration with Nodeshot)
  • Integration with Opensource DNS software (PowerDNS, myDNS, ecc)

Level 3
Technologies: Python, Javascript, HTML5, CSS, Relational Databases
Frameworks: Django, jQuery

Distributed node monitoring and management application

We use different monitoring systems but we are not completely satisfied with any of them.

Problems we face:

  • Different monitoring systems are hard to maintain. When we change anything in our network we have to remember to change also the information in all the systems we use
  • One of the systems is proprietary, closed source and it works only with a very limited set of devices
  • We need to be able to diagnose problems quickly with a cross check on different protocols (SNMP, OLSR, BATMAN)
  • We need more flexibility
  • We need a decentralized system
  • We want it Open Source
  • We need network usage and traffic graphs

Solution proposed:

  • Develop a new pluggable distributed app for the map-server which can be deployed in different parts of the network which automatize the synchronization of the operations and eases our pain in the management of our network.
  • Maybe instead of reinventing the wheel we could integrate one of the existing open source monitoring applications with our map-server, the integration should take care of synchronizing the several systems in use.

Level 4: Web Developer
Technologies: Python, Javascript, HTML5, CSS, Relational Databases
Frameworks: Django, jQuery

Robust OpenWrt based firmware

To build our community network we use a lot of embedded devices, they often have closed source firmware that offer good performance and services but they are done in a way that put us in a vendor lock-in.

To avoid that vendor lock-in we want to use OpenWrt but it miss some necessary features that we want to implement

  • Make it manageable trough NodeShot distributed management plug in

  • Improve monitoring support ( more information trough SNMP like links dBm, rate, traffic...)
  • Make remote configuration easy ( It will use SSH, but the manager will see only interesting option on NodeShot management interface )

  • Make it modular so we can eventually support more routing scheme and plug in
  • Make it completely auto-configuring in case of missing management

Level 4: Semi-Professional

Filesharing suitable for Community Networks

Many people want to share files in our community network but they step into some problems:

  • Existent major P2P solutions depend on the Internet ( like emule or torrent )
  • Most of major existent P2P solutions doesn't support ipv6
  • Folder sharing like samba doesn't provide efficient file search
  • People prefer to share depending on relationships, for example you want share some photos with your school companion but not with your headmaster.
  • Internet bandwidth on our network is going towards exhaustion
  • RetroShare cover just a part of our needs

To solve these issues we need to:

  • Add group support to RetroShare

  • File access policy is strongly based on users groups.
  • Add ipV6 support to RetroShare

Level 4: Semi-Professional

Videoconferencing suitable for Mobile Phone and Mesh Networks (MPMN )

Many people want to use VOIP in our mesh network but they step into some problems:

  • Existent major videoconferencing solutions depend on the Internet ( like skype or gtalk )
  • Most of major existent videoconferencing solutions have not a good mobile phone integration ( like skype )
  • Most of major existent videoconferencing solutions don't have support for ipv6 ( our network is primarily ipv6 )
  • Internet bandwidth on our network is going towards exhaustion
  • They doen't want to learn to use another VOIP app

To solve these issues we decided to implement Videoconferencing suitable for Mobile Phone and Mesh Networks:

  • Create a good app, fully integrated in android/iphone/(other?) addressbook ( call someone trough MMPN must me simple as call him with phone number without learn to use other apps or have different gui).
  • Separate MMPN backend from addressbook integration ( like telepathy framework do on desktop ).
  • Make the backend extensible for newer protocols
  • Offer good privacy with encryption
  • Preferable completely serverless protocol such as retroshare

Level 4: Semi-Professional

Collaborative Music Composition

Idea
This project aims to realize a web-based social application for music composition.
It will allow the creation of jam session (non real-time) in this way: users will upload tracks (e.g. piano track) and then they can merge them with other tracks (e.g. bass track) that other users pushed in the system. Users can play a bunch of selected tracks creating a composition (e.g. bass+piano+vocal).
Using the linux audio plugin and a proper backend engine, they can also apply effects on tracks.
Conversely, if a user doesn't like an instrument track of a song, he can create his own version by substituting it with her own track.

Technology

  • It will use a web framework such as Django to manage users, file upload and dynamic content.

  • It will rely on Soundmanager a popular and portable javascript library (adopted also by SoundCloud) for the front-end and mp3/mp4/ogg/wav playing. By default this library supports loop creation, volume, pan, set position, mute, peak volume level, pause/resume all, eq data (FFT). It supports also HTML5 (iPhone friendly).

  • On the backend it will handle files using linux programs. It could add effects (such as reverb or delay) on tracks by interfacing with a LADSA compatible command line script. In this way we will reuse the tons of linux audio plugin.

  • Every track is under a kind version control (git or whatever) so to keep track of branches and merges. Git seems not suitable for http://stackoverflow.com/questions/984707/what-are-the-git-limits.

  • Given the heavy burden on the server that the server should manage, a cloud solution can be investigated. For instance we can use Ubuntu Orchestra and Juju.

Improve the OLSRd mDNS plug-in

The OLSRd mDNS plug-in allows the distribution of mDNS (multicast DNS i.e. avahi/bonjour/zeroconf) messages over an OLSR network. This is substantially achieved by sniffing for mDNS packets on the final users' networks (usually HNA networks), encapsulating them inside OLSR protocol messages, exploiting OLSR native message transfer mechanisms, and decapsulating the mDNS packets at all the other end users' networks.

The plug-in has been developed by ninux.org members, however we would like to address some important issues that have arised during deployment:

  • loops. If two mDNS plug-in enabled OLSR routers are attached to the same HNA network, then mDNS packets will loop back and forth between the two, also flooding the whole OLSR network. For the moment the temporary solution to this problem is to enable the plug-in on one router at a time on the same HNA. A real solution to the problem would be the following:

    • usually mDNS packets have a TTL != 1, so:
    • capture only mDNS packets with TTL != 1
    • when decapsulating mDNS packets, set TTL = 1
    • where TTL is the IP Time-to-live field
  • capture rate. mDNS packets are incapsulated into OLSR messages, which in turn are contained in OLSR packets that are sent at the wireless basic rate (i.e. 1 or 2 Mbps) over the whole network. Thus a big amount of mDNS captured packets in a small time can slow down the whole network. A solution to this is to add a plug-in configuration option to set the maximum packet capture rate.

Programming Languages: C

References

Improve the ninuxoo search engine

We have started the development of a community-network-wide open-source search engine called ninuxoo. Written in Python, it is formed by a samba and ftp share crawler and of a cgi-based website, with a common database. We would like to enhance it by adding some features:

  • show results whith a number of hops distance, based on the IP address of the user that is performing the search. This needs to interact with the routing daemon (i.e. olsrd in our case) by periodically retrieving the graph of the community network (through the txtinfo or dot olsrd plugins) and running standard graph search algorithms (e.g. Dijkstra's)
  • add a "what's new" web page that shows the newest files found by the crawler. This needs changes to the database schema

  • reengineer the ftp crawling code

Programming Languages: python, mysql

Maturing external application APIs and introducing Event managing support for DIASPORA* Distributed Social Network

Diaspora is a free and open source application implementing a distributed social networking service which is made out of “pods” (i.e. servers), which in contrast with the centralized approach can be run directly from the users who can have full control of their online identity thus allowing information not to be controlled by a single party. Furthermore communications and content sharing between users are secured by the Salmon protocol.

The project is still inching towards a first beta release and at the moment lacks a mature API set which would be vital for the growth of the project itself as it would allow the development of external applications by independent developers who want to exploit the power and the possibilities provided by such platform. As of now, only the draft of a preliminary version of the basic APIs is available (Reference [3]). This project aims at developing a REST application API set that will provide developers with endpoints to the core functionalities of the social network, allowing them to manage the social graph with objects representing the main 4 Diaspora resources (People, Aspects, Posts, and Comments) and the connections between them (e.g., friend relationships, shared content, and photos).

Furthermore, an external application that will interoperate with D* will be developed on it as a proof of concept. This application will aim at providing Event managing support for the users as an external service that will allow the community to create and manage events, invite other users to them and publish related content.

Useful Skills

Ruby on Rails, Javascript, Rspec, JSON, XML, MySQL, HAML, SASS.

References

Mobile application to do AR aided wireless device pointing suitable for Wireless Community Networks

Description: A new user that wants to join a Wireless Community Network is required to install a wireless device on his roof and to detect near stations to connect to. This can be arbitrarily difficult in a big city environment due to line of sight problems and lack of precise information about geography. In this scenario we want to develop an iPhone application that helps, gathering information (coordinates, direction,..) from GPS and compass hardware present in almost every mobile system and the information gathered from a mapserver system containing the database of all the nodes, to easily find and then point a node where we want to connect all in an augmented reality system. To do so the application will exchange information with a mapserver both to obtain information of the nodes and also to insert his own position in to the database. The app wants also let know to as much people as possibile about wireless community through the app store system that this devices have built-in.

Technologies

Objective-C, Google Maps API, MySQL, SOAP

PGP cryptography plugin for Jitsi

http://jitsi.org/ is a promising IM software with builtin support for audio/video calls and conferences, desktop share, remote control and OTR cryptography.

We already use PGP to encrypt sensitive emails that contain login information to critical parts of our network, we developed a good web of trust and for this reason we would prefer PGP to OTR for our sensitive communications.

Since Jitsi is pluggable, this feature could be added as an additional plugin.

Technologies Java, OpenPGP

Mesh-Internet boost

Suppose you are the only one user of a large wireless mesh network. If you had several Internet gateway, how could use use all the bandwidth of all those gateway in order to download your files faster? Build the solution!

Our idea is to realize a module that take packets and send them to internet using multiple gateway via the Loose Source Routing option of the IP packet. With that option you can force packets to pass to one or serveral different router! Conversely nowadays packets usually do the same path to reach a destination, so if you are alone on a WCN with several internet gateway, right now you are doomed to use only the bandwidth of one gateway, typically the nearest one. Whereas the iptables target is not yet supported to put the loose source routing option, this option is supported by the Linux kernel.

  • improve this software to add the Loose Source Routing target to iptable

  • develop a software/script that take a list of gateway and send packets to them according to a given policy (round robin, using connection track etc)
  • develop a script that takes olsr information and populates the gateway list of the former point.

Node Security

Scenario:

Ninux's nodes are installed on the privete roofs. Electronics devices (Poe power supply, ethernet switch etc...) are in a waterproof box closed to antennas mast. Due monitoring harware integrity against unauthorized access at the box,cable cutting and vandalism, we need a utility running on very low cost SoC (requirement: TCP Stack, Ethernet port and some GPIO for the sensor) integreted with our network monitoring.

Steps:

  • Indentify the platform: cheap, simple to found in electronics stores,support Open Source (uclinux, Arduino etc...), Ethernet interface, accessible GPIO (at least 4), small size.
  • The sensors to manage: door sensor, cable cutting sensor, proximity sensor, shake sensor via GPIO.
  • Interfacing data with SNMP protocol.
  • Develop a plugin for Nagios and/or AirOS for manage the alarms.

Privacy@Home

Background: lots of cheap but good enough "plug computers" are available; they are perfect for home servers, but there is nothing that will fit Average Joe.

The idea is to do a little step towards the goal of realizing it: not a complete distribution that will fit every scenario, but a simple way to manage some service and configuration files through a web UI. The focus is on privacy related services (tor relay, privoxy, polipo, firewall) and basic networking (network configuration, dhcp/dns server) but of course there is room for everything.

  • Make some configuration tools
  • Make a middleware to manage configuration tools better
  • Make a WebUI for the middleware
  • Make this simple to install on a standard debian distribution (or openwrt)

More Info

About GSOC 2012: http://www.google-melange.com/

Info about ninux participation in previous years:

[http://wiki.ninux.org/GSoCIdeas2011]

[http://wiki.ninux.org/GSoCIdeas2010]

Contact

If you are a student interested in one of these projects please check out the application template on http://www.google-melange.com/gsoc/org/google/gsoc2012/ninux and send the answers to

contatti [AT] ninux [DOT] org

Thank You!

/!\ Message to all the students that want to participate with us: you have to submit your idea to google BEFORE the 6th of April (afterwards is too late!). Please proceed in submitting your application NOW.