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


Graphics · Programming

OpenGL experiments

Recently I have been learning basic realtime 3D graphics using OpenGL ES 2.0GLSL and C++. This is my first time coding anything more serious in 3D and also OpenGL! In theory this could run on any platform that supports OpenGL ES 2.0; ranging from PCs to Smart Phones. All of the content was used purely for learning purposes.

Cross-Platform window management using PowerVR VRShell.
Initialization of projection and view matrices with the help of GLM (OpengGL Mathematics).
Rendering 3x colored cubes using a single Vertex Buffer Object. Simple interpolating-color fragment shader.

3x Textured CubeLoading of image data using FreeImage. Rendering of three rotating and textured cubes.

Used Libraries: OpenGL ES 2.0, GLM, FreeImage, OOIS, Boost