User interaction in a three-dimensional OpenGL scene often includes “picking”, which means that a user can select an object in the scene by clicking on it. This requires to find out the correct object in the three-dimensional scene from the two-dimensional information that is provided for this user interaction event – the x and y coordinate of the click.
While OpenCV’s CvVideoCamera is great for fast prototyping and provides very easy access to the camera frames of an iOS device, it provides a rather poor performance. This is especially the case when only the luminance pixels (grayscale data) of a camera frame are needed for image processing. This article shows how to use the native iOS camera APIs to achieve this.
At work, I’m often involved in projects that are somehow related to Augmented Reality (AR), which requires to know certain camera parameters (intrinsics). These can be found out during camera calibration, as for example described in this OpenCV tutorial. However, the tool for this that comes with OpenCV is rather difficult to use as it requires to write numerous settings in XML first. Because of this, I wrote a simpler tool for camera calibration, which can be found in the github repository cam-intrinsics-db. It works from the command line with just a bunch of program arguments. See the mentioned github repo for its features and more details. Besides this tool, the repository contains a database with the identified camera parameters of different devices. I hope that this database grows in the future and everybody is invited to submit calibration results.
I thought that the first anniversary of the Snowden disclosures is a good time for a small report on how to run your own CalDAV server for calendars and contacts sharing. A few weeks ago I moved away from Google calendar in order to reclaim my personal information and since then I researched and tried out different CalDAV server software. Here’s a small write-up of my results.
… one should better look whether the method to change the view’s dimensions and/or position (e.g.
-[UIView setFrame]) is called from the main thread or from somewhere else. In my case, I was calling the
setFrame method from a different thread because the method invocation was inside a delegate method. Whatever I tried, the UIView’s size would not change and no error or warning was issued. Luckily, I stumpled upon the different caller’s thread name in the debugger. The solution was then to use the method
-[NSObject performSelectorOnMainThread] to call a method that sets the new frame size from inside the main thread. However, this is a mistake that’s rather hard to spot. Some kind of warning or error would be nice in this case.
I have published my master’s thesis “Parallel Computing for Digital Signal Processing on Mobile Device GPUs.” It covers the topic of general purpose computing on graphics processing units (GPGPU) on mobile devices. More information as well as the PDF is available on a dedicated page. The source code for some of the Android application prototypes that I developed during this thesis is also available on github.com.
Mozilla’s mobile operating system Firefox OS unfortunately does not allow to trust self-signed SSL certificates. This is bad news if you run your own Email- and/or CalDAV server and want to access those services with your Firefox-driven phone. It will give up connecting with a “bad security” failure. Fortunately, it is possible to incorporate your certificates manually and work around this “security feature” (or limitation – depending on your point of view).
On my Debian Wheezy system I noticed very slow HTTP connections, for example while using
wget. The problem was somehow related with the uncomplicated firewall (ufw), since it only occured while the firewall was running. After searching forums and mailinglists, I found the advice to turn off IPv6 support, which turned out to be the solution (or at least a workaround).
My personal website reincarnated, once again. After my old website suffered heavily from spam in the past few months (those CAPTCHA crackers get better and better), and I was annoyed by my websites old-fashioned pmWiki software base, I decided to create a new one. To get rid of spammers once and for all, the decision for a completely static website (yes, pure, boring HTML files) was made. Fortunately, I did not have to write all these HTML files by hand – I found jekyll, a very sophisticated static website generator.