Sander van den Oever

Sander van den Oever
Computer Science student

Track: Software Technology
Interests: Software (Web) Engineering
Occupation: PHP Developer

Recent blogs


August 2019
« Feb    


Posts in category Courses

Thesis stuff: bunq

Hi everyone!

Last quarter I’ve been working a lot on some of my courses and next to that I invested a lot of time orientating for a thesis company/subject. I’ve contacted several companies to check out the possibilities. Examples are and bunq. Both are online based companies, the first one is an online payment provider (links web shops to banks) and the latter one is literally an online bank. I have experienced that it is really important to work on your network while studying. For instance, I knew someone in who could help me find the right people and who knew what my capabilities were. For bunq the same applies; Ali Niknam visited the Software Architecture course (guest lecture) and afterwards you could talk to him and ask him some questions. And here I am, after a few talks at bunq’s headquarters (in Amsterdam) I’ll be doing my thesis at bunq. The subject is yet to be determined as I will start working on my thesis in November (I want to finish all my courses first). Finding a supervisor for your thesis is also really easy. Most teachers/professors have an open-door policy. Whenever they are there (and not in a meeting) you can just knock on their door and have a chat. Before, I wanted to do my thesis in the Programming Languages (PL) group, but I discovered that I liked the Software Engineering Research Group (SERG) even more. I’ve been talking a lot to Alberto Bacchelli and Andy Zaidman. They helped me a lot while finding a company / thesis; providing examples theses, giving advise, etc. If I were to give advise to anyone that is orientating for his/her thesis it would be to talk, soon. Start talking to your teachers, find out about their interests and research and see what you like most. Most teachers have huge networks, I know a friend of mine who’s now in Silicon Valley simply by talking to the right professor (who happened to know a nice project there). I started orientating early on, I’d advise the same to others, it’ll give you enough time to think about what you really want.

bunq headquarters

bunq headquarters

Anyway, back to the courses.  I finished the Information Retrieval course. It’s a tough one, but really interesting. We had to implement a system that was able to collect different kinds of information about hospitals (from different sources). So we would collect the locational data, specialists working in the hospital (by analysing their website), clinical trials at the hospital (from other databases) and so on. In the end we built a tool that allows you to search a nearby hospital that has expertise in a certain field (based on the specialists and trials in that specific hospital). Next to the group work we had to write a literature survey. Overall a lot of work, but I am pleased with the project outcome and I hope to have passed the survey as well.

For Intelligent User Experience Engineering we have actually started implementing the Nao robot. Next week we will be conducting experiments with real children to see whether our robot behaviour has the expected outcome. Programming the Nao is quite simple actually, you connect modules using lines and these modules will be played in chronological order. Then you can add some conditionals (speech recognition, object recognition, etc.) and speaking abilities. It did not take us too much time to build the first prototype.

Nao programming

Nao programming in Choregraphe

I have one new course in the last quarter of this year: Web Data Management. Here we learn all kinds of stuff about databases, distributing them, etc. Our project is a hands-on assignment on databases. We get a Postgres database and we have to convert it into (in our case) a similar CouchDB database and a Neo4J database. The data is from IMDB, we need to built a query feature around these different database backends. Really interesting, we will be using Python (Flask) and some other libraries to build something nice. I’ll update on this next time!

See ya!


We are already halfway Q3. Time is flying by. At this point I’m following two new courses; Information Retrieval and Intelligent User Experience Engineering. Within Information Retrieval we learn about search engines, indexing, (web)scraping, Machine Learning (related to IR) and much more. The course is accompanied by a nice project and an individual assignment (literature survey). The other course (IUXE) is mostly about the project; we have to develop a method for a robot (NAO) to interact with childhood cancer patients and act like a personal buddy for these kids while they undergo their treatments. Very interesting! Last but not least I’m assisting the Software Architecture course, which I followed myself last year.


Last week I was present at the Master Event to represent the Software Technology track. Rucha was there for the Data Science and Technology track. Together we got a lot of questions about the Computer Science program and the differences between the tracks. One of the questions was about why I like studying in Delft and what I like about the program. The program I’ve mentioned a lot already, but what I like most is the freedom you get. There are some constraints (the common core), but other than that you are really free to choose any course you like. You can specialize in the fields that you find interesting. Secondly, Delft has a good reputation, which offers a really good perspective for the future. Companies are really eager to have you on board. But why not study Computer Science somewhere else? Honestly, I followed my Bachelors here and I got really attached to Delft, so I just did not want to leave Delft behind. I chose Delft previously because it has a really nice university and campus. Furthermore I liked the atmosphere, which you can experience during Shadow Days (I can really recommend that!). And of course, there’s the historical city centre with its many pubs and restaurants. Every once in a while I grab a movie with some friends and a drink afterwards. Even in the winter it’s really nice to sit outside.

Promo Team EEMCS – Master Event March ’16


Last Sunday the weather was really nice, some sunshine (yes!), nice temperature. So I decided to walk to Scheveningen Beach with my girlfriend. It turns out that it is quite a walk, but it is a nice one. I wrote about Scheveningen earlier, it’s just a nice place to visit to stretch your legs, walk on the beach or just release the exam stress. When the weather is nice you can be amazed by the amount of people that go there. 🙂

Next time I hope to give some more info on the projects we’ve been working on; show some cool results for instance, but right now it’s mostly drafts and design proposals.

See ya!

Only 4 more courses to go

Hi all,

It has been a while since the last blog. I planned on writing a blog around the Christmas break, but I was occupied with some of my courses. Last Friday I had the last of my exams; Behaviour Change Support Systems. That exam concluded the second quarter of this year. I wanted to highlight a couple of things that kept me busy during this quarter.

Behaviour Change Support Systems

This course was about building applications that focus on changing / learning behaviour. To understand the concepts here we learned about many psychological and behaviour related models. During the course we had to design our own system so that we could apply the theory in practice. My team worked on an application that would motivate people to take the stairs instead of the elevator. This sounds fairly simple, but there are many things that you should consider when designing such an application. The course follows the four stages as in the design strategy as discussed by Wendel (2013, O’Reilly Media); understanding, discovering, designing and refining.

Four Design Stages of Behaviour

Four Design Stages of Behaviour

Compiler Construction

Finished, at last. I finished the last lab assignments and we learned the last theories behind garbage collection, register allocation, parsing algorithms, etc. The exam was pretty tough, I didn’t manage to finish in time because we had to write a lot of (intermediate) results. I hope that it has been enough to pass the course.

Data Science for the 99%

If I’d be able to recommend any course, I’d definitely recommend this one by Felienne Hermans. The MOOC is not too interesting for Computer Science students, or well, it’s fairly easy probably. But the project makes the course really interesting. Together with some of my fellow students we’ve built a visualisation of the Master enrolments data. The application has been built using a Lumen powered API and a simple, Bootstrap styled, Plotly.JS powered HTML page. Using the dynamic visualisations one can easily get an overview of all the data that normally gets presented from a huge Excel sheet (thousands of entries that is). The visualisation is useful for the marketing department, which liked it very much. They even said they might want to show it to the Executive Board, in which case we could present it ourselves to the board. Anyway, I was very pleased with the outcome of this project.

Master Enrolment data visualised in a tool

Master Enrolment data visualised in a tool


Next to several side-projects I’m also a volunteer for the CoderDojo Nederland organisation. We organise coding events for children from 7 up to 17 years old. They can learn how to build their own website, game or robots free of charge. Each month I help organising one of the so called dojo’s. It’s really fun to help these kids with getting started, explaining the basics, and see what they end up with when they try a bit on their own. Delft also has a local CoderDojo group ( CoderDojo is an international initiative so chances are that there’s a CoderDojo group near you too.

CoderDojo celebrating its 1-year anniversary

CoderDojo celebrating its 1-year anniversary

So, that’s (part of) what kept me busy in the past quarter. Next quarter there will be two new courses for me, while I also assist in the Software Architecture course that I took last year. The countdown has started,.. only 4 more courses until I have completed them all. The last (minor) thing to do then is the Master thesis project, more about that in a future blog.


Hard Work Pays Off

Hi all!

By now we have reached the end of the first quarter. Next week the new quarter will start, with some new courses. But let me give you a summary of the past quarter first;

Mining Software Repositories

This turned out to be a really tough course. Initially we were a group of 4 (2 girls, 2 boys). Then one of the girls left unfortunately, got replaced by another girl, who left as well (both did not manage to keep up with the speed/level of the course). So in the end we were a group of 3, where we had to perform a tough project that was based on 4 students. From a given list of papers we had to pick an interesting one; this paper would be the basis of our own paper that we would write during the course. From the selected paper we should try to create an extension or replication study. In our case we picked the paper by Bird et al. called “Latent social structure in open source projects“. We had to perform a research, which included the analysis of several open source projects’ repositories. Thing we had to do as well were the formulation of research questions and our hypotheses, statistical analyses, critical thinking, etc. Next to our own paper we had to review the papers of some of our peers. All of this, put into a tight (frequently changing) schedule, was quite hard to manage. Still, I think this is a really interesting topic and you’ll learn a lot about writing scientific papers and performing the required research. We got some really helpful feedback there from Dr. Bacchelli, whom we met a couple of times during feedback sessions.

Seminar Programming Languages

The other new course that I took was a seminar. Within the Computer Science master you’ll have to pick either a seminar or a literature survey. I choose to do the seminar. Within this seminar we had to read scientific papers on meta-programming twice a week. We met twice a week, where we had to read and summarise the papers upfront and during these meetings we would discuss the papers. Although I felt kinda lost in many of these meetings (the level is quite high) I learned a lot (also on reading papers). Some of the papers were really easy to understand, while others even confused the lecturer. Due to the size of the group (10 students approximately) it was really nice to have discussions about the contents of the paper. We were graded on our input into the discussions mostly. It took a lot of time to grasp the message of the papers, but in the end it was totally worth it; I now know more about which direction I want to go with my thesis.

Compiler Construction

The course is pretty much the same as last year. The second part of the lab-work was different though. The Programming Languages group introduced NaBL2, which replaced NaBL that had been used in the past. NaBL2 is the name binding language that resolves name occurrences to declarations and similar stuff. It’s part of the Spoofax workbench. NaBL2 is brand-new so the documentation is still lacking, which put some additional challenges in the assignments. Last year, I didn’t visit the labs (conflict in my schedule), this year I tried to prepare before the labs and that way I could ask for assistance when I got stuck. I keep wondering why I do not visit these labs more often, I got some detailed explanations on how the (partially or undocumented) stuff works, I guess it’s because I tend to be a bit lazy. 😉

Dinner with the COO and CIO of ING

Remember the ING 24hCoding Hackathon that my team and I won last year (hint; this blog)? Well, we finally collected our prize last week. We were invited to have dinner at the Amsterdam Harbour Club with Peter Jacobs (CIO) and Bart Schlatmann (COO). You might expect a really formal dinner, but actually the opposite was true. They were really interested in our educational background and our personal interests. We talked a lot about their student lives “back in the days” (which is not that long ago), their experience with studying in the USA, their daily jobs, opportunities at ING, and much much more. It was a really awesome experience to meet and get to know them.

Last weekend (18-19 november) I’ve participated in the Hackergames. Within 24 hours we build the “Uber for package deliveries”; a nice API accompanied with a nice (prototype) Android app. Although we did not win this time, we had a lot of fun, pizza and drinks. Oh, don’t forget about the free karting from midnight to 3AM. Really awesome. 😉

Code being hacked
New technologies being showcased Lunch being served

What’s up next?

The second quarter is about to start. Starting next week I’ll be following Data Science for the 99% and Behaviour Change Support Systems next to Compiler Construction (which is a semester course). Next to that I’ve been asked by Rafa Bidarra to assist in a Computer Science minor course, so I’ll be guiding and assessing minor students too. In the next blog I’ll try to give you an impression of the new courses and happenings, stay tuned! 🙂

Back to Work

Hi all!

So, yeah, summer break is over *sadface*. After seeing France and Mallorca we’re now stuck in the lecture halls again, which ain’t that bad considering the weather of the past few days. 😉


So this quarter I will be following three courses;

  • Compiler Construction – the course I took last year but which I had to drop halfway because I did not invest enough time. This year it’s easier as I’ve seen all material already. So I can try to focus more on the lab assignments. The first part I do not have to hand in, as I completed it last year already. However the second part I failed last year, so I’ll have to re-do that one (and the third part which I did not even start). 🙂 So far so good, but it’ll get more difficult when the second/third parts will start.
  • Seminar Programming Languages – within this course we have to prepare papers which we will discuss during our meetings. Twice a week we gather with all students and the teacher (group of approx. 12 people) and we discuss the contents of the papers. I can tell you, some papers are really hard to follow/understand.
  • Mining Software Repositories – within this course we learn how to analyze repositories (such as Git/SVN repositories) or related data. This analysis can be used to find relations between (e.g.) the experience of a developer and the number of bugs (s)he introduces. This course requires a lot of time, assignments are big and are close to each other. So far we are doing a decent job however.

How to.. prepare for Delft?

When working on group assignments in Delft it is inevitable that you will work with other students (from different countries/bachelors). You really notice the differences when working together. In my experience newstudents often (definitely not always) have way more specific knowledge on subjects than students that followed the Bachelor Computer Science in Delft. Delft tends to provide a broad foundation of knowledge which enables you to learn specific stuff more easily. I do see some students (either new or not) struggling with some stuff, so what stuff is useful to be familiar with when you want to follow this master? I’ve created a small list below;

  • Git – really learn how to git. A lot of courses use it, or assume you know git. Try some tutorials like this Interactive JavaScript tutorial or this GitHub Git tutorial. Being a student you can apply for the Student Discount pack at GitHub. Using the pack, you can create unlimited private repositories to experiment with git. If you need a nice graphical interface to git you might want to check out SourceTree.
  • Java / Python / … – it’s always good to know more languages. It’s best if you master at least one language. You can follow some of the courses/tutorials that are offered on many sites like e.g. Codecademy.
  • LaTeX – some basic knowledge of LaTeX can be really useful. Many students prefer to use TeX to write their papers and reports. There are a couple of online TeX environments (like ShareLaTeX and Overleaf) so using those you won’t need to install anything on your local machine.

You can definitely learn all of this while studying here, but knowing some of this upfront can really help you and ease the courses for you! 🙂

Summer Break

Well, that’s been quite a quarter. Apologies for the late blog, I’ve been very very busy with my courses and my TA jobs. The courses were awesome and supervising all my teams was also  very pleasant experience. I had to sacrifice a lot of my spare time, but in the end everything is finished. That means that it is finally time for the Summer Break. 😀

Multimedia Search and Recommendation

Within Multimedia Search and Recommendation (MMSR) we learned the basics of Search and Recommendation techniques. This course was brand new but the teachers did an awesome job nonetheless. The course consisted of three weeks of common lectures where we would all gather the same foundation of knowledge. After that we had to pick one of the two offered specialisations. We could pick one from MMSR Analytics and MMSR Systems where Analytics is more about the theory and Systems more about the practical aspects. So that’s how we learned about compression techniques, fingerprinting of media, recommendation models, video streaming, etc. Next to the lectures there was a big project. I’ve worked on the celebrity contest by Microsoft. Together with my teammate, Shirley, I have build a Python application that firstly detects your face from a video stream (webcam) and secondly recognise that face. We had received a huge dataset of celebrities that we should be able to recognise. Because of the time limitations within the MMSR course we had to narrow this down to a subset of approximately 100-200 celebs. We trained some recognition models with this set. In the end we had an system where fellow students, teachers, friends, etc. could sit in front of the webcam and see which celeb was most similar to them (according to our system that is). Really fun experience which was awarded with a nice grade (9.5 / 10).

Sidenote; one of the teachers of MMSR (Cynthia Liem) was awarded the ‘Teacher of the Year 2016’ award for Computer Science (see also this post on Facebook).

Language Engineering Lab

The other course I took this quarter was the Language Engineering Lab. Within this course we had to define a chosen language within the Spoofax workbench in teams of two students. I’ve worked on the ‘RaSDF’ project. The aim of this project was to allow for transformation of Rascal (competitor of Spoofax) grammars into SDF3 grammars (the syntax formalism that is used by Spoofax). This was really tricky but also provided us with a lot of experience in the field of Language Engineering. Spoofax is also the tool that has been used in the Compiler Construction (CC) course for Q1. Next year CC will be given by Eelco Visser (also the teacher of this lab) so things might change a bit, but I’m fairly certain that Spoofax won’t leave the course. If you plan on following this course I strongly recommend to follow CC as it will help you to understand Spoofax properly before this project. Myself I had some struggles with some of the components that I had not studied enough yet during CC.

Presenting the RaSDF project together with Rob van Bekkum (photo by Eelco Visser)

Figure: Presenting the RaSDF project together with Rob van Bekkum (photo by Eelco Visser). PS: We do not present with our hands in our pockets, haha.


The project I’ve been supervising was the second-year bachelor course called Contextproject. This project tried to emulate real-world projects as much as possible, including the different stakeholders. As mentioned in my previous blog I was a teaching assistant (TA) for both the Computer Games and Virtual Humans contexts. Within Computer Games the teams had to build a game that supports the Oculus Rift (every team borrowed a Rift for the entire quarter actually!). Because there was a Java requirement they had to use jMonkeyEngine (remember the name?) for the development. Unfortunately the documentation of that engine went down in the first or second week of the project until the very last week of the project. Although Rift support for jMonkeyEngine is not as trivial as we had hoped initially, we were really pleased with the games that resulted from the project. One of them was a virtual ‘Escape the Maze’ game. This game even won the ‘Best project of Contextproject 2016’ award.

The other context was a bit chaotic, teams struggled with getting started and they had troubles with the existing codebase. Another challenge that the students had to face was that all teams in this context had a shared component which they all had to work on. Although it’s not the most exciting part of the TA job, it is very useful. You learn how to push your groups to work, you learn to detect potential problems, etc. Useful experiences whenever you are to work in (or guide) a group project in future.

Viva la France! 😀

Friday, 1st of July were the final presentation of the Language Engineering Lab. After we presented the ‘RaSDF’ project I went home, packed my suitcase and left for a nice holiday in France. I could really use that free time at last! 🙂

France - Noyer

Figure: France – Noyer

Enjoy the summer break, I might post some stuff during the break, but no promises. 😉


Cool stuff! Our chapter for the DESOSA book has just been published. The course staff merged all different chapters into a single book. For this they have used GitBook. You can see the current version of the book at We got some really good grades for our chapter (on youtube-dl) so we were really pleased with the final result. Next to that I also had the final assessment for Software Re-engineering. We had to give a presentation about our refactorings and we were questioned by our professor. We scored an okay-ish grade, I hoped for a better result but since I could have spend more time on this course I don’t think that a higher grade would be fair.

Quarter 4

Yes, 4, already! That means a couple of things. First of all; new courses! This quarter I will be following the Multimedia Search and Recommendation (MSSR) course. It’s a core subject and also a brand new course. The lectures tend to be a bit chaotic as the teachers are still finding out what works best, but they are also really open to suggestions on how to improve. That’s actually another thing I like about TU Delft, you can just discuss basically anything with the teachers/professors. I’ve experienced that within other universities there is a more hierarchical system, while in Delft we tend to work / communicate like everyone is equally ‘ranked’. Of course this depends on the university and even the specific teachers. Anyway, within MMSR we gain knowledge on different search and recommendation methodologies. After a common core we could choose one of the specializations; MMSR Analytics or MMSR Systems. I liked the description of the Systems track more, and I’ll try to give an update on that specific track soon. Next to MMSR I follow the Language Engineering Lab. As I have followed the Compiler Construction course this was an easy pick. Within this project me and my teammate have to define a compiler that transforms Rascal grammars into the Spoofax grammars. Both Rascal and Spoofax allow you to design your own languages. In order to transform one of the grammars into the other you need to have a deep understanding of the different aspects of this language.

Teaching Assistant

The remainder of my time I will be using to assist several teams within the second year Contextproject. This project is a testdrive for the final Bachelorproject. The Contextproject, however, does offer more guidance than the Bachelorproject. I’m involved with two different projects, each of which have several teams participating. I assist Rafael Bidarra with his Computer Games context and I assist Alberto Bacchelli with the Virtual Humans for Serious Gaming project. For the Computer Games context I need to make sure that the students are able to finish the products, with enough features, while the deadline is still realistic. For the Virtual Humans context I am a Software Engineering TA. Rather than supervising the ‘context’ I need to ensure that the delivered products are of good quality, SCRUM is being applied properly, etc. It’s really fun to guide such projects and you can even learn a lot while doing so.

3,.. 2,.. 1,.. Summertime!

Back in the days, when you had holidays throughout the entire year,.. I honestly miss that, a lot. But since we are in Q4 that means that summer is only one quarter away now!

New courses and ING 24H-Coding

Hi all,

The third quarter brought me some new courses and other activities. New courses I am following are Software Architecture by Arie van Deursen and Software Re-engineering by Andy Zaidman. I’m also participating in the ING hackathon next week, which I’ll talk about in a bit.

Software Re-engineering

Let’s start with discussing Software Re-engineering a bit. This course focuses on the way we look at existing software systems. How do we deal with a large system that has been developed over the course of several years? How can one efficiently enhance the structure of such a project, while assuring that everything still works as it is supposed to work? We have learned about the S.O.L.I.D.-principles (which some of you might be familiar with already) and how to refactor violations of these principles. We have learned about testing, how to develop tests to tests your hypotheses, refactor, and test again. Our knowledge was tested on a real-life example. Together with the other students we had to identify violations of several principles and following on that deliverable we had to actually refactor these violations. The system that was used this year is jMonkeyEngine. jMonkeyEngine is a 3D game engine written in Java. We have used several tools like inCode, CodeCity and other tools like code coverage tools to find all kinds of flaws and violations.

CodeCity visualisation of jMonkeyEngine

Figure 1 – CodeCity visualisation of jMonkeyEngine

In the Figure 1 you can see a visual representation of jMonkeyEngine as build with CodeCity. CodeCity renders your code as a ‘city’ giving you a quick overview of the project. Packages are being transformed into districts, classes are transformed into buildings where the properties of a class determine the properties of these buildings. For instance, one can choose to use the #Lines of Code (LOC) metric for the height of a building and the number of methods metric for the width of the building. One can also use colours on the buildings, to indicate (for example) the number of external dependencies. Classes that have a lot of methods or classes that are being referenced a lot by other classes might be suffering from the God Class-violation. These classes would (if using the right metrics of course) be noticeable fairly easy (big skyscrapers).

Software Architecture

Software Architecture is a course taught by Arie van Deursen. He uses GitHub for all course material and Slack for communication and announcements. Within this course we had to pick an open-source, GitHub hosted, software system that has been active recently (e.g. approximately one pull-request per day minimum). We, my team and I, have decided to work on the youtube-dl project. Youtube-dl is a command-line tool that allows you to download video’s from over 700 (!) supported websites. Within this course we had to analyse this system (it’s internal structure) and write a report about our findings. Next to that, the fun part of this course in my opinion, we had to think of potential contributions to the project. The course actually required us to make some contributions. We had to contact the development team and try to get our contributions merged into the project. In many cases this involved rather simple documentation fixes, but there have been contributions that add or fix actual functionality as well. The course staff wanted us students to use Slack for all communication. This way students are able to help each other efficiently and the staff was able to keep track of the group process. Read more about this course and its setup in the blogpost by Arie van Deursen, which can be found on his website:

The reports of our findings we have to bundle within a chapter. From all teams (all delivering their chapters) a given number will be selected, bundled and published as the DESOSA 2016 book. An example of the previous edition of the course can be found at We are currently reviewing chapters written by other teams, while we are still trying to contribute to the youtube-dl project. Examples of (our) contributions are #8785,  #8682 and #8680. For our chapter we have created several architectural views, for example the one below, depicting the contextual view (stakeholders and other related tools/companies).

Context View

Figure 2 – Context View of youtube-dl.

ING 24H-Coding

Together with some friends I will participate in the ING 24H-Coding event in Amsterdam. Basically all kinds of teams participate here in building prototypes for their ideas and pitch them to ING. This years theme was about building a omnichannel software solution. Within that context we are free to think of anything we like. The event will be held in the Heineken Music Hall, where food and drinks are included, we only have to bring our laptops. There are not that many student teams participating so I’m really curious about the outcome of our team/idea.

Exam period and Firebase

First of all; happy new year! I hope you’ve enjoyed the holidays. Back to reality, sadly, exams have arrived. As mentioned before I have one exam, Compiler Construction. This is a tough course, but if you keep up with the lectures and assignments it should be doable.

I’ve mentioned my project for Functional Programming before but I’ll give a bit more detailed information. For this course (which is a MOOC basically) the participants at TU Delft have to carry out a project. Basically the assignment was a one-liner describing what has to be done. Our project description was;

Build an alternative for firebase from scratch (inspiration: search quora for alternatives)

You might know about Firebase. Firebase is a library which allows for live syncing to a database. The database in the backend is implemented using JSON, and through the Firebase library you can connect to this database. Each connected client will receive every change live (ignoring network latencies etc. of course). We were free to choose any language as long as we would be able to show where we applied the functional way of programming. We chose to use Scala, most of the members in my team already have experience with Scala, and it’s very similar to Java. From there the challenge started; none of us had too much experience with building such a system from scratch. So we started looking into available tools etc. We knew we had to find a way to push changes from the server/database to all connected clients. Quickly we found Akka Actors, but connecting this to a JavaScript library was a second challenge. After a lot of trial-and-error we came across ScalaJS. Basically ScalaJS allows you to write Scala code and compile it to JavaScript. We were able to implement a WebSocket connection and using that connection we can set up the communication between our clients and servers. Meanwhile other members of the team had worked on processing client requests on the server, the security of the connection, and so on. There’s really a lot to think about.

Project overview

Figure: Project overview. We had to implement the parts in red, gray shows possible extensions of the project (like a native iOS library).

There are some really useful things I’ve learned during this project;

  • If you use some external libraries: use a dependency manager, it’ll save you so much time in the end.
  • Automate whatever you can, whenever it is useful. If you run a compile command every time you save your code for instance, you might want to set up a watcher that automatically compiles the code on change.
  • Use a decent editor, get to know it; it saves you a lot of time to know to the shortcuts and to actually use them. For instance I use editors by JetBrains (IntelliJ, PhpStorm) where you can quickly navigate through your entire project using the double-Shift shortcut amongst various other features.
  • Talk before you start implementing; we worked separately in the beginning. When we had to connect our different components it turned out that basically all of us used a slightly different version of the JSON format (used for internal processing). We had to adapt to make it fit again. If we had agreed on this upfront this wouldn’t have been an issue (necessarily).

Of course IntelliJ is not the only editor, alternatives like Eclipse, Sublime Text or any other editor can be just as fine, it’s all a matter of preference and setting up the editor to your preferences.

IntelliJ editor with the project

Figure: IntelliJ editor with the project. In the lower section the terminal is visible (integrated in the editor), it is keeping track of file changes while I code. In the upper section you see the Quick Switcher in IntelliJ (double-Shift). It searches all partial filenames/paths and contents for whatever you are looking for.

You learn best by doing, projects like this one prove this over and over. 🙂

© 2011 TU Delft