Wie ich mal ein Spiel crackte

Eigentlich müsste die Überschrift mit „Als ich mal…“ anfangen, denn wie ich das gemacht habe, weiß ich nicht mehr genau. Allerdings auch nicht mehr wann. Also ist es auch wurscht. Und um es noch schlimmer zu machen: ich weiß auch nicht mehr genau, um welches Spiel es dabei ging!

Oil Imperium
Ports of Call

Ich weiß nur noch, dass es auf dem Amiga 500 war und entweder Ports of Call oder aber Oil Imperium war. Beim Starten des Spiels wurde irgendeine Sicherheitsfrage gestellt, bei der ich auch nicht mehr weiß, warum ich die nicht beantworten konnte. Also ob ich eine der legendären dezentralen Sicherungskopien besaß, oder ob ich den Produktschlüssel, oder was immer da abgefragt wurde, nicht mehr hatte.

Jedenfalls war ich damals schon mit einem Disassembler ausgestattet und konnte somit die Stelle im Code herausfinden, an der die Abfrage angezeigt und das Ergebnis ausgewertet wurde. Aus einem BEQ habe ich ein BNE gemacht, oder auch umgekehrt. Und schon konnte ich das Spiel starten. Ich war damals sehr stolz auf mich…

Den „Patch“ auf den Datenträger zurückspielen konnte ich allerdings nicht. Also musste ich beim Starten des Spiels immer den Umweg über den Disassembler gehen. Ganz schön umständlich, aber Hauptsache man konnte spielen :)

Sexismus

Die Debatte über Sexismus wird in den letzten Tagen an vielen Stellen aufgegriffen, Berichte wie Normal ist das nicht lassen mich kopfschüttelnd zurück. Damit das klar ist: Kopfschütteln darüber, wie Männer reagieren.

Ja, es gibt auch Frauen die Jungs hinterherkreischen, -pfeifen und -schauen, oder auf der Autobahn auf der Nebenspur zum Küssen animieren, aber das ist zum einen nicht so massiv, wie das was Frauen tagtäglich widerfährt. Und vor allem wird kaum ein Mann wirklich Angst vor solchen Attacken haben.

Ich glaube hier liegt auch das Problem der uneinsichtigen Männer: sie würden sich wünschen, dass eine Frau sie auf offener Straße anspricht, weil sie es schmeichelnd finden – und deshalb können sie nicht verstehen, dass Frauen das nicht ebenso sehen. Leider ist es aber nun einmal so, dass Männer wesentlich aufdringlicher und häufiger gewalttätig sind als Frauen. Ich behaupte jetzt mal ganz kühn, dass 99,99% der Männer keine Angst davor haben von einer Frau vergewaltigt zu werden. Das ist irgendwie eine absurde Vorstellung.

Für Frauen ist das aber leider tägliche Realität. Ich finde es persönlich erschreckend, dass Frauen sich darüber Gedanken machen, welchen Weg sie nach Hause nehmen, oder ob sie ab einer bestimmten Uhrzeit/einem Dunkelheitsgrad überhaupt noch raus gehen. Oder vielleicht nur in einer Gruppe. Das muss man sich als Mann einmal vorstellen!

Das sind Verhaltensregeln, wie wir sie unseren Kindern mit auf den Weg geben: Zuhause sein, bevor es dunkel wird; Nicht alleine von der Schule zurückgehen, etc.. Ohne hier jetzt noch ein weiteres Fass aufzumachen, aber kann es sein, dass Männer diese Frauenrolle verinnerlicht haben und sie deshalb weniger ernst nehmen, was dann einer der Gründe ist, warum Frauen im Beruf weniger Chancen bekommen? Siehe hierzu auch den schönen Artikel Why James Chartrand Wears Women’s Underpants.

Ich weiß nicht, wie und ob diese Debatte über Sexismus überhaupt etwas ändern wird. So lange Frauen aber Angst haben müssen, werde ich weiterhin abends Umwege gehen, damit ich einer unbegleiteten Frau sprichwörtlich aus dem Weg gehe. Denn so sieht die Realität aus: als Mann musst Du keine Angst haben – außer vielleicht vor anderen Männern.

Nachtrag: Unter dem Hashtag #aufschrei wird bei Twitter der alltägliche Sexismus aufgezeigt.

Neue Fox-Serie: The Following

Die erste Folge fand ich schon mal sehr gut und wenn sie es jetzt in den nächsten Folgen nicht versauen, könnte das ein Riesending werden: The Following. Eine tolle Besetzung mit Kevin Bacon in der Hauptrolle.

Ganz grob gesagt (damit nix gespoilt wird) geht es um Serienkiller und einen FBI-Mann.

Ich kann die nächste Woche kaum abwarten. Für mich mit Abstand der beste Newcomer in diesem Serienfrühling.

Belly Off 3 – Ende der ersten Woche

Heute vor einer Woche fing Belly Off 3 an, es wird Zeit für den ersten Zwischenbericht.

Laut Waage habe ich gegenüber dem Anfangsgewicht 2kg verloren. Das hört sich ganz gut an, ist aber sicherlich nur eine Momentaufnahme und enthält ein gutes Stück Messungenauigkeit. Was habe ich diese Woche anders gemacht? Eigentlich habe ich nur das fortgeführt, was ich mir am 30. Dezember (meine Ankunft hier in Schweden) vorgenommen hatte: keine Süßigkeiten, keine Cola, keine Pizza, mehr Bewegung.

Wobei das „keine Süßigkeiten“ auch in der letzten Woche wieder nicht funktioniert hat. Ich will Süßigkeiten ja auch gar nicht per se verteufeln, mir fällt es aber schwer, den Süßigkeitenkonsum zu reglementieren. Wenn hier eine Tafel Schokolade rumliegt, hält die kaum länger als einen Tag. Und so argumentiere ich dann mit mir zwischen „Du sollst Dich ja auch wohlfühlen“ und „aber hinterher bereust Du es“ hin und her und mache es dann so wie mit all meinen anderen Entscheidungen auch: das Bauchgefühl gewinnt (hier im doppelten Sinne) und ich esse die Schokolade so, wie es mir gefällt.

Auch in der letzten Woche habe ich eine Pizza gegessen (natürlich diese Tiefkühldinger), aber ich glaube, so langsam komme ich wirklich ab davon. Genauso wie von Cola. Dieser Heißhunger darauf ist fast komplett verschwunden. Ich muss nur mal schauen, womit ich mich dann in Zukunft „belohne“, oder besser gesagt: wie ich die Besonderheit des Wochenende zelebriere. Am letzten Wochenende kam zur Pizza noch ein Burger von MAX hinzu. Das volle Programm mit Käse, Bacon, Pommes und Cola. Aber ich bereue nix!

Die allabendlichen Spaziergänge von 30-45 Minuten habe ich durchgehalten, auch bei -12 Grad. Spazierengehen im Schnee ist einfach super. Mal sehen, wie das dann mal im stömenden Regen wird.

Am Wochenende habe ich mir ausserdem noch die App zu 100 Push-Ups / 100 Liegestütze heruntergeladen und den initialen Test gemacht. Sehr lahme 7 Stück sind dabei herausgekommen und gestern stand der erste Übungstag an (ich mache das jetzt montags, mittwochs, freitags). Wobei ich mal gespannt bin, wie ich das morgen schaffen werde. Meine Schulter sendet seit gestern komische Signale zwischen Muskelkater und totaler Unzufriedenheit aus.

Die App zu 200 Sit-Ups habe ich mir auch schon mal besorgt. Hier befürchte ich, dass der initiale Test noch deprimierender ausfallen wird. Ich muss mir aber auch noch die Anleitung dazu genau durchlesen. Also ob es z.B. erlaubt ist, die Füße einzuklemmen, oder ob die Sit-Ups komplett ohne Hilfestellung gemacht werden müssen.

Allen anderen Teilnehmern viel Erfolg!

Uli, Sebastian, MC Winkel, Mathis, Dirk Steins, ilovechaos, Antje, Natascha, Mary Malloy, Stefan, Anni, Lomomo, Guddy, Tyler, Rap’n Blues, Kaal, Corinna, Jan, chliitierchnuebler, Marco, riboerny, Sabrina, gelrueb, Frau K., Rachel, Jan, Thomas

Native SQL-Anfragen in Doctrine / Symfony2

Ich bin jetzt schon seit längerem ein großer Fan von Symfony 2 und verwende Doctrine als ORM. Das klappt alles super, manchmal muss man sich aber in die Grenzgebiete wagen.

Im vorliegenden Fall ging es um Statistikwerte in einer Tabelle. Im wesentlichen besteht die Tabelle (neben einer ID) noch aus einem Timestamp und um einen Wert, der im aktuelle Fall immer zwischen 1 und 3 liegt und eine Bewertung darstellt. Die Tabelle selbst wird auch in einer Entität abgebildet folgende einfache Query sollte aber nun umgesetzt werden:

SELECT DATE(created_at), rating, COUNT(rating) 
FROM ratings 
GROUP BY DATE(created_at), rating 
ORDER BY DATE(created_at) ASC, rating ASC;

Damit wollte ich also eine Zeitreihe erhalten, die neben dem Datum noch enthält, wie häufig die entsprechende Bewertung an dem Tag vorkam.

Hierzu musste ich auf die NativeQuery von Doctrine zurückgreifen. Die Ergebnisse werden aber trotzdem von Doctrine verwaltet und verlangen ein ResultSetMapping, damit Doctrine weiß, wie die Ergebnisdaten umgesetzt werden sollen. Damit lässt sich zum Beispiel bewerkstelligen, dass Doctrine automatisch passende Objekte zurückgibt, die die Daten enthalten.

In meinem Fall wollte ich aber nur die nackten Zahlen haben, da ich die Werte zur späteren Visualisierung in JS eh noch einmal umschreiben muss. Den Code habe ich in einem EntityRepository gekapselt, wer einen ähnlichen Code in einem Service oder einer Controller-Action verwenden will, muss sich ggf. anderweitig den EntityManager besorgen. So sieht der Code aus:

$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addEntityResult('CfMainBundle:Rating', 'r');
$rsm->addScalarResult('dateCreatedAt', 'date');
$rsm->addScalarResult('rating', 'rating');
$rsm->addScalarResult('countRating', 'count');
$data = $this->getEntityManager()
    ->createNativeQuery(
        'SELECT DATE(r.created_at) AS dateCreatedAt, r.rating, COUNT(r.rating) AS countRating
          FROM ratings r
          GROUP BY DATE(r.created_at), r.rating
          ORDER BY DATE(r.created_at) ASC, rating ASC',
         $rsm
    )
    ->getResult();

Das Ergebnisarray sieht so aus:

Array
(
    [0] => Array
        (
            [date] => 2013-01-05
            [rating] => 1
            [count] => 8
        )

    [1] => Array
        (
            [date] => 2013-01-05
            [rating] => 2
            [count] => 4
        )

    [2] => Array
        (
            [date] => 2013-01-05
            [rating] => 3
            [count] => 1
        )

    [3] => Array
        (
            [date] => 2013-01-07
            [rating] => 1
            [count] => 22
        )
...
)

Damit kann man nun prima weiterarbeiten. Zu beachten ist, dass in der Query die Originalnamen der Spalten aus der Datenbank genutzt werden müssen und nicht die Namen der gemappten Attribute aus der Entität. Dazu gibt es auch eine Abhilfe, die in der Doctrine-Dokumentation zur NativeQuery erklärt wird.