After 3 month of coding and altogether over 4 month since my first proposal for GSoC, I want to look back to this wonderful experience.
After I generated the first idea for the MIMO project with GNU Radio and a first ALOHA on the GNU Radio mailing list, I began to dive deeper into the MIMO topic by reading a ton of literature, both standard communications textbooks as well as many scientific papers. This stage of learning the ropes of the topic and specifying the project’s milestones can usually be very exhausting because you have to absorb too much new information in a very short time (especially if you come up with the idea for a GSoC project a week before the student application deadline). But this year, I enjoyed the process of elaborating the proposal a lot, because MIMO is a quite exciting topic.
After the community bonding period, where you discuss details of you project with you mentors and the whole GNU Radio community, the coding finally began on May 14th.
The first coding period was quite jam-packed in my case. I had planned to implement the diversity combining schemes, Alamouti’s code and a differential Space-Time Block-Code in the first month, with the additional work of writing multiple tests for each block and writing an introduction to MIMO and an explanation/tutorial for each MIMO scheme for Doxygen. Despite the high frequency of weekly contributions via pull requests (1 encoder + decoder block + qa test per week), I enjoyed this first coding period probably the most of all. If you deal correctly with this pressure of delivering the code to a deadline, you will actually enjoy each completed milestone and get even more motivated for the next one. Here is some advice, that helped me personally to deal with the mentioned pressure of delivering during GSoC:
- Divide and conquer does not only reduces your time of sorting things, but accelerates your frequency of (small) successes. Theses little victories motivate you for your next challenge.
- Write a journal of your project. I use this journal not just to write down thoughts and calculations, but I also log all tasks (successful or not) that I approached at each day. This enormously helps me to get my things organized. And if you had a bad day and you didn’t achieve anything, you can at least see that you did something on that day.
- Add a lot of time buffer to your project’s time schedule.
For the milestones of the second and third coding period I had more time but also more complex tasks to accomplish. I finished the V-BLAST algorithms which, was planned for the whole 2nd coding period, in just 2 weeks and could begin early with the last big milestone, the MIMO-OFDM transceiver. And I needed this additional 2 weeks as you can see: Although the MIMO-OFDM transceiver is principally finished, there is still a lot of work that needs to be done, before it is ready to be merged into the GNU Radio core. This shows again the big time difference in developing a complex but isolated algorithms in comparison to the implementation of a whole communications system.
During this Google Summer of Code, I have learned a lot regarding project work and programming and improved myself a lot further. I can note some remarkable improvements in:
- My programming skills in C++ as well as in python. I especially learned a lot about writing useful and exhaustive unit tests which is in my opinion at least as important as the code itself.
- Using git in a more professional way. Git is an awesome version control system and a very powerful tool for software projects, if you know how to use it.
- Being more professional when it comes to debugging.
- Developing a lot more frustration tolerance. This is always helpful, when it comes to programming 😉
Summarizing, this summer was awesome – especially with my mentors and GNU Radio as a hosting organization. My mentors guided me very well through the GSoC program and had always time for me. I could also learn a lot from them. GSoC with GNU Radio was especially very valuable for me, because I could improve my skills both in communications theory as well as in programming.