Holt euch Planet Fachschaftsumfeld

Ich (Günther) verlasse demnächst Kaiserslautern, und gehöre damit nicht mehr zum Fachschaftsumfeld. Entsprechend wird mein Urteilsvermögen, wer zum FS-Umfeld gehört, und wer nicht, in naher Zukunft rapide bergab gehen -- wenn das nicht bereits begonnen hat ;-). Darum mein Aufruf:

Holt euch das Planet-System zurück und betreibt es selbst!

Details habe ich eben (21.4.) über die Info-Liste geschickt. Würde mich freuen, hier demnächst einen Redirect einrichten zu dürfen. :-)

Mit den besten Grüßen, Günther

Nerv' nicht!

July 29, 2010

Raphael Reitzig

Neuer Lesestoff

Raphael Reitzig

Gerade fiel mir auf, dass im nächsten halben Jahr eine ganze Reihe Bücher herauskommen, auf die ich mich sehr freue. Diese Vorfreude möchte ich teilen; vielleicht sucht ja jemand noch Lektüre für den Urlaub oder ein Geschenk für einen Freund? Ich werde jedenfalls meine selbst verhängte Bucherwerbssperre für diese Werke aufheben, Star Wars hin oder her.

Brandon Sanderson: The Way of KingsEnde August erscheint Brandon Sandersons neuer dicke Schinken The Way of Kings. Nachdem Mistborn und Warbreaker ihn auf der Liste meiner Lieblingsautoren sehr weit, wenn nicht ganz nach oben befördert haben, habe ich sehr hohe Erwartungen an den Band, der den Auftakt zu einer zehnbändigen Reihe sein wird. Sanderson selbst plant The Stormlight Archive schon seit über zehn Jahren und schreibt haufenweise Dinge, die Lust auf The Way of Kings machen. Ich denke, ich werde für diese Serie ausnahmsweise mal Hardbacks kaufen; sie werden es wert sein.

Sanderson & Jordan: The Gathering StormThe Gathering Storm ist der zwölfte Band von Robert Jordans Epos The Wheel of Time und der erste, der nach Jordans Tod von Sanderson geschrieben wurde. Im Oktober kommt das Buch im Paperback heraus und wird damit auch für mich erwerbbar. Da mir sowohl Serie als auch Ersatzautor sehr gut gefallen, bin ich natürlich sehr gespannt!

Tad Williams: ShadowheartIm November soll mit Shadowheart der vierte Band von Shadowmarch, eine Reihe von Tad Williams, herauskommen. Der erste Band ist bereits sechs Jahre alt und hat damals einen sehr guten Eindruck bei mir hinterlassen; bald werde ich dann herausfinden, ob die für Williams fast schon übliche Streckung des dritten Trilogieteils auf zwei Bücher zu einem ähnlich zähen Ende führt wie bei Memory, Sorrow & Thorn.

Anne Bishop: Twighlight's DawnIm kommenden März wird ein neues Buch von Anne Bishop veröffentlicht, nämlich Twilight’s Dawn. Es wird, ähnlich wie Dreams Made Flesh, vier Novellen enthalten, die in den Realms of the Blood spielen. Die Bücher dieser Reihe sind stets sehr kurzweilig und spannend, sodass mich sicher einige Stunden Spaß erwarten. Einsteiger sollten mit der Black Jewels Trilogy anfangen.

Robin Hobb: Dragon HavenEin weiteres Paperback steht ab März in den Regalen, das ich kaufen werde: Dragon Haven, der zweite Band von Robin Hobbs Rain Wild Chronicles. Die älteren drei Trilogien, die in der gleichen Welt spielen, haben mich zuverlässig meine Umwelt vergessen lassen — das chronologisch erste Buch Assassin’s Apprentice gehört nach wie vor zu meinen Lieblingsbüchern — und insofern muss mir auch diese Reihe ins Haus.

July 28, 2010

Starcraft II Login Screen

This is as far as you get multiplayer-wise in Starcraft II

Finally, Starcraft II is out. I spent last night trying out those features we could not access in the beta, and I loved them. Blizzard has made a great job and the game is certainly worth those 39€ amazon charges these days. For me, that is, for I have broadband. What deeply concerns me is that, as announced, Blizzard does not feature any capability for local play. I do not necessarily mean LAN play, but any kind of play that does not require all game data to be routed via battle.net. Why is this a problem, you might ask. Well, the obvious reason this is that paying customers are denied to play multiplayer even if they have LAN and multiple licenses available, just because their internet connection is too bad to handle it. I know for a fact that there are people thus fated. On the other hand, LAN parties, integral part of any computer game related community, have been made impossible. Blizzard has a history of providing great entertainment both alone, online or on LAN parties, and it seems that this history is about to end now and here.

Large LAN Party

Relic of the past -- 21st century nerd plays alone in his cellar.

I am hosting a release party for Starcraft II this weekend (and I hope we will be able to play…). Trying to convince people to attend, the point most often made by them was: “But then I would have to buy the game!” Note that at the time, I did not know we would have test accounts to spare, so I had no good argument for them to come anyway. I have no sympathy for them, but understanding. Who would buy a product he has never seen? There is not even Starcraft II demo I knew of. Consider what great opportunity is missed there: if there were a possibility for free local play, these guys could have seen — and played — the game in action. If they then decided it was not worth 40€, well, then nothing was lost for Blizzard: they would not have bought it anyway. If they decided otherwise, however, they would go ahead and buy the game. Note that in no scenario Blizzard actually loses money; it is only that free local play would create the opportunity for more customers. This is how Microsoft became big, this is how Counter Strike and, yes, even Starcraft became popular. But yea, why take free advertisement if you can spent millions on it?

I do understand that game developers want to make sure they earn the money they deserve. But assuming that possibilities for free play — or even piracy, for this matter — implies a loss of money is wrong. This thought is a inherently logically wrong, nevertheless popular assumption that leads to many anti-piracy measures. Often, we have seen that exactly those measures have hurt a product more than any amount of piracy could have. And I strongly think that Blizzard has made such a step now by assuming they could sell Starcraft II in the same way they sell World of Warcraft. And, let us face the simple truth: a few months from now, there will be servers that emulate battle.net. All Blizzard will have achieved then will be resentment in the community.

I am so verbose here because I want to make clear that I have thought very carefully about this local play issue and have tried consider both points of view. Since I assume they do not lie to us face to face, I suppose that they really want to do us good. Then, I have to say frankly: Blizzard, give us local play or you will get your noses bloodied (figuratively). I see the following ways to approach a solution.

Back to the Roots: LAN Mode

Starcraft Install Window

Back then spawn install was still real.

Reintroduce a naked LAN mode that does not need any internet connection at all. Yes, this might allow for some kind of piracy, but only for offline play. I have elaborated above why I think this would even be in Blizzard’s favor.

Their might be many flavors of this solution: You can require a client to have been logged in at least once before; you might even be able to check that all connected clients were activated with pairwise different accounts in order to avoid piracy. You might want to reintroduce good old spawn installations, too, in order to let people legally check out their friends’ dearest game.

I realize that this would be the optimal solution for us gamers but the greatest concession possible for Blizzard.

The Compromise: Authenticated LAN Play

Let us strike a compromise: we will not get offline multiplayer play because you fear piracy too much, be it justified or not. Fine — but then make it possible for us to play locally at all! Let us create LAN lobbies that can be accessed only with logged in clients. This way, we would be able to play without having to rely on battle.net and internet connections too much while you had your control. LAN parties would be possible again; providing an internet connection that is able to cope with a couple of dozen people logging in should be perfectly possible. You might want to provide some possibility to take friends along, though. Maybe allow us to have a limited number of battle.net guest accounts for each licence that we can give to friends. Such accounts would only be able to play locally and custom games, of course, and would have no statistics or achievements.

The Last Resort: Support Local Play in battle.net

If you really do not want to reconsider your position in this matter, please do at the very least this: extend battle.net such that it is capable of supporting parties. Let us create lobbies and tournaments with access control so that we can meet in battle.net as well when we meet in flesh in order to easily match up.

I really hope something will change with regard to local play since I do not think the extended community will tolerate it for long. But then, maybe Blizzard does not care about LAN parties any more and are even prepared to take the losses caused. When I mailed them asking in which way they supported release events, I got no answer.

July 26, 2010

R.A. Salvatore: Vector Prime
25 ABY
Geschichte: 3/5
Charaktere: 2/5
Humor: 2/5
Action: 4/5

Endlich konnte ich die lang ersehnte Reihe The New Jedi Order anlesen. Die Erwartungen, die durch Rückblicke und Zustände in Joiner King geweckt wurden, sind groß: ein übermächtiger Feind, große personelle, technische und politische Umwälzungen sowie neue Idelogie bei den Jedi stehen offenbar an. Leider konnte zumindest der erste Band, Vector Prime, der Vorfreude nicht wirklich gerecht werden.

Die Geschichte, die erzählt wird, ist gar nicht so verkehrt: ein erster Stoßtrupp der Yuuzhan Vong, einer extragalaktischen Art, erreicht die Galaxie und macht sich sofort an die Errichtung von etwas, das man früher Brückenkopf nannte. Diese possierlichen Kerlchen sind sowas wie ein Hybrid aus Klingonen und Spezies 8472: bedingungslose Krieger, denen es ausschließlich um Ruhm und Ehre geht und die Lebewesen statt Technik nutzen. Die altbekannten Helden kriegen davon natürlich Wind und gehen gegen die Bedrohung vor, ohne zunächst wirklich zu wissen, worum es hier geht. Einige sabotageartige Maßnahmen der Yuuzhan Vong reichern den Plot weiter an. Unschön sind eine Handvoll Inkonsistenzen sozialer und physikalischer Art¹, über die man aber mit zwei zugedrückten Augen noch hinweglesen kann; die wirklich einfallsreiche Ausarbeitung der Mittel, die die Yuuzhan Vong nutzen, um ohne moderne Technik eben jene zu übertrumpfen, entschädigt dafür weitesgehend.

Schlimmer wiegt, dass Salvatore die Geschichte schlichtweg schlecht erzählt. Über seinen unpersönlichen, sachlichen Schreibstil kann man sicher diskutieren; auf jeden Fall bleiben die Charaktere flach, insbesondere solche, die außer in den Reihen für Jugendliche noch nicht wirklich vorkamen. Gerade aber eine wichtige Todesszene — erstmalig für Star Wars eines der zentraleren Charaktere — und das anschließende Gefühlschaos in zahlreichen Charakteren bringt er auf der emotionalen Ebene überhaupt nicht zum Leser. Der katalytische Effekt, den der spezielle Todesfall also im Universum auslösen mag, spiegelt sich also nicht im Leser wieder; da wurde Potential verschenkt. Während außerdem zahlreiche Katastrophen und Kämpfe viele Todesopfer fordern, gelingt den übrigen Helden quasi alles einfach so, trotz der augenscheinlichen Überlegenheit der Yuuzhan Vong. Die wichtigen Ideen kommen ohne Vorbereitung spontan auf, die dafür nötigen Stücke Technik oder Personen sind völlig unmotiviert verfügbar — Onkel Lando hat alles — und die Durchführung läuft reibungslos ab. Da dachte ich mir oft: Zu einfach.

So plätschert die gut aufgesetzte Geschichte leider von vorne bis hinten dahin und die dank der großen Bögen durchaus aufgebaute Spannung wird im Kleinen nicht vertieft oder genutzt. Schade, dass mit Vector Prime so ein verdorbener Band die über zwanzig Bücher lange Reihe einleitet; es kann also nur besser werden.

[1] Achtung, Spoiler!
Eine Auswahl der Unstimmigkeiten, die mir sauer aufstießen:

  • Leia schüttelt ihre Noghrileibwächter ab? Urlaub macht sie auch in anderen Büchern und stets weiß sie, was sie ihren Wachen — oder vielmehr deren Ehre — antut, wenn sie sie außen vor lässt, und nimmt sie mit. Ich sehe nicht, dass der Diplomatin Leia so ein Schnitzer passiert.
  • Die Yuuzhan Vong werden als Kriegervolk dargestellt, dem es um Eroberung und Ehre geht. Wie kommen die dazu, demagogisch, sabotierend, völkermordend und schleichend vorzugehen? Man stelle sich Klingonen vor, die den Feind erst mit einer Krankheit, Anschlägen und Propaganda schwächten, um sich dann in sein Territorium zu schleichen und so unauffällig wie möglich Fuß zu fassen. Vielleicht ist der Vergleich aber auch schlecht und man sollte die Yuuzhan Vong ideologisch eher mit dem Dominion von Star Trek vergleichen.
  • C-3PO kann die Sprache der Yuuzhan Vong ohne Probleme verstehen, obwohl das eine gänzlich neue Art mit einer ganz anderen Kultur und Entwicklung ist als alles, mit dem er programmiert worden sein kann.
  • Mara hat Probleme gegen einen Yuuzhan Vong, Jacen hält mindestens vier in Schach. Gut, sie ist geschwächt, aber sie ist auch ausgebildete Assassine und Jedi, Jacen ist Padawan.
  • Nachdem anfangs die Gravitationsfallen der Yuuzhan Vong alles wegschnappen, können die Schiffe der Helden, insbesondere Luke, stets entkommen.
  • Die Schiffe der Helden springen nach Jacens Aufsammlung aus dem Gravitationsfeld des Eisplaneten in den Hyperraum — das ging noch nie in Star Wars!
  • Lando hat alles Mögliche, aber kaum Jäger zur Verteidigung oder überhaupt ordentliche Bewaffnung für die vorhandenen?
  • Die Schildschiffe sind gemacht, um Sonnenstrahlung zu reflektieren. Das funktioniert auch einfach so mit der Energie des Yammosk?
  • Der Eisplanet explodiert, weil das Eis wieder schmilzt? Übersehe ich da einen physikalischen Effekt, oder ist das Humbug?

July 25, 2010

Well it’s all over the German media at the moment and hardly to miss. 19 persons died at the loveparade yesterday, which is very sad, but what happened and why?
Well, as I couldn’t find any visualization in the media until now, I experimented a bit with google maps after going through a lot flickr images (btw: EXIF information is quite useful to get the order right) and seeing this arrival plan:

Show Loveparade Duisburg 2010 Masspanic in a larger map

So what happened and why? A good question, here’s my guess:
Two tunnels crowded with people leading towards a T-intersection and a ramp leading away from there… Not hard to imagine that people didn’t walk up the ramp as fast as they did through both tunnels, so the intersection became a sink (a term from graph theory: a node with more input than output).
In this situation the pressure rose and people searched for an escape. In the map you can see a stairway near the west entrance (fire symbol) (picture here, here and here).
I don’t know whether these stairs were open from the beginning, but it seems as if some people could escape there and were spottet by a lot people standing nearby.
Just imagine the situation yourself: What would you do? Right…
The obvious decision is to take the nearest exit instead of the long crowded way up the ramp. Problem: the small stairway just isn’t suited for so many people, so in this crowd it became another sink at a critical point. As a lot more people flow towards the stairway (picture (notice the road sign)), the pressure in front of these stairs got deadly (it’s the place where dead bodys were found afterwards: (see if you really want (notice the road sign again)).

If it was like this, it is a very sad, but classic example where an additional exit worsens the situation. It introduces tempting choice, causes flow into the wrong direction and thus congestion in a very, very critical spot. I hope there’s a “lessons learned” after the investigations have come to an end.

Da ich schon ein paar Mal gefragt wurde, wie das mit dem Wechsel an die UdS (Universität des Saarlandes) bei mir funktioniert hat, habe ich beschlossen, meinen Blog zur Abwechslung (a) überhaupt mal um einen Artikel zu ergänzen und (b) sogar etwas sinnvolles zu schreiben. Also fangen ich heute (endlich) mit einer kleinen HowTo Serie an, die vermutlich drei Teile umfassen wird. Oder mehr. Oder weniger. Über das studentische Leben neben dem Studium könnte ich vielleicht auch noch was schreiben, genauso wie ich nicht weiß, wo eigentlich die Info hin gehört, dass es keine 500€ Studiengebühren mehr gibt. Dennoch die (vorläufige) Planung:

Teil 1: Die wichtigsten Unterschiede in der Prüfungsordnung [Das liest du gerade]
Teil 2: Welche Vorlesungen werden wie anerkannt? [kommt noch]
Teil 3: Alternative Informatikstudiengänge an der UdS [kommt noch]

Wer darüber hinaus noch Fragen hat möge einfach einen Kommentar schreiben, ich passe meine Planung dann entsprechend an oder beantworte Fragen auch direkt im Kommentar (d.h. natürlich, so weit es mir möglich ist).

Weshalb überhaupt Wechseln?

Die Gründe für einen Wechsel können vielfältig sein, aber wer sich Gedanken über einen Wechsel macht, der wird sicherlich schon Wissen, warum er das tut. Ich möchte dennoch noch ein paar wichtige Unterschiede in der Prüfungsordnung aufführen, die (meiner Meinung nach) einen Wechsel rechtfertigen könnten.

Logik…!

…ist gemein, leider Pflicht und Madlener macht die 5 ECTS Punkte ziemlich hart. Gehört zwar eher zur Studienordnung als zur Prüfungsordnung, ist aber bisher auch der einzige Grund, der mir zum Wechsel gesagt wurde (“du, ich bin bald im dritten Logik Versuch…”). Und ich muss gestehen, dass ich auch genau deswegen  nicht mehr in Kaiserslautern bin. Also für alle, die mit Logik kämpfen, hier die gute Nachricht: Logik ist im Saarland keine Pflichvorlesung!

Aber es gibt noch mehr Gründe zu Wechseln (vielleicht auch nicht unbedingt schon im Bachelor, sondern eher erst im Master):

Wenn ich dreimal durchfalle dann fliege ich…?

NICHT RAUS. Bzw. es kommt drauf an. Wer im Pflichtbereich dreimal durch fällt, der darf gehen. Wer hingegen in den Vertiefungen dreimal nicht besteht, der darf bleiben, aber keine Vorlesungen mehr hören, die die, in der er dreimal durchgefallen ist, voraussetzen. Der Vorteil liegt auf der Hand: Das Studium dauert zwar dann länger, aber wenigstens hat man eine Chance seinen Abschluss zu bekommen.

Was ist überhaupt ein Versuch in Saarbrücken?

Das ist verschieden, je nachdem was man studiert. Aber in der Informatik heißt ein Versuch (so weit eine Vorlesung den jeweiligen Punkt enthält):

  • Besuche die Vorlesungen
  • Mache die Übungen
  • Schreibe Minitests
  • Mache das Projekt/die Projekte
  • Schreibe das Midterm Exam
  • Schreibe das Endterm Exam
  • Schreibe das Backup Exam

Die Note wird dann aus allen Dingen irgendwie verrechnet. Als Beispiel gebe ich euch einfach mal Cryptographie mit 9 ECTS Punkten: Hier gibt es Übungsblätter, die aber optional sind. Stattdessen muss man Minitests über diese Übungsblätter schreiben und in diesen Minitests (sowie der Endterm- oder Backupklausur) mindestens die Hälfte der möglichen Punkte erhalten, um den Kurs zu bestehen. Die Endnote wird mit folgender Formel berechnet: 0.2*Minitests + 0.3*Midterm + 0.5*Max(Endterm, Backup) (ja, man kann schlechter als 4.0 abschneiden, da es keine Untergrenze in der Midterm gibt, aber nein, das ist dann natürlich nicht bestanden ;-) ).
Ja, und genau das ist ein Versuch. In Kaiserslautern wären das schon direkt zwei gewesen. Plus, hier dürfen Übungen, Projekte, Minitests, Auto des Dozenten putzen, usw. in die Endnote eingehen.

Einen Nachteil haben diese beiden Vorteile allerdings: Wer oft Kurse nicht besteht, der kann lange an der Universität bleiben ohne Punkte zu machen und um dann ohne Abschluss von der Fortschrittsregelung hinausgeworfen zu werden. Ähnlich zu Kaiserslautern bedeutet das, man muss folgende Untergrenzen erreichen:

  • 1. Semester: 9 Punkte
  • 2. Semester: 18 Punkte
  • 4. Semester: 60 Punkte
  • 6. Semester: 105 Punkte

Wer das nicht schafft, der wird gegangen – oder muss in einen anderen Informatikstudiengang wechseln (dazu in Teil 3 etwas mehr).

Nicht alle Studienleistungen müssen benotet sein

Laut §16 (2) der PO (hier in SB) müssen nur 132 der 168 “Studienbegleitenden Prüfungsleistungen” benotet werden. Da aber das meiste benotet wird, kann man wohl zum Ende des Studiums ein paar (schlechte) Noten unter den Tisch fallen lassen. Da ich das von einem Kommilitonen nur mal so gehört habe, aber nicht weiß, wie das in der Praxis aussieht, sei das aber mal mit Vorsicht zu genießen.

Das wäre so weit alles zur Prüfungsordnung. Zum Abschluss hier noch der Link zur Website der Informatik in Saarbrücken sowie ein Deep Link zur Prüfungsordnung selbst.

Der zweite Teil folgt später heute oder im Laufe der Woche.

July 23, 2010

Jörn Hees

Itertools

Jörn Hees

Just recently came across the python itertools “tools for efficient looping” again. Generators have the advantage of not creating the whole list on definition, but on demand (in contrast to e.g., list comprehensions). Really worth a look:

import itertools as it
g = it.cycle("abc") # a generator
g.next() # a
g.next() # b
g.next() # c
g.next() # a
g.next() # b
# ... and so on

g = it.cycle("abcde")
h = it.cycle("1234")
gh = it.izip(g,h) # iterzips n iterables together
gh.next() # (a,1)
gh.next() # (b,2)
# ... think about what this means with primes
gh.next() # (e,4)
gh.next() # (a,1)
# ...

Also very nice are the combinatoric generators:

it.product('ABCD',  repeat=2) # AA AB AC AD BA BB BC BD
                              # CA CB CC CD DA DB DC DD
it.permutations('ABCD',  2)   # AB AC AD BA BC BD CA CB CD DA DB DC
it.combinations('ABCD',  2)   # AB AC AD BC BD CD
it.combinations_with_replacement('ABCD',  2) # AA AB AC AD BB BC BD CC CD DD

July 22, 2010

Today I was asked how to generate Recall-Precision diagrams including the f-measure values as height-lines from within python. Actually Gunnar was the one who had this idea quite a while ago, but constantly writing things into files, then loading them with his R code to visualize them, made me create a “pythonified” version. Looks like this (click for large version):

Here’s my python code-snippet for it: recallPrecision.py. Uses a bunch of pylab internally, but after simply importing this module, you can easily visualize a list of (precision, recall) points like this:

import scipy as sc
import recallPresion as rp
prs = sc.rand(15,2) # precision recall point list
labels = ["item " + str(i) for i in range(15)] # labels for the points
rp.plotPrecisionRecallDiagram("footitle", prs, labels)
pl.show()

Guenther Noack

Cow Clicker

Guenther Noack

A facebook game about facebook games: http://www.bogost.com/blog/cow_clicker_1.shtml. An interesting read.


July 21, 2010

Perhaps you already encountered a problem like the following one yourself:
You have a large list of items (let’s say URIs for this example) and want to sum up how often they were viewed (or edited or… whatever). A small one-shot solution in python looks like the following and uses the often unknown operator.itemgetter:

import sys
import operator
uriViews = {}
for line in sys.stdin:
    uri, views = line.strip().split()
    views = int(views)
    uriViews[uri] = uriViews.get(uri, 0) - views
    # why minus? could do + and use reverse=True below?
    # right, but then items also get sorted in reverse, if views are
    # the same (so Z would come first, a last)
for uri, views in sorted(uriViews.items(),
                         key=operator.itemgetter(1,0)):
    print -views, uri

This approach can be a lot faster than self written lambda functions called for every comparison or a list comprehension which turns around all tuples and then sorts it. Also in contrast to many other solutions you can find online this one uses operator.itemgetter(1,0), which means that if two items have the same amount of views, their URIs are sorted alphabetically.

Remember that this approach sorts the whole list in RAM, so you might want to chose other approaches in case your lists are getting huge.
For further information you might want to read PEP-0265, which also includes a hint what to do when you’re only interested in the Top 1000 for example (will only sort these top1000):

import heapq
top1000 = heapq.nlargest(1000, uriViews.iteritems(), itemgetter(1,0))
for uri,views in top1000:
   print -views, uri

Timothy Zahn: Survivor's Quest
22 ABY
Geschichte: 4/5
Charaktere: 3/5
Humor: 2/5
Action: 5/5

Zahns Survivor’s Quest spielt zeitlich genau zwischen Vision of the Future und der langen New Jedi Order Reihe, die ich als nächstes anlesen werde. Es ist ganz anders gelagert als die Trilogien um Thrawn; statt einer die ganze Galaxis umspannenden Krise wird ein lange nur am Rande erwähntes Mysterium gelöst: Der Outbound Flight.

Der Outbound Flight war ein Projekt der Alten Republik, das kurz vor Ausbruch der Klonkriege gestartet wurde. Etwa fünfzigtausend Menschen sollten in einem riesigen Schiff die Unbekannten Regionen erkunden und schließlich die Galaxis verlassen, um in anderen Galaxien Kolonien zu gründen. Über den langen Krieg geriet das Projekt in Vergessenheit; erst viel später wurde klar, dass der Outbound Flight zerstört wurde, kaum dass er die Republik verlassen hatte. Verantwortlich dafür war Thrawn, damals noch Offizier in der Chiss Flotte.

Fünfzig Jahre später finden die Chiss nun tief in ihrem Territorium die Überreste des Outbound Flight und sammeln Vertreter der Neuen Republik, Thrawns Privatarmee Empire of the Hand und der Jedi, namentlich Luke und Mara Skywalker, um den Trümmern die letzte Ehre zu erweisen. Auf dem Flug wird offenbar, dass einige der Abgesandten nicht am Gelingen der Mission interessiert sind, sondern im Gegenteil Zwielichtiges im Schilde führen.

So ist der erste Teil des Buches einer Detektivgeschichte ähnlich, da unsere Helden versuchen herauszufinden, wer es auf wen abgesehen hat. Sie haben noch nicht alle Schichten aller Lügengeflechte durchdrungen, als sie am Ziel ankommen — und ab da entfaltet sich ein Actionabenteuer ganz nach Art von Stirb Langsam. Ich will nicht vorwegnehmen, wer gegen wen kämpft, aber zwei Jedi und eine Handvoll Elitesturmtruppen veranstalten ein Feuerwerk, dass wirklich viel Lesespaß bereitet. Der etwas flache Errettungsplot, der nebenher läuft, hat mich dann auch nicht daran gehindert, die zweite Hälfte des Buches am Stück durchzulesen.

Survivor’s Quest kann in meinen Augen nicht gegen die älteren Bücher von Zahn anstinken, aber das ist eine hohe Maßlatte und vielleicht auch ein unfairer Vergleich. Er macht einen sehr guten Job: alte und neue Charaktere werden gut beschrieben und die Geschichte kann überzeugen, von der Action ganz zu schweigen. Nebenbei wird die schon in Vision of the Future angedeutete Bedrohung leicht — ganz leicht — konkretisiert, die Entwicklung unserer Jedi etwas weiter vorangetrieben und das Empire of the Hand erstmals als ernstzunehmende Kraft eingesetzt. Alles in allem ist Survivor’s Quest also ein empfehlenswertes Buch mit viel Spannung und Action und dem Hauch von Hintergrundgeschichte, der es in den Kanon einbettenswert macht.

July 19, 2010

Jörn Hees

Min-Heap in Python

Jörn Hees

I recently wanted to implement a small event system where events can have different priorities. So for example the event with highest priority (lowest value) should be handled first.
Python comes with a heapq module which can transform a list into a heap in a way that it stays a list, but fulfills all heap constraints. Nevertheless you might want to wrap the heap like this, so you can do nice stuff:

import heapq
class Heap(object):
    """ A neat min-heap wrapper which allows storing items by priority
        and get the lowest item out first (pop()).
        Also implements the iterator-methods, so can be used in a for
        loop, which will loop through all items in increasing priority order.
        Remember that accessing the items like this will iteratively call
        pop(), and hence empties the heap!"""

   
    def __init__(self):
        """ create a new min-heap. """
        self._heap = []
   
    def push(self, priority, item):
        """ Push an item with priority into the heap.
            Priority 0 is the highest, which means that such an item will
            be popped first."""

        assert priority >= 0
        heapq.heappush(self._heap, (priority, item))
   
    def pop(self):
        """ Returns the item with lowest priority. """
        item = heapq.heappop(self._heap)[1] # (prio, item)[1] == item
        return item
   
    def __len__(self):
        return len(self._heap)
   
    def __iter__(self):
        """ Get all elements ordered by asc. priority. """
        return self
   
    def next(self):
        """ Get all elements ordered by their priority (lowest first). """
        try:
            return self.pop()
        except IndexError:
            raise StopIteration

With this one could do the following:

h = Heap()
# add some nonsense:
h.push(10, "I'm a large one")
h.push(20, "Actually I'm larger")
h.push(5, "size is not everything")
h.push(0, "which size?")

# get it out in a cool way:
for item in h:
   print item
# prints:
# which size?
# size is not everything
# I'm a large one
# Actually I'm larger

Wer macht mit?