LibreMesh Pirania UI – Design Proposal

Hello Freifunk community šŸ™‚

After having spent several weeks inquiring into the LibreMesh project, I have continued working with my mentors Santiago and GermƔn to think about some improvements for the Pirania plugin. For this reason, the main idea of this post is to expose the functionalities that we have thought about implementing to improve this Captive Portal for Community Networks.

Also, after having been chatting and reading about the needs that arise in the communities to adopt the use of the captive portal in the LimeApp, we defined that some of the functionalities to implement in the Pirania administration interface are:

For the creation of vouchers:

– Description field, to identify who the voucher is for or what it is used for.

– Choice of the duration time since the voucher activation.

– Choice of voucher permanence, to establish whether a voucher can be used for “unlimited” time or not.

– Possibility to choose how many vouchers to create.

– Possibility to edit a voucher created to correct any typo in the description or to “delete” a voucher so that it can no longer be used.

– And set the possibility of choose some other advanced options such as setting an expiration date to activate the vouchers.

– At the end of the voucher creation, generate a metadata page to deliver the voucher passwords and other data of interest such as the description and the voucher creation date.

In the following images you can see some of the interfaces I have designed for this project:

Voucher creation screen.

Metadata creation screen.

For Voucher Administration:

In a general administration page, to be able to have some functionalities such as:

– Establish a search field for vouchers.

– View the last vouchers created.

– View active vouchers.

– View vouchers that are in “Permanent” or “Not Permanent” status.

– View vouchers that were created from the current node.

An example for voucher administration:

Vouchers list interface.

These interfaces were designed in Figma, so they can be modified in the future and the final implementation.

The next challenge is to start writing the tests of the proposed interfaces in a Test Driven Development framework to later implement the functionalities in the LimeApp.

Thanks for reading,

Angie.

[GSoC’21] JSON Schema WebUI Generator – II

Prologue

Welcome back!, This blog is for the first evaluation of the project.

Recap

In the prev section, we saw a viable way-out for the inconsistency of the generator tool for the latest version of the schema(2020-12) by mentioning some frameworks and also some targets.

Frameworks Review

I have tested the frameworks with the draft 7 version of the schema and I evaluated the framework by noting down the pros and cons of the results by each framework.

  • UI schema for react: This framework supports very advanced features of the schema, but has less UI integration. Also the framework supports the 2019-09 version of the schema but sadly UI schema cannot be segregated from our original JSON schema.
  • React JSON schema forms: This framework supports basic features of the schema and also has good UI customization, but has less integration of validation UI.
  • Restspace schema forms: This framework supports basic features of schema, but misses proper documentation.
  • JSONForms (eclipse source): This framework supports basic features of the schema and also has good UI customization with limited options.

A full document of the pros and cons of the frameworks can be found here.

Summary

By considering all the pros and cons of each framework, my mentor Andi and I have decided to work on with JSONForms (eclipse source).

Ongoing Status

I rewrote the schema for the API generator tool to the draft 7 version of JSON schema also I have added formats to the schema. And generated the forms from the schema. I have been using React library (JSONForms) to generate the forms. Also, I developed the UI schema which is required to generate the form.

I have rendered the form, and also the bounded data of the form, which is the current data of the in the form and will be updated on change of the form data. Also, I have rendered the validations errors to show all the validation errors at one place before and after submission of the form.

Validation and Submission.

The JSONForms only emits errors through an event. So I have added a state to track the errors emitted by the event and on the event emit I recorded the errors into the state.

And for the submission of form we have to consider there are no recorded errors and the form data should not be empty because I have recorded errors into state only if the forms data is not empty. Errors are emitted by the event even before starting to fill the form. By validating all this checks, I have generated the output JSON file.

Loading data

For the testing purposes, I have added a button to load the weimarnetz API file data into the forms. I have fetched the ffSummarizedDir.json file from api.feifunk.net which consisted of all the communities API file data and rendered all the communities into a select field. So then I can add a on change event to load the data into the form.

References

  • A full document of the pros and cons of the frameworks can be found here.
  • A live development site can be found here.
  • The GitHub repository link is here.

Accomplished Targets

  • Developing the Schema to the latest version (taking draft 7 as base version).
  • Choosing a Frameworks (Chosen JSONForms).
  • Integrating the updated schema with the framework to generate the forms.
  • Examining the forms (validating input data and functionality of the forms).

Final goals

  • Try creating a custom renderer for location (lon,lat) picker.
  • Upgrading all the dependent tools.(API viewer, Travis job validator)
  • Testing all the tools and fixing bugs if any found.

~ Shiva Shankar Genji aka sh15h4nk

[GSoC’21] OpenWrt Device Page

‘Tis the week 5! šŸŽŠ

Greetings! I am Aditi, and I am at the end of fifth week of my ten week “summer of code”.

Experience So Far

The first five weeks have been really amazing. When I started working on the device page project, it seemed as if there was a clear set of tasks that need to be done. Everything felt pretty straight-forward!

But while working hands-on, I realised I’ve learnt so much along the way. My first task of the project included improving the device data form, allowing easier input of data.

The form is designed in React with the help of React-JSON-Schema-Form. The hardest part of form implementation was to use Custom Components to facilitate onChange events. Due to asynchronous behaviour of React.useState(), it was challenging to manage form states. The project allowed me to do a plethora of exploration on React Hooks. In addition to it, it compelled me to read extensive documentations, find out a lot of ways in which React Hooks don’t work fine. To quote, Thomas A. Edison,

Thomas Edison - 10,000 Ways That Won't Work - Due

In addition to that, the project gave me an opportunity to engage with open source communities, raise some issues, discuss it with maintainers!

Progress

The project essentially involved two tasks:

  1. Creation of input form from a JSON Schema to simplify the process of adding device metadata to the github repository.
  2. After creation of input form, the second step is to render the device pages with search masks, allowing users to search specifically for devices with certain features like USB port, WiFi6 etc.

The step one of the project is done i.e., creation of an input form: with the autocomplete functionality and saving the device data in form of YAML, A demo of which can be seen here:

Now, after the completion of step 1, for the next few weeks, we’ll be focusing on working on rendering of device data for device pages.

Looking forward to another half full of learnings and new experiences! šŸŽ‰

GSoC 2021 – OpenWRT PPA update for first evaluation

Hey everyone , hope you all are doing fine.

As we have come a long way from the start of the program, here I have compiled everything that I done till date regarding my project.

It has been rightly said that open source development is a continuous process and I for one have been learning a lot with the help of my mentor. Some of my learnings are :-

  • Learnt more about the SDK provided by OpenWRT.
  • Setting up of FTP servers
  • Learnt more about Docker
  • Explored K3d as well as K3s.
  • Setting up local registries ………………………… and may more.

Current Status & Workaround

In order to get started with the project , you would be required to have some basic setup and configuration. For this one can run the following :-

> chmod +x ./setup.sh
> ./setup.sh

This will configure k8s cluster and setup local registry . Then you can start your flask web server which looks like below :

Starting the project required understanding all the process that goes into successfully creating packages and targets from given files and configuration. In order to achieve that, the process I followed was :-

  • Updating feeds.default.conf to locally stream its feeds from local folder
  • Running the update and install script for local feed.
  • Finally creating packages and targets by running make.

The run.sh script is invoked when the user provides with repo-url (contents of which are cloned and then mounted to local feeds folder on container of neelaksh1/custom-owrtppa )

At present manual run of the above process needs to be done on bash-shell of the running container.

After the packages and targets are generated, we can expose it to the outside world by running ftp server using neelaksh1/custom-ftp .

For that we can use htp.sh script which will be copying the generated bin/ folder and mounting it on the ftp container from the sdk container.

We can access ftp://localhost/ on our browser, which will look like below :-

Final Thoughts

The current project meets half of the promised work. It still is under development. Some of the stuff I would be working on in the upcoming days are :

  • Improving Front-End
  • Having provision for incremental builds, wherein the user can change his/her source multiple times for the same running container.
  • Working on running the SDK scripts automatically without the need for running them manually on the bash-shell
  • Creating deployment and services for the exposing final build packages and targets for the world.

Repository Link

The work is being updated on OpenWRT_PPA in the dev branch.

[GSoC’21] RetroShare Mobile

About Me :

Hi there !šŸ‘‹

I am Avinash Kumar an undergraduate student of Indian Institute of Technology, BHU. As coming from the Tech-Field, I am using lot of open source software in day to day life. That always fascinate me towards open source and always wanted to be the part of open source community. Finally, I got a chance to work with great open source community.

About Retroshare :

RetroShare provides a decentralized, encrypted connection with maximum security between nodes where they can chat, share files, mail, etc. Retroshare uses GXS (Generic eXchange System) that provides Asynchronous distribution, authentication, privacy, security of generic data.

About Retroshare Mobile Project :

RetroShare Mobile is the android app which provides features of RetroShare using retroshare json api. RetroShare Mobile depends upon the retroshare_service app that creates a local environment inside app and provides all the retroshare json api. This project was initiated in GSoC’19 and added some features of RetroShare at that time. Techstack : flutter.

GOALS :

As I mentioned above this app was made in GSoC’19, there are lot of improvements is needed inside the app like :

  • Upgrading app with new version of flutter
  • Bundling of retroshare_service app inside the Retroshare Mobile using QT dependencies.
  • Adding Methode channel which helps to start, stop and restart the retroshare_service apk.
  • Solving bugs.
  • Working on state management tool.
  • Adding forums and circle feature of RetroShare.

The first week of GSoC :

I am working according to the timeline that i proposed in my proposal. I have integrated retroshare service apk inside the Retroshare Mobile using Qt android dependencies and also added Methode channel code that will help to start, restart and stop the retroshare_services from the flutter. Currently, I am working on upgrading the app with newer version of flutter and solving bugs that are available on the app.

PR link : https://github.com/RetroShare/retroshare-mobile/pulls

RetroShare Mobile Repository link : https://github.com/RetroShare/retroshare-mobile

It has been quite a learning experience and I am looking forward to achieving more amazing things this summer with Freifunk! šŸŽ‰

[GSOCā€™21] Radio Ressource Management with IEEE 802.11v

The goal of this project is to create a light-weight user-space daemon to enables IEEE 802.11v client handovers between OpenWrt APs.

About me

My name is Valerius Begau and IĀ“m in my second year studying Bachelor of Internet-Technology and Applications at the University of Applied Sciences Nordhausen (Germany). I’m a big fan of open source because I think it’s a quicker and more efficient way to solve a problem. I am very happy to be part of the GSoC 2021 and hope to work together well.

Freifunk Client Steering (ff_steer)

Current Access network lack fast client handovers and roaming. Lately the client handover daemon ā€œusteerā€ was released and focuses on none-standard client handovers by disassociating client and manage an intra AP communication to enable roaming. More recently the DAWN project uses a decentralized WiFi controller approach to disconnect clients based on RSSI measurements and statistics. Apart from this the IEEE 802.11v amendment is very promising. It allows a better handover of 802.11v enabled clients between APs. Instead of disassociating, the client can be guided to the next AP using a BSS TMR frames.

The procedure

  1. distribute the neighbor hearing map between relevant WiFi APs within a L2 domain
  2. manage client roaming with a new OpenWrt UBUS based interface
  3. validate and evaluate ff_steer with experiments

current status

I must say to my regret that due to many exams at the university I could not finish the project in the prescribed period. However, since I have posted my thoughts and ideas for implementation here, someone who is interested in this is welcome to pursue this further.

You can find my approach to Client Capability Measurement here

Freifunk Digital Twin – GSoC 2021

Hey fellas! āœŒļø
My name is Paul and this summer im going to work on the Freifunk-GSoC Project: Freifunk Digital Twin – test on your virtual mesh before going productive.

About me

My name is Paul Schreiber and iĀ“m in my third year studying Bachelor of Internet-Technology an Applications at the University of Applied Sciences Nordhausen (Germany). IĀ“ve been using Open Source content since the first day of my studies and i really appreciate that there are so many people who love to share their code and applications to all the others. I always wanted to give something back to the community but i never had time to do so. Now iĀ“m lucky to participate at the GSoC 2021 and spend my summer on Open Source work.

Why this Project?

IĀ“ve grown up in an rural area in Thuringia and we always struggled to get a proper, affordable internet connection. The wired (DSL) connection was always slow and the 4G alternative was pricey and the data volume is limited. Luckily though, there are non-profit organizations who provide fast and affordable internet access to all of itĀ“s members.
So when i heard about this project, i wanted to contribute to the Freifunk community as well as the Evernet community.

Evernet

Evernet is a community based rural mesh network based on Freifunk principles organizes as a cooperative since 2008. Across five villages based in Thuringia/Germany, the Evernet community network consists of 110 participating households that run an OpenWrt based Freifunk mesh IEEE 802.11n,ac node on their rooftops and several OpenWrt based access points within the house as access network. The Evernet core network is build on a dedicated backbone infrastructure (5GHz, 24GHz & 60GHz P2P links) between mesh nodes to increase the overall performance.

Motivation

The Evernet – Freifunk mesh is driven by a strong technical networking team. It is focused on a constant maintained network infrastructure and OpenWrt software state following current trunk. The maxim to keep the mesh as fast as radio technologies evolves does involve a cyclic upgrade and update process. Currently this includes just a smoke test with a set of targets placed on a desktop. They follow the pace of OpenWrt trunk development with the goal and commitment to help finding and fixing kernel/driver/config issues and bugs. Especially those that appear on their Freifunk mesh routers while transmitting real WiFi user traffic do lack efficient tools for testing and troubleshooting before going productive with a new Freifunk OpenWrt image.

Goal

Transform the real topology with all of itĀ“s devices and routes into a virtual (digital) twin with which you can perform test and firmware upgrades to ensure full functionality before testing in productive environment.

What we have done so far

We discussed and developed a structure for the project with several milestones to achieve. After that, i gathered information about related work and evaluated whether they are relevant/suitable for this project. IĀ“ve also set up a test environment, tested OpenWrt with Qemu and several management tools.

WhatĀ“s coming next?

  • determine a management tool for 100+ VMĀ“s and OpenWrt Devices
  • figure out how to fetch and prepare topology information from routing daemons

See you next time with new advances about the project! šŸ˜Š

Thank you for reading.
Paul āœļø

[GSOC’21] JSON Schema WEBUI Generator

Prologue

Hello there, Major objective of this project is to update the JSON schema of the API generator tool and other tools to the latest version (2020-12 not perfectly sure) and integrate the schema with a WebUI generator framework to generate HTML forms.

Prior

Currently, JSON Forms is being used to generate the forms from a JSON Schema of version draft 3 for the API and other tools.

Here is the form(API Generator) generated by the JSON Forms, Which currently uses JSON Schema of version draft 3 to generate the forms.

This API generator simply generates a JSON file for the API.

This also has several other fields, which contains specified data about the community.

Discrepancy

As the JSON schema versions have been updated to 2020 – 12, but the current schema of the API and other tools is still at version draft 3. Updating the schema to the latest version is no such big deal. but there is an inconsistency with the JSON Forms as it only supports up to the draft version 3 of JSON Schema.

Viable Way-out

In order to update the schema to the latest version, I have to find a WEBUI generator framework or tool that generates HTML forms from the latest version of the JSON schema.

But Unfortunately, there is no tool or framework that generates forms from the latest schema version 2020-12.
As it is officially mentioned here. Then I had to limit myself to the previous versions, so my mentor Andi suggested choosing draft 7 as our base version for our tests and implementations.
Then I had to choose a framework that supports version draft 7 and above so that we can update the schema to higher versions in the future by considering the support and compatibility of the WEBUI generator.

Frameworks

I have chosen several frameworks based on the version support and compatibility of the frameworks to integrate the schema and test out the results.

UI Schema for React

The first framework I want to try out is UI Schema for React. because the official documentation of the JSON schema states that, this framework supports the most recent version of schema draft(2019-09) but with limitations.

Apart from this, it has this pretty decent documentation here.

React JSON Schema Forms (mozilla)

Next, I have this, while testing on the playground demo, This doesn’t support $ref. But yet I want to give it a try. Its documentation is here. It seems this has some limitations.

Restspace Schema Form (MIT)

This is something cool, This doesn’t depend on the versions of the schema but this depends on the features of the schema. All the supported features are here. As I see It supports everything, which might be in our schema, and I could not able to find good documentation for this framework yet.

JSONForms (jsonforms.io) (EclipseSource)

This supports version draft 7 of the JSON schema. It has documentation here. I see this is an extension to the current JSON Forms used by the API and other tools.

Targets

  • Developing the Schema to the latest version (taking draft 7 as base version).
  • Choosing a Frameworks (mostly UI Schema for React).
  • Integrating the updated schema with the framework to generate the forms.
  • Examining the forms (validating input data and functionality of the forms).
  • Try using a higher version of schema, and test out all the functionality.
  • Finding and resolving the bugs.
  • Updating all the tools (using the schema).
  • Final testing for all the tools using new generator and updated schema and resolving bugs if any.

~ Shiva Shankar Genji aka sh15h4nk

OpenWrt Device Page – GSoC 2021

Greetings everyone! šŸŽ‰

I am Aditi. And this summer I will be working on the project “OpenWrt Device Pages”. In this blog post I’d like to talk a little about me, my project and my first week!

About me

Hey!!šŸ‘‹
I am Aditi Singh, a Computer Science student from India. I have been studying programming since past 3 years.
After a little exploration, finally, out of so many appealing domains, I found the one for me – Web Development.
I’ve been working on web development for past 6 months. In January, I heard about open source from a college senior. The idea of writing hundreds of lines of code which can be used by thousands of people piqued my interest. The best part being people did it just for their love of coding and contributing to something bigger than themselves. So after a little bit of struggling with my impostor syndrome for a while, I gathered up the courage to start contributing to open source.

Open Source can be a little overwhelming to begin with but then it turned out to be an absolutely amazing experience. Never ever before I’ve had such a supportive and encouraging environment.
Later in March I found out about GSoC, and through GSoC came across – Freifunk. After surfing through hundreds of projects OpenWrt device page was that one idea that sounded fascinating to me and was closely related to my domain.

About OpenWrt

The OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable file-system with package management. It allows you to customise the device through the use of packages to suit any application. Hence, freeing it’s users from application selection and configuration provided by the vendor For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customisation, to use the device in ways never envisioned.

About OpenWrt Device Page Project

The main aim of OpenWrt Device Page Project is to create an overview of OpenWrt supported devices to simplify user choice of acquiring new devices. The goal is to evaluate the user needs and plan new device pages based on the user requirements to make it convenient for users to select right devices. Since, OpenWrt has a lot of data it becomes overwhelming for new users to find suitable devices that caters to their needs. So,to simplify the project can be broken down into two major sub-tasks:

  1. Creation of input form from a JSON Schema to simplify the process of adding device metadata to the github repository.
  2. After creation of input form, the second step is to render the device pages with search masks, allowing users to search specifically for devices with certain features like USB port, WiFi6 etc.

The first week of GSoC

After the community bonding period, we have been working on creating atomic tasks for the project along with the mentors with weekly milestones. The first task is to create a pretty input form to store device metadata into a github repository.
We have a basic input form ready from the JSON Schema implemented using React JSON Schema form. The RJSF community has been helpful in providing assistance to desired functionality. Upcoming major tasks include, modifying the input form to allow auto-fill and info button functionalities.

Apart from this I had to get an overview of Jekyll/Hugo functionality, understanding how YAML works to help with the project later on!

It has been quite a learning experience and I am looking forward to achieving more amazing things this summer with Freifunk! šŸŽ‰

Android native app for network selection capability in LibreMesh routers – Overview

Hello! I’m TomĆ”s Assenza. I work on the “Android native app for network selection capability in LibreMesh routers” project with the Altermundi association. I’ll talk about what Libremesh is and why we want to make an app for network selection.

Introduction

LibreMesh is an operating system that works on some Tp-Link routers and LibreRouters, and It’s a practical solution to provide networks to social organizations. These social organizations usually give access to the web to users that only had mobile data networks before. The most practical object that they generally use is a smartphone to connect to the LibreMesh routers.

The issue

Android usually does a “network switch” between Wi-Fi and mobile data considering if the first one provides or not the Internet. The problem with this feature is that if the users have an internet problem, they would not have the possibility to access some LibreMesh internal address to know the trouble and report it to the organization.

We have the idea to solve this problem through an application with the capability To select from which network it sends and receives data from, making possible the connection between the smartphone and the router even when there isn’t an Internet connection.

Who am I? What are my motivations for the project?

I’m a System Engineering student at the Santa Fe Regional of the National Technological University (Universidad TecnolĆ³gica Nacional – Facultad Regional Santa Fe). I work as a young teacher of the subject “Algorithms and Data Structures” and in two R+D projects, one about making software tools for programmers with visual disabilities and the other one about developing online simulators for the subject of ā€˜Chemistry’ by helping the students to experience chemical experiments even during the Covid-19 pandemic.

I always liked to learn how digital communications worked, but they also seemed far away from my profession and career. Considering this, I thought that the GSoC was an opportunity to learn new concepts and help communities with open-source software.

First meeting and objectives for this week

During the last week, we did a meeting to establish objectives for this week. These are:

  • Install the Android Studio IDE.
  • Make an application that can show the local address of the device.
  • Make an application that can show if the device is connected or not to the LibreMesh network (simulating through a ping to a random address).

And the results are:

Github Project

Next objectives:

  • Change the ping-based detection.
  • Define a strategy to connect to the router in case that the app detects that the device is or not connected to the LibreMesh network.
  • Define the scope of the app