Datenbankoptimierungen gehen voran

January 6th, 2010 Jan H. Krueger No comments

In den letzten Wochen habe ich mich bei Insulae damit beschäftigt die Zugriffe zu optimieren. Auslöser ist schlicht und ergreiffend das Insulae für einen, von mehreren gewünschten produktiven Start, derzeit noch nicht geeignet ist.

Ich habe also damit angefangen sehr oft gelesene Werte in zusätzliche Relationen auszulagern um die zu durchsuchende Menge zu verringern. Bei fast allen Objekten welche auf der Karte dargestellt werden und mit x/y/w-Koordinaten angesprochen werden ist dies bisher schon umgesetzt. Da ich oft auch nur auf die Existenz abfrage und nicht die tatsächlichen Werte oder die Objektindividuellen Kennzeichen, sind hier bereits ein paar Millisekunden bei herumgekommen.

Danach, und das ist meine derzeitige Baustelle, ist eine Optimierung im Aufbau des Gruppenschirmes vorgesehen. Aktuell teste ich dafür Moeglichkeit Abfragen welche häufig genutzt werden einmal vorzubereiten und dann nur noch mit Parametern zu fuellen. Prepared Statements also. Obwohl ich bereits einen Teil umgesetzt habe, kann ich, rein subjektiv, noch keine Verbesserungen spueren. Mal sehen wie sich das ganze Verhaelt wenn ich alle relevanten Abfragen umgestellt habe.

Google Wave Invites zu vergeben

December 21st, 2009 Jan H. Krueger No comments

Ich habe noch 12 Invites für Google Wave zu vergeben. Einfach eine kurze Info hier hinterlassen und ich schicke euch die Einladung.

Multis auf der Scherbe

July 15th, 2009 Jan H. Krueger No comments

Wie vor einiger Zeit berichtet, sind wieder einige Spieler in Scherbenwelten entdeckt worden welche im Verdacht standen entgegen der Nutzungsbedingungen mehr wie einen Account angelegt haben. Tja, nun ists es offiziell, es waren tatsaechlich eine Reihe von Accounts in der groessten Nation der Scherbe, den Laoch bzw. der Fraktion des Haines unterwegs welche nicht von eigenen Spielern gesteuert wurden.
Die betroffenen Accounts wurden nach dem was die entsprechenden Spieler von sich geben gesperrt. Leider wurde den Spielern welche sich klar gegen die Nutzungsbedingungen verhalten haben erlaubt weiter zu spielen. Der eigentliche Account ist nicht mehr zugaenglich, doch es war noch nicht alles bekannt da hatten sich diese Spieler bereits neue Accounts, der ehemals machtvollste Spieler Falster sogar mit demselben Namen. Um mal die Dimension etwas zu gegen: Im Forum wird immer von einem Dutzend Accounts gesprochen.

Es wirft in meinen Augen ein sehr schlechtes Licht auf zwei Parteien in Scherbenwelten. Zum einen natuerlich auf die betroffenen Spieler. Es hinterlaesst bei allen anderen ein doch recht flaues Gefuehl das es ausgerechnet von der groessten Nation und dem machtvollsten Spieler ausging. Bis heute ist auch noch keine Entschuldigung zu lesen. Aber auch auf die Spielleitung, das diese hier nicht konsequent durchgreift und den Spielern dennoch erlaubt weiter zu handeln. Es besteht keine Gewissheit das nicht erneut
Ein Lichtblick waere zumindest wenn nur noch der Rest der abgeschlossenen Abo-Zeit zur Verfuegung gestellt wuerde und eine Verlaengerung untersagt. Oder, eine Stellungnahme der Spielleitung. Damit der Rest der ehrlich spielenden Spieler nun auch mit Fakten konfrontiert wird und nicht in einigen Bereichen immer noch mit Geruechten hantiert. Aber leider passt dieses Verhalten der Spielleitung sehr ins Schema des untergehenden Schiffes. Nur noch aktiv werden wenn es sich nicht mehr vermeiden laesst. Das Interesse, zumindest sieht es fuer die ehrlichen Spieler so aus, liegt nicht mehr auf motivierten Spielern und Kunden, sondern rein auf der Anzahl der abgeschlossenen Abos. Und wenn schon keine neuen Abos mehr in nennenswerter Zahl hinzu kommen, dann sollen die bestehenden zumindest so lange wie moeglich laufen.
Derzeit ist das einzige was die normal spielenden Menschen mit bekommen das hier die Nutzer von mehreren Accounts, Multis, ein “Du boeser Junge” erhalten haben und neu anfangen muessen. Sonstige Konsequezen? Keine ersichtlich.

Tatsaeche ist das in Scherbenwelten ein neuer Account mit Hilfe von ein paar Freunden (hoffentlich echte, keine selbst kreierten) in seiner Basis sehr schnell an das vorherige Level heran gebracht werden kann. Wenn die nun neu angelegten Accounts von den alten und bereits ausgebildeten Accounts unterstuetzt werden, dann besitzten die Spieler lediglich einen Zeitverlust, aber sonst nichts wirklich schmerzhaftes. Denn der Teil der Accounts welche keine Multis sind aber mit deren Hilfe und Ressourcen ausgebaut wurden, diese koennen jetzt weiterfahren mit ihren taeglichen Verrichtungen. Und damit wiederrum die nun neu anfangenden Nutzer von mehreren Accounts bei ihrem neuen (und nun hoffentlich einzigem) Account unter die Arme greiffen. Vor ein paar Monaten war dazu sogar ein recht ausfuehrlicher Bericht im Forum welcher quasi schon eine Anleitung dazu gab.
Eine Information am Rande. Die ehemals einwohnerstaerkste Stadt, Aerlinn, ist nur noch ein Schatten ihrer selbst. Von ehemals fast vier Millionen Einwohnern sind lediglich 138 Tausend uebrig geblieben. Und Aerlinn ist nicht die einzige Stadt des Haines welche einen rapiden Verfall vorweisen kann. Leider wird dieses Thema im Rollenspiel bisher nicht nennenswert thematisiert. Einzig Fabius sprach dies an, wurde dafuer dann aber ausserhalb des Rollenspieles dafuer kritisiert er wuerde Out of Character, ooc, Themen hierfuer nutzen. Doch wie soll denn sonst damit umgegangen werden? Unsere Charaktere sehen derzeit nur das viele Staedte fallen, die Einwohner jedoch sonst irgends auftauchen. Warum sollte dies nicht auch einmal hinterfragt werden? Aber da wird lieber, auch gerade von Spielern und Spielerinnen welche sich sonst das Rollenspiel gross auf die Fahne schreiben das Thema totgeschwiegen. Hat ja ooc-Gruende das die Staedte zu Grunde gehen. Aha. Da werden Accounts gesperrt was eine RL-Handlung ist da die Spieler bescheissen und dann soll niemand die Konsequenzen zumindest halbwegs im Rollenspiel ansprechen? Persoenlich vermuete ich einmal das sobald Falster seinen Account wieder gefestigt hat, die Stadt auch wieder wachsen wird. Aber der Respekt vor den Multi-Usern ist fuer mich erst einmal gegen Null gesunken.

Scherbenwelten koennte ein sehr schoenes Spiel sein, auch wenn seine technische Basis veraltet ist und niemanden mehr hinter dem Ofen hervorholen kann. Aber die vermeindliche Passivitaet der Spielleitung, der Umgang mit Spielern welche sich gegen die Nutzungsbedingungen stellen und daher auf ihre Kosten mit unfairen, nicht aus dem System selbst stammende, Mitteln das Spielerlebnis anderer Spieler beeintraechtigen laesst mich doch ernsthaft ueberlegen ob ich mir dieses noch auf Dauer mit ansehen moechte. Es ist, anders gesprochen, derzeit sehr enttaeuschend.

Insulae – Parlez-vous … was anderes?

July 14th, 2009 Jan H. Krueger No comments

In den letzten Wochen war es etwas still um Insulae. Das liegt mitnichten daran das ich nichts getan habe, sondern eher daran das ich viel mehr Hintergrundarbeiten erledigt habe. Ein großer Teil davon ist die Lokalisierung.

Konkret bin ich an drei “Meilensteinen” dran:

  • Umstellung von Insulae auf Python mittels Django als Web-Framework
  • Entwicklung eines reinen Admin- und Moderatorenpanels zur Spielsteuerung
  • Nutzung der von Django bereitgestellten Mittel um gemäß i18N zu arbeiten

Also doch schon drei große Teile. Im Adminpanel ich ich derzeit am weitesten, wobei die Entwicklung hierbei Hand in Hand mit dem driten Punkt geht. Ist auch eine gute Übung bevor ich das ganze mit dem eigentlichen Spiel vorrantreibe. Die Anpassungen an die Django-Templates sind hierbei auch sehr einfach zu sehen. Zu Beginn eines Templates muss Django mitgeteilt werden das für dieses Template eine Übersetzung versucht werden soll. Schnell getan mittels folgendem Zusatz welcher in die erste Zeile kommt:

{% load i18n %}

Nun ja, und danach ist eigentlich alles genauso einfach. An jede Stelle an die ich bisher einen festen String mit einem Wort eingegeben habe, ersetze ich eine bestimmte Codezeile im Template. Will ich zum Beispiel das der auf deutsch benannte Link “Eigene Nachrichten” je nach unterstützter Sprache übersetzt wird, teile ich dies dem Template wie folgt mit

{% trans "Eigene Nachrichten" %}

Das kann ich direkt während der Erstellung eines neuen Templates angeben. So sehe ich in dieser Phase was ich an dieser Stelle bezwecken will, ohne weitere Anpassungen.

Schön und gut, aber wie kann ich nun dafür sorgen das die Zeichenkette “Eigene Nachrichten” für einen englischsprachigen Benutzer eben in Englisch angezeigt wird? Zu erst muss eine Liste mit den zu übersetzenden Texten erstellt werden. Dazu ist ein klein wenig Vorarbeit zu leisten. Im Verzeichnis meines Django-Projelktes, Insulae, habe ich einen weiteren Ordner mit dem Namen “locale” angelegt. Dies muss manuell getan werden. Die Verzeichnisstruktur sieht dann also wie folgt aus, nun nachdem ich den Ordner angelegt habe:

Verzeichnisstruktur Djangp-Projekt
Wobei das nur die Struktur auf meinem Ausweichrechner ist.

Nachdem das Verzeichnis angelegt ist, kann Django angewiesen werden alle Quelldateien zu durchsuchen und alle wie oben gekennzeichneten Strings auszugeben. Beim Aufruf von django-admin.py sind noch ein paar Parameter zu beachten. Der wichtigste ist sicherlich makemessages, welcher Django anweist überhaupt die Liste zu erzeugen. Weiterhin noch die Sprache für die die Übersetzung angelegt werden soll. Dies geschieht mittels -l [Ländercode]. Dann kann noch optional mittels des Parameters -e angegeben werden, dass nicht nur die üblichen Quelldateien analysiert werden sollen, sondern eben alle mit den angegebenen Endungen. Der Parameter -a gibt an, das ich eine bereits bestehende Liste aktualiseren will, und nicht immer wieder eine leere. Für mich sieht nun konkret der Aufruf wie folgt aus:

django-admin.py makemessages -l de -e phtml -a

bzw. für eine englische Sprachversion:

django-admin.py makemessages -l en -e phtml -a

Daraufhin entstehen neue Unterverzeichnisse in locales. Bei mir konkret habe ich dann $PROJECTPATH/locale/de/LC_MESSAGES/ Dort liegt nun eine Datei namens django.po bzw. auch für englisch ein entsprechender en-Unterordner. Diese .po-Datei ist im Grunde nur eine Textdatei in der alle Strings welche ich für eine Übersetzung vorgesehen habe enthalten sind in folgendem Format:

Deutsch:

#: .\templates\spieler.phtml.py:112
#, fuzzy
msgid "Accountdaten bearbeiten"
msgstr ""

msgid gibt den zu übersetzenden String an, msgstr den Zielstring. Wird dieser leer gelassen, wird einfach msgid ausgegeben. So brauche ich keine doppelten Nennungen vorhalten. In der .po-Datei für die englischen Seiten trage ich nun die Übersetzung ein und erhalte folgendes:
Englisch:

#: .\templates\spieler.phtml.py:112
#, fuzzy
msgid "Accountdaten bearbeiten"
msgstr "Edit Account"

Nun ist diese Vorlage noch umzusetzen. Dies wird wieder von django-admin erledigt, bis auf den ersten Parameter sind keine weiteren notwendig. Es werden grundsätzlich alle Sprachen die wie oben angelegt wurden verarbeitet.
django-admin.py compilemessages
Dies erzeugt nun in zusätzlich zu den .po-Dateien Dateien mit der Endung .mo. Nun ja, das wars. Da meine Browser hier persönlich immer deutsch, also deDE als Locale liefern, ich aber ggf. eine englische Übersetzung auch testen will, kann dies in der settings.py des Django-Projectes auch eingestellt werden. Dort trage ich ind er Regel LANGUAGE_CODE = 'de-DE' ein. Will ich jedoch die englischen Texte lesen, ändere ich dies einfach auf LANGUAGE_CODE = 'en-EN'. Fertig.

Das ist nun alles was als Basis notwendig ist. Wenn eine neue Sprache eingepflegt werden soll, kann einfach eine neue wie oben beschrieben angelegt werden und einem übersetzungswilligen Spieler / Mitarbeiter gegeben werden. Wenn diese zurückkommt, einfach mittels compilemessages bearbeiten und schon steht eine neue Sprache zur Verfügung.

Ok, war jetzt mehr ein Ausflug wie in Django i18N genutzt wird. Macht aber nichts. Für alle die Fragen, in Insulae tut soch noch was, aber eben eher im Hintergrund. Einzig eine Sache wird schon partiell genutzt. Ich habe die Datenbankgrundlagen für ein System mit mehreren Postfächern gelegt. Jeder Spieler kann prinzipiell mehrere Postkörbe zugewiesen bekommen. Dies ist erst einmal der persönliche wie er auch aus Scherbenwelten bekannt ist. Gleichzeitig bekommt auch jede Stadt einen Postkorb. Zum einen werden so die Nachrichten von Spieler und Stadt ordentlicher voneinander getrennt, gleichzeitig gehen somit auch die Nachrichten einer Stadt bei einem Besitzerwechel mit. Ich kann nun spezielle Admin- bzw. Support-Postkörbe einrichten welche der Support bzw. ich als Admin lesen und bearbeiten können ohne einen besonderten LogIn zu nutzen. Weitergehend, ein solcher Postkorb ist nun streng genommen nicht mehr Spiel-gebunden sondern kann auch über andere Dienste gefüllt werden.

Sportlich unterwegs

July 5th, 2009 Jan H. Krueger No comments

Am vorletzten Wochenende fanden die nun schon seit längerem erwarteten Bâloise-SportGames statt. War natürlich klar das ich da auch mit dabei sein musste. Zwars nicht als Sportler, sondern als Helfer. Gelohnt hat es sich trotzdem.

Freitag sind wir gemeinsam von Bad Homburg nach Basel gefahren. Die Haelfte der Gruppe bereits gegen 11 Uhr, sie wollten die Gelegenheit nutzen um sich das Gebaeude des Konzernsitzes einmal anzusehen. Wir anderen fuhren erst gegen 13 Uhr los. Die Fahrt war recht entspannend und harmonisch, an der Grenze wurden wir dann auch nicht kontrolliert und konnten direkt durchfahren. Im Hotel eingecheckt, Einzelzimmer (yeah) und dann ging es in die Baseler Innenstadt. In der Hotelhalle machte sich inzwischen bemerkbar das knapp 450 Kollegen aus ganz Europa angereist waren.

Am naechsten morgen ging es dann fuer uns Helfe auch bereits recht frueh los. Gegen halb acht sollten wir dort sein. Vom Hotel mit dem Bus war der

Baloise Sport Games

Weg recht schnell, wobei er aufgrund der baseler Verkehrsfuehrung wohl doppelt so lange gedauert hat wie noetig. Eigentlich waere ich erst gegen zehn Uhr dort zum Dienst anwesend sein muessen. Aber dann haette ich ja bereits so einiges lustiges verpasst. Als erstes Stand ein kurzes Hallo und erklaerung des Tagesablaufes an. Dann bekam jeder Helfer ein rotes Oberteil damit auch jeder klar sehen konnte das wir zum Helfer-Team gehoeren. Meine Arbeit: Bier zapfen und Kuehlschraenke wieder auffuellen.

Was stand fuer die Teams so alles an? Ein kompletter Tag Spiel, Spass und Spannung. Jeweils zwei Runden Fussball, Baskelball, Volleyball und Handball sowie zwei Ueberraschungsspiele. Das Besondere an den SportGames? Es muss auch immer mindestens eine Frau im Team sein. Zu den vier erstgenannten Spielen muss ich denke ich sonst nicht mehr viel sagen. Aber was waren die Ueberraschungsspiele? Einmal Seinspringen und dann Wasserlauf.

SeilspringenDas Seilspringen war aber auch als Gruppenspiel ausgelegt. Zwei drehen, vier springen. Klingt erstmal einfach, klaro. Aber bei vielen zeigte sich klar das die Kondition nicht fuer drei Minuten Dauerspringen ausgelegt ist ;) Aber zum Glueck durften die Teams die Springer auswechseln. Was natuerlich Zeit kostete. Lustig war es auf alle Faelle mit anzusehen.

Weiterhin gab es noch ein Wasserrennen. Hierbei mussten die Teams mit Plastikbechern (die duennwandigen, leicht kaputtbaren ) Wasser ueber einen Parkour tragen. Wer am meisten Wasser am Ende im Eimer hatte war Sieger.

Ansonsten war das Wetter bombig. Es war nicht zu warm und auch nicht zu kalt, ideal fuer die Spiele. Lediglich gegen Ende musste eine Pause eingelegt werden da es ploetzlich anfing zu regnen. Dafuer stieg in der Festbeiz entsprechend die Stimmung ;) Nachdem der Regen aufgehoert hat, wurden die noch ausstehenden Spiele zu Ende gebracht. Allerdings fast nur noch mit Freistoessen, Freiwuerfen etc. da auf den nun nassen Plaetzen nicht mehr richtig gespielt werden konnte. Zuminedst sollten so Verletzungen vermieden werden. Aber auch die gingen schnell rum so das dann unser Konzern-CEO die Siegerehrung vornehmen konnte.

Entspannung zwischendurch

Zugegeben, er wirkte da etwas fehl am Platze. 36 Teams plus Helfer wollten dann nach einem trotzdem anstrengenden Tag nur noch ihren Spass haben und feiern. So kam er mit der Anlage, welche fuer die Festbeiz von der groesse nicht ausreichte, auch nur schwer gegen die zur Haelfte schon feiernden nicht wirklich an. Gerade unsere kroatischen Kollegen waren in bester Feierlaune. Aber ab ca. 20 Uhr war dann das offizielle Programm vorbei. Eines muss man den Kroaten lassen, Feiern koennen sie. Irgendwann verlagerte sich das ganze dann zurueck ins Hotel. Naja, und irendwie waren noch Schweizer Franken uebrig und das Bier an der Hotelbar war erstaunlich billig. Die Nacht war lang. Am naechsten Morgen waren die Franken effizient vernichtet.

Auch wenn jeder froh war wieder zu Hause zu sein, auch jetzt, eine Woche danach hat keiner gesagt das er oder sie nicht wieder zu den SportGames fahren wuerde. Leider sind diese nur alle zwei Jahre. Aber so ist die Freunde dann nur groesser wenn wir 2011 wieder dabei sein koennen.