It’s been three weeks since the new semester started, but it also seems a little bit slow in our progress of CS3281/82: Thematic Systems Project.

This is a wonderful module will you will be working with an real open source project, and you are supposed to implement features, solve issues, fix bugs, as well as suggest new plans for them. This year, our team is working with Codebender, which is an awesome online IDE for Arduino, one of the hottest hardware these days.(The project is awesome! Do check out if you got an Arduino board!) However, comparing with other groups who are contributing to some internal projects like TEAMMATES or HubTurbo, our progress is a little bit slow because we only receive project instructions at the beginning of week 2, and since our mentors are remote(they are from Greece), our communications were not very frequent (but in fact we got a lot of readings work on the project-related topic since then).

We tried to learn the whole system, and tried to explain it based on our understanding, while there are still quite confusions among us. As a result, we haven’t started any real coding or contribution until…today! The Code Sprint!

A sprint is a get-together of people involved in a project to further a focused development of the project.” — Wikipedia

Code Sprint is just like another normal day in a start-up company: people are working like crazies and we are pushing ourselves for the maximum outputs. This weekend, the module will hold that event as well. For our project, it is really a great opportunity as we are finally to meet our mentors from the other globe: John and Vasilis are really awesome. They are nice, kind, patient and very geeky(geeky people are really cool!) The face-to-face session really helped us to refine our understanding of the whole project, and they also shared open source workflow, tips, as well as their valuable experience in the industry with us today.

Our sub team (there are 3 sub teams in our team…) is focusing on an library management system called Eratosthenes (I am still struggling with the pronunciation though…). It help users to retrieve built-in/external libraries to be used in their code so they don’t need to worry about downloading the dependency. The main features we are going to work on is to include versions for each library. Why such feature is needed is because of various versions and configuration in the Arduino family. Just like any other package manager system, we should be able to let our users to decide which library they want to use instead of just providing them the latest one(the newest may not always be the best).
The task looks easy at first, and we discuss beforehand about the detail implementation, such as adding more tables, changing existing controllers as well as routings, and how to include different versions using an syntax in the IDE like:

// using default version of the DateTime library
// No version specified
#include <DateTime.h>

// using version 1.3 of the DateTime library
#include <DateTime-1.3.h>

However, John discussed about some issues we have never thought of before:

How do you structure your library in server’s file system? Because not all libraries are using the number version, some of them are using special characters like ‘@’, some of them use weird things like “beta-v-0.1”. In addition, different library may have different implementation for different Arduino architecture, how to resolve these? Things are getting complicated if we go into details(we are thinking to use hash or database id to solve potential name conflicts or compatibility issues now). And our previous design became rubbish right away. This actually teaches us a lesson: we should fully understand the requirement of the features before we really design the solution. After we fully understand the system, it won’t take long for us to work our a real solution.

Apart from that, John mentioned something related to the early stage in the software development in start-ups: avoid Premature Optimization. He said that initially codebender was just a small start-up targeting 1000 users several years ago. Back to then the Arduino is still in beta and less popular, and that’s why the library management system only support a single version of external libraries. It actually makes seems not doing the optimization or making system scalable because if you consider only 1000 users with single Arduino version plus your need to ship your product in a short time or the start-up will die. Make things work first, and gradually improve it as you go.

It’s a long day, but everything we learnt today is meaningful and priceless. I am looking forward to work on the real problem solving in the second day of the code sprint.