Blog Archives

Posted By Tommy

Parallel points cloud

here is a better way to thread particles than the simple fork-and-join approach of OpenMP’s parallel for. It’s very simple to divide the work to run as tasks. Using tasks provides several benefits. Once you have a tasking system set up, it’s easier to add new tasks to increase parallelism throughout the code. Also, it’s easier to load balance and be platform-agnostic. If the task scheduler manages all parallel tasks, the program will avoid oversubscription. In this example, we don’t have to wait for all the particles for a given emitter to finish before moving to the next emitter and scheduling more tasks.

Posted By Tommy

Virtual clothing can wrinkle

Even the clothing of animated characters can attract wrinkles. The system works by detecting areas of a person’s shape that move or deform more than others. Then those areas are assumed to be clothing,  and with comparison to a predictive model of the underlying skeleton, the analysis concludes how the fabric moves on the body.

Posted By Tommy

Silverlight vs. Flash

A handy SDK for Facebook apps:

In my Master’s thesis I used Adobe Flash (AS3) and creating games is quite easy in Flash. It’s an ECMA language as is Java, so it’s easy to work with. On the other hand the backend integration is quite tricky. Adobe Flash Media Server is not free, and the universities don’t have licenses for it either. That caused me a lot of problems which were learning experiences for me, but figuring out which open source projects would work was not related to the learning goals I had been trying to achieve with my interactive educational platform. It would be much easier to use .NET development through the entire project than try to provide Bridges between different programming languages through socket programming.

Since there is already guides about ASP.NET development and Facebook, in my opinion it will be easiest to integrate Silverlight with that. Microsoft provides a number of free downloads and free licenses for university students including Visual Studio, Windows Server 2008 R2, SQL Server 2008, etc. through the official Microsoft student website, so it’s easy for student projects to get access to their products. Also, the really interesting thing about using Silverlight for your Facebook project would be that it would also work with the new Windows Phone 7 platform that will be released later in 2010.

Posted By Tommy

Compiling OpenCV 2.0 with Visual Studio 2010

I had a couple of troubles setting up OpenCV 2.0 in Microsoft Visual Studio 2010. I simply updated the working build from VS 2008. It had been working fine. So the first thing I found out that there was an error with “std::back_inserter”. The problem is that it was part of the standard package, but now it’s not. This trouble affects two files: “cvmodelest.ccp” and cvhog.cpp” so it’s easily cured by adding 

#include <iterator> 

to cv.h. somewhere around line 60.

Another problem I encountered was a crash with videoInput.lib. It seems that it’s been compiled with VS2005 and it’s source code is not included. So with a bit of research I found that it’s not exactly a necessary thing to include anyway, so I followed the instructions:

# On Windows: enabling the VideoInput library:

The libvideoInput.a library file provided by Willow Garage was built with the old SJLJ exception handling method. Therefore, you cannot link against it using compilers that use the new DWARF-2 exception handling method like MinGW 4.4.x, unless you rebuild the libvideoInput.a file using MinGW. The best bet for compilers using DWARF-2 is not to use VideoInput at all. This can be done by taking the following step:

1. Comment the line containing “#define HAVE_VIDEOINPUT 1″ (i.e. near line 101 or 105), in file src/highgui/_highgui.h.

In contrast, for old compilers using SJLJ like TDM, to have VideoInput included in OpenCV 2.0:

1. Edit file src/highgui/CMakeLists.txt
2. At line 199, insert ” ole32 oleaut32 uuid” at the end of the list of libraries to be linked against (i.e. after “videoInput strmiids”). The developers have forgotten to insert them.

Posted By Tommy

Create new Froyo Virtual Device for Nexus One


So it’s time to start developing Android apps, but you have a Nexus One running Froyo 2.2. What are you supposed to do at the stage “Create new Android Virtual Device (AVD)”? That’s exactly the question I was tackling today. In fact it’s not too important, since you would be developing for all types of Android phones, not just Nexus One, but in principle it seems right to set up the emulator exactly for the Nexus One.

So the first thing to do when creating a new virtual device is to give it a name. I was thinking about calling mine “NexusOne” but then I thought I should add a little more detail. However, there is a restriction in the naming policy: you are only allowed to include letters and numbers, no spaces or decimal points (but yes to underscores). This means the logical name “Nexus One Froyo 2.2” is no good. Finally I settled on “Nexus_One_Froyo_2-2”. I selected Target: “Android 2.2 – API Level 8”. If you don’t have it as an option, you need to run the Android SDK updater.

Next select the size of the SD card. I put 2000 MiB.

And the skin of the Nexus One would correctly be WVGA800, which corresponds to 800 x 480 resolution. Technically it’s a slightly different since the particular screen used, but it’s effectively the WVGA800.

Next there’s a bunch of settings to add. I’ve seen some people suggest you need to add all the hardware components manually, but according to the following chart most of the stuff is there by default. (Chart is from

Characteristic Description Property
Device ram size The amount of physical RAM on the device, in megabytes. Default value is “96”. hw.ramSize
Touch-screen support Whether there is a touch screen or not on the device. Default value is “yes”. hw.touchScreen
Trackball support Whether there is a trackball on the device. Default value is “yes”. hw.trackBall
Keyboard support Whether the device has a QWERTY keyboard. Default value is “yes”. hw.keyboard
DPad support Whether the device has DPad keys. Default value is “yes”. hw.dPad
GSM modem support Whether there is a GSM modem in the device. Default value is “yes”. hw.gsmModem
Camera support Whether the device has a camera. Default value is “no”.
Maximum horizontal camera pixels Default value is “640”.
Maximum vertical camera pixels Default value is “480”.
GPS support Whether there is a GPS in the device. Default value is “yes”. hw.gps
Battery support Whether the device can run on a battery. Default value is “yes”. hw.battery
Accelerometer Whether there is an accelerometer in the device. Default value is “yes”. hw.accelerometer
Audio recording support Whether the device can record audio. Default value is “yes”. hw.audioInput
Audio playback support Whether the device can play audio. Default value is “yes”. hw.audioOutput
SD Card support Whether the device supports insertion/removal of virtual SD Cards. Default value is “yes”. hw.sdCard
Cache partition support Whether we use a /cache partition on the device. Default value is “yes”. disk.cachePartition
Cache partition size Default value is “66MB”. disk.cachePartition.size

Thus according to the chart we should add “Camera” and the 5.0 megapixel camera on the Nexus One corresponds to 2592 Maximum Horizontal Camera Pixels and 1944 Maximum Vertical Camera Pixels (The exact number of pixels is a guess of mine based on the 5.0 Megapixels, but unless you’re doing some hardcore testing I think it will be fine). Set the Device RAM Size to 512 MB for the Nexus One.

Ok, that’s about it. Now click “Create AVD” and the program will appear to freeze for a while. Finally, the AVD will be created and Nexus_One_Froyo_2-2 is located in the .android\avd folder.