###### tags: `GSoC` `GSoC-2021` `Libre-Space`
# A journey into the world of Open Source Projects
### My experience so far in GSoC 2021...
![GSoC logo](https://i.imgur.com/UQAw2mZ.png)
---
![Libre Space Foundation logo](https://i.imgur.com/2Ii3uVk.png)
---
## Introduction
To begin with, it is worth mentioning that this article is my personal experience of participating in Google Summer of Code (GSoC) and as a member of an Open Source project. As a computer science student, I have little experience with real-world projects. My work so far was part of an exercise and the result was judged only by the final grade. So, wanting to go beyond the student stage and become a real developer, I made the instant decision to participate in the GSoC event. This decision is one of the most beautiful decisions I have made so far... And the journey is not over yet!
Let me mention, then, the basics for both the GSoC event and the organization in which I participate, the Libre Space Fundation.
### About Google Summer of Code (GSoC)
The [Google Summer of Code (GSoC)](https://summerofcode.withgoogle.com/about/) event aims to introduce participating students to the world of [Open Source](https://opensource.com/resources/what-open-source) software development. It is a program lasting 10 weeks, which for 2021, is active for students from March 29 to August 31. During this period, the student is a member of an open source organization and his purpose is to participate in one of his projects. The student, in addition to writing code, becomes an active member of the organization and gains the best possible experience through this event.
### About Libre Space Foundation
The [Libre Space Foundation](https://libre.space/) is an open source organization that as a vision has a free and accessible space for everyone. In order to make its vision a reality, people from all over the world are participating in open source technologies that involve both on-earth and off-earth constructions. I, having some basic knowledge in signal processing as well as software defiened radio development, decided to participate in the vision of Libre Space, wanting to both offer and learn. My journey in Libre Space, although not over yet, is one of the most important I experience.
#### Mentors
In this journey I have two mentors, who with their knowledge and patience, aim to lead me to become a member of the open source community.
These mentors are:
- [Manolis Surligas](https://gitlab.com/surligas)
- [George Vardakis](https://gitlab.com/Vardakis)
## SatNOGS
The Libre Space project I decided to take part in is the SatNOGS project. SatNOGS is an open-source ground station and network. Its purpose is to create and organize a network of ground stations to collect data from satellites. Both the technologies that make up SatNOGS and the data collected are open and free to all. Specifically, SatNOGS consists of two parts:
- [Network](https://network.satnogs.org/), containing all ground stations
- [DB](https://db.satnogs.org/), containing and presenting the data collected by the satellites
### My participation
My participation in SatNOGS focuses on the [out-of-tree](https://wiki.gnuradio.org/index.php/OutOfTreeModules) module [gr-satnogs](https://gitlab.com/librespacefoundation/satnogs/gr-satnogs) which is the implementation of SatNOGS for [GNU Radio](https://www.gnuradio.org/). Note that, the gr-satnogs GNU Radio module is used mostly for the reception, demodulation and decoding of satellite signals. However, this module contains processing blocks that can be used for transmission too. I chose to improve SatNOGS transmission (TX) capabilities. So far, the encoders of Mode 5 and Mode 6 of the AX.100 modem by GomSpace have been implemented. Note that to create a new [encoder](https://gitlab.com/librespacefoundation/satnogs/gr-satnogs/-/blob/master/include/satnogs/encoder.h) (respectively for a new decoder), a C++ API has been created in the form of an abstract class. The developer who wants to create a new encoder, creates a new class that inherits from the abstract and overwrite the abstract method encode. Below, I analyze the encoding process that I have implemented for each mode.
#### Mode 5 of AX.100 modem
In Mode 5, on each frame received by the encoder, it first adds a constant sized repeating sequence of bits called a preamble. This sequence helps the recipient prepare to receive the message. The encoder then adds a sequence known to both the sender and the recipient called the word synchronization. This sequence helps to confirm the sending of the message. The encoder then encodes the size of the current package, using the [Golay 24](https://en.wikipedia.org/wiki/Binary_Golay_code) application, and applies [Reed Solomon](https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction) encoding to the current package. Finally, calculate and add a [CRC](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) at the end of the frame. The above, ensure the resistance to noise and errors that exist in the telecommunication channel, so that the message reaches the recipient, correctly.
#### Mode 6 of AX.100 modem
In Mode 6 a procedure is followed which aims to support older modems and specifically the AX.25 modem. In more details, the encoder first calculates and adds the CRC, then encode the current payload using Reed Solomon encoding, and then [scrambling](https://en.wikipedia.org/wiki/Scrambler) is applied. Finally, at the current payload that has gone through this process, apply AX.25 encoding and send to the channel.
## Knowledge I gained
Participating in an open source project has proven to be a great experience so far. I have gained new knowledge both in C++ coding and signal processing, as well as in my participation in a real group project. During this time I have gained more interest so that the work I share with the open source community is the best possible both in terms of performance and quality. I also believe that I still have a lot to learn so that I can be an active member of both the organization and the open source community and in the future I can share this knowledge.
## Connect with Me
Email: mixalisraptakis@gmail.com
LinkedIn: [Michail Raptakis](https://gr.linkedin.com/in/michail-raptakis-6b8257201)
Twitter: [mraptakis](https://twitter.com/mraptakis2)
GitLab: [Michail Raptakis](https://gitlab.com/mraptakis)
## Continuing
As I have already mentioned, the journey into the world of GSoC is not over yet. Next steps are to improve even more features in SatNOGS as well as gain more knowledge through this course. See you again in a little while! To be continue...