New URL structure of this blog

2010 January 17
tags:
by Sven Busse

Juten Tach,

yesterday i recognized, that my Google pagerank went from 4 to a flat zero. Some analysis suggested, that since my blog was located in a subdirectory called /blog and since my root startpage did not contain any content at all, my blog startpage inherited the pagerank of my blank root startpage. OK, that /blog subfolder was stupid anyway, so i have re-structured my whole blog and now you can reach it directly via ghost23.de instead of the old ghost23.de/blog.

Of course, i didn’t want to screw up with all the existing incoming links and your bookmarks, so i set up some mod_rewrite rules, that will hopefully cover the old /blog/… links.

In any case, you might want to update your bookmarks (in case, anyone has any bookmarks to this site :| ).

My Amazon Kindle – a review

2009 December 30
by Sven Busse

Juten Tach,

about 2 months ago i bought the international version of the Amazon Kindle 2. Since then, i have used quite a bit and i thought it might be interesting to others, what my overall impression on the device is so far.

The device

The device feels solid, not really lightweight, but lighter than an average book. I recognize, that i can easily handle it with ether the right or the left hand. The buttons are where the should be, although it is a bit irritating, that the “previous page” button only exists on the left hand side, because it makes me push the home button (which is on the right hand side) by mistake sometimes. I have not used headphones with the device, because i do not listen to music or audio books on it.

The screen works just fine. It takes about one or two seconds for a page to refresh, something other people complain about, but it has never bothered me, because flipping a real page also takes a bit. The “power” button is about small, i find it sometimes unnecessarily tedious to slide it.

The battery

Not much to say here. It works for weeks. Just make sure, you don’t have 3G turned on all the time, because you actually only need it, when buying a book or doing updates.

The display

I am impressed by the screen every time i look at it. The resolution is very good and the quality of the text is brilliant. Images do always have that feeling of being drawn, even for photos, it is a bit weird, but that is, how i see it. You do have to make sure, that you sit in sufficient lighting, because the device has no back light or something.

Reading books

I have not yet bought dozens of books, but i have some very different kinds of books. I have not yet read magazines, because there almost none in German yet. But i have heard, that magazines can be a problem because of layout issues, cannot say anything to that though.

For books, i have read two novels, which just worked great. Even for images, they look very nice, you can also select every image and zoom them to fullscreen. After some minutes, i forget, that i am reading on a digital device, it just feels right. I must say, i use the Kindle mostly en route, like on the train or in the plain. At home, i still mostly read traditional books, because, well, i still have some :)

I also bought one book on software development. Actually i have the same book as a traditional book and as a Kindle ebook. There are some problems with the electronic version:

  • Code Examples: The are normally layouted for the fix width of the original book and thus they wrap badly on the device. You can try to fix it by adjusting the font size, but it still is not a good solution
  • Graphics: Sometimes, in the text you read something like: “I have put these two images side-by-side, so that you can see the difference”. Well, that does not work on an ebook, of course, since you can only see one page at a time. Also, books, that make some intense use of layout, will probably not work on an ebook. And something, every author should be aware of anyway, is, that you should not use sentences like: “As you can see on the image below …”. Because on an ebook, you never know, where the image will be.

I also have a bit of a problem to know, where i am. With a traditional book, i can go to the table of contents in no time. For the ebooks, i miss a shortcut for doing just that (perhaps i simply haven’t found it yet ?).
Update: Thanks for the comment; hitting “Menu” and then “Table of Contents” does the job :)

Other than that, reading on the Kindle works just fine and i can really recommend it.

Software

The Amazon Kindle can only handle its own format, which is a petty. Since a couple of weeks, you can also read PDF files, but i find that rather unusable, because layouts in PDFs are fix, so since the pages are zoomed out to display completely, the font size is normally to small to be read. Unfortunately you cannot even zoom it, although this would be tedious, too.

There are tools for converting epub to the kindle format, though. I have tried them and it seems, as if they work great. One of them is Stanza. It is actually for putting ebooks on the iPhone, but i use it for converting any kind of ebook to the Kindle format.

Wireless

This is one of the big cool features of the Kindle. The international version has 3G and it works great. Wherever i am, i can switch on 3G and surf through the Kindle Store and read samples or buy books. A very nice user experience. To date unfortunately, there are only English books in the Kindle store, i hope, that changes soon.

Conclusion

I am really satisfied with my Kindle. It is slim and light, so it takes almost no space in the bag, so i usually take it with me, when i have my bag with me. I do hope, that there will be German books in the store soon though.

Talk about web technology fundamentals

2009 December 20
by Sven Busse

Juten Tach,

it’s nothing new and every speaker knows it, but i once again forgot it, when i held my last talk at the GoodSchool in Hamburg about Technology and the Internet: If you talk for some time, DRINK ! My talk went the whole evening, three hours and at the end, my throat hurt badly.

So note to myself: If you drive, don’t drink, if you talk, DO drink (doesn’t have to be with alcohol though :) ).

Besides that, i had quite some fun talking about fundamentals of internet technology. One thing, that i always like to point out to people, who start diving into the subject is, that one of the basic ingredients of the internet are: Cables !

There is a very informative map of submarine cables, that build the backbone of the internet today. So it’s not all virtual, the whole net is relying on very real stuff. The global internet map is just as interesting.Global map of the internet from TeleGeography

We’re hiring

2009 November 12
by Sven Busse

Juten Tach,

hurra, new job positions are available at Interone. Beside a lot of interesting offerings, i would like to point out one, that is the most interesting for me (i wonder why ;) ) and is so fresh, it is not even listed yet. We are offering permanent positions for Flash developers here in hamburg.

The RIA team at our summer team trip

You have studied media informatics or something similar, have a couple of years of experience in your profession and you know how to develop RIAs and digital campaigns on the web? You’re into developing stunning user interfaces, are not afraid of 3D and dynamic and animated content? You speak AS2 / AS3 fluently and you care for clean, structured code? You use Design Patterns not because it’s cool, but because they help you write better code? You are also familiar with HTML/CSS and Javascript? And of course, you are able to work with the common tools, like FlexBuilder, Flash CS4, etc. Well then, if you’re willing to work in a team and have fun building apps and campaigns in Flash, why not give us a note?

The RIA team here in hamburg is a group of talented and highly communicative people with a strong focus on team work. We help each other, we don’t compete. We reflect on our work, we always aim for the better and, most importantly, we focus on getting the job done effectively.

So, want to give it a try?

Then simply send a mail to: i-wanna-work@interone.de

The error problem in AS3

2009 November 8
by Sven Busse

Juten Tach,

this post was inspired by a topic, i am interested a bit lately, “Functional Programming”. There is a very informative series of videos over on channel9, that covers functional programming, moderated by Erik Meijer from Microsoft Research. I have not yet made it through every bit of the topic, but one thing, that has already made a big impression on me is the statement, that functional programming emphasizes honesty of code. So what does that mean?

Honesty means, that a developer wanting to use a method for example, exactly knows, what to expect from it. In some sense, ActionScript has some limited honesty. Let’s take this method for example:

var names:Vector.<String>;

function getName(id:int):String {
   return names[id];
}

It seems to be honest about, what it returns, a String (we will see, it isn’t really honest about that). But it isn’t honest about what String. We could call this method three times with the same value for ‘id’, but we could not be sure, that we allways get the same result back, because the return value depends on the stuff, that is in the ‘names’ Vector. This is called side effect. Functional programming tries to avoid side effects where possible. The aim is, whenever i give a specific value to a method, i should get back the same result. So the method is not only honest about the type of value, but also about the value itself.

OK, so far, so good. So what’s that to do with errors in ActionScript? Let’s look at the method again from above. If you try to use a Vector with an index out of the bounds of the Vector, you get a RangeError. By the way, i was astonished to recognize, that trying to do that with an Array simply returns null, while Vector throws an error. I find that to be a bit inconsistent. Anyway, what that means is, that our method getName()  could potentially throw an error instead of returning a String, as it declares. This might sound trivial, but i find it to be absolutely non-trivial. Strict typing means, that i as a programmer can expect, that if the method says, it returns a String, it will do so. But now we find, that it might not. getName() might not return anything, if an error occurs. Now you might reply “well, simply catch the error, and you’re good”. But how am i to know, that i have to? If i am responsible for the whole code base, i might know, that this method can throw an error, but what if the method is provided by some third-party library?

So this means, that ActionScript is not completely honest about return types, because we can only hope, that a method returns, what it says, but it might as well do nothing. Java tries to circumvent this problem with the ‘throws’ clause. A method can define, that it either returns what it returns, or that it might throw an exception of a certain type. The point here is, the Java compiler will not compile a method, if it finds, that the code in that method might throw an exception, but that the method has not either catched it or declared via the ‘throws’ clause, that the exception might occur (there are exceptions to this rule, but let’s just forget about these for a moment).

We don’t have that in ActionScript. In ActionScript, any method could potentially throw an error (not to speak of error events, which enlarges the problem even more) and we simply have no chance of knowing which method might throw which error. In the light of these thoughts it comes to no surprise, that the new flash player now supports global error handling, which for me feels like fixing a sympton rather than the cause. Catching errors globally is just another way of saying: “I have no idea, where all these errors come from, so let me simply catch them all in one place.”

To end up with, i want to repeat, that Array simply returns null, when trying to use it with an index out of the bounds of the Array. So it does not throw an error like Vector does. Looking at it from a functional-programming-point-of-view, this is more honest, than what the Vector does. If i would have made my example with an Array, getName() would allways return a String (well, not really, but null can be implicitly converted to a String by the runtime, so … it’s OK). That means, that the programm does not break and the contract is valid, the method is more honest. Of course, now you might have to deal with checking for null, as Jesse Warden complaint about already. A solution to this problem could be to return a default value instead of null. Of course, this will not work in all situations.