Library to export/import public datasets to Retroshare network

Hi all!
My name is Joan Pascual and I’m going to develop Library to export/import public datasets to Retroshare network.
RetroShare is a distributed F2F network that is in my daily use to share content or chat with friends. I like a lot the project and after the creation of the Retroshare JSON API I start to develop the RetroShare Web Bridges (https://gitlab.com/r3sistance/retroshare-web-bridges). And now, with GSoC, I would like to participate a little more with RetroShare project and its community.
The idea is to import public datasets into RetroShare network such as Wikipedia, WordPress or other stuff in order to populate RetroShare network with this data, creating distributed repository of all this information. 
Following with this, I’ll create a series of scripts that will help to import and update this information, so anyone can publish at the same time on RetroShare network or over a centralized service, creating some kind of bridge.
I’m going to investigate Doxygen, a part of the framework that compiles the JSON API endpoints for RetroShare, and I’ll will make the needed pull requests to expose new parts of the API that actually are not supported and could be needed for the libraries. Also maybe is possible to use Doxygen to create the library in python that will interact with API endpoints.
The whole project will be written in Python except when a new API endpoint should be exposed that will be in C++ and Doxygen (languages used by libretroshare), but this will be mostly adding inline documentation with the special @jsonapi{development} annotation.
At the end, it will be a reference library to interact with RS JSON API that will engage people to create apps over RetriSshare network. Also, taking advantage of this library, some public datasets will be imported to RS network.
I’m very happy to have been selected this year as GSoC student for RetroShare, a program that is in my daily life. So thanks to GSoC team, Freifunk, RetroShare developers and of course to my Mentors! It will be an awesome experience! 


RetroShare is a distributed F2F network that is in my daily use to share content or chat with friends. I like a lot the project and after the creation of the Retroshare JSON API I start to develop the RetroShare Web Bridges (https://gitlab.com/r3sistance/retroshare-web-bridges). And now, with GSoC, I would like to participate a little more with RetroShare project and its community.
The idea is to import public datasets into RetroShare network such as Wikipedia, WordPress or other stuff in order to populate RetroShare network with this data, creating distributed repository of all this information. 
Following with this, I’ll create a series of scripts that will help to import and update this information, so anyone can publish at the same time on RetroShare network or over a centralized service, creating some kind of bridge.
I’m going to investigate Doxygen, a part of the framework that compiles the JSON API endpoints for RetroShare, and I’ll will make the needed pull requests to expose new parts of the API that actually are not supported and could be needed for the libraries. Also maybe is possible to use Doxygen to create the library in python that will interact with API endpoints.
The whole project will be written in Python except when a new API endpoint should be exposed that will be in C++ and Doxygen (languages used by libretroshare), but this will be mostly adding inline documentation with the special @jsonapi{development} annotation.
At the end, it will be a reference library to interact with RS JSON API that will engage people to create apps over RetriSshare network. Also, taking advantage of this library, some public datasets will be imported to RS network.
I’m very happy to have been selected this year as GSoC student for RetroShare, a program that is in my daily life. So thanks to GSoC team, Freifunk, RetroShare developers and of course to my Mentors! It will be an awesome experience! 

GSoC 2019 – Unit testing LibreMesh

Project introduction

LibreMesh as an embedded Operating System depends a lot on the underlying hardware. But, there are some parts of the code that don’t have that dependency, neither they depend on the network, or any particular state that the device could have. Also, there are many other cases were the states that one would like to achieve in order to reproduce a situation are complex or impractical to reproduce with hardware. In this project I will integrate a testing and mocking framework to LibreMesh and provide the functionality needed to easily write new tests for actual or new code. Also I will add tests for the core functions of LibreMesh.

Motivation

Unit testing the LibreMesh code-base will greatly help on approaching this two situations, and help having a much more robust solution for the communities it serves. Having automated unit testing integration test may improve the quality, the development speed, and shorten the release cycles of the LibreMesh software.

Also, having tests that safeguard the core functionality may allow new developers to engage with the code-base with more confidence.

For some developers (like me) having the option of doing test driven development greatly enhance the development experience. For reviewers it is also easier to understand and maintain code that has unit tests.

About me

I am Santiago Piccinini an Electronic Engineering student of University of Buenos Aires, Argentina. In my studies I focused on wireless, communication protocols, signal analysis, electronics prototyping and software development. I am currently finishing my master thesis.

I have been involved in different projects related to Community Networks, lately focused in the LibreRouter project.

This is my first GSoC, I wanted to participate for a long time!

Deliverables

  • Integrate unit testing and mocking framework to LibreMesh, that would allow the code-base to be tested with the specific lua version of the target system
  • Integrate tests with existing testing infrastructure (Travis CI)
  • Incorporate coverage reports and increase the coverage level of LibreMesh code
  • Proofread report of LibreMesh code testability, particularly what needs to be mocked of the code in order to be tested, and a rough idea of the complexity of the refactor needed.
  • At least one pull request of a refactor task for different levels of complexity as examples for the community to follow.
  • Try to write mocks for common functionality, for example:
    • Iwinfo
    • Nixio.fs, etc
    • Uci, lime.config
  • Write tests for some core functionality of lime-system package.
  • Refactor some LibreMesh code if needed for easy testing.
  • Add a device emulation module that provides specific mocking of device details (iwinfo, /sys/class/iee80211/, etc) to allow writing integration tests.

Next steps

I will start doing research about open-source Lua unit testing and mocking frameworks starting from this blog post https://blog.freifunk.net/2017/06/29/tdd-unit-testing-lua-openwrtlede-case/ from @nicopace. Next I will discuss with mentors about pros/cons of each framework and will propose a reasonable architectural solution to integrate this framework with some testing code as example and discuss with LibreMesh developers. If everything goes smooth then I will integrate it with Travis CI.

Retroshare for Android

Introduction

Retroshare, a decentralized social networking platform, is available only from desktops, so its use is limited to a narrow audience. In the past, an attempt was made to create a mobile application, but the project was abandoned. The aim of this GSoC project is to create a Retroshare mobile client from scratch with an emphasis on the chat feature. In order to make it a fully functional communicator, the Retroshare library will be extended as well.

About Me

My name is Konrad, I am first year undergraduate student in Computer Science at AGH University of Science and Technology in Cracow, Poland. In the past I have been experimenting with creating modern desktop client for Retroshare. This is my first time as a GSoC participant.

Project Overview

This project have 4 major milestones:

  1. Logo redesing
  2. UI/UX design of mobile app
  3. Implementation of frontend design
  4. Redesign and implementation of chat backend in libretroshare

The planned result of my work should be a user-friendly communicator with the following functions:

a)     Core functionality:
o   Creating new account
o   Importing existing accounts from other devices
o   Creating new identity
o   Sending plain text in group chat and chat between GXS identities
o   Adding/Removing GXS identities to/from your list of friends  
b)     Feature enhancement:
o   Adding profile picture
o   Changing status (Active, Inactive)
o   Switching between identities
o   Sending in chat: emojis,  files and pictures

To achieve this, as part of my work will be the enhancement of the libretroshare chat to include asynchronous message sending and storage of message history.

Community Bonding Period

This period of time I used to explore the idea of a new logo and UI application. The proposal for a new logo retains the current spirit, but with a clear emphasis on modernity.

The purpose of the application is simple, to give the possibility of secure non-centralized communication to people, therefore the proposed design is minimalistic and focuses only on the basic functionality. The proposed design can be viewed at the following address: https://vimeo.com/338567162

Best of luck to fellow GSoC students,
Konrad Dębiec

A new Web Interface for Retroshare

The Retroshare communication platform already has a preliminary web interface. But it is severely limited, supports only the basic of interactions with the client, and does not have the nice design and beautiful visual interface that the modern web platform makes possible. This GSoC project will be about creating an entirely new web interface for Retroshare using it’s JSON API to handle all communication between the WebUI and the client.

About Me

My name is Saud, I’m a third-year undergraduate student in Computer Science at Alliance University, Bangalore, India. This is my first time participating as a student in GSoC as well as my first time being involved in the Freifunk community.

Project briefing

The Web Interface is planned to be made in such a way that all communication with the client happens through the JSON API. As such, It will be made using JavaScript.

The Mithril web framework has been chosen chosen for designing the front-end as well as handling the API calls. Mithril is a very lightweight and fast client-side framework and is especially used for building single-page applications. It also provides neatly integrated and customizable XHR capabilities out of the box.

The old Web UI communicates with the client app entirely through the deprecated libresapi. The new UI will instead be using the JSON API for communication. The JSON API has already been implemented using Rapidjson. This makes it relatively easier to add new API headers to extend the interface and support more functionality.

Apart from this, one more important thing to keep in mind is that the WebUI is planned to replace the old interface and hopefully be shipped along with the main Retroshare app. And so it would make sense to keep dependencies to a minimum. This app will have a development process different from typical modern web dev practices. This app will not have dependencies(such as Nodejs), making it lightweight and able to easily integrate into the parent app’s build process.

A minimal working example has been implemented and can be seen in the source page.
Project source: github.com/RetroShare/RSNewWebUI
My fork: github.com/rottencandy/RSNewWebUI

Overview

A brief overview of the main goals to be expected from the project:

  • A “tab” system to display different sections of the Retroshare interface.
  • Detailed and asynchronously updating tabs about file transfers, downloads, adding peers, internal statistics, etc.
  • Options in the client app to enable and launch the WebUI.
  • A config panel with detailed frames for viewing and changing as many configuration options as possible.
  • Styled UI using CSS for a more sleek and beautiful look that adds to the visual appeal.
  • Replace the old WebUI and disable libresapi on merge.

The web interface would be extremely beneficial to the community, allowing Retroshare to leverage the flexibility and approachability of the web. It could be used by people who desire an alternate interface to Retroshare, for example, when using the nogui version, or due to the traditional GUI client being too demanding on low spec hardware, or due to the OS having problems with Qt, etc.

Looking forward to an exciting summer working on this project. I will post more updates soon.

conTest – A wireless testbed

Hi,my name is Stefan and I am a second time GSoC student. I participated in 2017 for Freifunk and
helped to improve the power quality monitoring tool PowQuty. I am currently doing my master in
“Information and communication technologies” This time I want provide a testing framework for wireless
resource allocation algorithms like Minstrel and Minstrel-Blues. It’s called conTest.

The Idea

ConTest aims to provide a reliable environment to create and evaluate repeatable test with wireless
equipment. It integrates the control software fur digital attenuators from Vaunix. To compare changes in
algorithm it is important to recreate the same test environment for the second experiment you run the
first experiment in. Only if both experiments are run under similar conditions, results are reliable.
ConTest will allow the automated collection auf files like rc_stats and ani log files.

The Setup

Therefore I will setup an example testbed composed of two APU boards equipped with ath9k a/n cards and
running OpenWrt. The SMA connectors of the routers are connected with an attenuator over coaxial cables.
The attenuators are currently controlled by a raspberry pi. In addition the Pi also collects and stores
all the files.
The use of one bus on the pi for Ethernet and USB could prove as bottleneck, when data is written to an
USB device and frequent changes have to be send to the attenuators. One of the APU boards will act as an
access point and provide a WLAN the other access point connects to as a client.

For traffic generation I want to use iperf3 and monitor the resulting traffic on both routers on a monitor
interface with tcpdump. Some files (like rc_stats for Minstrel) provide relevant information about the
algorithm. I want to collect the relevant files, but keep the decision which files to collect and the
frequency of the collection in the hand of the user.Therefore conTest should be configured from a config
file. A schematic of the testbed can be seen below.

The Results

To make the software as usable as possible I will provide an OpenWrt package for the Vaunix controll
software and the test framework. To ease the testing of changes or new algorithms, conTest will
feature options for automated data preprocessing and representation of the collected data.

If you have additional ideas, would should definetly be in conTest or more questions feel free to
comment or contact me.


Best regards
Stefan