<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>GSoCIdeas2015</title><revhistory><revision><revnumber>33</revnumber><date>2015-02-20 21:35:51</date><authorinitials>Nemesis</authorinitials><revremark>jabber</revremark></revision><revision><revnumber>32</revnumber><date>2015-02-20 14:03:42</date><authorinitials>Nemesis</authorinitials><revremark>Do you have a public twitter or github profile?</revremark></revision><revision><revnumber>31</revnumber><date>2015-02-20 13:41:27</date><authorinitials>Nemesis</authorinitials><revremark>Added nodeshot websockets idea</revremark></revision><revision><revnumber>30</revnumber><date>2015-02-20 13:20:17</date><authorinitials>Nemesis</authorinitials><revremark>nodeshot performance</revremark></revision><revision><revnumber>29</revnumber><date>2015-02-17 15:35:00</date><authorinitials>2a00:1508:1:f000:a0c4:4fff:fe44:9d19</authorinitials></revision><revision><revnumber>28</revnumber><date>2015-02-17 15:24:51</date><authorinitials>2a00:1508:1:f000:a0c4:4fff:fe44:9d19</authorinitials></revision><revision><revnumber>27</revnumber><date>2015-02-17 11:37:33</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>26</revnumber><date>2015-02-17 11:36:09</date><authorinitials>ClauzClauz</authorinitials><revremark>Proxoo required skills</revremark></revision><revision><revnumber>25</revnumber><date>2015-02-16 23:36:03</date><authorinitials>ClauzClauz</authorinitials><revremark>proxoo expected results</revremark></revision><revision><revnumber>24</revnumber><date>2015-02-16 20:55:23</date><authorinitials>Nemesis</authorinitials><revremark>advanced devops expert fa cacare</revremark></revision><revision><revnumber>23</revnumber><date>2015-02-16 18:37:15</date><authorinitials>Nemesis</authorinitials><revremark>get in touch improvement</revremark></revision><revision><revnumber>22</revnumber><date>2015-02-16 18:28:33</date><authorinitials>Nemesis</authorinitials><revremark>added Claudio Mignanti</revremark></revision><revision><revnumber>21</revnumber><date>2015-02-16 12:47:49</date><authorinitials>Nemesis</authorinitials><revremark>fabric optional</revremark></revision><revision><revnumber>20</revnumber><date>2015-02-16 12:46:49</date><authorinitials>Nemesis</authorinitials><revremark>Mazurco &gt; Mazzurco</revremark></revision><revision><revnumber>19</revnumber><date>2015-02-16 12:40:44</date><authorinitials>Nemesis</authorinitials><revremark>renamed debian installer in debian package generator</revremark></revision><revision><revnumber>18</revnumber><date>2015-02-16 00:58:14</date><authorinitials>Nemesis</authorinitials><revremark>additional travel funding question</revremark></revision><revision><revnumber>17</revnumber><date>2015-02-16 00:55:34</date><authorinitials>Nemesis</authorinitials><revremark>student guidelines &amp; hints</revremark></revision><revision><revnumber>16</revnumber><date>2015-02-16 00:34:01</date><authorinitials>Nemesis</authorinitials><revremark>Subscribing as mentor</revremark></revision><revision><revnumber>15</revnumber><date>2015-02-16 00:15:45</date><authorinitials>Nemesis</authorinitials><revremark>ninux dev for mentors</revremark></revision><revision><revnumber>14</revnumber><date>2015-02-15 23:37:12</date><authorinitials>Nemesis</authorinitials><revremark>fixed typo</revremark></revision><revision><revnumber>13</revnumber><date>2015-02-15 23:25:42</date><authorinitials>Nemesis</authorinitials><revremark>general guidelines</revremark></revision><revision><revnumber>12</revnumber><date>2015-02-15 23:04:47</date><authorinitials>Nemesis</authorinitials><revremark>added links to social profiles</revremark></revision><revision><revnumber>11</revnumber><date>2015-02-15 22:51:19</date><authorinitials>Nemesis</authorinitials><revremark>added ninuxoo logo</revremark></revision><revision><revnumber>10</revnumber><date>2015-02-15 22:49:49</date><authorinitials>Nemesis</authorinitials><revremark>added nodeshot and libremesh logos</revremark></revision><revision><revnumber>9</revnumber><date>2015-02-15 22:45:57</date><authorinitials>Nemesis</authorinitials><revremark>Nodeshot: Ansible playbook</revremark></revision><revision><revnumber>8</revnumber><date>2015-02-15 22:28:24</date><authorinitials>Nemesis</authorinitials><revremark>libremesh</revremark></revision><revision><revnumber>7</revnumber><date>2015-02-15 22:20:42</date><authorinitials>Nemesis</authorinitials><revremark>Proxoo</revremark></revision><revision><revnumber>6</revnumber><date>2015-02-15 21:54:48</date><authorinitials>Nemesis</authorinitials><revremark>Nodeshot debian installer</revremark></revision><revision><revnumber>5</revnumber><date>2015-02-15 21:33:22</date><authorinitials>Nemesis</authorinitials><revremark>Netdiff</revremark></revision><revision><revnumber>4</revnumber><date>2015-02-15 20:47:44</date><authorinitials>Nemesis</authorinitials><revremark>Ninuxoo: Enhanced search engine crawling</revremark></revision><revision><revnumber>3</revnumber><date>2015-02-15 20:29:01</date><authorinitials>Nemesis</authorinitials><revremark>added what is the google summer of code section</revremark></revision><revision><revnumber>2</revnumber><date>2015-02-15 20:17:57</date><authorinitials>Nemesis</authorinitials><revremark>init idea page</revremark></revision><revision><revnumber>1</revnumber><date>2015-02-15 19:36:08</date><authorinitials>Nemesis</authorinitials><revremark>placeholder</revremark></revision></revhistory></articleinfo><section><title>Google Summer of Code 2015</title><para><inlinemediaobject><imageobject><imagedata fileref="https://developers.google.com/open-source/soc/images/gsoc2015-300x270.jpg"/></imageobject><textobject><phrase>https://developers.google.com/open-source/soc/images/gsoc2015-300x270.jpg</phrase></textobject></inlinemediaobject> </para><para>The Ninux community is applying to become Mentoring Organization for the <ulink url="http://www.google-melange.com/gsoc/homepage/google/gsoc2015">Google Summer of Code 2015</ulink>. </para><para>Ninux participated in the GSoC several times: </para><itemizedlist><listitem><para>2010 with Freifunk umbrella organization, <ulink url="http://wiki.freifunk.net/Ideas_GSoC_2010">see 2010 ideas page and look for ninux</ulink> </para></listitem><listitem><para>2011 with Freifunk umbrella organization, <ulink url="http://www.google-melange.com/gsoc/org2/google/gsoc2011/freifunk">see 2011 google melange page, 4 projects are from ninuxers</ulink> </para></listitem><listitem><para>2012 as indipendent Mentoring Organization, <ulink url="http://www.google-melange.com/gsoc/org2/google/gsoc2012/ninux">see google melange Ninux 2012 page</ulink> </para></listitem><listitem><para>2014 with Freifunk umbrella organization with 1 project: <ulink url="http://blog.ninux.org/2014/04/23/gsoc-2014-si-parte-con-netengine/">Netengine</ulink> </para></listitem></itemizedlist><para>Recently one of our community members also wrote a guest blog post on <emphasis role="strong">Google Open Source Blog</emphasis>: <ulink url="http://google-opensource.blogspot.it/2015/02/orgs-get-ready-preparing-for-gsoc-2015.html">Orgs Get Ready: Preparing for GSoC 2015 with Freifunk</ulink>. </para><section><title>What is Ninux?</title><para>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. </para><para>Our networks, according to the <ulink url="http://www.picopeer.net/PPA-en.html">Picopeering Agreement</ulink>, are free to join, everybody is welcome! </para><para>We invest quite a lot of time and energy in <emphasis role="strong">teaching new people how to use, build and extend the network</emphasis>. </para><para>Our key aim is <emphasis role="strong">freedom of communication</emphasis> through electronic means. </para><para>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. </para><para>If you're curious to see where our networks are located, <ulink url="http://map.ninux.org/">check out our community map</ulink> or <ulink url="https://ninux.nodeshot.org">our experimental new map</ulink>. </para></section><section><title>What is the Google Summer of Code?</title><para>The Google  Summer of Code is an international program that <emphasis role="strong">offers student developers stipends to write code for various open source and free software projects</emphasis>.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. <emphasis role="strong">Best of all, more source code is created and released for  the use and benefit of all</emphasis>. </para><para>Find more info about the GSoC in the <ulink url="http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page">Frequently Asked Questions page</ulink>. </para></section><section><title>Why do we want to participate in the GSoC?</title><para>There are several good reasons for which we participate in the GSoC: </para><itemizedlist><listitem><para>it's a <emphasis role="strong">nice</emphasis> way to help young people learn how to participate to FOSS projects </para></listitem><listitem><para>it's a <emphasis role="strong">fun</emphasis> way for us to become better at teaching technical things to newcomers  </para></listitem><listitem><para>it's a <emphasis role="strong">good</emphasis> way to attract young developers in our community </para></listitem><listitem><para>it's an <emphasis role="strong">effective</emphasis> way to get stuff done in a shorter time </para></listitem><listitem><para>it's a <emphasis role="strong">great</emphasis> way to make mentors and participants feel part of a community! </para></listitem></itemizedlist><para>Moreover, <emphasis role="strong">Google also gives additional Travel Funding to attend to events and conferences which are related with the task the student will be working on</emphasis>, which is a great way to meet ninux contributors! </para></section></section><section><title>General Guidelines for students</title><para>General guidelines for students that want to apply with us. </para><section><title>Get in touch &amp; introduce yourself</title><para>These ideas were contributed by ninux developers and constributors. If you wish to submit a proposal based on these ideas, you may wish to contact the developers on the <ulink url="http://ml.ninux.org/mailman/listinfo/ninux-dev">mailing list</ulink> or on our jabber chat <ulink url="mailto:ninux.org@chat.jabber.ninux.org">ninux.org@chat.jabber.ninux.org</ulink> and find out more about the particular suggestion you're looking at. </para><para>Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out. </para><para>When writing your proposal or asking for help from the ninux community don't assume people are familiar with the ideas here. The Ninux people are all volounteers and keep up with the activity of the community at their own pace. </para><para>Introducing yourself to the general <ulink url="http://ml.ninux.org/mailman/listinfo/ninux-dev">ninux-development mailing list</ulink> <emphasis role="strong">is a very good idea!</emphasis> </para><para>Coming often on our jabber chat <ulink url="mailto:ninux.org@chat.jabber.ninux.org">ninux.org@chat.jabber.ninux.org</ulink> <emphasis role="strong">is another very good idea</emphasis>. </para></section><section><title>Read the GSoC student manual</title><para>Participating in the GSoC is not a joke! It requires effort and motivation. </para><para>To be aware of what you are doing, please read the amazing <ulink url="https://flossmanuals.net/GSoCStudentGuide/">GSoC Student Guide</ulink>. </para></section><section><title>Student application template</title><itemizedlist><listitem><para>What is your full name? </para></listitem><listitem><para>Where are you from? </para></listitem><listitem><para>Where do you live? </para></listitem><listitem><para>What are you studying? </para></listitem><listitem><para>Which programming languages are you most comfortable with? </para></listitem><listitem><para>Have you ever contributed to any FLOSS project? </para></listitem><listitem><para>Do you have any other work experience that you can show? Github repositories, websites, ecc. </para></listitem><listitem><para>In what project idea are you interested? </para></listitem><listitem><para>Give a general description of how you are going to meet the expected results: describe milestones with dates and describe what you intend to achieve in each milestone </para></listitem><listitem><para>Why are you the right person for this task? </para></listitem><listitem><para>How many hours are you going to work on this a week? 10? 20? 30? 40? </para></listitem><listitem><para>Will you have exams during the summer? If yes, when? </para></listitem><listitem><para>Do you intend to do other paid work during the summer? If yes, in which period? </para></listitem><listitem><para>Are you comfortable working independently under a supervisor or mentor who might not be readily available via chat or phone 24 hours a day? Are you willing to put enough effort in acquiring the required skills you need to accomplish the project? </para></listitem><listitem><para>To what extent are you familiar with the software you're proposing to work with? Have you used it? Have you read the source? Have you modified the source? </para></listitem><listitem><para>Are you willing to use the additional travel funding offered by Google to attend events like the <ulink url="http://battlemesh.org/BattleMeshV8">Battlemesh</ulink> or the <ulink url="http://events.ccc.de/2015/02/10/chaos-communication-camp-2015-save-the-date/">Chaos Communication Camp</ulink>? </para></listitem><listitem><para>Do you have a public twitter or github profile? </para></listitem><listitem><para>Leave us your phone number and email address </para></listitem></itemizedlist></section><section><title>Hints</title><para><emphasis role="strong">Submit your proposal early</emphasis>: early submissions get more attention from developers for the simple fact that they have more time to dedicate to reading them. The more people see it, the more it'll get known. </para><para><emphasis role="strong">Do not leave it all to the last minute</emphasis>: while it is Google that is operating the webserver, it would be wise to expect a last-minute overload on the server. So, make sure you send your application before the final rush. Also, note that the applications submitted very late will get the least attention from mentors, so you may get a low vote because of that. </para><para><emphasis role="strong">Know what you are talking about</emphasis>: the last thing we need is for students to submit ideas that cannot be accomplished realistically or ideas that aren't even remotely related to Ninux. If your idea is unusual, be sure to explain why you have chosen Ninux to be your mentoring organisation. </para><para><emphasis role="strong">Aim wide</emphasis>: you can and should submit more than one proposal </para><para>The <ulink url="http://www.postgresql.org/developer/summerofcodeadvice/">PostgreSQL project has also released a list of hints</ulink> that you can take a look. </para></section></section><section><title>General Guidelines for mentors</title><para>General guidelines for mentors that want to propose a project idea. </para><section><title>Read the GSoC mentor manual</title><para>Mentoring a student for the GSoC is an amazing thing but it requires quite some deal of effort. </para><para>To be aware of what you are doing, please read the amazing <ulink url="https://flossmanuals.net/gsocmentoring/">GSoC Mentors Guide</ulink>. </para></section><section><title>Adding a proposal</title><para><inlinemediaobject><imageobject><imagedata depth="15" fileref="http://www.nnx.me//moin_static197/ninuxtheme02/img/alert.png" width="15"/></imageobject><textobject><phrase>/!\</phrase></textobject></inlinemediaobject> Follow the template of other proposals! </para><para><emphasis role="strong">Title</emphasis> </para><para><emphasis role="strong">Difficulty</emphasis> </para><para><emphasis role="strong">Required skills</emphasis> </para><para><emphasis role="strong">Brief explaination</emphasis> </para><para><emphasis role="strong">Expected result</emphasis> </para><para><emphasis role="strong">Mentor</emphasis> </para><para>When adding an idea to this section, please try to include the following data: </para><itemizedlist><listitem><para>if the application is not widely known, a description of what it does and where its code lives </para></listitem><listitem><para>a brief explanation </para></listitem><listitem><para>the expected results </para></listitem><listitem><para>required skills for working on your project </para></listitem><listitem><para>the difficulty level (beginner, intermediate, advanced) </para></listitem><listitem><para>if applicable, links to more information or discussions </para></listitem><listitem><para>mailing list or IRC channel for your application/library/module </para></listitem><listitem><para>your name and email address for contact (if you're willing to be a mentor) </para></listitem></itemizedlist><para><inlinemediaobject><imageobject><imagedata depth="15" fileref="http://www.nnx.me//moin_static197/ninuxtheme02/img/alert.png" width="15"/></imageobject><textobject><phrase>/!\</phrase></textobject></inlinemediaobject> <emphasis role="strong">If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.</emphasis> </para></section><section><title>Subscribing as mentor</title><para>To subscribe as mentor, you need to complete a few easy steps. </para><itemizedlist><listitem><para>Send an email to contatti [at] ninux [dot] org to let us know which project you want to mentor for </para></listitem><listitem><para>Log in to <ulink url="http://www.google-melange.com/gsoc/homepage/google/gsoc2015">Google Summer of Code 2015 Melange</ulink> </para></listitem><listitem><para>Apply as a mentor for Ninux </para></listitem><listitem><para>Subscribe to the <ulink url="http://ml.ninux.org/mailman/listinfo/ninux-dev">ninux-development mailing list</ulink> </para></listitem></itemizedlist></section></section><section><title>Ideas</title><para>Here is a list of our project ideas. </para><section><title>Enhanced crawling for the Ninuxoo search engine</title><para><inlinemediaobject><imageobject><imagedata fileref="http://www.nnx.me//GSoCIdeas2015?action=AttachFile&amp;do=get&amp;target=ninuxoo.png"/></imageobject><textobject><phrase>ninuxoo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Beginner developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>MySQL (for database queries) </para></listitem><listitem><para>FTP protocol general knowledge </para></listitem><listitem><para>HTTP protocol general knowledge </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/ninuxoo">Ninuxoo</ulink> is a search engine for SMB/CIFS and FTP shared folders. It is a popular service inside the <ulink url="http://ninux.org">ninux.org</ulink> community network and its source code can be found on github: <ulink url="https://github.com/ninuxorg/ninuxoo"/>. </para><para>Currently, the crawling of FTP shared folder is broken and we are aiming at adding new features to the crawler. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>A new version of ninuxoo with: </para><itemizedlist><listitem><para>fixed crawling of FTP shared folders </para></listitem><listitem><para>added possibility to crawl files shared through HTTP </para></listitem><listitem><para>the crawlers should be aware of possible loops caused by symlinks </para></listitem></itemizedlist><para><emphasis role="strong">Mentors</emphasis>: </para><para>Claudio Pisa, active ninux contributor and creator of ninuxoo. </para><para>Claudio Mignanti, ninux developer. </para><para>Social profiles: </para><para>Claudio Pisa: </para><itemizedlist><listitem><para><ulink url="https://twitter.com/cl4u2">@cl4u2</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/cl4u2">@cl4u2</ulink> on Github </para></listitem></itemizedlist><para>Claudio Mignanti: </para><itemizedlist><listitem><para><ulink url="https://github.com/claudyus">@claudyus</ulink> on Github </para></listitem></itemizedlist></section><section><title>Netdiff: add support for NetJSON</title><para><emphasis role="strong">Difficulty</emphasis>: Beginner/Intermediate developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>Routing protocols </para></listitem><listitem><para>JSON </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/netdiff">Netdiff</ulink> 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. </para><para>We want to be able to parse more routing protocols and convert their output to <ulink url="https://github.com/interop-dev/json-for-networks">NetJSON</ulink>, a draft standard JSON format we are working on with other community networks, more information here: <ulink url="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). </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>The goals of this project are the following (ordered by priority): </para><itemizedlist><listitem><para>design a class which is able to convert a networkx topology in a NetJSON topology </para></listitem><listitem><para>add a clean way to calculate differences between two networkx topologies </para></listitem><listitem><para>write a parser which understands the output of the OLSRd1 jsoninfo plugin and converts it to an internal networkx topology </para></listitem><listitem><para>write a parser which understand the output of the batman-advanced JSON topology tool (alfred / vis) and converts it to an internal networkx topology </para></listitem><listitem><para>write a parser which understands the output of the OLSRd2 JSON topology tool and converts it to an internal networkx topology </para></listitem><listitem><para>propose an experimental integration with <ulink url="https://github.com/ninuxorg/nodeshot">nodeshot</ulink>: read topology data and update the links in the database </para></listitem></itemizedlist><para>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. </para><para>At least 4 tasks out of 6 will need to be done in order to consider the project successful. </para><para><emphasis role="strong">Mentor</emphasis>: </para><para>Federico Capoano active ninux contributor. </para><para>Social profiles: </para><itemizedlist><listitem><para><ulink url="https://twitter.com/nemesisdesign">@nemesisdesign</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/nemesisdesign">@nemesisdesign</ulink> on Github </para></listitem></itemizedlist></section><section><title>Proxoo: distributed SMB/CIFS to HTTP proxy for ninuxoo</title><para><inlinemediaobject><imageobject><imagedata fileref="http://www.nnx.me//GSoCIdeas2015?action=AttachFile&amp;do=get&amp;target=ninuxoo.png"/></imageobject><textobject><phrase>ninuxoo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Intermediate developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>WSGI </para></listitem><listitem><para>CGI </para></listitem><listitem><para>Lua or shell scripting </para></listitem><listitem><para>Basic HTML </para></listitem><listitem><para>Basic security notions </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/ninuxoo">Ninuxoo</ulink> is a search engine for SMB/CIFS and FTP shared folders. It is a popular service inside the <ulink url="http://ninux.org">ninux.org</ulink> community network and its source code can be found here: <ulink url="https://github.com/ninuxorg/ninuxoo"/>. </para><para>Web browsers do not support the <emphasis role="strong">SMB/CIFS</emphasis> protocol natively, thus the files provided in the search results of ninuxoo cannot be accessed directly. Users must instead copy and paste the <emphasis role="strong">smb://</emphasis> URLs provided by the ninuxoo search results into other programs (typically file managers) on their systems. </para><para>To circunvent this problem we would like to develop <emphasis role="strong">Proxoo</emphasis>: 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), thus with different implementations (e.g. Python-WSGI, Bash-CGI). </para><para>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. </para><para>To achieve this goal: </para><itemizedlist><listitem><para>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. </para></listitem><listitem><para>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) </para></listitem></itemizedlist><para><emphasis role="strong">Expected result</emphasis>: </para><itemizedlist><listitem><para>a ninuxoo version that allows users to retrieve SMB/CIFS content through HTTP using their nearest Proxoo instance. Achieved through: </para><itemizedlist><listitem><para>a server-oriented Python-WSGI implementation of a SMB/CIFS to HTTP proxy (with input validation) </para></listitem><listitem><para>an <ulink url="http://www.nnx.me/GSoCIdeas2015/OpenWrt#">OpenWrt</ulink>-oriented CGI (written shell or lua) implementation of a SMB/CIFS to HTTP proxy (with input validation) </para></listitem><listitem><para>a web-page parsing module to retrieve the IP addresses of Proxoo deployment locations (Python) </para></listitem><listitem><para>integration in ninuxoo of the shortest-path module provided <ulink url="https://github.com/ninuxorg/misc_tools/tree/master/find_olsr_path">here</ulink> </para></listitem><listitem><para>modification of search result links so that these contain the URL of the Proxoo instance that is closest to the user </para></listitem></itemizedlist></listitem></itemizedlist><para><emphasis role="strong">Mentor</emphasis>: </para><para>Claudio Pisa, active ninux contributor and creator of ninuxoo. </para><para>Social profiles: </para><itemizedlist><listitem><para><ulink url="https://twitter.com/cl4u2">@cl4u2</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/cl4u2">@cl4u2</ulink> on Github </para></listitem></itemizedlist></section><section><title>Nodeshot: debian package generator</title><para><inlinemediaobject><imageobject><imagedata fileref="https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png"/></imageobject><textobject><phrase>https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Intermediate developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>Debian Linux </para></listitem><listitem><para>Django (minimum knowledge) </para></listitem><listitem><para>Fabric python library (optional) </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/nodeshot">Nodeshot</ulink> is a crowdsourcing platform for geographic data with some features that are specific for community networks. </para><para>You can see the development version in action in our <ulink url="http://ninux.nodeshot.org">experimental network map</ulink>. </para><para>Performing the <ulink url="http://nodeshot.readthedocs.org/en/latest/topics/manual_install.html">manual development install described in the documentation</ulink> is time consuming and often seen as serious barrier for new potential contributors. </para><para>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. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>We want to reach a point in which one can perform a basic installation of nodeshot on debian based systems by simply doing: </para><screen><![CDATA[wget <deb-package-url>
sudo dpkg -i <deb-package.deb>]]></screen><para>That command should replicate a result similar to what one would achieve by performing the following steps of the <ulink url="http://nodeshot.readthedocs.org/en/latest/topics/manual_install.html">manual install procedure</ulink>: </para><itemizedlist><listitem><para>install dependencies </para></listitem><listitem><para>create database </para></listitem><listitem><para>install python packages </para></listitem><listitem><para>project configuration </para></listitem></itemizedlist><para>In addition a daemon script to start/stop/restart the django development server also needs to be written. </para><para>The package generation must be automated, ideally using the fabric python library, a good example can be seen on the <ulink url="https://github.com/claudyus/LXC-Web-Panel/blob/master/fabfile.py">fabric debian package generator script of the LXC-web-panel project</ulink>. This kind of automation is crucial because core devs will have to release new packages at each new nodeshot release. </para><para>The debian package will also be automatically tested by a jenkins instance, the student will be helped in setting up this last task. </para><para><emphasis role="strong">Mentors</emphasis>: </para><para>Federico Capoano, nodeshot core developer and active ninux contributor. </para><para>Claudio Mignanti, ninux developer. </para><para>Social profiles: </para><para>Federico Capoano </para><itemizedlist><listitem><para><ulink url="https://twitter.com/nemesisdesign">@nemesisdesign</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/nemesisdesign">@nemesisdesign</ulink> on Github </para></listitem></itemizedlist><para>Claudio Mignanti: </para><itemizedlist><listitem><para><ulink url="https://github.com/claudyus">@claudyus</ulink> on Github </para></listitem></itemizedlist></section><section><title>Libre Mesh: OLSRd1 plugin</title><para><inlinemediaobject><imageobject><imagedata fileref="http://libre-mesh.org/attachments/download/27/libremesh.png"/></imageobject><textobject><phrase>http://libre-mesh.org/attachments/download/27/libremesh.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Intermediate developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Lua </para></listitem><listitem><para>OLSRd1 configuration </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para>The student will have to learn the <ulink url="http://libre-mesh.org/">Libre Mesh</ulink> modular structure and implement a lime-proto-olsrd module in order to configure <ulink url="http://www.olsr.org/">OLSRd</ulink> routing daemon and setup networking interfaces to keep packets flowing without breaking other protocols, the module will be written in <ulink url="http://www.lua.org/">Lua</ulink>, will have to be documented and be ready to be used in production before the end of the GSoC 2015. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>At the end of the GSoC, Libre-Mesh firmware should be capable of autoconfiguring OLSR mesh networks and interoperate seamlessy with already existent ninux OLSR network. </para><para><emphasis role="strong">Mentor</emphasis>: </para><para>Gioacchino Mazzurco, Libre Mesh core developer, ninux and guifi contributor. </para><para>Social profiles: </para><itemizedlist><listitem><para><ulink url="https://github.com/G10h4ck">@G10h4ck</ulink> on Github </para></listitem></itemizedlist></section><section><title>Libre Mesh: OLSRd2 plugin</title><para><inlinemediaobject><imageobject><imagedata fileref="http://libre-mesh.org/attachments/download/27/libremesh.png"/></imageobject><textobject><phrase>http://libre-mesh.org/attachments/download/27/libremesh.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Intermediate developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Lua </para></listitem><listitem><para>OLSRd2 configuration </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para>The student will have to learn the <ulink url="http://libre-mesh.org/">Libre Mesh</ulink> modular structure and implement a lime-proto-olsrd module in order to configure <ulink url="http://www.olsr.org/">OLSRd</ulink> routing daemon and setup networking interfaces to keep packets flowing without breaking other protocols, the module will be written in <ulink url="http://www.lua.org/">Lua</ulink>, will have to be documented and be ready to be used in production before the end of the GSoC 2015. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>At the end of the GSoC, Libre-Mesh firmware should be capable of autoconfiguring OLSRv2 mesh networks and permit to explore the capabilities of the new protocol. </para><para><emphasis role="strong">Mentor</emphasis>: </para><para>Gioacchino Mazzurco, Libre-Mesh core developer, ninux and guifi contributor. </para><para>Social profiles: </para><itemizedlist><listitem><para><ulink url="https://github.com/G10h4ck">@G10h4ck</ulink> on Github </para></listitem></itemizedlist></section><section><title>Nodeshot: Ansible playbook</title><para><inlinemediaobject><imageobject><imagedata fileref="https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png"/></imageobject><textobject><phrase>https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Advanced developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>Ansible </para></listitem><listitem><para>Linux </para></listitem><listitem><para>Debian </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/nodeshot">Nodeshot</ulink> is a crowdsourcing platform for geographic data with some features that are specific for community networks. </para><para>You can see the development version in action in our <ulink url="http://ninux.nodeshot.org">experimental network map</ulink>. </para><para>The current <ulink url="http://nodeshot.readthedocs.org/en/latest/topics/automated_install.html">automated install script for nodeshot</ulink> is implemented with the <ulink url="http://www.fabfile.org/">Fabric python library</ulink> and has several limitations. </para><para>We want to overcome the current limitations by porting the fabric script to a <emphasis role="strong"><ulink url="http://www.ansible.com/">Ansible</ulink></emphasis>, the popular configuration management tool written in Python. </para><para>The deploy procedure is fully described in the <ulink url="http://nodeshot.readthedocs.org/en/latest/topics/manual_install.html#production-instructions">&quot;Production Instructions&quot; section of the Nodeshot Manual Install guide</ulink>. </para><para>This project idea can potentially give a huge contribution toward the realization of a distributed architecture of one of Ninux's core services, the visual map of our network. </para><para>With the tools we currently have today, setting up a distributed cluster of nodeshot instances would be very hard to manage. If we had an ansible playbook though, things would become easier and also more interesting to potential volounteer sys admins. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>We expect the following fabfile: <ulink url="https://github.com/ninuxorg/nodeshot-fabfile"/> to be converted in an ansible playbook (we expect to publish it in a new repository in ninux Github organization). </para><para>The ansible playbook must support the configurable options supported in the fabfile and should mantain compatibility with (at least) <emphasis role="strong">Debian 7</emphasis> and <emphasis role="strong">Ubuntu 14 LTS</emphasis>. </para><para>The usage of the playbook will have to be documented in the <emphasis role="strong">README</emphasis> file. </para><para>The ansible playbook will need to be automatically tested by a jenkins instance, the student will be helped in setting up this last task. </para><para><emphasis role="strong">Mentor</emphasis>: </para><para>Federico Capoano, nodeshot core developer and active ninux contributor. </para><para>Claudio Mignanti, ninux developer </para><para>Social profiles: </para><para>Federico Capoano </para><itemizedlist><listitem><para><ulink url="https://twitter.com/nemesisdesign">@nemesisdesign</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/nemesisdesign">@nemesisdesign</ulink> on Github </para></listitem></itemizedlist><para>Claudio Mignanti </para><itemizedlist><listitem><para><ulink url="https://github.com/claudyus">@claudyus</ulink> on Github </para></listitem></itemizedlist></section><section><title>Nodeshot: performance improvements</title><para><inlinemediaobject><imageobject><imagedata fileref="https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png"/></imageobject><textobject><phrase>https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Advanced developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>Django </para></listitem><listitem><para>SQL </para></listitem><listitem><para>Javascript </para></listitem><listitem><para>Web application performance </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para><ulink url="https://github.com/ninuxorg/nodeshot">Nodeshot</ulink> is a crowdsourcing platform for geographic data with some features that are specific for community networks. </para><para>You can see the development version in action in our <ulink url="http://ninux.nodeshot.org">experimental network map</ulink>. </para><para>The current development version is not yet optimized for fast loading and there are several optimizations that can be done. </para><para>This project idea is about establishing a base line for measuring basic performance measueres and then optimize the bottlenecks. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>The student has to come up with a solution to solve the following issues: </para><itemizedlist><listitem><para>develop a test suite with basic performance measurements for the 5 most used pages </para></listitem><listitem><para>automatically export the result of each test in a format that can be easily represented with a graph </para></listitem><listitem><para>integrate <ulink url="https://github.com/cyberdelia/django-pipeline">django-pipeline</ulink> in nodeshot to minify and combine javascript and css </para></listitem><listitem><para>configure <ulink url="https://github.com/cyberdelia/django-pipeline">django-pipeline</ulink> to download external javascript libraries via bower </para></listitem><listitem><para>find a way to automatically generate compressed gzip versions of the combined and minified static assets </para></listitem><listitem><para>implement django caching for the 5 most used pages of nodeshot - caching must take in consideration user access levels </para></listitem><listitem><para>optimize slow queries when viable </para></listitem><listitem><para>implement django caching for complex queries </para></listitem><listitem><para>test <ulink url="https://github.com/gizmag/drf-ujson-renderer">Django Rest Framework UJSON Renderer</ulink> to see if there are performance gains </para></listitem><listitem><para>enable gzip compression of django responses </para></listitem><listitem><para>create a compressed version of the main GeoJSON response used by the UI, this involves modifying small parts of the UI too </para></listitem><listitem><para>implement <ulink url="https://github.com/ninuxorg/nodeshot/issues/120">Mozilla's Local Forage Javascript library in the frontend UI</ulink> </para></listitem></itemizedlist><para><emphasis role="strong">Mentors</emphasis>: </para><para>Claudio Mignanti, ninux developer. </para><para>Federico Capoano, nodeshot core developer and active ninux contributor. </para><para>Social profiles: </para><para>Claudio Mignanti: </para><itemizedlist><listitem><para><ulink url="https://github.com/claudyus">@claudyus</ulink> on Github </para></listitem></itemizedlist><para>Federico Capoano: </para><itemizedlist><listitem><para><ulink url="https://twitter.com/nemesisdesign">@nemesisdesign</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/nemesisdesign">@nemesisdesign</ulink> on Github </para></listitem></itemizedlist></section><section><title>Nodeshot: websockets</title><para><inlinemediaobject><imageobject><imagedata fileref="https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png"/></imageobject><textobject><phrase>https://raw.githubusercontent.com/ninuxorg/nodeshot/master/docs/topics/images/nodeshot-logo.png</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Difficulty</emphasis>: Advanced developer </para><para><emphasis role="strong">Required skills</emphasis>: </para><itemizedlist><listitem><para>Python </para></listitem><listitem><para>Django </para></listitem><listitem><para>Javascript </para></listitem></itemizedlist><para><emphasis role="strong">Brief explaination</emphasis>: </para><para>The <ulink url="https://github.com/ninuxorg/nodeshot/issues/116">current websocket implementation in nodeshot</ulink> is far from being production ready and has been infact disabled. </para><para><ulink url="http://www.nnx.me/GSoCIdeas2015/WebSocket#">WebSocket</ulink> will enable us to do very useful things like bidirectional communication between browsers and servers for real time notifications, analytics, events and so on. </para><para><emphasis role="strong">Expected result</emphasis>: </para><para>The student has to come up with a solution to solve the following issues: </para><itemizedlist><listitem><para>integrate <ulink url="https://github.com/jrief/django-websocket-redis">django-websocket-redis</ulink> in nodeshot </para></listitem><listitem><para>integrate the deployment instructions in the <ulink url="http://nodeshot.readthedocs.org/en/latest/topics/manual_install.html">nodeshot documentation</ulink> </para></listitem><listitem><para>implement a websocket mirror of the following API views: </para><itemizedlist><listitem><para>geojson node list </para></listitem><listitem><para>search API </para></listitem><listitem><para>notifications </para></listitem></itemizedlist></listitem><listitem><para>implement a way to send messages from the server to the browser when key events happen, so that the UI can update itself in realtime: </para><itemizedlist><listitem><para>a new notification has arrived </para></listitem><listitem><para>a new node has been added </para></listitem><listitem><para>a node has been deleted </para></listitem><listitem><para>a node has been changed </para></listitem></itemizedlist></listitem><listitem><para>implement at least 3 of the previous websockets features in the UI </para></listitem></itemizedlist><para>All the new implementations will need to be properly unit tested. </para><para><emphasis role="strong">Mentors</emphasis>: </para><para>Federico Capoano, nodeshot core developer and active ninux contributor. </para><para>Claudio Mignanti, ninux developer. </para><para>Social profiles: </para><para>Federico Capoano: </para><itemizedlist><listitem><para><ulink url="https://twitter.com/nemesisdesign">@nemesisdesign</ulink> on Twitter </para></listitem><listitem><para><ulink url="https://github.com/nemesisdesign">@nemesisdesign</ulink> on Github </para></listitem></itemizedlist><para>Claudio Mignanti: </para><itemizedlist><listitem><para><ulink url="https://github.com/claudyus">@claudyus</ulink> on Github </para></listitem></itemizedlist></section></section></article>