Foreword against censorship
I love Haskell. (try it, good tutorial)
Also look here
Shrinker42 @ Twitter - I update that more frequently at the moment.
Moving to a new host
The main version of my website is moving from http://shrinker.beyond-veils.de/ to http://shrinker.seriouszone.com/.
Microbrush 3
Microbrush 3 now has working undo/redo and more stuff.
Latest changelog:
Microbrush 3
There is a new version of Microbrush 3 available.
This one brings a new main menu and views now have a checkbox to override the autofocus.
Updated my parser generator
I've just released a new version of my parser generator named Imperator, basically redoing most of it, and purged the now outdated versions from the downloads. It works very well now.


Also I've started playing around with random level generation. It's a fascinating topic that deserves a lot more attention.
Microbrush 3
Many versions of Microbrush 3 were released, but I didn't really write news about that. I've just purged the old versions and added a patch addressing problems I've found since the last release.
Cache problems on my homepage
After a long time, I finally figured out a cache-related problem on my homepage. Often, when uploading new content, it would only be displayed after refreshing the current page. That counted for me as the creator and for all my visitors, practically hiding updates to my programs for a few days easily.

The root of this problem is that the web server correctly sends "last modified" metadata along with the served HTML pages, but the browsers prefer using their cached versions anyway. I read somewhere that there is a formula in an official RFC document that applies to this part of browser design. The formula involves the duration from the last modified point in time of a served webpage and the current time. The longer this duration, the further in the future the cache expiry date for that page will be set.

My HTML pages now all have this meta directive in their headers, causing the browsers to mark the respective cache entries to expire very quickly, so when a site is navigated to again, it is much more likely to be requested fresh from the webserver again: <meta http-equiv="Cache-control" content="no-cache"/>

For developers, it is interesting how this behavior can be checked:
My diploma thesis
My thesis was about adaptive procedural vegetation distribution for terrains.
The thesis (in German) and the reference implementation (in English) can now be checked out here.
Creeperchest 0.0.8
Creeperchest 0.0.8 is available now.
Creeperchest 0.0.7
... still not dead. I can only judge by page visits and forum responses, so I have doubts that anyone ever really used it so far, but well...
I also once tried to get it into the relevant Minecraft news, but yet another YouTube video was posted about instead. One can't imagine the effort that is put into such a project, at all, yet there is so little feedback.
Listing it in the MinecraftWiki didn't work either because of some kind of vandalism protection. And I couldn't find anyone to help me with that... :(
That's basically the most frustrating thing imaginable.

It is now available in version 0.0.7 and brings a bunch of improvements for the rendering aspect of the program. Among other things, it's now uncomparably faster, and the renderer can be configured fully from an external config file.


On an unrelated note, I have unpublished my Type2 project. This little tool from my personal toolbox that is evolving constantly wasn't worth the publishing effort alone anymore.
Live for today
Our grandpa passed away on the 21st of February.

The cancer devoured his body, and at the end he lost the ability to walk, to talk, to eat, and was riddled with seizures and pain, all within a few days. He managed to stay at home with his cat until Valentine's day, a week before he died. The few days leading to his passing away, the pains and seizures seemingly stopped, thanks to the good care of the hospital personnel, and because his body was giving up. The day before he passed away, he just lay there in bed and breathed only 2-3 times per minute. On the morning of that Friday then, we got the call. For all we know, there was no suffering anymore then, as his breathing and body functions just stopped while he was asleep like that. He leaves a gap just like his wife did in 2011. She died to cancer, too.

We visited him very often in the end and just talked about things and ate together and were there. I asked if he was thinking any different in this phase of his life, but we figured that aside from extra fear, there doesn't seem to be a big conclusion at the end. You just think and think and get tired.

I always say... don't live for the day after tomorrow. Planning ahead is good, but it's only the here and now that you can be sure of. Harness the day, find a spot for your personal peace every day. Don't wait for symbolic days like birthdays to see your relatives, or to say thanks. They are out there, always happy to see their family.
Welcome to 2014 + Creeperchest 0.0.6
This year starts off really bad for my family because my grandpa is just losing his fight against cancer. It's a devastating experience to see a loved relative leave before their time, in pain and struggle, and you can't do anything about it but to try and make them feel comfortable a bit.

I have just released a new version of Creeperchest, my Minecraft world editor. It is now available in version 0.0.6 and finally features rendering of the actual world blocks.
There is still a long way to go in terms of interactivity, automatically rendering the stuff around the viewer and so on, but let's go one step at a time.

Creeperchest 0.0.5 released
Creeperchest, my Minecraft world editor, is now available in version 0.0.5.
An updated introductory tutorial is available here.

Notes about my level editors
As posted here.

Hello, dozens of new members o_o
and hello, Neolantis, who invited so many.

Seeing that I suddenly have the biggest personal audience for a project of mine so far, let me speak a few words about what is going on with my Microbrush level editor idea.

The year 2013 has been unhealthily busy for me with my paid job. Aside of my editor technology, I've also delved deeply into the world of functional programming with Haskell. I want to end up with a static code analysis that will change the way my company works. That project has been rather successful so far and should have a long-term positive impact on my life and my company and therefore the region where I live. The only downside is that I can't really share any information online about that project, as it's not helpful to any gaming community.

Microbrush, as a big project, has been my guide for a long time now, and along the way I decided to start with something smaller first, in the absence of enough time to do big steps.
There is this level editor for Minecraft: http://www.minecraftforum.net/topic/1902805-creeperchest-my-little-level-editor-work-in-progress/

It's based on the same technology. Every progress I make in that editor counts directly for the planned Microbrush 3 too, since they are extremely compatible to each other. In the end, it will actually be possible to copy over some plugins, recompile, and then launch without any hassle.

You might notice that I could not add a 3D mode to Cc yet. That is because I had to do a lot more work under the hood first to build a solid foundation of what is to come. My mistake with Microbrush 2 was that I didn't plan for the future. With this new technology, I did, and it will endure the ages. It has a solid programming and plugin system and a solid UI.

On the way to adding a 3D mode to Cc, I need to make some changes to the underlying framework again - in terms of updating which data to render, etc., and then later, I hope to upgrade that to a multithreaded rendering progress.

Depending on the impact of Cc with a 3D mode, I will have to see how to go on. Understand that my free time for this all is extremely limited, and as a result I have already tightened my workflows so they are now as efficient as I can make them be. Anyway, while adding a 3D mode to Cc, the overall thing will advance a lot again, and those achievements will be available to Microbrush 3 later too.

Now, what is the difference between Cc and Mb3? The general controls and plugins for the camera, the projections, handling of open worlds and views - all that will be exactly the same! What differs will be the underlying API specific to the game. The API I have created for Minecraft maps all the important Minecraft level data to easily accessible data structures that are quite good to work with. Based on that, I can "rapidly" develop tools to manipulate the world. Because this concept has proven to be very successful for me, I will go the same route with Mb3 later. There will be a programming interface for manipulating brushes and entities, and the common tolls will just harness that interface.

That, of course, means that both editors can be extended by their users out of the box. You will be able to make new tools or explore level generation from scratch.

I won't have much other news to offer on Mb3 for the time being, as I am only one person living on a fulltime job, but trust me when I say that I have a plan and a workflow to realize that plan. It might be that Mb3 will support Half-Life 3 first, if that doesn't become one of those games mainly created in an external modeller. There's still so much to do for me...

Thank you for your attention and your faith in me. It's quite motivating to see people actually follow an idea o_o
Creeperchest 0.0.4 released
Creeperchest, my Minecraft world editor, sees another release!
You can now copy or swap pieces of the world with it.
Creeperchest 0.0.3 released
In this new version of Creeperchest, my Minecraft world editor, you can now edit the player profiles of a server world!
Go check it out! :)
Creeperchest 0.0.2 released
Rawr. :D
I've put together a new version of Creeperchest, my Minecraft world editor.
This version features a bunch of new features, including analytic gimmicks like counting blocks by type or locating special blocks.
Go check it out :3
Creeperchest 0.0.1 released
I've put together a Minecraft world editor.
It can't do very much yet, but might already be useful to some. :)
Haskell and parsing
I have put a lot of effort lately in re-realizing a parser for my own programming language with Haskell.
On the one hand I have the grammar described in BNF.
In Haskell, I've isolated a little set of functions needed to do state transitions and all that, and used that to describe all the grammar rules statefully on the other hand.
In the last few days I've done some more experimenting and managed to lock the information that was realized as function definitions and calls into a descriptive data structure.
Then I realized that now that I have it lying around in a data structure, I might as well visualize this grammar data...
And so I did, from my Haskell program, as a directed graph in GraphViz.
Here you can see the first few rules of the language that powers my graphics engine.

The TypeDefinition rule (bottom left) shows how intuitive it can be read - with a little knowledge about how to interpret these diagrams, of course.
The first thing must be a "type" keyword.
It must be followed by the sequence "name" keyword, "assign" symbol and an instance of the "Type" rule.
That sequence can be repeated, and such a repetition is started with a comma token!
If there is no comma token, the rule terminates.

After months of using Haskell for stuff like this, it still feels like I've only merely scratched the surface so far.
I really wonder what is yet to come out of this...
I'm on my way to tackle PL/SQL with a parser designed from scratch.
Welcome to 2013

From January 12th to January 26th, I roamed around in Limay, Yvelines, France. I visited a friend and we traveled a lot in and around Paris. It was just plainly awesome. France is now like a fourth home to me (after the United Kingdom and Finland accompanying Germany as valid home locations)

Around the new year's eve, I was very busy playing around with Haskell. Monads were a big problem for me, but I can use them properly now. Strictness as a solution to laziness causing memory "leaks" and some performance issues was a big problem for me, but I can handle that now. I absolutely love Haskell. I suspect that dealing with this beautiful programming system will take away my attention from imperative programming (my 3D engine and editor technology) quite a bit in future. Well, that's life.

If you want to make sure that an expression is evaluated "deeply" with the seq function in Haskell, to prevent too much data from lingering around on the heap, do note that it only evaluates one "layer" of the thunk on the left side. If, for instance, you have a list whose contents you want evaluated, the way to go is to foldl over the contents with the seq function and a neutral element of the list's element type for the end. If your data is structured in other ways, you gotta find ways to iterate through it at the deep core... If, for instance, you have a list inside of a list, you can (foldl . concat) it...
A good way to debug an existing out of memory problem like this is to put an undefined somewhere into the core, and then gradually seq your way through.

For all of 2012, we had a modded Minecraft server running, and it was a complete success. Now, in 2013, we have a new version of it on-line. Hopefully it will withstand all the players nibbling on its world for the whole year.

For now, there will be at least half a year of non-stop job work, as our company is quite busy now, and no new vacation times will be granted until the worst part is over.

My family (mother's part) is alright. My father still refrains from being in contact with me - That situation, fueled by his stupidity and ignorance, will probably never be resolved. My grandpa started his cancer treatment. The two family cats are doing well. I miss the family dogs (father's part).
I wish I had more programming stuff to show off online, but the truth is that I dig really deep and find my satisfaction down there alone most of the time!
SecuROM - Piece of shit
I've decided to upgrade my desktop to Windows 8. Being a good citizen, I wanted to revoke my SecuROM-backed licenses for the Borderlands 1 DLCs first. I downloaded the "RevokeallDLCs.exe" tool from the SecuROM website.

The tool cancels at 30% without giving a reason and offers to direct me to a help page or to run a manual process.

The help page on the SecuROM site that is opened is not existing and redirects me to the manual license activation process, which is the exact opposite of what I want to do.

The manual revocation process has the tool generate a request file that is then uploaded to the SecuROM site and confirmed with a file that is processed by the tool. Running the step in the tool that should generate that very request file actually doesn't generate a file at all.

My next step was to debug the revocation tool - to check out with procmon what kind of resource conflict is probably going wrong. With procmon running, the revocation tool refuses to start.

This means there is no legal way for me to revoke my licenses to the Borderlands 1 DLCs. Thanks for screwing me over, fucktards. SecuROM is Nazi bullshit. I wish I had opted to obtain my Borderlands 1 illegally instead. As a consequence, I must screen future purchases for whether they have Securom activation limits or not, and if they do, disregard the titles altogether.
Humble Bundle - THQ screwup
<rant about censorship>
English summary of following text: Screwup in Humble THQ Bundle because THQ is a very shitty publisher. It was attempted to give me the special "low-violence" version of Saints Row 3, but that version is inferior in all aspects and I would rather chop my hands off than activate that thing in my Steam account.

Gestern fand ich in meiner Mailbox den Newsletter vom Humble Bundle vor und wollte sofort zuschlagen, da dieses Mal Saints Row 3/Saints Row: The Third mit bei sein sollte. Ich zahlte entsprechend den Bedingungen zweimal mit 6$ mehr als den Durchschnittspreis und freute mich schon darauf, dieses Spiel in meinem Steam mein Eigen nennen zu können... doch daraus wurde nichts. Genauso wurde daraus für meinen Bruder nichts, dem ich ein Bundle als Geschenk hab zukommen lassen.

Saints Row 3 ist einfach nicht aufgetaucht. Ich hab dann deren FAQ durchgeguckt und gelesen (es folgt die aktuelle Fassung):
We are aware of the issue going on with Saints Row: The Third Steam keys for German customers who purchased the bundle prior to 23:00 CET on November 29th.

Please email us at contact@humblebundle.com with your Transaction ID and the subject "Saints Row Steam Key", and we can get you a Steam key for the German version of Saint's Row: The Third.
In der alten Fassung stand noch nichts von 23 Uhr.
Ich hab dann ein wenig recherchiert und gesehen, dass THQ mit SR3 in Deutschland wieder die gleiche Scheiße abgezogen hat wie mit SR2: Mit deutscher IP lässt sich nur die Low Violence-Version aktivieren, welche weniger Spielinhalt hat und wieder einmal durch die Schnitte deutlich schwieriger geworden ist (siehe Schnittberichte.com). Zudem ist die Version online nicht mit der internationalen Version kompatibel. Darauf hatte ich ja nun gar keinen Bock, hab also die vom Humble Bundle angeschrieben und nach zwei Keys für die internationale Version verlangt, die ich wenigstens legal auf einer Auslandsreise aktivieren könnte. Man hat mir zwei Keys für die Low Violence-Version geschickt.
Unfortunately, this is due to requirements regarding violence in video games in Germany, making the original version unavailable. Here're the Steam keys for the Germany-specific Low Violence version of Saints Row: The Third that will work: XXXX
Ich habe geantwortet, dass das mit der Gesetzeslage blödsinn ist und ich diese Version unter keinen Umständen mit meinem Steam-Account assoziieren werde, und dass ich die Aufschlüsselung meines Kaufpreises umgehend so geändert sehen will, dass THQ davon gar nichts mehr abbekommt. Man hat mir dann das Geld für beide Bundles zurückerstattet.

Scheiß THQ.

Die internationale Version von Saints Row 3 ist indiziert, OK. Das heißt, dass sie nicht offen beworben werden darf. Sie ist aber nicht zur Beschlagnahmung ausgeschrieben (wie z.B. Left 4 Dead 2) - hätte also eigentlich verkauft oder geschenkt werden dürfen. Ich weiß nicht, was THQ sich dabei gedacht hat, aber diese Regionssperre ist der letzte Scheiß, und somit geht mal wieder ein ehrlicher Käufer verloren.

Seit heute Nacht kann man das Bundle kaufen und bekommt abhängig von IP oder Zahlungsmethode die Deutsche oder die Englische Fassung von SR3.
Man sollte dort also auf keinen Fall mit einer deutschen IP einkaufen gehen.
</rant about censorship>
Windows 8
Despite the prejudice even I had, I upgraded my laptop for 30€ 3 days ago and am playing around with Windows 8 (and Visual Studio 2012 Express) since... and one thought keeps coming back to me: "Microsoft, what took you so long?". Windows 8 is thoroughly well designed in all little details I have discovered so far. I really like how it turned out, and I see myself becoming a little more productive than before in this neat and clean new system. I was already afraid that the new system would mark the end of the series, but that worry is now gone.
Fun with Firefox
I've lately been spending some time doing a little more web programming. You have probably not noticed it, but this new design of my homepage has already undergone quite a few technical changes over time - little improvements I made as I learned new things! Working with the error window in Firefox, I noticed today that there is an address that you can type which displays the Firefox interface in itself...
Copy and paste this into your address bar:
Also interesting to try out: resource:///
So I've read a bunch of books
Hello there!
I've just finished reading Limit by Frank Schätzing. Now that was an interesting trip. I've already read a lot this year... so while at it, I've updated my reading list not only with Limit, but also with 5 more novels of Tom Clancy's Jack Ryan series that I've read recently :3
What else have I been doing? I've been working so much on Microbrush 3 (Steam Group here) until I realized that I want to deliver results a little faster... so I've started working on a little Minecraft editor. The first steps are documented here. Both editors are being developed in parallel now (since their technology base is largely the same). It is kinda sad that you can be full of ideas, yet still have to make your decisions and prioritize projects :(

Aside from that, I've taught myself the art of using Haskell, and over the past few months I fell in love with that language (using GHCI). I'm building a code analysis system with it that I want to use at work. As you can see from the fancy new website design, I've also been messing around with web technologies a lot recently, and that is still going on -- the front-end of that code analysis thingo will be implemented with it!

Work's keeping me very busy. Family troubles calmed down. My brother married, and my grandpa got a little cat! Sadly, my father dumped me almost precisely a year ago and never showed any sign of interest since then. I never understood how a parent can turn against their own child like that, after telling it over and over again that they'd always be at their side.

Got to know a bunch of new people at the EF18, gonna visit one of them in France in January! And I had two friends stay at my place for vacation since September. It's interesting how when you have a visitor, you turn into a local tourist yourself and explore your environment. My most enjoyable activity turned out to be feeding seagulls at the beaches. You throw up cookie crumbs, and they don't even make it back to the floor!

The weather today was very rainy, but for that, very beautiful!
New website
So I have just redesigned my website from scratch.
Hope you like.
(JavaScript is now required here.)
Welcome to 2012, Hangover, Vegetator, Microbrush
Happy new year, my readers!
The last year has been quite a year... we have suffered from the passing away of our beloved grandma, I have been to Finland for the second time, and then I... uh, I went somewhere else for the first time, with life-changing effects of the strongest kind.

It seems that interest on Hangover has picked up a bit, so I've decided to add a little more info to the page. And there is still my diploma thesis which I should really publish... I shall do that soon.

So what have I been doing all day? I've been almost exclusively working on stuff for my paid job, and then I've been almost exclusively playing Minecraft. And then I've been almost exclusively working on Microbrush 3. You can currently find the most detailed reports on my work in the Microbrush 3 Steam Community Group, but now there is also the new place at Seriously! forums - the Microbrush forum. If you are denied access for not being registered, just wait a bit - it's a bad flaw that should be fixed soon. Around the new year transition I've been messing with the second plugin in this all-new technology - for logging stuff in the editor. The technology I came up with so far is a lot more flexible than I had originally planned, and I hope it will be just nice for everyone deciding to try it out. At the very moment I'm working on putting my totally super-awesome 3D grid into the editor... once that works nicely, in its multiple views, I should put up a video again!
Serious Sam 3: First impressions
It is ****ing awesome.

I think this has the potential to become the best of the series, both in terms of technology and overall gameplay feel. It is not just a step, but a 100 mile marathon sprint in the right direction. From the standpoint of messing around with beta versions, this one definitely sticks out compared to the others. Croteam and Sam, they both have matured. This is how I envisioned SS2 before that one turned out to be cartoony with an unpolished feel to it. What amazed me the most so far, I guess, is how Croteam managed to create the open spaces we are used to from their previous SS games in this new one. - But not anymore do the levels look very clean and pre-designed to do nothing but provide space for the enemies, but level design and considerations for building up fights go hand in hand here like never before.

Screw you, Duke, with your girly feet
Screw you, Gordon, with your scraper for the back
Yep - Toughneck in action!

Forum thread about this
ATI/AMD failure: atan
A really fucking long time ago, I found some bugs in ATI's drivers and reported them, but to date they still remain unfixed. Nothing is rendered when nothing's bound to attribute 0, there is a really bad issue with built-ins when you use inputs with uppercase letters, gl_VertexID doesn't yield the actual starting id, de-serialization doesn't work properly when using the std140 layout, rendering the shader binary cache useless AND SO ON. During my Finland vacation, my ATI-graphics laptop almost drove me nuts, and now, back home, I could compare with NVIDIA and figured it out: ATI's atan (arc tangens) functions yield garbage.
Here is an illustration:
NVIDIA, all symmetrical and proper.
Workaround? Not pretty!
float a; if (d.y >= 0 && (d.y <= d.x || d.y <= -d.x) || d.y <= 0 && (-d.y <= d.x || -d.y <= -d.x)) a = atan(d.x, -d.y)-Pi/2; else a = atan(d.y, d.x);
ATI/AMD driver update
So they now display advertisements in their installers and in their control panel? What the fuck? My idea of world peace involves purging all traces of ATI and their shitty technology. It is impossible for me to illustrate how much I despise them.
Minecraft 1.6.6 Beta faster mining/click-mining fix fix
This little patch fixes the annoying delay before the actual mining of a block is started in Survival Multiplayer (SMP)
*NEW* YouTube video of the fix in action
Imperator 1.2.0
After two minor versions for fixing bugs in 1.1.X, a new major version (1.2.0) of Imperator is now available.
This version comes with the ability to define strings with custom delimiters/quotation marks in the grammar, as seen in SQL (q'xyz').
Imperator 1.1.0
Version 1.1.0 of Imperator, the parser generator, is now available.
This version features proper C++0x code generation and, and this is new, Java code generation. Also, there is now an option for making the parsed result data entirely mutable, for those who wish to alter and re-save it.
Minecraft 1.5_01 Beta faster mining/click-mining fix fix
This little patch fixes the annoying delay before the actual mining of a block is started in Survival Multiplayer (SMP)
YouTube video of the fix in action
Re-release of Imperator
There is a new version of Imperator available (1.0.0).
Imperator is a parser generator that is just good, at the input side (the grammar language is rather intuitive and clearly structured), and at the output side (the generated parser, which is trivial to integrate, yields a properly typed and clean parse tree with all location information available).
Currently, it works rather well for generating parsers written in C#, and C++0x support is already in there too. And soon there will be Java support, and a few other cool things.
Changes to this website
Minecraft locked chests
An April fool's joke? Which impacts the game in a negative manner? Which is forced to every server and every client by the automatic update that can not be turned off? Which is removed in a subsequent update, putting a stop to all mod work that was done since then? WAY TO GO NOTCH!!! SCREW ALL YOUR CUSTOMERS :D MAYBE THE WHOLE GAME IS A JOKE, BECAUSE THAT WOULD FINALLY EXPLAIN WHY ITS PROGRAMMING IS SO SHITTY :D
Minecraft 1.4 Beta faster mining/click-mining fix fix
This little patch fixes the annoying delay before the actual mining of a block is started in Survival Multiplayer (SMP)
YouTube video of the fix in action
Studies are over
I am now a Dipl.-Inf., one semester early, with an A for my thesis + defense.
At our university and chair, that is equivalent to a Master of Science in computer science.
Attack of the misconfigured AIM spam bot!
(8:56:42 PM) wubbaduckie321: hii
(8:56:54 PM) Shrinker142: yes
(8:57:11 PM) wubbaduckie321: sorry if i bothered you was just sittin here how are ya??
(8:57:23 PM) Shrinker142: yes
(8:57:36 PM) wubbaduckie321: {oh cool|ah cool|ahh|ah nice|coool|i c|welll} wanna {try|do|see|look at} something {real|really|pretty {fun|cool|easy|quick}??
How to crash Skype
In a Skype chat window, switch your keyboard layout to cyrillic and write a letter in cyrillic. That is too much for Skype, causing it to freeze.
Future Developments
Whatever 3D app I release next, I will officially only support Nvidia systems. I've reported an OpenGL bug to ATI/AMD half a year ago, and they confirmed that they put a constraint there which was not backed by the OpenGL specification. After checking it out tonight, I can confirm that the bug is still there. I've fiddled around with uniform buffers tonight, and it all simply worked on my Nvidia system... now I've put it on the ATI/AMD system - aaaand? Poof! It would not be so bad if it only happened to me once, as a generic programmer, but it happens ALL THE TIME, I can DEPEND on ATI/AMD NOT IMPLEMENTING OPENGL ACCORDING TO THE SPECIFICATION. So, yeah, fuck you ATI/AMD. Study the meaning of the term "specification" and stop claiming that you support the respective technologies, because you don't. My only wish is that you vanish. Even if I had a hundred Nvidia cards breaking down on me, I would still prefer them, because their drivers always work according to specification.
News archives
2010 2009 2008
Design by Shrinker.