Fun Stuff · Games · Programming

Two-Way Box released on the Google PlayStore

Two-Way Box IconTwo-Way Box released on the Google PlayStore: 

Pro Edition:

Free Edition:


Two-Way Box is a two-player inverse-space line-clearing black-white box-game that allows two players to play in the same game field on the same device.

Player 1 plays from the bottom to the top with white boxes in a black game field, while at the same time player 2 plays from the top to the bottom with black boxes in a white game field.

* 2 Player mode: The player with most wins in 4 matches wins. Both players play on the same device.
* 1 Player modes: Play alone as the white or black player.

Source Code:
The source code of the game has been published for learning purposes on github:

Fun Stuff · Games · Source Code

Inverse-Space Three-D Two-Player Tetris!

I’ve got a new game release for you. This is Inverse-Space Three-D Two-Player Tetris!

It’s made using Unity3D and Boo. This is my first project using either of these tools and meant as a learning experience for me (and hopefully a fun one for you and your friends!).

Download Windows:
Download Android: Istdt-1.1.1-android.apk

Version History:
Beta 1.1.1 – 30.05.2014: Improved end score display in Two-Player Modus, new icon, plus various other minor improvements
Beta 1.0.1 – 16.02.2014: Improved main menu on some devices, random and brighter color on start screen
Beta 1.0 – 15.02.2014: New Icon, pause game by touching the center of the screen, improved tooltips and immersive mode bugfixxes
Alpha 0.9 – 13.02.2014: Android 4.4+ Immersive Fullscreen Mode support, show score after losing a SP game
Alpha 0.8 – 10.02.2014: Performance improvements, new unity
Alpha 0.7 – 31.12.2013: Continue paused Game, support keyboard on touch devices, better WinStore support
Alpha 0.6 – 20.11.2013: Improved movement on touch devices, improved single player experience
Alpha 0.5 – 26.09.2013: Basic Android Tablet support (tested with Nexus 7 2013)
Alpha 0.4 – 22.09.2013: Adds Single Player Modes and Wall Kicking

Fun Stuff · Games · The Legend of Zelda: Black Crown · XNA Framework

The Legend of Zelda: Black Crown featured!

My little fan game project The Legend of Zelda: Black Crown is the Featured Project over at Zelda Fan Game Central! \o/ You can discuss it on the Forum Thread or take a look at the Wiki Entry.

For any of you that have missed the game, here are some screenshots and the download link. It requires Windows, Microsoft .NET Framework 4.6.1 ( and a GPU that supports Shader Model 2.0. Please poke me if you have any feedback or ideas on how to improve the game!

Don’t forget to use the Zelda Updater after installing the game to get the latest patch.



Fun Stuff · Mathematics · Programming · Project Management

Tech Book List

Almost everyone has an official list of favourite technical books. This now includes me: Here is mine! I hope that you will find something that you also want to read.

Successful Evolutionary Change for Your Technology Business

Are you overladen and often have to switch between projects and tasks? Do you want to visualize and limit work-in-progress? Or work in a Kaizen culture of continuous and incremental improvement?
This book is a good introduction to Kanban. It’s a fun and enjoyable read, but most examples are for larger organizations.



Seven Databases in Seven Weeks
A Guide to Modern Databases and the NoSQL Movement

This book represents a unique fast-moving deep dive into modern databases of all kinds, from relational to document and graph.
PostgreSQL, Riak, HBase, MongoDB, CouchDB, Neo4J, Redis and The CAP Theorem



The Deadline
A Novel About Project Management

A super entertaining story about a project management experiment. Yes, you will learn something, while having a ton of fun!



Conceptual Mathematics
A First Introduction to Categories

If you like Functional Programming Languages (like Haskell) and you want to understand their foundations in mathematics, then at some point you’ll want to study Category Theory.
This book starts as a very easy read and continuously gets more challenging as you uncover the magical world of categories and conceptual mathematics. Greatly recommended. Also see: my blogpost.



Programming Ruby 1.9
The Pragmatic Programmers’ Guide

Programming Ruby by Dave Thomas

The goal of Ruby is to make programmers happy. Do you want to be happy while coding? Then you should learn Ruby.
This book will give you a great starting point that explores the basic but also some deeper concepts of Ruby. You will be enlightened. Also see: my blogpost.



Thinking about Android Epistemology
(No, not those smart phones; but maybe.. some day?)

A series of enjoyable and not-too-much-technical essays. You will be confronted with questions of epistemology (the study of knowledge) and philosophy of minds so very different from ours (and yet so equal) – artificial machines.



GUI Bloopers 2.0
Common User Interface Design Don’ts and Dos

Did you ever build a piece of software with a graphical interface? Was it perfect? Are you sure? Please read this book now. It’s also very fun.



Learn You a Haskell for Great Good!
A Beginner’s Guide

This hilarious book (just look at what the sun has to say at the website!) teaches you functional programming fundamentals from the ground up to mastering functors, applicative functions, monoids, and even the dreaded monads. Those won’t scare you any more, but will be your best friends afterwards.
The e-book is free. Also see: my blogpost.



Haskell Road to Logic, Maths and Programming
(Warning: complex – hard work required!)

This book is an in-depth introduction into the mathematics that lie behind functional programming languages and computer science.
Don’t be fooled – this won’t teach you Haskell. It is best to learn the tool – Haskell – first, before starting this complex but beginner-friendly book.



Clean Code
A Handbook of Agile Software Craftsmanship

‘Programmers who satisfy themselves with merely working code are behaving unprofessionally. .. Bad code rots and ferments, becoming an inexorable weight that drags the team down.’

Mandatory reading for aspiring professional developers. Be warned that this is a very opinionated book and it exclusively uses Java – but with the right set of scepticism you will be able to pick many life-long lessons.
Please-please don’t be one of those that don’t care about the quality of their code. Please! I beg you.



Domain Driven Design
Tackling Complexity in the Heart of Software

This book will teach you how to design robust and maintainable application for complex problem domains.
Heureka! You will add many useful items to your object-oriented-design tool belt.



Gödel, Escher, Bach
An Eternal Golden Braid

‘Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s Law.’

A magnificent journey about K. Gödel‘s Incompleteness Theorem, M. C. Escher‘s self-referential worlds, J. S. Bach‘s mathematical music, formal systems, the self, the meaning of meaning, cognition, ant colonies, and indeed very strange loops.



Learn You Some Erlang for Great Good!
A Beginner’s Guide

Similar to Learn You a Haskell for Great Good! but for Erlang.
Erlang and the Open Telecom Platform are different, useful and a fun learning experience. Hey, Prolog-style syntax. But as always: Don’t drink too much Kool-Aid! Also take a look at Elixir.

:edit: Added Learn You Some Erlang for Great Good!

Fun Stuff · Mathematics

Category Theory Cheat Post

After learning Haskell I finally decided to jump the train and start learning Category Theory with the help of the book Conceptual Mathematics – A first introduction to categories. I greatly encourage you to do the same, especially if you are a self-taught programmer.

The following is a simple cheat sheet that is meant to help me (and maybe you?) remember all those new words and constructs. Please poke me if you find any errors or have an improvement suggestion.



The order of operator application does not matter.
a * (b * c) = (a * b) *c



The order of the operands does not matter.
a * b = b * a


Idempotent [idem + potence = (same + power)]

The endomorphism A\xrightarrow{e}A is idempotent under composition if e \circ e = e



The automorphism A\xrightarrow{\theta}A is an involution of A if \theta \circ \theta = 1_A



What makes a Category?
– Objects
– Morphisms (maps)
– For each object in A an identity map 1_A  must exist.
– For each pair of maps A\xrightarrow{f}B and B\xrightarrow{g}C a composite map A\xrightarrow{g \circ f}C must exist.

– Composition \circ must follow the identity and associative laws:

1_B\circ f = f

f\circ 1_A = f

a\circ (b\circ c) = (a\circ b)\circ c



Monomorphism (injective) [monos = one]

– distinctive
It maps distinct objects onto distinct objects. The codomain is at least as large as the domain.
x \not= y\implies f(x) \not= f(y)

– left cancellative
f\circ g_1 = f\circ g_2\implies g_1=g_2 with Z\xrightarrow{g_1, g_2} A\xrightarrow{f} B


Split Monomorphism

A monomorphism A\xrightarrow{f}B which has a left inverse B\xrightarrow{r}A for which r\circ f = 1_A, i.e. a retraction.
A\xrightarrow{f}B\xrightarrow{r} A


Epimorphism (surjective) [epis = against]

– covering
All objects of the codomain are hit at least once. The domain is at least as large as the codomain.
\forall b\in B\exists a\in A (f(a)=b)

– right cancellative
h_1\circ f = h_2\circ f\implies h_1=h_2 with A\xrightarrow{f} B\xrightarrow{h_1, h_2} C


Split Epimorphism

An epimorphism A\xrightarrow{f}B which has a right inverse B\xrightarrow{s} A for which f\circ s = 1_B, i.e. a section.


Isomorphism (bijective) [isos = equal]

– is a monomorphism and epimorphism
A\cong B domain and codomain have the ‘same size’
– distinctive
– invertible
A\xrightarrow{f}B\xrightarrow{f^{-1}}A with f\circ f^{-1} = 1_B and f^{-1}\circ f = 1_A


Automorphism [auto = self]

– is an isomorphism A\xrightarrow{f}A
– also called permutation


Homomorphism [homos = same]

– structure preserving map
– if (G, *) and (H, *') are groups, then f is a homomorphism if f(g * h) = f(g) *' f(h)


Endomorphism [endos = inside]

– is a homomorphism A\xrightarrow{f}A


Constant map

\exists b\in B \forall a \in A(f(a) = b)
A map A\xrightarrow{f}B is called constant if all elements of A are send onto the same element of B.


Division of maps

Determination or extension

A\xrightarrow{f}B\xrightarrow{g?}C\xleftarrow{h = g\circ f}A
If it has a solution g, we say h is ‘determined by’ f or h ‘depends only on’ f.



Special case of the determination problem A\xrightarrow{f}B\xrightarrow{r?}A\xleftarrow{1_A}A in which h = 1_A and r\circ f = 1_A
– is an epimorphism
– left inverse of f


Choice or lifting

A\xrightarrow{f?}B\xrightarrow{g}C\xleftarrow{h = g\circ f}A



Special case of the choice problem B\xrightarrow{s?}A\xrightarrow{f}B\xleftarrow{1_B}B in which h = 1_B and f\circ s = 1_B
– is a monomorphism
– right inverse of f


Fun Stuff

2010 in review


Welcome, prime year 2011!


2010 was a quite exiting year. It was my first year working in the software industry (or even working at all, this is my first job)!.

In my free time I was (am) trying to extend my mind to the non-Microsoft world:

At work I was mostly using C# and C:


Blog stats

The stats helper monkeys at mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:

Healthy blog!

The Blog-Health-o-Meter™ reads This blog is doing awesome!.


Crunchy numbers

Featured image

A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 3,500 times in 2010. That’s about 8 full 747s.

In 2010, there were 7 new posts, growing the total archive of this blog to 29 posts. There were 10 pictures uploaded, taking up a total of 881kb. That’s about a picture per month.

The busiest day of the year was April 18th with 48 views. The most popular post that day was InvTetris – Inverse-Space Two-Player Tetris.


Where did they come from?

The top referring sites in 2010 were,,,, and

Some visitors came searching, mostly for mathematical shapes, fractals, fractal, inverse tetris, and particles.


Attractions in 2010

These are the posts and pages that got the most views in 2010.


InvTetris – Inverse-Space Two-Player Tetris June 2008


The PropertyGrid – a great friend. April 2008
1 comment


Super Shapes – my first WPF application April 2008


Fractals on the Gpu August 2008


The Legend of Zelda : Black Crown | First Batch of Images October 2008

  • And I’ve taught my father some Haskell!
Fun Stuff · Graphics


Twivi is a simple visualization of the Twitter universe written
using HTML5 and Java Script! Feel free to take a look at the source code.

Twivi has been tested on Google Chrome and Mozilla Firefox 4.
It won’t work on Internet Explorer 8 or lower, sorry folks!

*Removed Link, won’t work with the new Twitter API*

Fun Stuff · Games · The Legend of Zelda: Black Crown

New Release of Zelda – Black Crown: Updater!

And another update to my Zelda fan-game. Besides many new items, a new boss and more – the greatest new addition is an Updater / Patcher which allows you to get the very latest version without re-downloading the full game. Enjoy!
Zelda Updater / Patcher
For the people that are interested how I’ve implemented the Updater / Patcher:
When I decide to release a new version I run custom “Release Packager Tool”.

This tool creates, amongst other things, a manifest file that stores the date and time every file of the game has been modified. This manifest, including, all other files is then uploaded to my webspace. Now when you start the Updater / Patcher it downloads that manifest file and checks what other files need be updated by downloading them too.

To make the patcher itself update-able I am using a stub executable that runs the actual patcher executable in a separate AppDomain. That AppDomain has Shadow Copying of Files enabled. ShadowCopyFiles = “true” has the effect that the assembly and its dependencies are copied into a temporary folder upon execution -> as such the original patcher files are not locked and can be replaced.

var domainSetup = new AppDomainSetup() {
    ShadowCopyFiles = "true"

var domain = AppDomain.CreateDomain(
    "Update Domain",

domain.ExecuteAssembly( updaterAssembly );