Projects and Code
On this page you find a list of my personal projects that I consider somewhat "finished". Of course they are far from production quality. All code here was written by me (Christoph Angerer) unless otherwise stated. Some of these projects haven’t been updated in a while, so I have no idea if everything still compiles out of the box. You may be lucky and find a more up-to date version in my github repository but I keep snapshots here for my personal documentation.
All the code is released under some open license or other so you can use it pretty much as you wish. But be warned: I am not responsible and there is no warranty, implied or otherwise.
Tasks, Ordering, and Permissions (TOP)
A very basic version of a parallelism model. Tasks plus happens-before ordering between tasks plus dynamic fractional permissions.
(the code: top.zip)
Sequentially Consistent Java
A full Java implementation of the schedule analysis plus optimizations for a sequentially consistent version of Java.
(the code: SCJ.zip)
Schedule Analysis, Datalog Version
The first prototype of the schedule analysis described in my PhD thesis. This version is mostly implemented in Datalog using bddbddb. The pre-processor is implemented using the wala analysis framework.
(the code: DatalogScheduleAnalysis.zip)
Adventure Engine
My ETH office mate and I started work on the Adventure Engine because we always wanted to write a good-old-style point&click adventure game. So we thought the iPhone would be an awesome platform do do so.
The first demo game is based on the novel Flatlands. Even though the game can be played through from the beginning to end, it is only 95% done. And as of now, it is a question if the last 5% will ever be finished.
(The AdventureEngine plus all the artwork and stuff. Be careful, big file with 1.7 gig)
Faces
A Smalltalk implementation of faces.
(the code: faces.zip)
re:drafted
re:drafted is a project that my office mate at the ETH and I started. If you have a good idea how to make the world a better place, this site is for you. You re:draft whatever you like and propose how to make it better – and your fellow users will comment on your proposal and vote it up if they like it.
WritingMonkeys
Everybody wants to write a novel, but almost nobody does. http://www.WritingMonkeys.com would be the place for them – if it existed...
I started this project a couple of times but always put it back to sleep. Why, you ask? Because I want this project to be a fun one; something I like to hack on after office hours. But whatever technology I tried so far (Scala/Lift, Ruby on Rails, Erlang/Nitro, Smalltalk/Seaside, JavaScript/Cappuchino for the frontend) turned out similarly: with the insight that web technologies are just not fun. It’s horrible.
I finally implemented a small demo version with Ruby on Rails and we even started a book project, a greek mystery inspired by our group trip to Karpathos. The app worked fine but the problem was the same I experienced in an early email-based trial we did many years ago: after a round or two the whole thing dies down (and the individual stories diverge). Oh well, maybe some day I have time to experiment more to adjust the writing process, because I am still convinced that it has a lot of potential.
(here's the code for the rails website)
Brainchild
(View the old website with more detailed information)
This was a project where I wanted to see what one can do with tablet PCs (before the iPad came out:). The idea: everybody in a meeting has a tablet. The master prepared a presentation as a number of slides which she can stream to the other participants.
Everybody has three layers where he or she can draw on: the shared presentation layer (the “original”), a shared discussion layer that can be erased with a single click, and a private layer that is not shared with the others.
Everybody can also see the pens of the other participants thus knowing who is doing what.
The specialty in this app was the user interface that was designed to work with the pen as the only input device. All the menus (for selecting the input mode, color, line thickness, etc) were round and for optimizing screen space you could make the menu disappear automatically – just like the dock on the Mac. My favorite control was the “joystick” that allowed the user to scroll on the canvas.
In later iterations, a student of mine added a gesture and handwriting recognition that allowed the user to draw shapes (shaky triangles and arrows and the like) or text which were translated into their abstract counterparts (real triangles and text). But since that’s her work, I don’t include it here...
(The code: Brainchild.13_07_2006.zip)
(Here is a version with shape and character recognition, written by Ruihua Jin, a student of mine)
CourseRegistration
A small ruby on rails app implementing a simple course registration. For years, we used some overly bloated webapp to allow students to register for classes and recitation groups. The problem was, that we only used the registration part but the UI had thousands of other links and stuff in it so that the students always had problems to find where they should register for.
I hacked together this little app essentially in an afternoon. Not bad, considering that that was my first self-made ruby on rails app ever.
It worked fine for the time we used and needed it but it is far from being a stable solution. The login mechanism was a little hacky (due to the way authentication worked here at that time) and it is known to be vulnerable for cross site scripting (which I didn’t consider to be a big issue for us, because everybody has to log in with a university account and is therefore well known).
After some ruby on rails upgrades, the app worked less and less reliable (in other words, it started to periodically die after we used it for two semesters) but since we didn’t need it any more, I didn’t bother.
(The code is here: Registration App.zip)
Transactional Notification Center
This was an entry for a competition announced by Aaron Hillegass from the Big Nerd Ranch. He gave a talk about the fact, that working on the Mac OS X Cocoa foundation classes can be very exciting even though it might sound boring at first. So that’s why he asked for innovative functionality that – in theory – could become part of the foundation framework.
My entry was this Transactional Notification Center which won the first price: a free course from the Big Nerd Ranch.
The BNZTransactionalNotificationCenter is pretty similar to the NSNotificationCenter. One can register observers and post notifications.
Unlike the NSNotificationCenter, however, the BNZTransactionalNotificationCenter can wrap multiple changes into one transaction and does not fire all the time for each individual change. Only when a transaction is committed, an event is posted. The neat thing: when a transaction is aborted, all the changes are undone automatically. So it’s not only helpful to “bundle” related changes but also gives you some automatic rollback facilities.
(Get the code here: BNZTransactionalNotificationCenter.zip)
Software Cinema
In my diploma thesis, I worked together with four of my fellow students on a project called Software Cinema. We developed a tool that allowed you to draft interactive ubiquitous systems by shooting and analyzing video films.
I wrote the editor (in Objective C) that allowed you to draw the UML sequence diagrams to model the interactions of the objects in the video. The highlight was the mode, where you could flip the video onto the Z-plane and watch the sequence diagram flow through the video while the video was playing (see the screen shot above). The “life lines” of the objects moved left and right when the objects in the video moved so that it always went straight through the middle of the object.
We applied for a patent (US2008/0288913) but discontinued it now. Anyhow, I cannot upload the sources here. (They wouldn’t work on modern systems anyway because so much has changed in quicktime since then.) But if you are interested, I am sure my old group at the Technische Universität München can help you.
Versetzungsplan
“Versetzungsplan” is a program we wrote for and sold to the bank I did my internship in. It tackles the task of distributing apprentices to departments given multiple concurrent requirements such as: how many apprentices can a department take (min/max), what types of apprentices does a department need (1st year, 2nd year), what departments would an apprentice like to visit (3 choices), and special phases such as school periods or trainings.
The program then does a best-effort approach (a somewhat smart try&error) on distributing the apprentices to the departments and is then used throughout the rest of the semester to manage all those apprentices (sending mails, keeping track of them etc.)
All this was written as a Microsoft Access database. Because the Database I have still has some personal data about apprentices, I don’t want to upload it here. But if you are interested just send me a note and I can make the program (not the data:) available to you. (For my record: here is a password protected ZIP with the app)