Enterprise Java on guard of space / SurprizingFacts

Scientific and technological progress is gradual in nature. Nobody takes a handful of sand from the beach and makes a computer out of it. We take rough tools and create with them more qualitative ones. Then with the help of the latter even more accurate and so on. Every small improvement is a step of progress and all of them must be passed.

Chairman Shenzhen Yang.

In the minds of every person there is one simple idea: space technology is difficult. In fact, this is not so. Not all technologies that are applicable in the space industry are Rocket science. And the recent successes in cosmonautics, the renaissance of space subjects have pushed me to search for problem areas that a simple Enterprise Java developer can improve.


The easiest way is to go to the site of any company working in the space industry and look for vacancies. Despite the fact that SpaceX is looking for programmers, I was refused at the resume stage. Apparently, state contracts from NASA do not allow them to hire people from other countries. Apparently, for the same reason, NASA did not even respond to my resume. JAXA dials non-programmers and those who have Japanese at least jlpt2.

With small private companies, it would be much better. But Planetary Resources refused at the stage of the resume. Apparently, too small to keep an Enterprise Java developer at hand. Planet was asked to write a program in C. I certainly remembered the syntax and was able to, but after a couple of interviews they refused. Apparently, too small a company that does not have an office in Russia, and they will not move to another country.

And finally, the city's default. Roskosmos – no list of vacancies, no claims.

Observation stations for satellites

But I was lucky, and I accidentally discovered the project Satnogs. This is a project to create amateur satellite monitoring stations around the world. You can print the part of the station on the 3d printer yourself and collect the instructions. They also have a central server that sends out requests to the station to monitor the flying satellites and collects data from around the world: https://network.satnogs.org.

For me, as a beginner in this field, it was not entirely clear to whom and why it is needed. However, turning on forums and mailing sheets cubesat, I began to present a little problem.

Usually small satellites and coussats launch universities for working out of this or that technology. Sometimes they are launched even by solid commercial companies for the final tests of their achievements. Typically, these companies and universities are small enough and can not afford a fleet to monitor satellites. However, understanding how technology behaves is important throughout the entire flight time, and not just during a five-minute communication interval. That is why universities and companies are interested in the constant tracking of their satellites.

And then the Internet and the global observation network should come to the rescue.


As the satellite It rotates in orbit, it periodically sends telemetry. Telemetry is the current state of the system: battery voltage, torque, temperature, etc. If you constantly receive this information, you can build a timeline for changing data over time and analyze.

Since I am primarily a programmer, I was interested Program part, and in particular digital signal processing. As from the .wav file, you can get data. But before you uncover the device and start coding, you need to analyze the existing solutions. In short, this area was stuck somewhere in the 60's. Enthusiasts send data in the form of screenshots to windows programs.

I would like something more modern. For example, a cloud service that receives a .wav file for input, and returns json at the output. Why such an architecture?

  1. in order to send data and get the result no special software is needed. It's enough only curl, which is in all linux distributions;
  2. the result in text format simplifies development and integration;
  3. microservice architecture. Such a service will be perfectly integrated into other more complex systems.

The next stage was the choice of technology. Since specialized hardware for decoding radio signals is not at all put in ordinary datacenters, software decoding is necessary. Here everything is simple: gnuradio. This is the de facto standard for software decoding Рa powerful and free tool that supports many modes and ways of working. Just what you need in order to work with the zoo of different ways of signal coding. Daniel Est̩vez wrote wonderful scripts for decoding signals from various satellites and attached working examples.

It would seem that this is happiness. However, even here there are several spoons of tar:

  1. GPLv2. This will not allow you to write commercial software for decoding signals. And certainly not suitable for cloud service – someone has to pay for hosting.
  2. Crazy bundle of C / C ++ / Python / Swig. In short, in gnuradio there is a notion of a block. This is such an atomic signal converter. When the signal is decoded, the data passes through the sets connected to each other, the blocks, and the output from the last block results. So, you can write blocks in C ++ and python. And if you can write, then someone will write. As a result, some of the blocks are written in Python 2, part of Python 3, part of C ++, which sometimes is not compiled and is not always installed, and all this is connected through SWIG.

It is ungrateful task to rewrite already working code, which has been used for many years and is familiar to many enthusiasts. But having suffered with virtual machines and having gone through a dozen compilation errors, I decided to go for the impossible: to rewrite the key blocks in Java. Of course, mindlessly rewriting consecutive blocks does not make sense, so I decided to test the concept by rewriting only the blocks needed to decode the aausat-4. As a result, I managed to make binary-compatible gnuradio blocks and decode the signal.

Since the concept was successful, I decided to launch a cloud service that essentially provides a REST interface to the jradio library. Next stage I plan to connect it to satnogs to decode the data.


Even if you are an Enterprise Java developer, you can help Elon. Perhaps, over time, you will be able to tell your grandchildren that the shuttle that flies between Mars and the Earth, performs your code every second. Dare!