Bobbie Smulders Freelance Software Developer

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 »