Bobbie Smulders Creative Software Developer

Serializing Leaflet Draw layers


On a project I recently worked on, I used Leaflet.draw to draw polygons and rectangles on a map. Leaflet.draw is perfect for this task but does not support storage of these objects out-of-the-box. I solved this issue by using the draw:edited, draw:deleted and draw:created events to store the objects to a database using a REST API.

To save everyone else the frustration of having to figure this out, I created a project called Leaflet Draw Serialize Demo that demonstrates how to use these events to save the drawn objects to an external service using a REST API. The interesting stuff is in the front-end javascript.

Feel free to use this project as a reference for your own implementation.

Repairing a greyed-out disk on OS X

A request I recently got was to fix an external USB disk. This disk appeared to be broken beyond repair, as all options on OS X’s Disk Util were greyed out. Both on OS X and the recovery boot system. Luckily, I was able to restore the disk. Unfortunately, I was not able to recover the contents.


Read more »

Automated backups from DirectAdmin to Synology NAS

Synology Task Scheduler

For the past couple of years I’ve been a customer of Antagonist. I have a shared hosting package from them that is running on DirectAdmin. DirectAdmin has an option for manual backups, but as this option takes a lot of time and manual labor, it would be better if we could automate it. To automate it I came up with a three step process:

1. Create a full backup from DirectAdmin and store it locally

DirectAdmin has released a script on their website to automatically create backups. This script works on accounts that do not have admin rights (typical on shared hosting servers). Follow the instructions up until step 5. I have set up the cron job to create the backup at 04:00. This is how my cronjob looks like in DirectAdmin:

00 04 * * * /home/USERACCOUNT/backup.php
Read more »

Reverse engineering the KPN IPTV recording system


A while back, I visited my parents to replace their current digital cable setup with an IPTV setup. This had some great advantages, as the set-top boxes only needed network cables instead of coax cables. I used power line communication so that I didn’t have to lay any cable. In the end, every TV-set in the house was able to watch high-definition television, and every iOS and Android device was capable of watching standard-definition television.

The provider (KPN) has an interesting approach to recording television. When you record a certain program, whether it’s currently on or in the future, you don’t record anything on the set-top box. It is recorded on their servers, and if you want to play it back, you can stream it from their servers to your set-top box. This complicated process is all brilliantly hidden from the user. The advantage of such a system is that a recording on one device can be played back on all devices in the house. Every set-top box can display a list of recorded programs that is retrieved from the server. Another advantage is that you can start a recording from the provider’s website or their mobile application, even when you’re not at home. And you don’t need to have your set-top box running 24/7, which saves power.

But there was one rather large issue with scheduling a recording…

Read more »

Playing Dance Dance Revolution with a neural network

Screenshot of StepMania

I recently finished a project I did for the Artificial Intelligence Research Seminar at the Media Technology MSc Programme where the assignment was do to something with artificial intelligence.

As a continuation on the research I did on automated gameplay with pong and Doeo, I decided to try to play Dance Dance Revolution using a neural network. The project had two research questions: Is it possible to use a neural network to play the game Dance Dance Revolution? And can we do it without having (full) knowledge of the game?

Read more »

Virtual Candles

Another project I did for the New Media New Technology course at the Media Technology MSc Programme had the main goal of getting to know openFrameworks. The theme that my project had to connect to was “Space”. This time, I came up with the Virtual Candles project.

As a small exercise in augmented virtualy, I developed a setup where it was possible to use a real-life candle to light up a virtual object. By placing a WiiMote above a computer monitor, it was possible to track candles (or other infrared sources) placed around the monitor. These lightsources were then mapped into a virtual 3D space (using OpenGL) to shine a light on a virtual object displayed on the computer monitor. A video is posted below to see this effect in action. The full description and the software sourcecode can be found on the project page.

Random Piece of History

For the New Media New Technology course at the Media Technology MSc Programme I had to come up with a project that payed tribute to an old new media. I had the freedom to do whatever I want, and I came up with the Random Piece of History project.

My project payed tribute to GeoCities. The inspiration for the project comes from the GeoCities archive from the Archiveteam. Whilst browsing the nostalgic pages, I couldn’t help but notice how these pages were mainly random pieces of text and images cobbled together. Which is why I asked myself:

Is it possible to randomly generate a GeoCities page?

The project uses the GeoCities archive by scanning the entire archive looking for HTML pages. It then cuts up the HTML pages in small bite-sized pieces, which are stored in a database. When the users tries to access the project website, this database is queried and a completely random page is put together. The end result was a website that from the first look really seemed like a random GeoCities page, but actually wasn’t.

To make everthing feel genuine, the project was presented on a low-color and low-resolution CRT monitor with a virtual machine running Windows 98 Second Edition and Netscape Communicator 4.60 to make everything periodically correct. There also was an algorithm that tried to guess the age of the HTML page in the archive in order to eliminate newer pages from the building process.

Unfortunally, because of the size of the project, and because the hardware / software setup added a lot to the experience of browsing the pages, it is not available online. Screenshots are posted below to get a feel for the project. The full description and the software sourcecode can be found on the project page.

Screenshot of randomly generated page

Read more »

Hometrainer 2.0 - Source code

I’ve recently had a request to publish the source code of the hometrainer application I made a while back. The application was a continuation of the research I did on connecting a hometrainer to a computer using the sound card and calculating the bike’s speed by processing the audio signal.

The source code can be found at the GitHub repository.

I’ve rewritten most of the code to make it easier to use (notable by the use of tons of constants to tweak the application to your needs), but I also removed the part that controlled my media player. I couldn’t find a nice cross-platform method of doing this without resorting to gigantic APIs or messy hacks. The previous code used the Robot class in Java to simulate pressing the spacebar, but this is a rather messy method that can even complicate using your computer.

The code consists of three classes: Hometrainer, View and Main. The Hometrainer class does the work of monitoring the audio port and making sense of the incoming data. It extends the Observable class so it is easy to subscribe to updates by making your own class implement the Observer class (it this is unclear, you can read up on the Observer pattern). This is exactly what the View class does, it receives updates from the Hometrainer class and display the current speed and distance in a nice JFrame using JLabels. You can use this class as an example of how to grab data from the Hometrainer class. This leaves us with the Main class, which is a small class that initializes both classes.

Feel free to use the code however you want. If you have any questions, don’t hesitate to use the comments box below.

Migrating to my own personal cloud

In the last decade, I have made quite a few migrations when it came to my personal files, email, calendar, contacts, music and video. I started out with having all my files and data stored locally on one computer. This data was synced to my mobile devices using various programs (ActiveSync, iTunes, Windows Briefcase, Palm Hotsync), which was rather messy. The problem was that I had to physically connect my mobile devices in order to sync them, and that the data on those devices would be out of sync between synchronization moments. It was also a rather tedious task to switch to a new computer, as I had to manually migrate all data (which was rather difficult for applications such as Outlook Express or iTunes).

The second phase was that I started using various online services. My email migrated to Hotmail, I synced my files using Dropbox and started using iCloud for my calendar, contacts and reminders. I’ve given this a second thought lately, and it is beginning to worry me. I am starting to lose grip on my data, it’s not my own anymore and the companies behind those services can decide to change their services drastically, without giving me any notice. What if copyrighted files will be automatically deleted from Dropbox in the future? What if Hotmail decides to disable access to your email using third-party applications, to lure users to their websites and watch their ads? What if the Hotmail spam filter starts to become too aggressive? What is one of the companies started charging money? What if a company goes bankrupt? What is my files accidentally get deleted?

A lot of what ifs, which is why I recently migrated all my data and files to my own personal cloud. A cloud that I control, where I make the rules and where I am not vulnerable to decision made by others. A cloud that uses open protocols and open standards with clients available for most devices on the market. So how did I do it?

Read more »

Make your own HCI!

I am currently doing a group project for the Human Computer Interaction course at the Media Technology MSc Programme, where we’re exploring the possibilities of interaction with paper and computers. The key part of the project is to figure out a way to get non-technical users to develop their own (game) controllers that can be build solely using paper. The controller has to control a game or application on the computer.

The project is still in a very early and experimental/explorational phase, but here is a demonstration video of one of the prototypes. In this prototype, it was possible to use AR markers to build a virtual dashboard where the users could create and control certain input devices (knobs, sliders, switches) by moving AR markers around.