seeseekey.net - Invictus Deus Ex Machina

Das Land der Browsergames verfügt über eine Menge Einwohner. Darunter gibt es einige Perlen zu entdecken wie z.B. Candy Box. Eine weitere Perle im Land der Browsergames ist Kittens Game. Bei dem Spiel geht es darum Stück für Stück eine Katzenzivilisation aufzubauen. Was am Anfang simpel wirkt, weitet sich im Laufe des Spieles zu einer komplexen Simulation aus, welche das Spiel immer interessanter macht.

Kittens Game

Auf grafischen Schnickschnack wird dabei verzichtet, so das die „Textwüste“ die Fantasie anregt, wie bei alten Textadventures. Das Spiel beginnt in der Steinzeit, führt den Spieler Stück für Stück in das Mittelalter, bis man schließlich nach etlichen Spielstunden in der Neuzeit ankommt. Dort betreibt man dann ein Weltraumprogramm und verlässt den Katzenplaneten und erforscht die Weite des Alls. Der Quelltext ist auf BitBucket zu finden, allerdings ist er nicht unter einer freien Lizenz verfügbar. Stattdessen nutzt es die selbst verfasste WET PAWS LICENSE:

Kitten game is licensed under a WET PAWS LICENSE.

You are free to make any changes in the code for personal or educational purpose. 
Using the game code for commercial gain or creation of derivative works is not permitted.

Hosting a translated version of the game is permitted as long as the game retains all links.
And for god's sake please don't make huge idiotic red logos of your website. (Yes, u77 folks, I am talking about you).

Technisch basiert das Spiel auf HTML5 und dem Dojo Toolkit. Neben der Variante im Browser existieren mittlerweile Versionen für iOS und Android.

Kittens Game
Preis: 1,09 €
Kittens Game
Preis: 24,99 UAH

Die App-Versionen sind kompatibel zu dem Spielstand des Browsergames, so das man nahtlos auf den mobilen Geräten weiterspielen kann. Die Spielstände können hierfür exportiert werden. In den neueren Versionen von Kittens Game ist der Im- und Export mittels Dropbox möglich, so dass die Übernahme eines Spielstandes noch einfacher ist.

Manchmal ist man als Entwickler auf der Suche nach einem Stück Quellcode. Die Gründe dafür sind vielfältig und natürlich kann man für diesen Zweck die Suchfunktionen einzelner Portale wie GitHub und Co. nutzen um den gewünschten Quelltext zu finden.

searchcode in Aktion

Einfacher wird das ganze mittels searchcode.com, einer Quelltextsuchmaschine. Bei searchcode, werden nach eigenen Angaben, über sieben Millionen Projekte verschiedenster Plattformen durchsucht. Für den Gebrauch in Firmen, welche natürlich auch private Repositories betreiben, gibt es searchcode dabei auch als Lösung zum selberhosten. Der Quelltext von searchcode ist auf GitHub zu finden. Zu beachten ist hierbei, das es sich um keine freie Software handelt und man damit die Lizenzbedingungen bei der Eigennutzung des Servers genau lesen sollte.

Vor einiger Zeit hatte ich einen Twitter-Bot entwickelt welcher als Datenquelle unter anderem die Wikipedia nutzt. Dazu nutzt der Bot unter anderem eine Bibliothek um auf die MediaWiki-API zuzugreifen. Nun stellte ich fest das die Nutzung der API in diesem Fall allerdings überdimensioniert war. Stattdessen ist es möglich sich für eine beliebige MediaWiki-Seite denn Quelltext anzeigen zu lassen. Die URL sieht dabei wie folgt aus:

https://de.wikipedia.org/wiki/Machinima?action=raw

Durch den Parameter action=raw wird der Quelltext anstatt des HTML-Renderings ausgegeben und kann somit ausgewertet werden.

Das Visual Studio formatiert den Quellcode automatisch nach den eingestellten Richtlinien. Wenn man nun aber die Richtlinien ändert, steht man vor dem Problem, das der Quelltext noch nach den alten Richtlinien formatiert ist.

Die Formatierungseinstellungen im Visual Studio

Die Formatierungseinstellungen im Visual Studio

Leider gibt es keine direkte Option im Visual Studio um den bestehenden Quelltext am Stück neu zu formatieren. Allerdings kommt man mit einem kleinen Makro (abgeleitet vom VS Formater Macro) an dieser Stelle weiter. Dazu wird im Visual Studio die Package Manager Console (zu finden unter Tools -> NuGet Package Manager -> Package Manager Console) geöffnet und dort folgendes eingegeben:

function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) -and -not $_.Name.EndsWith( ".Designer.cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } }
 
$dte.Solution.Projects | % { f($_.ProjectItems) }

Das Visual Studio öffnet nun alle *.cs Dateien in der geöffneten Solution und formatiert die Quelltexte neu. Dieser Vorgang ist dabei relativ langsam und führt bei größeren Projekten dazu das das Visual Studio einfriert. Auf Stack Overflow gibt es eine elegantere Lösung:

function FormatItems($projectItems) {
    $projectItems |
    % {
        # Write-Host "    Examining item: $($_.Name)";

        if ($_.Name -and $_.Name.ToLower().EndsWith(".cs") `
            -and (-not $_.Name.ToLower().Contains(".designer."))) {

            $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}');
            $win.Activate();

            $dte.ExecuteCommand('Edit.FormatDocument');

            if (!$_.Saved) {
                Write-Host "    Saving modified file: $($_.Name)";
                $dte.ExecuteCommand('File.SaveSelectedItems');
            }

            $dte.ExecuteCommand('Window.CloseDocumentWindow');
        }

        if ($_.ProjectItems -and ($_.ProjectItems.Count -gt 0)) {
            # Write-Host "    Opening sub-items of $($_.Name)";

            FormatItems($_.ProjectItems);
        }
    };
}

$dte.Solution.Projects | % {
    Write-Host "-- Project: $($_.Name)";

    FormatItems($_.ProjectItems)
}
;

Bei dieser Lösung wird jede Datei nach der Neuformatierung, gespeichert und wieder geschlossen. Leider wird auch diese Lösung von Datei zu Datei langsamer, so das sie für größere Projekte wiederrum unbrauchbar ist. Mit der Extension Format Document gibt es eine Lösung welche schnell genug ist, allerdings funktioniert diese nur unter Visual Studio 2010. Nach einigen Anpassungen habe ich eine Version gebaut, welche auch unter Visual Studio 2012 und 2013 läuft. Das Problem an dieser Variante ist, das Dateien in Ordnern nur berücksichtigt werden wenn der Ordner im Solution Explorer geöffnet ist. Alles in allem ist keine der vorgestellten Lösungen wirklich optimal, allerdings kann man viele Fälle mit den vorgestellten Lösungen lösen.

Mittels Sideloading kann man unter auch Emulatoren auf den Fire TV von Amazon bringen. Für die Emulation eines Nintendo 64 eignet sich der Emulator Mupen64Plus AE, bei welchem es sich um freie Software (unter GPL lizenziert) handelt. Allerdings gibt es mit diesem Emulator auf dem Fire TV ein Problem. Da der Fire TV keinen Möglichkeit für Toucheingaben bietet, kann man die Controller nicht konfigurieren.

Die Einstellungen für die Controller-Konfiguration

Die Einstellungen für die Controller-Konfiguration

Abhilfe schafft hier ein Blick in die Einstellungen. In den erweiterten Einstellungen findet sich der Punkt Erreichbarkeit. Wenn man diese Option auf Großbildschirm-Modus stellt, ist der bzw. die Controller auf dem Fire TV konfigurierbar.

HitchBOT ist in den letzten Wochen nicht nur durch Kanada, sondern auch durch die Presse gewandert. Es handelt sich bei HitchBOT um einen Roboter aus günstigen Bauteilen, dessen Ziel es war quer durch Kanada zu reisen. Während der Fahrt konnte man sich dabei mit HitchBOT unterhalten. Bei diesem Projekt sollte die Frage beantwortet werden, ob Robotern den Menschen vertrauen können.

Die Software welche HitchBOT antreibt ist dabei seit knapp sechs Monaten freie Software. Lizenziert ist das ganze dabei unter der GPL in Version 2. Zu finden ist der Quellcode auf GitHub. Die offizielle Seite von HitchBOT kann unter hitchbot.me besucht werden.

Im Zuge der Heartbleed-Problematik ist vielen bewusst geworden wie wenig man den Quelltext kennt den man tagtäglich nutzt.

Aufbauend auf diesem Wissen ist die Quelltextlesung entstanden, in dessen Verlauf bekannte Softwarepakete und Applikationen zum Verständnis gereicht werden. Deren zweite Ausgabe kann man in dem Video oben bewundern. Die Quelltextlesung ist hoffentlich eine Idee welche auf fruchtbaren Boden fällt.

Seit 2007 kann man bei der Entwicklung mittels .NET in den Quelltext des Frameworks debuggen. So kann man Fehler finden welche mit dem Unterbau zusammenhängen, was durchaus mal vorkommt.

referencesource.microsoft.com

referencesource.microsoft.com

Während man in den frühen Versionen den Quelltext nur mittels des Visual Studios anschauen konnte, gibt es nun seit einiger Zeit auch eine Möglichkeit dies Online zu tun. Auf der Seite referencesource.microsoft.com kann sich der Quelltext des gesamten .NET Frameworks problemlos im Browser angezeigt werden. Lizenziert ist das ganze dabei unter der Microsoft Reference Source License (MS-RSL).

Wie Heise gestern berichtete (http://www.heise.de/newsticker/meldung/Gefahr-durch-offene-PHP-Luecke-1567433.html) gibt es eine wunderschöne Sicherheitslücke im Bezug auf CGI und PHP. So führt der Aufruf:

http://localhost/index.php?-s

dazu das der Quellcode der Webseite ausgegeben wird. Das ist natürlich unpraktisch wenn dort Konfigurationsvariablen enthalten z.B. die Zugangsdaten für eine Datenbankverbindung. Zur Lösung des Problems gibt es drei Varianten:

  • PHP Version mit dem Bugfix einspielen
  • Rewrite Anweisung in die .htaccess
  • Wrapper welcher vor dem PHP-CGI aufgerufen wird

Die erste Variante scheidet aus, da der aktuelle Bugfix leicht umgangen werden kann. Die zweite Variante (einzutragen in eine „.htaccess“) sieht so aus:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^[^=]*$
RewriteCond %{QUERY_STRING} %2d|\- [NC]
RewriteRule .? - [F,L]

Die dritte Variante setzt einen Wrapper vor den eigentlich Aufruf und filtert die entsprechenden Anweisungen heraus. Dazu ändert man in der „httpd.conf“ die Zeile:

Action  application/x-httpd-php /cgi-bin/php-cgi.exe

in

Action  application/x-httpd-php /cgi-bin/php-cgi-wrapper.exe

und startet den Apache Server neu. Der Quelltext des Wrappers sieht dabei so aus:

#include <process.h>

#define PHP_ORIG "php-cgi.exe"

int main(int argc, char **argv)
{
    if(argc>1) argv[1]=0;
    _execv(PHP_ORIG, argv);
}

Das ganze kann hier auch als fertiges Visual Studio Projekt oder gleich als ausführbare Datei heruntergeladen werden.

Weitere Informationen gibt es unter:
http://www.kb.cert.org/vuls/id/520827
http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
http://www.heise.de/newsticker/meldung/PHP-patcht-schnell-aber-nicht-gruendlich-1567906.html