Active projects

Unnamed language learning project

I'm trying hard to learn the Latvian language, but never found a vocabulary trainer that quite matches my needs: mobile apps are too slow to use (even with a swipe keyboard); some online platforms have predefined vocabulary sets and categories which is not what language learners should strive for (learn essential words and sentences, or you will take ages); nothing that would let me edit quickly on laptop/tablet and then learn on mobile; and countless more reasons.

Therefore this project was born. It is not open source or public yet, but I hope it has a good future and I surely will learn a lot about language learning strategies and mathematics. The application is web-based, uses CoffeeScript, grunt, Bootstrap, Dropbox data synchronization (other providers later), and <other programming keywords here>.

Site Deploy

Site Deploy is a PyGTK-based cross-platform tool for the easy deployment of web sites to different types of web servers.

At the moment, focus lies on ease of use and configuration. Currently, Site Deploy supports Django and Play! sites on Apache, plus static sites on Apache, nginx and lighttpd (all on Debian-based platforms). Packaging and uploading is automated.

This page (Django-based), my Indexxer instance (Play! framework) and my permalink application (also Django) are actually deployed with Site Deploy.

Maintained / less active projects

Many of my personal projects are simply not developed anymore or on hold because a lot of things are going on in my private life. This doesn't necessarily mean they are dead.


DogSync is a GTK and Python based application that allows you to easily synchronize files between two computers (or on the local computer). The goal is to make synchronization highly customizable ‒ for example, one can change the way DogSync compares files (date only, sparse checksum, full checksum), detects renamed files, and so on. For remote connections, hybrid encryption is used.

It's also not only designed for files. As a personal milestone, I would like to add synchronization of Firefox bookmarks (already started work on this) and other features in the future.

Experimental builds that are already working can be found in the PPA, somewhat "stable" builds will follow later. Also check out the user manual on the home page and some screenshots.


Indexxer is a private web application for organizing and categorizing my family's collection of movies, video games, etc. It uses the Play! framework version 1.x.

PhoneGap plugins

Initially part of my master's thesis, I'm developing a cross-platform mobile app for the company Walnuss LLC. The app will be developed for Android and iPhone for the moment. As technologies, I selected PhoneGap, Bootstrap, Handlebars.js, i18next and some more. Right now, my opinion is that native controls are still more usable than the ones in a purely HTML-based mobile app. But developing for two platforms separately is time-consuming and costs a lot of money (especially important for startups). So my approach is: Mix native controls with PhoneGap's web view.

On iOS, the PhoneGap plugin for displaying tabs and a navigation bar was buggy and not actively developed. I took it from there, separated it into two plugins (tab bar and navigation bar plugins), and improved the features. For example, one can dynamically add a back button (using a custom background image) in the navigation bar, including nine-patch style resizing according to the length of the label. I'm accepting feedback about desired features. Below is an example of both plugins used in a PhoneGap-based iPhone app (black theme).


Don't ask why I named it like this. LinkDigester is a small Django application that allows me to manage the permalinks on my website. It allows HTTP redirects, passthrough of files on the server and file upload to a directory under permanent links like “/links/~my-link-name/”. All links can have a password, start and expiry date and an option whether they may be accessed over HTTP (or only HTTPS). The project is not open sourced (yet).

Blog / Sportmap

Django/Python-powered private blog site, nothing special here. But it includes an application for measuring and visualizing running tracks using Google Maps API (also integrating free map sources like OSM and CloudMade) without needing a GPS device, and without needing hundreds of clicks like on Gmaps Pedometer. I used it when I didn't have a GPS-enabled smartphone yet (and as such no chance to use RunKeeper or similar). And sometimes when the GPS doesn't want to work, I'm still using it (when raining, or other bad circumstances).

Old projects

This is just a selection of the ones I think were important for me.

Master’s Thesis

Comparison and evaluation of cross platform frameworks for the development of mobile business applications

I’m giving away my finished thesis on a donation basis: If you are a student, it is fine with me if you just download it for free. Should you work for a company or want to use my results for business decisions, please think about donating with one of the following buttons. Please find the PDF downloads below. This will allow me to put more effort into related research in my private time, for example a fast, Bootstrap-based mobile app template (HTML/PhoneGap-based) or PhoneGap plugins.


By downloading one of the following files, you agree to the CC BY-ND 3.0 license and the additional restriction that you may only distribute the work directly within your organization – if you want to share it with external persons, you must instead share the link to this page. Sharing the below download links directly is not allowed. Thank you!

  • Submission date: 2012-10-15
  • Current version: 2012-12-28 (small typo fixed)
  • For one-sided print, recommended for reading on PC: Thesis (simplex)
  • Alternating margin widths for two-sided print: Thesis (duplex)

Here’s the abstract:

The recent growth in market share of smartphones brings companies to enter the market of mobile applications. Recent research shows that businesses tend to require mobile applications with shorter development and life cycles in order to improve worker productivity and react to market changes and customer needs. Thus, it is important to develop business applications on mobile platforms with effort and cost efficiency, and to fulfill user experience expectations.

Considering only a single mobile platform, the vendor-supported SDK typically fulfills all requirements for developing an application, such as mature development tools, the ability to use device functionality and well-designed, highly usable user interface components. Native applications often have a uniform look and behavior, deliver high performance and can utilize the capabilities of the underlying device, such as acceleration sensors or a built-in camera. However, the quantity of popular mobile platforms (Android, iOS, BlackBerry, Windows Phone, etc.) suggests that additional effort and resources are necessary if the application is developed separately for each platform, using the native SDKs. This master’s thesis compares and evaluates different solutions that allow for a mostly platform-independent development on mobile platforms. Different categories are compared, including support for native device functionality, developer tool support, reliability, UI performance and features, costs, deployment and supportability. As base for the evaluation, a well-defined sample business application is developed with each of the cross-platform solutions and with two native SDKs.

In order to put the results in a meaningful context, the cross-platform solutions are compared with native development based on the same set of criteria. The comparison concludes with an evaluation based on objective scores and subjective experiences. Finally, this thesis gives a conclusion and recommendations, stating whether the cross-platform approach should be preferred to native development, and in which cases it is not worthwhile, regarding aspects of typical business applications.

The mentioned sample application is called MobiPrint and looks like this (mockup of one screen made with Cacoo):

And here some different implementations:

Raspberry Pi

The Raspberry Pi is a small ARM-based computer. I already own one and am trying all kind of things. It will be used both in my work project (I'll try to get a RFID reader driver to work with it) and mainly for private purposes.

Bazaar diff/merge tools improvement

For GSoC 2012, I suggested several improvements for invoking diff/merge tools from the popular version control system Bazaar (and its GUI, Bazaar Explorer). Unfortunately, Canonical did not participate in the Summer of Code that year (me also, because I'm working on my thesis and participating organizations didn't like that – bad luck), so I decided to try and implement these improvements anyway when I have a little free time. See the Launchpad branches above.


NSiege is a simple benchmarking framework created because there are few alternatives and NTime was not what I was looking for ‒ I want full control over benchmarking settings and results, which I am trying to provide with this project. I called it NSiege in honor of the great HTTP(S) benchmarking tool Siege, and because I also want to provide a user simulation mode that introduces a certain delay between test executions instead of testing the maximum load.

HTTP Status Cats for Apache

HTTP Status Cats for Apache provides pictures of the famous status cats and a configuration for Apache 2.x.


A proof-of-concept tool for analyzing data that is recorded during football matches by cameras, sensors and human statisticians. This project was the result of an “inter-disciplinary project” (IDP) at the Technical University Munich. An IDP is a mandatory and very interesting part of the master programme, and two friends and me applied at the sports faculty and decided to implement this project. It was later used in a research paper at the university of Würzburg. The name Socca originates from “soccer analyzer”, by the way.

Gene Force

Working title of a DirectX 9 game I once started (back in school, long ago). I even had a story for it, but never had enough time to go on. As I didn't use any 3D engine, I learned a lot from the “raw” programming. Also gave me experience (and joy) about 3D modelling and level building. Some years later I played around with Irrlicht and OGRE – also resulted in too little time to start a new game project.