Dies und das…

März 18th, 2010 by Sirius_White

Da sich in den letzten Wochen wieder einmal ein wenig was angesammelt hat, fasse ich das einfach mal in einem Artikel zusammen.

Harmony ist “fertig”! Zumindest Version 3.0. Nachdem diese mittlerweile stabil ist und auch bereits produktiv eingesetzt wird, läuft derzeit bereits die Entwicklung von Version 3.1. Bisher beschränkt sich Harmony auf allgemeine Funktionen der vorherigen Versionen, sprich WPE/RPE Erkennung, Paketverschlüsselung und einige andere Techniken sowie eine rudimentäre XRay Implementation (Headgears, Monster und Hairstyles). Ich wollte erst einmal sicher gehen, dass die derzeitige Version stabil läuft und habe daher die Features soweit es geht eingeschränkt. Mit 3.1 werden dann diverse neue Kundenfeatures hinzukommen, wie beispielsweise die einstellbare GRF Verschlüsselung.
Im Gegensatz zu bisherigen Systemen wird Harmony voraussichtlich nicht mehr an eine Exe gebunden sein. Die Core ist mittlerweile so strukturiert, dass die meisten Module keine eigenen Offsets mehr benötigen und somit unabhängig von der Exe sind. Die Harmony Core wird nun voraussichtlich jede Woche auf auf die aktuelle RagRE Exe portiert, sodass prinzipiell jede Exe unterstützt wird. Für die Portierung kommt ein PHP Skript zum Einsatz, was die Offsets über Pattern Matching ausliest. Das Skript gibt es hier zum Download. Aus wohl verständlichen Gründen sind die Harmony Offsets nicht enthalten, dafür aber 2 Beispielskripte.


Einer der Hauptgründe, warum ich Harmony so früh auf die neueste Exe portiert habe, ist folgender Changelog Eintrag:

- You can now mouse over the status icons displayed on the right side of the screen to get information about what the status does.

Wenn sich das bewahrheiten sollte, wäre das eine der besten Änderungen seit Jahren. Und tatsächlich!
Technisch sind für dieses Feature einige neue Lua Dateien hinzugekommen. Eine für die Zuordnung von Effektnamen zu ihren IDs (quasi ein Enum), eine für die Funktionen und eine für die Beschreibungen. Damit wird ein Trend fortgesetzt, dem Gravity nun schon seit einer ganzen Weile folgt: Neue Features nutzen Lua und alte “Kotzfaktoren” werden nach und nach in Lua ausgelagert. Gravitys neue Erkenntnis, dass Contenttabellen im Source irgendwie nicht mehr ganz zeitgemäß sind, kommt der pServer Community natürlich nur entgegen: Anstatt das mittlerweile verpönte XRay zu verwenden kann man nun einfach die Lua Dateien editieren.

Apropos innovative Gravity Features: Wer erinnert sich an den Chatmode?

Ist dieser aktiv, verschwindet das Chatfenster selbst bei doppeltem Enterdrücken nicht mehr – der perfekte Pronmodus eben :)

Gravity Changelog vom 09.03.2010:

Added Chat Mode to the shortcut menu. When enabled, the chat box will always remain open [...]

Das ist ja echt kreativ!


Seit einiger Zeit bin ich nun offiziell Mitglied des Diff Teams. Bedeutet: Ich bin mit dafür zuständig, dass für neue Exen so schnell wie möglich Diffs erstellt werden und mögliche Inkompatibilitäten beseitigt werden. Bisher hatte ich lediglich den “@-Fix” und einen Diff zum Deaktiven des Nagle Algorithmus‘ eingebaut. Bedingt durch meinen Entschluss, zukünftige Exen Harmony-tauglich zu machen, werde ich hier aber wahrscheinlich in Zukunft etwas mehr Zeit investieren. Die heutige Exe hat beispielsweise 5 Diffs zerschossen, die repariert werden durften… :)



Picture unrelated.
Es gibt diverse Server, die sich damit brüsten, ihre Bot Protection sei unüberwindbar, würde alles blocken und sei sowieso die beste Entwicklung seit der Erfindung des Toasters. Keine Bot Protection ist perfekt. Natürlich, aus Sicht des Marketings ist alles aus dem eigenen Hause perfekt, aber wenn selbst Techniker im Einzelgespräch diese Meinung vertreten, haben sie etwas wichtiges verpasst.
Um neue Ideen und Inspirationen für Harmony zu bekommen reverse ich ganz gerne die Bot Protections anderer Server. Das Spektrum reicht hier von “aufgeblasen, komplex und irgendwie nach dem Motto just bore the reverser long enough” bis “cool, 3 Zeilen und OpenKore funktioniert nicht mehr”. Bisher habe ich keine Protection gesehen, die sich nicht binnen 20 Minuten umgehen ließ. Das sagt allerdings relativ wenig über die allgemeine Qualität der Systeme aus – es liegt schlicht und einfach daran, dass es Mittel und Wege gibt, mit der (fast) jede Bot Protection ausgehebelt werden kann.
Nachdem V-Shield schnell für Enttäuschung gesorgt hatte, waren meine Erwartungen nicht sonderlich hoch, als mir vor einigen Tagen von einer “selbstgeschriebenen Bot Protection” auf einem deutschen Server berichtet wurde. Das System ansich war relativ schnell reverst, aber die Codequalität war vergleichsweise hoch und es wurden einige hochinteressante Ansätze genutzt, die mir bisher in der Praxis noch nie begegnet waren.
Da ich auf dem Server eh nicht spiele habe ich dann frei nach dem Holzhammer-Motto per Try&Error durchprobiert, was die Protection alles erkennt. Wie sich herausstellte hat sie den Server über die Ergebnisse informiert (zumindest über die Tatsache, dass es Ergebnisse gab) – ich wurde ins GM Haus recallt und bin dort mit dem Admin ins Gespräch gekommen.
Es stellte sich heraus, dass Godlesz ihm eine Anleitung gegeben hatte, wie man eine solche Bot Protection implementiert. Wenn man sich überlegt, dass er noch vor 2-3 Jahren von Timo Programmiernachhilfe bekommen hat, ist das eine durchaus beachtliche Leistung.

Ansonsten habe ich nun noch 7 Tage Schule — dann sind Osterferien und in der Woche darauf bekomme ich mein 12/2 Zeugnis. Ende April dann noch Abiprüfungen und ich bin mit der Schule fertig. Die Zeit vergeht schnell

Gulli Board

März 2nd, 2010 by Sirius_White

4chan bezeichnet sich ja selber als der Abfluss des Internets. Zu Recht. Das Gulli Board ist offenbar das deutsche Pendant dazu. Es wurde mir oft empfohlen, wirklich angeschaut habe ich es mir aber nie. Bis heute.

Bei einem ganz normalen Gespräch über uralte, eiskalte, pappige Pizza (Hallo, Anni!) mangelte es mir an einer Visualisierung. Nach kurzer Google Suche landete ich dann hier: Herrjemine, Pizza zu kross gebacken!

Wer fragt im Internet nach, ob seine Pizza zu dunkel ist?!
Offenbar gibt es Menschen. Ich würde wenigstens jemandem im Skype anrufen und um eine Webcambegutachtung bitten… ;)

Ob es da noch andere ähnlich kranke Threads gibt…? Tatsache.
Aktuellste Frage mit 55 (!) Antworten:
   Beste Atemtechnik bei der Katzenkloreinigung

Ich zitiere und unterstreiche einfach mal die erste Antwort:

Manche Leute sind einfach interessanter gestört als andere



Und jetzt entschuldigt mich. Ich habe 11 Millionen Postings zu durchwühlen… =)

PhaseRO Skripte

Februar 19th, 2010 by Sirius_White

Als ich Admin auf PhaseRO wurde gab es vor allem einen großen Wunsch der Community: Mehr Events!
Es drohte bereits der Serverwechsel einiger großer Gilden, daher hatten, vor allem in den ersten paar Wochen, Events mit die höchste Priorität.

In der Zeit zwischen Valentinstag und Ostern 2009 entstanden daher einige interessante Skripte. PhaseRO ist mittlerweile leider offline. Ich bin aber der Meinung, dass es Verschwendung wäre, die Skripte einfach in meinen Backups vergammeln zu lassen.

Invasions

Jede Woche gab es eine neue Town Invasion. Mit einer Ausnahme fanden diese Invasions immer in Prontera statt. Anfangs wurden Wellen von Monstern zufällig auf der Map verteilt, dadurch verteilten sich die Spieler jedoch zu stark. In den späteren Invasions spielte ein GM (ich…) im Disguise-Modus den MVP und spawnte per Whisper Command die Monsterwellen. Letztendlich wurde der GM per Command versteckt und der MVP gespawnt. Auf der Script Roadmap stand kurz vor Schließung des Servers noch eine Automatisierung der Skripterstellung, damit auch normale Event GMs diese durchführen können – dies wurde leider nie realisiert.

Einige Invasion Skripte: Prontera 1, Prontera 2, Evil Snake Lord, Endless Tower, Winter (Ankündigung)

Etwas spezieller war die Lighthalzen Invasion. Nach der ersten, erfolgreichen, Invasion in Prontera wollte ich das Ganze etwas kreativer gestalten und habe eine grobe Storyline eingefügt. Die Spieler mussten während des Events mal in den Slums kämpfen, mal in der Stadt. Hintergrund war ein mysteriöser Rohrbruch am BioLab Eingang, durch den Monster in die Stadt kamen. Während des Events versuchte ein Techniker den Rohrbruch (der sich schnell auf die Stadt erweitert hatte) in den Griff zu kriegen. Dabei passieren ihm kleinere Missgeschicke, so wurden beispielsweise kurzzeitig alle Spieler auf der Map verwandelt. Letztendlich erhob sich der Lord of the Pipe aus den Tiefen des Rohes. (ja, ich bekam dafür Schläge vom Story-GM…)
Wahrscheinlich war das Event einfach zu schnell oder die Spieler wollten einfach nicht lesen. Jedenfalls wusste niemand so recht was er jetzt machen muss – bis auf die wenigen Ausnahmen, die die Broadcasts gelesen und verstanden haben. Unsere Schlussfolgerung aus dem Desaster war dann, dass wir uns in Zukunft auf simple Pronterainvasions beschränken würden. Weniger Arbeit für uns und offenbar mehr Spaß für die Spieler.

St. Patricks Day

Ein Feiertag der mir bisher nur vom Namen geläufig war. Nichtsdestotrotz haben wir gut eine Woche das passende Event geplant. Letztendlich gab es eine Brauerei mit irgendwelchen Cooking-Rewards – mit dem Skript hatte ich, abgesehen vom Bugfixing, allerdings nichts zu tun. Dazu wurden am Wochenende auf zufälligen Field Maps Leprechauns (kleine grüne Cookies aus der Toy Factory) gespawnt. Auf jeder Map mit Leprechauns befand sich ein Regenbogen. Wurde einer der Leprechauns getötet verschwanden sie und unter dem Regenbogen erschien eine Schatztruhe. Während das Event lief waren im Schnitt immer auf 5-20 Maps Regenbögen und Leprechauns zu finden.
InvasionLeprechaun Skript

Ostern
Die grundlegende Osterstory: Alle freuen sich auf ein schönes Osterfest, als plötzlich und völlig unerwartet am Sonntag zum Zeitpunkt der Invasion der böse Bruder des Osterhasen die Macht ergreifen will. Er wird zurückgeschlagen und zieht sich erst einmal zurück. Im Laufe der Woche fand der erste Teil des Events statt: 40 Osterhasen haben zufällig Spieler auf der ganzen Welt besucht und haben dort 5 Minuten lang Buffs verteilt. Dahinter stand wohl das komplexeste eAthena Skript was ich je geschrieben habe, aber bis auf ein Locking Problem lief es problemlos. Am Osterwochenende wurde dann der zweite Part aktiviert, eine modifizierte Version des St. Patricks Skriptes: Auf allen Fieldmaps waren Ostereier versteckt (~400 insgesamt). Nach bestimmten zeitlich festgesetzten Belohnungsgrenzen bekamen die Spieler dann entweder Eventpunkte oder Special Payments (Art Donation Währung auf PhaseRO). Zu einer ~15%igen Chance hatte der böse Osterhase diese Eier allerdings verflucht: Beim Berühren explodierten sie und spawnten je nach Level unterschiedliche Monster. Allgemein wurde das Event sehr positiv aufgenommen und hat auch teamintern eine Menge Spaß bereitet.
InvasionEvent Skript

Event Warp
Beim ersten Invasion Event waren viele Spieler gar nicht erst aufgetaucht, weil sie gerade in irgendeinem Dungeon waren. Daher wurde relativ früh ein System eingeführt, mit dem man per NPC festlegen konnte, wo das Event statt finden sollte. Spieler konnten dann Event anwhispern, wurden zum Ort des Geschehens gewarpt und konnten nach Beendigung wieder zu ihren alten Levelorten zurückkehren. Weiterhin war während der Events ein Auto-Resurrection Timer aktiv, um die vielen Leichen effizienter zu reanimieren.
Skript

Google und die Literatur …

Februar 17th, 2010 by Sirius_White

… das klappt nicht immer.

Ragnarok Hosting Service

Februar 16th, 2010 by Sirius_White

Mal ein ganz eigennütziger Beitrag: Mit T-Bash betreibe ich nun seit geraumer Zeit einen Hosting Service für RO. Unser Hauptinteresse ist es, dass die Serverkosten getragen werden – großartig Gewinn schieben wir dadurch also nicht.

Jeder Kunde bekommt bei uns einen dedizierten V-Server. Bevor das nun als gameserveruntauglich abgestempelt wird – wir setzen auf Qualitätsserver. Heißt: Unsere Server sind nicht überfüllt, für jeden Kunden mehr als ausreichend Performance vorhanden, auch um unvorhersehbare Lastschwankungen abzufangen. Aber genug der Worte, einige Fakten:

Was bekommt man?

  • 1024 / 2048 Mb RAM (zugesichert / Burst)
  • 2 CPU Cores (Fair-Use)
  • 100 Gb Plattenspeicher
  • Unlimitierten Traffic (Fair-Use)
  • Webspace für Homepage
  • Patchspace (HTTP / Anonymous FTP)
  • Zugriff auf Datenbankserver
  • Automatisierte Backups
  • Support (eingeschränkt, siehe unten)
  • Auf Wunsch: Grundeinrichtung

29,95 EUR pro Monat (keine Einrichtungsgebühr)


Gameserver
Die Gameserver liegen auf einem Intel Core i7 920 mit 8 GB DDR3-1333 RAM. Unsere derzeitige Serverauslastung liegt bei etwa ~5% CPU Leistung und ~60% RAM Nutzung. Engpässe sollten also vorerst nicht auftreten.

Datenbankserver
Ihr bekommt Zugriff auf einen zentralen High-Performance Datenbankserver. Das bedeutet, dass der Gameserver maximale Performance bekommt und von keinen Datenbankzugriffen ausgebremst wird.

Support
Aufgrund unserer jahrelangen Erfahrung, sowohl im Bereich des RO Hostings, als auch mit allgemeiner Serveradministration, können wir euch bei vielen Problemen kurzfristig weiterhelfen. Wir haben den lieben langen Tag natürlich noch viel anderes zu tun und wir können nicht jedem 24 Stunden am Tag unsere Aufmerksamkeit widmen – es gilt hier also auch eine Art Fair-Use. ^_^

Backups
Datenverlust ist scheiße. Daher werden alle Datenbanken mehrfach täglich (Standard: alle drei Stunden) gesichert und auf vier physikalisch getrennte Servern verteilt. Eure Daten sind also sicher.

Fair-Use
Wir geben euch einen gewissen Vertrauensvorschuss und setzen keine genauen Traffic- oder CPU-Limits fest. Solltet ihr beispielsweise einen plötzlichen Spieleransturm haben und die Webseite benötigt kurzzeitig mehr Traffic – kein Problem. Torrentseeds sind dahingegen logischerweise weniger erwünscht. Grundsätzlich gilt: Was für einen Server eurer Größe realistisch vertretbar ist, bewegt sich im Rahmen. Im Zweifelsfall einfach kurz nachfragen.

Sollte jemand Interesse haben, einfach eine kurze E-Mail an hosting [at] un-a [dot] eu schicken. Details können dann kurzfristig über ICQ / MSN oder per Mail geklärt werden.

Hamburg, Teil 2: InnoGames

Februar 9th, 2010 by Sirius_White

Manchmal kämpft man jahrelang gegen ein Vorurteil, um am Ende wieder davon eingeholt zu werden.
Ein Großteil meiner Programmier- und allgemeinen IT-Kenntnisse habe ich über Ragnarok erlangt. C hat mit einigen eAthena Commands begonnen, Linux mit “Hey Sirius, du kennst dich doch aus – wie mache ich den Server unter Linux wieder aus?” “.. Öh, gute Frage”.
In der Schule stehe ich seit einigen Jahren quasi unter Generalverdacht, ein Zocker übelster Sorte zu sein. Meine Englischlehrerin wundert sich, warum ich nicht “Computer-Techno-Musik” höre und freie Zeit verbringe ich sowieso ausschließlich mit Zocken. Zugegeben, meine Seminarfacharbeit “Suchtpotenzial von Onlinespielen” war für meinen Kampf gegen dieses Vorurteil nicht gerade hilfreich, aber immerhin konnte ich die Frage, ob ich diese gefährlichen Onlinespiele denn selber konsumieren würde, stets verneinen!
Meine Suche nach einem dualen Studienplatz bin ich daher eigentlich vollkommen unvoreingenommen angegangen. Ironischerweise wirkte ein Unternehmen jedoch am vielversprechendsten – InnoGames, die Entwicklerfirma von Browsergames wie Die Stämme. Also doch Spielebranche? Mitte Januar habe ich nach einem Telefoninterview und einem Bewerbungsgespräch in Hamburg die Zusage bekommen. Einer der Entwickler hatte beim Bewerbungsgespräch einen Punkt angesprochen, den ich bereits befürchtet hatte: Durch meine bisherige Arbeit mit anderen Programmiersprachen könnte ich mich auf Dauer bei InnoGames unterfordert fühlen. Glücklicherweise wurde es mir jedoch sehr kurzfristig ermöglicht, meine Winterferien für ein Praktikum dort zu nutzen, wodurch ich einen ersten Eindruck bekommen konnte.

Das Video, mit dem sich InnoGames als Arbeitgeber vorstellt, beschreibt die Situation in der Firma wirklich recht passend:

Kay Schnittker, der als “Head of Tools” für den Entwicklungsbereiche Payment und Tools verantwortlich ist, betreute mich in der Woche. Daher wurde ich anfangs auch erst einmal in die verschiedenen Backend-Tools von InnoGames eingeführt – neben den klassischen Support-, Payment- und Übersetzungstools waren es doch überraschend viele. Mit den entsprechenden SVN Zugängen ausgestattet bekam ich die Aufgabe, eine Suchfunktion in einem der Tools einzubauen und mich dort ein wenig einzuarbeiten. Ich hatte vorher noch nie mit dem Zend Framework, bzw. dessen MVC Komponenten gearbeitet. Dementsprechend aufgeblasen wirkte das Konstrukt. Nach einer Weile ergab es aber alles irgendwie Sinn und mir erschloss sich auch der praktische Nutzen dieser Bloat-Lösung.
Anschließend wurde mir über eine kleine Frage zum Servercluster ein umfassendes Gespräch mit einem der Admins vermittelt. Ähnlich verlief es auch den Rest der Woche: Kay vermittelte mir in so ziemlich jeder Abteilung ein Gespräch, was mir über die Woche einige hochinteressante Einblicke verschaffte.

Um diesen Artikel nicht zu einer weiteren Wall-of-Text zu machen – hier ist ein Bild von einem Rotkehlchen, gefolgt von einer kurzen Erkenntnisliste!
Rotkehlchen!
(c) Andreas Trepte

  • Im The West Büro ist PHP nicht sonderlich beliebt – jüngster Erfolg ist die Durchsetzung eines Java Daemons.
  • Grepolis ist objektorientiert!
  • Die Stämme wären gerne so objektorientiert wie Grepolis, sind dafür aber zu alt. Das erfreut das Programmiererherz Tag für Tag.
  • Game Designer wissen nicht so ganz, wie ihre Arbeit definiert ist – haben davon aber mehr als genug.
  • Man hat immer Zeit zum Kickern. Wenn auch nicht immer für die Rückrunde.
  • CBT steht für “Cock and Ball Torture“. Quelle: Bürointerne Mailingliste – ein koreanischer Geschäftspartner hatte mit der Abkürzung CBT um sich geworfen. Die Bedeutung eröffnete sich spätestens nach einer Google Suche ;-)
  • Und letztendlich der Hinweis, der nach einer Woche Kaffeekonsum wohl am interessantesten ist: “Sei vorsichtig mit der Kaffeemaschine, ich würde vorher dran riechen, bevor ich trinke” … Oh.

Hamburg, Teil 1: Reisegeschichten

Februar 6th, 2010 by Sirius_White

Die letzten Winterferien meines Lebens sind nun schon wieder fast vorbei. Ich habe die Woche genutzt, um ein Praktikum bei InnoGames zu machen. Nicht wirklich ein Praktikum, eher ein “Reinschnuppern”, da ich ab August dort mein duales Studium absolvieren werde. Glücklicherweise konnte ich bei T-Bash unterkommen, musste mir also keine Pension suchen. Einziger Nachteil: Er wohnt am anderen Ende von Hamburg.
Meine letzte Woche bestand also aus Aufstehen, Zug fahren, Inno, Zug fahren, essen und schlafen. Auf die Zeit bei Inno werde ich im zweiten Teil eingehen – ich muss zuerst meine Erfahrungen mit der Deutschen Bahn, beziehungsweise dem Hamburger Verkehrsverbund (HVV) los werden. Um kurz die (geplanten) Routen zu verdeutlichen:

Hinfahrt:

    Eisenach -> Kassel – IC (mit Platzreservierung)
    Kassel -> Hamburg – ICE (mit Platzreservierung)

Rückfahrt:

    Eisenach -> Kassel – ICE (mit Platzreservierung)
    Kassel -> Bebra – CAN
    Bebra -> Eisenach – CAN

T-Bash <-> Inno

    Halstenbeker Stieg -> Elbgaustraße – Bus (185 / 284)
    Elbgaustraße -> Harburg Rathaus – S-Bahn (S3 / S31)
    Harburg Rathaus -> InnoGames – Laufen

Erwartungsgemäß blieb es meistens nur in der Theorie bei diesen Routen.

Sonntag: Stehplatz deluxe
Erste Feststellung am Bahnhof Eisenach: Mein Zug fällt aus!
Ich also bei der Info angestellt, mir den Ausfall bescheinigen lassen und einen Ausweichzug über Fulda vermittelt bekommen. Da nicht nur mein Zug ausfiel und es noch ein paar andere Reisende Richtung Kassel gab, war der Zug dementsprechend brechend voll und ich durfte mir mit meinem Gepäck einen halben Stehplatz in einer penetranten, automatisch schließenden Tür teilen. Angekommen in Fulda wurde erst einmal durchgesagt, dass der ICE Richtung Hamburg 45 Minuten Verspätung haben würde. Glücklicherweise wurde ein außerplanmäßiger Halt eines anderen ICEs arrangiert und ich konnte nach einer halben Stunde Wartezeit einen Stehplatz in besagtem ICE ergattern. Nach einer gefühlten Ewigkeit wurde in Hannover sogar ein Sitzplatz frei! Die restliche Fahrt verlief erfreulicherweise dann relativ unspektakulär – nur noch Verspätungen im einstelligen Minutenbereich.

Montag: Flammen, Rauch, Verspätung!
Morgens verlief die Fahrt (abgesehen von der üblichen Busverspätung) ohne Probleme. Abends lief bis zum Bahnhof Elbgaustraße ebenfalls alles glatt. Ich habe den Bus Richtung Halstenbeker Stieg gerade noch von hinten sehen können, 2 Minuten später gefolgt von einer mittleren Kolonne Polizei- und Feuerwehrwagen. Als dann 10 Minuten später mein Bus kam war die Straße 500m weiter bereits komplett gesperrt und ich durfte den Bus nach angenehm warmen 30 Sekunden wieder verlassen. Es stellte sich heraus, dass ein Haus am Straßenrand gerade munter abbrannte – ironischerweise 200m von der Freiwilligen Feuerwehr entfernt. Auf meinem Fußweg rannten zumindest 5 Nachwuchsfeuerwehrleute an mir vorbei und fluchten lautstark über die Entscheidung, zum Brand laufen zu müssen. Am Ort des Geschehens war bereits alles verraucht und es hatte sich der übliche Pulk Gaffer gebildet. Über 4 Handytelefonate wurde ich zur nächsten Bushaltestation geleitet, um von dort zur nächsten S-Bahn Station zu fahren, um von dort dann den Rest zu laufen. Der restliche Fußweg war zwar nur geschätzte 2-3km lang, hatte es dank spiegelglatter Gehwege aber dennoch in sich.

Dienstag: Fußweg
Da in Hamburg während der gesamten Woche mehr oder weniger Wetterausnahmezustand herrschte, versuchte ich gar nicht erst einen fahrenden Bus zu erwischen, sondern wählte für Hin- und Rückweg den erwähnten Fußweg zur S-Bahn, es verlief daher auch alles glatt. Spiegelglatt – da Hamburg kein Streusalz mehr hatte und der Nachschubfrachter sich wohl verspäten sollte, war fast nirgendwo gestreut – auf Gehwegen schon gleich gar nicht.

Mittwoch: Verspätung <3
Morgens durfte ich wieder 20 Minuten auf den Bus warten, abends war aufgrund eines Polizeieinsatzes meine S-Bahn ebenfalls um 25 Minuten verspätet. Yey.

Donnerstag: Mittlerer Arsch der Welt
Der morgendliche Weg zum Bus war dank mangelndem Streusalzes wie immer eine Rutschpartie, die Busfahrt soweit aber kein Problem. Nun gibt es 3 S-Bahn-Linien, die von Elbgaustraße fahren: S3, S31 und S21. Letztere verwechselt man ganz gerne, vor allem wenn man gerade noch in den Zug hechten kann und bis zum Hauptbahnhof auch alles soweit richtig ist. Die Bahnfahrt dauert normalerweise 43 Minuten und es war zu dem Zeitpunkt meistens vor 8 Uhr morgens – ich habe die Zeit also zum Schlafen genutzt. Aus bloß-nicht-verpennen Gründen wache ich ca. alle 4-5 Haltestellen auf und vergewissere mich, dass ich noch weiterschlafen kann. Mein letztes Aufwachen war Dammtor, also noch eine Weile vor Harburg. Das nächste Mal bin ich dann aufgewacht und durfte mit einem Blick aus dem Fenster feststellen, dass ich irgendwo außerhalb des dicht bebauten Stadtgebiets auf einem tief verschneiten Bahnhof war: Mittlerer Landweg. Um das einmal zu verdeutlichen:

Arsch der Welt
A = InnoGames
B = T-Bash
C = Arsch der Welt aka. Mittlerer Landweg

Ich habe zugesehen, dass ich aus dem Zug komme und auf die nächste Bahn Richtung Zivilisation gewartet, welche 15 Minuten später dann auch kam – vollbepackt mit Zivilisation. Genauer gesagt mit geschätzten 50 herumspringenden Kindergartenkindern. Über Hauptbahnhof bin ich dann endlich in die richtige S-Bahn gekommen und kam mit 40 Minuten Verspätung gegen halb 10 bei Inno an.

Freitag: Richtung wechsle dich
Da mein Zug um 17:24 Uhr fuhr und ich deshalb nicht mehr Zeit haben würde, meine Tasche bei T-Bash abzuholen, habe ich sie am Hauptbahnhof in einem Schließfach verstaut. Gegen 16:30 Uhr ging es dann zurück zum Hauptbahnhof – logischerweise mit der S-Bahn Richtung Hauptbahnhof. Bloß blöd, dass dieser Zug entgegen des angezeigten Zielbahnhofs in die andere Richtung fuhr. Nachdem mich der Spaß also wieder 15 Minuten gekostet hat ging es dann mit dem richtigen Zug in die richtige Richtung. Mein Anschlusszug kam sogar pünktlich! Allerdings fehlte Wagen 6, wodurch die Wagenreihenfolge etwas chaotisch war und ich eine Weile nach meinem Sitzplatz suchen durfte. Ich weiß nicht, was die Bahn da angestellt hat, aber in Kassel fehlte in zwei weiteren ICEs ebenfalls Wagen 6. Dennoch – die Rückfahrt verlief ohne nennenswerte Probleme. Home, sweet home!

Unattended XP Installation

Januar 25th, 2010 by Sirius_White

Letzte Woche war an meiner Schule Projektwoche. Heißt traditionell: Ich habe mein Homepageprojekt und versuche im Interesse der Schule Nachwuchswebmaster zu züchten. Nebenbei stirbt die halbe IT Infrastruktur der Schule und man verbringt letztendlich die meiste Zeit damit, irgendwelche Rechner zu reparieren. So auch dieses Jahr.

Montag
Allgemeines Erklären der Homepageadministration, Joomla lebe hoch. Einige Ideen und Umstrukturierungen, aber ansonsten habe ich mich die meiste Zeit um 2 Rechner gekümmert, die aus irgendeinem Grund nicht mehr funktioniert haben – 2 Windows Neuinstallationen.

Dienstag
Bewerbungsgespräch bei InnoGames in Hamburg, ergo nicht da.

Mittwoch
Allgemeines Arbeiten, Seitenverlinkungen, Überarbeitung der Hauptseite, Einbinden des neuen Banners. Nebenbei 2 Windows Neuinstallationen.

Donnerstag
Vor den Homepagesachen erst einmal den letzten Rechner vom Vortag fertig machen, sprich Delphi 7 und Office XP installieren sowie Windows Updates laden. Sekunde, DNS Fehler? Eben den DNS Server geändert – nichts. Am anderen PC probiert – nichts. Als es dann mit nslookup ging kam mir der erste Verdacht… Conficker.B/C blockiert doch die DNS-Auflösung von Microsoft und einigen AV Herstellern. Symantec.com – DNS Fehler. Scheiße.
Nach einer kurzen Validierung auf einigen PCs stellte sich dann recht schnell heraus, dass so ziemlich alle Schul-PCs mit Conficker.B infiziert waren. In Anbetracht der Tatsache, dass fast alle Rechner noch auf XP Service Pack 1 liefen und Automatische Updates überall deaktiviert waren auch kein Wunder. Normalerweise hätte ich jetzt einfach an jedem Rechner das Netzwerkkabel gezogen, den Fix eingespielt und eines der zahlreichen Removal Tools gestartet. Conficker war mir durch Know Your Enemy: Containing Conficker und die Analyse der Uni Bonn recht gut bekannt, was das Beseitigen etwas erleichterte. Das Problem war nur, dass am Wochenende Tag der offenen Tür war und folglich alle paar Sekunden Schüler etwas ausdrucken oder im Internet nachschauen wollten.
Auf einzelnen Rechnern hatte ich die Gelegenheit den Virus zu entfernen – vorerst. Ich hatte vergessen, dass sich Conficker auch auf angeschlossene USB Sticks überträgt und sich dann über den Autostart weiterverbreitet. Ich weiß nicht, wie viele USB-Sticks der Schüler infiziert sind, aber es werden zu diesem Zeitpunkt bereits eine ganze Menge gewesen sein. Es endete dann mit einer Sperrung jeglicher PCs und der Entscheidung, die Situation zu nutzen und eine CD für die unbeaufsichtigte Windows Installation zusammenzustellen. Die CD musste eigentlich nichts komplexes tun:

  • Treiber der Rechner im Kabinett einbinden
  • Firefox installieren
  • Adobe Reader installieren
  • Delphi installieren
  • Office installieren
  • Der Schuldomäne beitreten
  • ggf. den Computernamen setzen

Freitag
Ich hatte mich bisher noch nie mit der Thematik auseinandergesetzt, meine Wahl fiel jedoch recht schnell auf nLite: Ein simples Tool, um Windows Installationen beliebig anzupassen. Programminstallationen sind mit nLite Addons ohne Weiteres möglich, es gibt auch diverse Seiten mit fertigen Addons bekannter Programme. Da diese ganzen Packages jedoch Englisch waren und mich das Thema interessiert habe ich mich dazu entschlossen, die Pakete selber zu packen.
Die benötigten Schritte sind im Wiki von German Unattended sehr gut beschrieben. Nur wie installiert man Programme ohne nervige Dialoge? Gesucht, Gefunden! Ich weiß nicht welche gelangweilte Seele das zusammengestellt hat, aber diese Tabelle enthält für so ziemlich alle bekannten Freeware Programme die Installationsparameter für eine “Silent Installation”. Getestet, funktioniert. Das war doch ein wenig zu einfach…
Es hätte doch Stil, wenn Firefox bereits AdBlock Plus und das Flash Plugin vorinstalliert hätte, oder? Mit 7-Zip kann man den Firefox Installer recht einfach entpacken, die Ordnerstruktur ist recht logisch: non-localized enthält alle sprachneutralen, localized die übersetzten Inhalte. Die NPSWF32.dll von Flash also einfach in den non-localized\plugins Ordner kopiert und die Installation gestartet – Great Success!
AdBlock Plus stellte sich etwas schwieriger heraus – woher bekommt man die benötigten Dateien? Die Installationsseite installiert im Firefox direkt das Addons, im IE bekommt man eine Mitteilung, doch bitte Firefox zu nutzen. Der Quellcode offenbarte jedoch Folgendes:

    <a href="/de/firefox/downloads/latest/1865/addon-1865-latest.xpi?src=addondetail" id="installTrigger74835-6314f9b" title="Adblock Plus zu Firefox hinzufügen" addonName="Adblock Plus" addonIcon="/en-US/firefox/images/addon_icon/1865/1262852260" addonHash="sha256:e691e8230286883726203768bb1d22c9d19ded7165523a298edddc1cb25e886c" jsInstallMethod="browser_app_addon_install" frozen="false" class="button positive significant">

XPI Dateien waren mir bereits von Thunderbird Plugins bekannt. Es handelt sich hier lediglich um Zip Dateien mit anderem Suffix. Ergo mit IE heruntergeladen und entpackt. Der Inhalt:
AdBlock Plus

Die Dateien gehören logischerweise in den extensions Ordner – doch wie muss der Unterordner heißen? Ein Blick in die install.rdf half weiter:

AdBlock Plus

Ein Blick in meinen Firefox Ordner bestätigte die Vermutung – Ordnername gefunden. Die Firefox Installation war also soweit fertig.

Für modifizierte Installationen des Adobe Readers bietet Adobe den Adobe Customization Wizard an. Einziges Problem: Das Tool erwartet als Eingabe einen entpackten Installer. 7-Zip lieferte hier keine brauchbaren Ergebnisse, aber auch hier bot Adobe recht unkompliziert Hilfe in Form eines Knowledge Base Artikels. Der Customization Wizard war soweit unkompliziert zu bedienen und die Einbindung der modifizierten Installation war recht schnell erledigt.

Die ersten Tests mit VMWare verliefen erstaunlich gut – nur leider ließen sich die Firefox Installationen entweder nicht starten oder crashten nach einer halben Sekunde. 5 XP Installationen und gefühlte 20 Tassen Kaffee später habe ich mich dann nach anderen Möglichkeiten umgeschaut. Ein wenig später bin ich dann auch auf einen Artikel gestoßen, der sich auch mit der automatisierten Installation auseinandersetzte, aber einen anderen Ansatz nutzte: RunOnceEx.
Grundlegend wird hierbei während der Installation ein Registry Eintrag erstellt, welcher nach der ersten Anmeldung ein kleines Fenster anzeigt und hinterlegte Befehle ausführt:

Nach einigen Versuchen stellte sich dann heraus, dass diese Methode nicht nur professionell aussieht, sondern auch wunderbar funktioniert. Und der größte Vorteil: Man kann serverseitige Skripte ausführen!
Letztendlich sah das Skript dann so aus:

    @echo off
    SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
    REG ADD %KEY% /V TITLE /D "Komponenteninstallation" /f

    REG ADD %KEY%\001 /VE /D "XP Support Tools" /f
    REG ADD %KEY%\001 /V 1 /D "%CD%\Installer\WindowsXP-KB838079-SupportTools-ENU.exe"

    echo @echo off > C:\tmp_winrar_reg.bat
    echo copy %CD%\Installer\WinRAR\rarreg.key %ProgramFiles%\WinRAR\ >> C:\tmp_winrar_reg.bat
    echo del C:\tmp_winrar_reg.bat >> C:\tmp_winrar_reg.bat

    REG ADD %KEY%\005 /VE /D "WinRAR" /f
    REG ADD %KEY%\005 /V 1 /D "%CD%\Installer\WinRAR\setup.exe /s"
    REG ADD %KEY%\005 /V 2 /D "C:\tmp_winrar_reg.bat"

    REG ADD %KEY%\010 /VE /D "IrfanView" /f
    REG ADD %KEY%\010 /V 1 /D "%CD%\Installer\IrfanView\setup.exe /silent /folder="%ProgramFiles%\irfanview" /desktop=1 /thumbs=0 /group=1 /allusers=1 /assoc=0"

    REG ADD %KEY%\015 /VE /D "Firefox" /f
    REG ADD %KEY%\015 /V 1 /D "%CD%\Installer\Firefox\Setup.exe -ms"

    echo @echo off > C:\tmp_firefox.bat
    echo xcopy "%CD%\Installer\Firefox\extensions\*.*" "%ProgramFiles%\Mozilla Firefox\extensions" /Y /E >> C:\tmp_firefox.bat
    echo xcopy "%CD%\Installer\Firefox\plugins\*.*" "%ProgramFiles%\Mozilla Firefox\plugins" /Y /E >> C:\tmp_firefox.bat
    echo del C:\tmp_firefox.bat >> C:\tmp_firefox.bat
    REG ADD %KEY%\016 /VE /D "Firefox Erweiterungen" /f
    REG ADD %KEY%\016 /V 2 /D "C:\tmp_firefox.bat"

    REG ADD %KEY%\020 /VE /D "Installationsskripte" /f
    REG ADD %KEY%\020 /V 2 /D "\\w2k3srv\init$\Init_XP.bat"

Für das automatisierte Umbenennen des Rechners habe ich dann so ziemlich die perfekte Lösung auf administrator.de gefunden:

    @echo off
    if exist "C:\init_pcname_done.txt" goto :nothing_to_do

    set mac=none
    for /f "tokens=2 delims=:" %%a in ('ipconfig /all ^| find "Physi"') do set mac=%%a
    IF "%mac%" == "none" goto mac_name_fail
    echo MAC Adresse: %mac%

    set pc=none
    for /f "tokens=2 delims= " %%b in ('type "\\w2k3srv\Init$\Mac.txt" ^|findstr "%mac%"') do set pc=%%b
    IF "%pc%" == "none" goto pc_name_fail
    echo PC Name: %pc%

    REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f > nul
    REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f > nul
    REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f > nul
    REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f > nul

    echo %pc% > C:\init_pcname_done.txt
    pause
    goto end

    :pc_name_fail
    echo Kein gueltiger PC Name gefunden!
    pause
    exit

    :mac_name_fail
    echo Auslesen der Mac Adresse fehlgeschlagen!
    pause
    exit

    :nothing_to_do
    echo PC Name bereits gesetzt.

    :end

Die Delphi und Office Installationen habe ich dann in die Serverskripte eingefügt, da die XP CD sonst zu groß geworden wäre. Nach einigen Stunden Google und Batch – wer zum Teufel hat sich diese “Sprache” ausgedacht? – hatte ich dann eine Windows XP CD, welche fast komplett unbeaufsichtigt das Betriebssystem einrichtet und die benötigten Programme installiert. Mit 4 Kopien dieser CD war das Neuinstallieren des gesamten Computerkabinetts dann letztendlich nur noch eine Frage der I/O Bandbreite. :-)

Delphi vs C++

Januar 15th, 2010 by Sirius_White

Ich kann programmieren. Ich habe es schließlich im Informatikunterricht gelernt! ;)

Einer der interessantesten Punkte im Informatikunterricht ist zweifelsohne das Programmieren. Einerseits weil es der einzige praktische Teil des Unterrichts ist, andererseits weil sich hier am deutlichsten zeigt, wer mit diesem Fach zurecht kommt. Erstaunlicherweise kommen erstaunlich viele kommen erstaunlich schlecht damit zurecht. Wie dem auch sei – im vergangenen Schuljahr hatte ich also einige Wochen Delphiunterricht. Delphi ist insofern eine interessante Sprache, als der Code relativ benutzerfreundlich (/high level) ist, aber dennoch, anders als .NET und Konsorten,  nativ compiled wird, was wiederum einen gewissen Geschwindigkeitsbonus mit sich bringt. Abgesehen davon hat mich der Syntax bisher stets davon abgeschreckt, mich länger als 90 Minuten mit dieser Sprache zu beschäftigen.

Als abschließende Projektarbeit des Informatikunterrichts haben wir nun 17 Unterrichtsstunden Zeit, um in kleinen Teams eigene Programme zu entwickeln. Da ich eine Abiturprüfung in Informatik schreiben werde bin ich laut Lehrplan dazu verpflichtet Delphi (als die im Unterricht erlernte Sprache) zu nutzen. Da ich weiterhin durch meine Programmiererfahrung entweder mein Team überfordern würde oder selber unterfordert wäre, muss ich mein Programm allein entwickeln. Ich bin einfach mal auf den Zug aufgesprungen und habe mir vorgenommen, ein kleines Jump ‘n ‘Run ala Mario zu schreiben. Meine bisherigen Erkenntnisse:

  • Jede Sprache ist irgendwo gleich. Das heißt nicht, dass einem permanentes Googeln erspart bleibt – insbesondere beim Delphi Syntax. Wer auch immer diesen entworfen hat – ich würde ihm am liebsten einen großen, rohen Fisch ins Gesicht klatschen. :) Ein then nach dem If ist ja noch okay – aber wenn man geschweifte Klammern gewohnt ist, beginnt man relativ schnell begin .. end; zu hassen. Das Verketten von Bedingungen benötigt zwingend Klammern und die Regeln für das Setzen von Semikolons sind einfach nur wirsch.
      If (a = b) and (c = 0) then
      begin
      // mach was
      end;

    Meine bisherigen Entdeckungen zu Semikolonsetzung:

    • Grundsätzlich gilt: Nach jeder Zeile ein Semikolon.
    • Vor einem end ist das Semikolon optional
    • Vor einem else ist das Semikolon verboten
    • Es scheint sich wohl tatsächlich jemand etwas dabei gedacht zu haben
  • Virtuelle Funktionen werden nicht nur in der Basisklasse als virtual; deklariert – abgeleitete Klassen müssen die Überschreibung mit einem override; noch einmal explizit angeben.
      type
      TKnaller = class
      public
      procedure Zuenden; virtual;
      end;

      TBombe = class(TKnaller)
      public
      procedure Zuenden; override;
      end;

    Ansich keine schlechte Eigenschaft – sie macht immerhin deutlich, dass diese Funktion eine andere überschreibt. Dieses Stichwort zu finden hat jedoch eine Weile gedauert – Delphi-Coder beschreiben Virtual Calls offenbar ganz gerne ein wenig anders – auch wenn meines Wissens auch Delphi eine vtable benutzt.

  • Ich bin mittlerweile Visual Studio 2010 gewohnt. Die Delphi 7 IDE erinnert mich ein wenig an Visual Basic 6. Wer die beiden IDEs kennt, ist sich des Unterschiedes bewusst. Mir fehlt bei der Delphi IDE eine intuitive Übersicht über das Projekt. Es gibt zwar Code Tabs, aber sobald man das Fenster aus Versehen schließt ist irgendwie das halbe Projekt geschlossen. IntelliSense, welchen Namen es bei Delphi auch immer trägt, funktioniert hingegen erstaunlich gut – nur durch Neustart zu behebende Arbeitsverweigerungen hatte ich bisher noch nie. Trotzdem ist es kein Vergleich zum Arbeiten unter Visual Studio.
  • Was ich von anderen Informatiklehrern gehört habe, trifft leider nicht auf meine Schule zu. Einer der Lehrer behandelt das Programmieren grundsätzlich nur theoretisch, da er es selber nicht kann, die anderen kommen damit zurecht, sind aber dennoch in keinster Weise mit den technikbegeisterten, leicht “freakigen” Informatiklehrern vergleichbar, wie sie an anderen Schulen zu finden sind. :( Oder anders formuliert: Wenn ich im Unterricht eine Frage zu Delphi habe, sollte ich lieber gleich googeln.
  • Ich fühle  mich permanent dazu verleitet, gewisse Algorithmen in C zu schreiben und als DLL zu nutzen. Insbesondere wenn ich im IntelliSense ein HBITMAP sehe, schlägt mein WinAPI-Herz höher. Ach dürft ich doch nur…

Kurz gesagt: Delphi ist zwar nicht so schlimm wie erwartet, aber für die tagtägliche Programmierung möchte ich es trotzdem nicht benutzen.

Erkenntnisse während der Harmony Entwicklung

Januar 8th, 2010 by Sirius_White
  • Kaffee ist flüssiges Gold
  • PE ist simpel, aber trotzdem für die Tonne
  • Multithreaded Programmieren ist bequem, aber tippintensiv
  • Unaufmerksamkeit beim Multithreading ist fatal
  • Visual Studio 2008 und 2010 generieren inkompatiblen Code
  • Wenn man sich nicht einmal mehr auf den this Zeiger verlassen kann, sollte man über das Programmdesign nachdenken
  • Parallelisiertes Compilen wirkt sich direkt auf den Nervenverschleiß aus (VS: /MP8)

Die Entwicklung von Harmony schreitet recht zügig voran. Nachdem das Screenshotmodul fertiggestellt ist habe ich meine Aufmerksamkeit dem Window Manager zugewandt.
Zwei Bilder sagen wie immer mehr als 2000 Zeilen C++: