Sonntag, 22. Dezember 2013

Dark Elf Painting Finished

So I finally managed to get my Dark Elf team painted and I must say I am kinda happy with the results. Of course any pro painter would just laugh at it but hey, it's still the best I managed so far ;-)

The color theme is Naggaroth Night, Xereus Purple, Hoeth Blue and Shining Gold. So rather traditional for this kind of team. As always painting the eyes has been the most pain for me and only for the Witch Elves it turned out okayish, so I still have a lot to practice in this area. Also I could not be arsed to bother much with high lights and shading but I will tackle this with the next teams.

This has also been my first project where I used electrostatic grass and I think it looks pretty neat. First the bases have been flocked with brown acre and then another layer of glue and grass finished it off. That way in some places you can see the sandy ground and hopefully this does not mean I have to replace all the portions of grass the minis will loose over time.

Finally I added two layers of spray varnish, first glossy then mat to preserve the color as good as possible.

And yes, I really need to get a better camera for future pics ;-)




























Montag, 30. September 2013

Iterating in Scala Play templates and Reverse Routing

Today I finally solved a puzzle that bugged me for the last few days and even though it is in some kind a case of RTFM I decided to put it here because someone else might encounter the same problem

Play has pretty powerful templating engine that allows you to do lots of different stuff when generating html. Two of those features are iterating over lists and genrating URLs by reverse routing.

My problem was that in my template I was not able to get a URL out of the reverse routing and at first I thought there was a mistake in the routes configuration or in the template syntax and searching the web and documentation for it drove me almost mad.

The solution was something completely different though. In a template you can basically inject any Scala code fragment which also includes flow and control structures. The documentation about ScalaTemplating states that you can use a for loop to iterate over list items but the framework also allows you to use the map function of a list to process it's items. The code compiles, the page gets rendered without warnings or errors and everything looks fine at first. But if you want to insert a link generated by reverse routing for each item you are screwed with this approach. For some reason the reverse route does not get generated in this case.

@items.map(item -> {
     <a href="@routes.Application.index"></a>   <-- Creates <a href="@routes.Application.index"></a>
})

@for(item <-items) {
      <a href="@routes.Application.index"></a>   <-- Creates <a href="/"></a>
}

So to sum it up: Always use "@for" to iterate in Play templates to avoid stuff like this. Though I don't really get why it has to be that way...

Mittwoch, 12. Juni 2013

Constant Tarfiles For Resumable Downloads

Our Situation

 

We have an Java based backend server providing daily changing content to mobile applications as a gzipped tar archive. The content can change over the course of the day and some applications need to download the complete content in the new version, while others need to get the diff between some versions. In addition old content from previous days has also to be available in all those variations. That means it is not really feasible to have all possible different tar files pregenerated and stored in our backend (yes Hadoop and friends stand ready to help but at the moment this is not an option for us for several reasons).

So what we do is, store the different versions of our content, calculate the needed tar files,  deliver them to the requesting app and put the file into a caching server to reduce load but of course we cannot cache everything permanently so the entries timeout from time to time.

 

Our Problem

 

Some applications reported downloading issues that we at first blamed on general mobile network issues but after a while it became evident that there was more to it. After some debugging on application side it seemed that in some cases the app was not able to resume an interrupted download due to the checksum of the file having changed.

 

The Underlying Cause

 

This issue was quite a surprise for us as we were sure that for every kind of request the corresponding file was created from exactly the same content every time. But by bypassing our cache the effect could be reproduced immediately by downloading the same file twice from our server. The mighty diff tool told me that the two archives differ even though their extracted contents did not (phew...).

My first suspect was gzip and a quick Google search brought up some hints about the gzip timestamp header that is contained in the first 10 bytes of an archive.So I fired up my hex editor to check the starting sequences of the two files only to be disappointed because they were exactly the same. Having a look at the libraries source code of GZipOutputStream (we use the Apache compressor lib) revealed that this implementation sets a fixed timestamp for all gzip archives (all fields are set to 0 whch I think is the right thing to do).

Looking at the differences of the archives in my hex editor and matching those against the tar rfc docs it became clear that the culprit was the mtime header for tar entries. In our code we construct the tar entries using the filepath and then add bytes from a stream to it. The invoked constructor sets the entry's mtime to the current time so it is different every time the archive is created. Eureka!!

 

The Solution

 

Now that was rather easy to fix, we now calculate a timestamp value based on the date the content was created at, with a few tweaks, that is constant for each single file and set that as mtime for each tar entry we create, et voilà :-)

 

Sometimes They Come Back

 

A few weeks later we got reports about some strange download issues again, this time with only with certain content packages and it was absolutely not obvious where those came from. We had a lot of red herrings to hunt and during one of those hunts I noticed that files that should be identical in some cases simply weren't. Again diff and hex editor came to the rescue and I found that for some entries the mtime headers again did not match!!! So we got down on the code again... Did I forget to handle any tar entries? Nope, everything was covered... Any issues with entries being added twice or changed in other methods? Nope.. nothing.. In addition after extracting the tar all files had the desired timestamp, no sign of the other timestamps at all.. Oh how I swore...

So back to checking the archive contents.. then the tar docs.. and again the archive contents.. finally I found a clue, a classic tar entry has only 100 bytes reserved for it's name field which contains not only the file name but also the complete path to the file within a directory hierarchy and the offending files lay within a rather deep directory hierarchy and had pretty long names itself. To change my suspicion to certainty I added a copy of a file with the correct timestamp to the content and altered it's name to exceed the 100 byte limit. In the resulting tar the copy again had the invalid timestamp and just then I noticed something else, for the copy's name there were two header entry's while the original file only had one.

So I did more research about long file names and header fields and dug into the code of the TarOutputStream class. To handle long file names tar can use additional posix or gnu headers and in both cases the TarOutputStream creates additional tar entries using the same constructor as we did in our code. So if you have long file names in our archive it will contain additional tar entries that always have their creation date as mtime header value!! Oh man, that was mean..

 

The Solution - For Real This Time

 

The only way to fix this was to copy the code of TarOutputStream to our project (and TarBuffer as that class is a dependency of the former with default scope) and adjust it so we can set a custom timestamp for the additonal entries.Not my favorite way of fixing things but unfortunately we had no other choice here... So beware of tars with long file names if you need to rely on the checksum..

Montag, 27. Mai 2013

Siringit Tantor Painting

After a rather long time I finally got around to use my pretty limited painting skills once more, this time on an Elfball Siringit Tantor.

Even though this is by way not as good as most other painters would do I still feel happy about getting it done. It took me only about two days which is almost lightning speed for me and it looks almost half as good as I had hoped ;-)

Front


Back

Left Side

Right Side

Mittwoch, 3. April 2013

Devoxx UK 2013


This year Devoxx came to the UK for the first time after having a record of rather successful editions in Belgium. After failing to attend the Devoxx in Belgium for a few times due to loaded work schedules at the end of the year I thought why not try the UK edition in March, so this year was my first Devoxx as well.

 

General stuff


I must admit as it was the first UK Devoxx I was expecting a lot of issues and stuff going wrong, as it usually happens when an event gets organized for the first time. But to my pleasant surprise the whole event went very smooth and it was over all a lovely experience so I will definitely try to be back for the next editions. It was noticeable that the organizers put a lot of effort as well as sweat and tears into everything and that they really cared about it. We had some sponsor booths that handed out goodies, some raffles (I even won an infinispan book at the red hat raffle ;-)), free wifi (yes, everyone takes that for granted nowadays but still…) and an app to plan your talks, the latter was a bit buggy though but that was fixed for next year, so it is also a plus for me.

That said there are also a few things I think could be improved or suggestions that came to my mind and that I would like to share here. What bothered me somewhat was for one, that one BOF almost did not happen as the responsible speaker just did not show up. BUT cudos to Dan from the organization who took a few minutes of his time to get the group started about what a BOF is about (mainly more a big discussion among everyone who showed up rather than a regular talk) so we put up a list of questions and issues and just went from there. The other thing that pissed me off a bit was that the abstracts of the talks quite often did not resemble what the speaker really spoke about in the end. Quite a few times the topic form the abstract was done within 5 minutes and the rest of the time was spent on stuff related to it and even though it was usually also interesting it was not what one expected and it is annoying when you realize that 20 minutes into a 50 minutes slot. And yes, I am aware that this is a common problem at conferences but hey, it can’t hurt to mention it ;-)

Regarding suggestions the following things came to my mind:
  • Put the wifi access data into the welcome package
  • Try to have more power supplies in the talk rooms for people that want to try out coding examples on the fly because recharging in the breaks is usually not sufficient
  • The website did not say too precisely what kind of refreshments would be available for free and which ones would be sold (at least neither I nor my mates knew about that) and free tab water would have been cool (or did we just miss that?)
  • Maybe don’t shut down the wifi as soon as the ending keynote is over ;-)
  • The Quickies on the first day really cut into the lunch break and in order not to gulp done your meal you had to skip one of them while on the second day there were only half as many  and in general longer breaks. Would be cool if that could be evened out a bit in the future
  • Lunch was a broad variety of sandwiches, wraps and bagels so I think everyone found something suitable but the fact you had to give away a lunch coin when picking up your meal caused people to stack up their plates quite a bit and I am sure that not all of it was eaten in the end.
I know that all of that is nothing crucial and as I said before it was a nice conference and everyone should consider attending in the future. Oh right, move the date to summer!!! ;-)

 

Day 1

 

Keynote


Not much to say here, nice introduction of the team and the obligatory Queen joke that did not catch on much. Then there was a humorous talk by Kevlin Henney about the everyday life of programmers and developers with some funny analogies etc.

 

Continuous Delivery – David Farley


Good introduction talk about CD and even though I am familiar with the topic it did help to reiterate over the concepts and think about how they can be applied to your current work. The things I remember most are:
  • Do the difficult/annoying stuff as often as possible so you get better at it
  • Use the same deployment mechanism for each environment, something that we do only partially right now
  • Automate as much as possible
  • Everybody is responsible to get the stuff done
Especially the last point got me thinking what we can do at my work place. If you have external client applications that depend on your backend and that run on certain mobile devices you have to use those for your acceptance tests and this cannot automate those at least for new features.

 

Banking, how hard can it be? – John Davies


Somehow I was hoping for a bit more in this talk. Basically John pointed out how hard it is to establish new technologies in a large bank or any other big company. The sheer amount of Oracle databases that where in use at that particular bank was quite overwhelming (several thousands) and the idea you have to migrate all of them kinda blew my mind. All in all it sounded like an overly complex environment and the migration project was surely a huge effort. Also interesting was the fact that the FPML data structure in use in the banking sector could not be simply thrown at regular ORM tools like hibernate because those would generate 1700+ tables. He then did show some in memory dbs that they used instead but I must admit that I don’t remember which ones because it just was not very important to me.

 

Intro to NoSQL for busy developers (Quickie) – Trisha Gee and Kim Ross


Trisha and Kim gave a brief overview over the different types of NoSQL databases:
  • Graph
  • Document
  • KVS
  • Column Family
  • Sorted Maps
Also some typical use cases for a few of those and how eventual consistency works. This talk got me thinking if MongoDB was the best choice for our use case, maybe Riak or some Column Family database would have been more suitable.

But what I want to point out the most is that rhetorical this was an extremely pleasant talk, Trisha and Kim created a very comfortable atmosphere and it was just nice to listen to them. That is not a given at tech talks ;-)

 

Applications’s development using JavaFX2 – Thierry Wasylczenko and Jim Weaver


Now this was one I put great hopes in, I knew Jim Weaver’s book on JavaFX from a few years back and figured he would give some insights on the changes.  Thierry’s part was okay information wise apart from that he did not intend to give a demo of the visual editor even though that was announced in the abstract. Jim then said he’d cut his part 5 minutes short so we can see that demo, nice gesture but should not have been necessary in the first place. The downside of Thierry’s talk was that it was really monotone and hard to understand. To me it seemed that he had not much talking experience and I hope he does practice on that some more because I guess he could become a good speaker with his technical knowledge. So Thierry, if you read this, consider it an encouragement ;-)

Then Jim took over but not with much JavaFX stuff but instead he was talking about Java 8 features like Nashorn support, Websockets and web workers. All in respect to how they can be help with JavaFX development but still it was not quite what I was hoping for. But of course it was a good talk, so I am not unhappy with it.

 

Stop doing retrospective and start your Toyota Kata – Mattias Karlsson and Hakan Forss


This one was something different. Mattias and Hakan prepared a dialog where Mattias acted as a scrum master and Hakan was Kata coach that gave Mattias an introduction and they went through a typical Kata cycle together. Even though both were clearly not actors and should not try to become ones it was very refreshing and also entertaining.

Kata is a method to improve your processes in a continuous way. You first have to find out where you are at and write down your current state then you set a vision that should be quite ambitious as well as a set of target conditions that are some kind of intermediate goals you want to achieve. For a cycle you choose a target condition and how to reach it, that is your challenge. That is the improvement Kata. In the coaching Kata you then do some kind of mini retro to see what you accomplished and what problems you have. The cycles can be quite short, maybe even one or two days.

 

Hitting the limits of your hardware with Java – Peter Lawrey

 

Okay, this one was a disappointment, sorry I have to say it so harsh but that is how I feel. The sad thing is, that Peter Lawrey does know his stuff but in this talk, sheesh. First of all it was very hard to understand him then he did not really cover the basic problems a programmer should be aware of or how you can help with proper coding to avoid hardware limitation issues. Instead he did show slides with some performance tests he made and the resulting graphs. Also some graphs of performance issues and the audience had to guess what caused the problems. And then after 20 minutes (of a 50 minutes slot) he ended his talk for questions. The questions were then not even repeated aloud so that everyone knew what they were talking about. Well... enuff said..

 

Lambdas and Collections in Java 8 – Maurice Naftalin


Simply a good talk. Covered the basics of lambdas and how they can be used with collections for efficient coding. How and why the boilerplate parts can be omitted, what map reduce is about plus Guava features like Optional and Predicate that are part of Java 8. Pleasant to listen to, so nothing for me to moan about ;-)

 

Beyond Beauty: JavaFX, Parallax, Touch, Gyroscopse and much more (BOF) – Angela Caicedo


This was basically how you can get a pseudo 3D illusion with motion sensors to run on Raspberry PI with JavaFX. Well, it was not that much FX stuff in it, and most of the time was spent on the hardware spec of the PI and how sensors and signals can be read on pin level. IMO that was not too useful especially the latter as all of that is abstracted by the PI4J lib she introduced in the end. But it was a nice demo and it was obvious she knows her stuff. As that BOF ended early I staggered into another one of the same slot.

 

Is NAO your robotic overlord? (BOF) – David Snowdon


NAO is very impressive small robot, but this just seemed like a product demo, so no conference stuff IMO.

 

Get your head around git, Team Collaboration – John Stevenson


Now, John did not show up, no clue why. But Dan from the organization team spent a few minutes with us and got us started. We put down some questions people had and tried to answer them in a group discussion. Two voluntary helpers where also there and those had some git experience. I myself have only used git-svn until now but to my surprise this meant I had the third most knowledge on this subject in the whole group. But it was an interesting discussion so now time wasted for me.

 

Opening the hidden door: JavaFX development everywhere (BOF) – Angela Caicedo


So we met again ;-) This time there were only 4 people in total so we got together at a table and Angela gave a short presentation how packaging and development works with JavaFX. Of course I had some things to complain ;-) Like finding out in what mode you are, embedded or not, depends if the main routine gets a stage object handed to it that is something that should be abstracted by a static method call returning an enum. But it was informative and as such a nice end for the first day.

 

Day 2

 

Creating Games with WebGL and Three.js – James Williams


Cool talk. Gave a good overview of what WebGL can do, where it is supported what the drawbacks are and how Three.js as an abstraction layer can help to immensely reduce those by wrapping a lot of stuff. Gave me the urge to check it out and toy around with it.

 

Getting started with Websocket and Server-Sent Events using Java – Arun Gupta


Even though it took me some time to get used to the Indian accent, this was a solid talk. We saw detailed examples how Websockets and Server-Sent Events can be implemented, what client requirements they impose and also a working live demo. Kind of obvious but still worth to mention are the main differences between the two technologies. Websockets are truly bi-directional but require special browser support for it, while Server-Sent Events can be implemented using plain HTTP and thus can run on any browser but only provide one way communication. Websockets provide mapping functionality for JSON, binary and other request types and parameters are typed according to their position. I am sorry I don’t have much more to say here because this talk was surely a good one.

 

Dark Side of Agile – Mazz Mosley


Mazz spoke about her experiences with a large agile team working on the UK government website and what problems she witnessed. Sadly she did not provide any new insights or yet unknown solutions, it was more stuff that everyone with project experience already knew. Like that it can cause problems when the team is growing too fast, that documentation is essential but must not be overdone and team spirit is vital to success. But what I like was the way she presented her talk, very solid speaking, funny anecdotes and nice to listen too. So I hope to see her at another Devoxx again, maybe with a more complex topic.

 

What do you mean, backwards compatibility? – Trisha Gee


Now this topic sounded extremely interesting, finding new ways to change APIs without breaking the clients is always useful and after Trisha’s first talk on Day 1 I was really looking forward to this one.  Unfortunately the backwards compatibility part was done in five minutes as the original driver did use the wrong package namespace “com.mongo” instead of “org.mongo”, so the new API simply uses the new namespace and the old API can still coexist. Well, that’s what I call a disappointment. At least the talk itself was entertaining and had some interesting bits of information about the monog project itself. But still if I had known beforehand I would have chosen a different talk for this slot.

 

Does your WAR resemble the world’s largest bowl of spaghetti? Enterprise OSGi can help – Holly Cummins


Entertaining, solid talk about the basics of OSGi. While we have quite a few visibility mechanisms inside JARs etc. there is nothing like that on the level of JARs itself so the classpath gets rather polluted by all classes of all JARs even though only a few should be exposed. Also searching for classes throughout the complete classpath is a bit tedious. OSGi provides encapsulation for JARs and also has a graph like classpath structure. In addition OSGi modules can be removed, added and updated without any need to shutdown the virtual machine. So it could be a nice addition for many large scale applications but on the other hand you first have to modularize them properly. But maybe I get a chance to try it someday.

 

Introduction to Riak – Chris Molozian


Usually I don’t like product presentation talks but the NoSQL intro the other day got me interested in this topic so I figured I’d give it a try. As expected Chris focused on the key selling features of Riak but who can blame him for that ;-) The ones I found most remarkable are:
  • Data is stored in logical buckets using hierarchical structured names for faster lookups and query optimizations
  • Patches to the Riak engine can be deployed without downtime
  • There are no slave nodes and so you can issue read and write requests to each node
  • The interface is HTTP based and thus requires only very loosely coupling to application code
But on the other hand there were also a few drawbacks:
  • You have to run at least four nodes in a Riak cluster, recommended would be five
  • Conflict merging in case of data inconsistency seemed a bit strange, but maybe I just did not get it
  • A deleted record can still be read for a few seconds <- eventual consistency is not for every use case
The talk in general was okay and it seemed that Chris knew what he was talking about while he took on all kinds of questions.

 

Security in the real world – Matt Kilner


Matt gave a nice overview over the latest Java security issues and how they were caused by sometimes minor changes. Like changing the visibility of field in the ToolKit class gave way to the critical security hole of running any native command from a Java class taking advantage of the exploit. Another interesting point was that fixes cannot always be applied easily because the fix would break something else. Details about that can be seen on the slides to this talk and sure are worth a look. At first I had the impression the talk would also cover how application development should take security into account but that was just a misunderstanding of the abstract on my behalf. It was obvious Matt knows his stuff but I hope he gets some more speaking practice in because he did not seem that comfortable or used to speaking in public. Once he gets the hang of that I am confident his talks will become very popular.

 

The Future of Agile – Nigel Runnels-Moss


Oh boy... what can I say… When Nigel announced that he was hijacking this talk to speak about something else I should have just left but for some reason I never learn and always hope for a happy end. Man that was mistake.

Basically this was a “Why managers suck and are responsible for the death of our industry” rant, backed up with diagrams showing data of unknown sources that he drew questionable conclusions from.  Summing it with “this is intentionally provocative” did not help much IMO. Granted some aspects of the talk did make sense but those were rather quotes from books he referenced, e.g. managers are usually bad at what they do because as long as they do well they get promoted until they are above their level competence. But still it seemed as if he just held this talk because he likes to hear himself talking. Which he btw did… very slowly… by always making... pauses after… a few words… as if he was... reading to a child… Well, sorry to say but I just did not like that one, even though others seemed to enjoy it.

 

Summary



As I pointed out at the start of this rather long post, I did enjoy the conference even though there were some issues. Of course not all speakers are world class with a huge list of references and recommendations but that does not necessarily mean they are not good. And even if you get one or two not so good talks… that can happen at any other conference as well but with the cheap ticket price Devoxx offers one of the best values for your money you can find. So go and sign up for  next edition!!

Sonntag, 31. März 2013

London 2013

When some of my ex-colleagues told me they were going to London this year to visit the Devoxx conference and also spend some time in the city I figured it might be a good idea to join them.  So I talked my boss into paying me the trip to London (at least the conference related stuff) and hooked up with my former co-workers for some cultural sightseeing and enjoying some London pubs ;-)
Fortunately we had some lovely English spring weather, meaning 0-2°C snow and rain plus a chilling wind that tried to rip the flesh from our soaked bodies... man, how I hate that bloody weather over there…

Nevertheless we got to see a few really noteworthy attractions during those days, the first one being the Tower of London. On a few maze like tracks through a few dozens of towers, galleries, halls and chambers you explore the old fortress and get to know some interesting facts about the Tower’s history. Due to the narrow and steep staircases, like you only see them in the Netherlands these days ;-), this trip can be quite a challenge but is still worth it if you are keen on English history, medieval stuff or ancient architecture. Unfortunately a greater part of the tours require you to get outside into the inhabitable area of rain and chill. But as long as you stay inside, e.g. visiting the crown jewels (very impressive stuff) it is rather pleasant. As we just arrived that day, and some of us acted as if they were freezing to death, this was the only sightseeing we did that day.

For dinner we fancied some curry and the hotel staff sent us to “Brick Lane”, it took us some time to figure out that this was not the name of a specific restaurant but instead a street name where you can find a lot of Indian restaurants next to each other. And what happened there was something we have never encountered before. In front of each of those restaurants was a guy advertising rather aggressively for said restaurant, telling us that this was the best place etc. Well, we were there for the food after all so we just took one and went in, after the guy outside promised us a 20% discount on the food. Inside we saw that all tables were full and the place was rather crowded. But before we (a party of 5 people after all) could leave again we were given some drinks and told to wait as there would be a table available soon. And so the ushering began…  A two person table just got free and on the other side of the aisle a three person party seemed to finish their meal. But those two tables could not be connected on the other hand there was a small table next to the three person table where two girls just got their food and were enjoying it. So those two simply got relocated by the staff to the other side of the aisle and suddenly there was enough room for us. To be honest, something like that would get the place shut down very quickly if you tried that in Germany ;-) So we sat down... ordered… and ate the food that was IMO rather tasty. But as soon as we finished our plates were taken away, in some cases in the very same second the cutlery hit the plate (and I am NOT exaggerating here). Well, we paid up and emptied our drinks but we were not quick enough to avoid being asked to leave... politely but nevertheless it was clear they wanted us out as soon as possible… Now that was a first to all of us…

Afterwards we were to meet up with friend of one of my companions who already lives in London for a few years now. He took us to some kind nightclub in the city. As I am not much of a clubbing person that was not my favorite part of the trip ;-) But I learned that people are people no matter if you are in London or Munich or anywhere else… add loud music, enough alcohol and heat and the idiocy emerges ;-) Yes, I know… I am just too cranky about that topic so let’s just move on… When we left the club the tube was already shut so we had to find a bus line taking us back to our hotels (I stayed at a different place than my mates) but that was rather tricky as our guide had not much clue himself about the bus night lines. At least we found a line at Picadilly that took us to my mates’ hotel and I decided to join them and take a cab from their place. So we already saw Picadilly and I had London cab ride… Check ;-)

On the next day we met up at Hyde Park, had a look at Speakers’ Corner and walked south to the Buckingham Palace. Then took a turn through the government quarters looking at Downing Street and then at the Houses of Parliament as well as Westminster Abbey. Too bad it was Sunday, so Westminster was closed for tourists. After crossing the Thames to the Eye of London we walked all the way to the Tate Modern Museum too look at some crazy shit… Yeah right, I am not an art person, congrats for figuring that one out… As that was a very long walk we had, we decided to go back to the hotel and so crossed the Thames again to St. Paul’s via the Millenium Bridge and had another nice bus ride. This time we decided to go for an Italian dinner, which actually was quite nice in a rather classy place. But when it came to the check there was some confusion, the check had a service charge on it (about 12.5%) and as far as we knew that meant that we should not give an additional tip. But our waitress did not look too happy so we just asked and she told us, that this service charge was for the company only but also that it was “okay”… So we all put in some extra for a nice tip, but after some more research on the topic it now seems that the bitch screwed us over. Afterwards we headed for pub next to the hotel and had a nice chatty evening while enjoying funny named beers like “Doom Bar” or “Panzerfaust”, yes that’s right, that is how those English people name beer. The experience of a bar closing down at 11 pm, even though it was expected, was somehow weird though.

Okay, final sightseeing day. We started out at Harrods, holy cow they sell a lot of crap there… It was really impressing seeing such a big and overwhelming shopping mall especially with a lot of luxury stuff. On the top level I found the following item in the sports section, please note the very reasonable price on the sign sitting on the right side of the seabob (okay, looks like you can't zoom in, well the sign says you can buy this nifty toy for the very reasonable price of 80.000 GBP):


After about an hour we headed off to Madame Tussauds to see some wax celebrities and I must say, some of them look _really_ impressive. My favorite of live like look is Sean Connery, that face seemed almost alive. All in all there was quite a lot to see but the “horror show” does not deserve its name and the “Marvel Experience” has just nothing to do with the rest. Even though, the visit was well worth it and I can only recommend it to anyone who has the chance to see it. Afterwards we were considering to try Westminster Abbey again until we found out it had already closed down for that day, darn it! So we did call it a day and headed back to the hotel again. This time our dinner plans took us to a Mexican place that was close to the Italian we were at before, for some reason I could not interest anyone in an English dinner ;-) After a really lovely but rather expensive meal we tried a different pub which was also quite lovely.

The next two days were filled with conference stuff which I will write about in some other post. On the first evening I was at the conference until 10 pm but the others left earlier as the later talks were not interesting for them. So they went back to the pub from the day before but had a not that pleasant experience with a obviously drunk fellow that tried to get them started on “the war, that we lost” etc. When I heard about that I was pretty happy I stayed at the conference ;-) But seriously, is that really something English people need to talk about? Or do you consider it funny to annoy us? Or do you just like to make Nazi references? I really hope that one was an exception… 

On our last evening after the conference ended we went to another Italian place and a pub afterwards near the conference venue. This one got by without any trouble what so ever and was kind of a perfect ending for our trip. 

I must say despite being an awful expensive place to live London seems like a real nice place, at least for  a short vacation even though it seemed to me that an awful lot of litter was laying around everywhere. But the tube took me any place I had to go very reliably and the huge amount of signs and service people everywhere (all way more friendly and helpful than those at home) made it very easy for me as a foreigner to find my way. So I guess I will be back some day to get to see the stuff I missed this time... Beware!!!