seeseekey.net - Invictus Deus Ex Machina

Für ein kleineres Projekt habe ich vor einiger Zeit eine HTML5-Single-Page-Application entwickelt und stand dann vor dem Problem wie ich unterschiedliche Views innerhalb dieser Seite realisiere. Da ich möglichst ohne schwerfälliges Framework auskommen wollte, habe ich mich für eine Lösung mittels jQuery entschieden. Im HTML habe ich dazu mehrere Views definiert:

<div id="options" class="widget" style="display: none">
</div>

<div id="game" class="widget">
</div>

Der Inhalt des div-Elements mit der Id options ist dabei standardmäßig ausgeblendet. Nun kann die Ansicht der beiden Views mittels der Funktion switchView gewechselt werden:

switchView() {
	  
    if(this.activeView==this.Views.Game) {
        $("#game").css({"display": "none"});
        $("#options").css({"display": "block"});
        this.activeView = this.Views.Options;
    }
    else if (this.activeView==this.Views.Options) {
        $("#options").css({"display": "none"});
        $("#game").css({"display": "block"});
        this.activeView = this.Views.Game;
    }
}

In der Funktion wird das CSS der jeweiligen div-Elemente manipuliert. Dadurch wird die Sichtbarkeit der Blöcke gewechselt und man hat eine einfache View Umschaltung realisiert.

In Minecraft existieren eine größere Zahl an sogenannten Taktgebern (bzw. Clocks). Ziel dieser Schaltungen ist es in regelmäßigen Abständen ein Redstone-Signal zu erzeugen. Das Problem an den meisten Taktgeber-Schaltungen ist, das diese notorisch instabil und unzuverlässig sind. Bei dem Trichter-Taktgeber ist dies anders. Dieser funktioniert nach einem Neustart des Servers und gerät mit der Zeit nicht aus dem Tritt.

Ein Trichter-Taktgeber

Für einen solchen Taktgeber müssen mehrere Trichter aneinander gehangen werden, bis sie schlussendlich einen Kreis bilden. Nun gibt man ein Item in einen der Trichter hinein. Dadurch wird das Item von Trichter zu Trichter weitergereicht. An einen der Tricher wird nun ein Komparator angebracht. Dieser löst immer dann ein Signal aus, wenn sich das Item in dem Trichter befindet. Setzt man an einen der Trichter ein Signal, so kann der Taktgeber gestoppt werden und zum Beispiel nur auf Wunsch aktiviert werden.

Wenn man unter JUnit für mehrere Tests einige vorbereitende Schritte benötigt, so kann man dafür die @Before Annotation nutzen:

@Before
public void setup() {
    // Prepare something
}

Das Problem an dieser Methode ist, das dass ganze auf eine Klasse beschränkt ist. Benötigt man die vorbereitenden Schritte in mehreren Klassen, so muss man sich unter JUnit 4 anders behelfen. Dort führt die Lösung über eine abstrakte Klasse:

public abstract class TestBase {
    @Before
    public void setup() {
        // Prepare something
    }
}

Von dieser Klasse können die Klassen mit den Testfällen abgeleitet werden. Allerdings muss man beachten, das es hierbei zu doppelter Initialisierung kommen kann. Unter JUnit 5 kann man dies nun wesentlich einfacher lösen. Dort gibt es die neue Annotation @BeforeAll:

@BeforeAll
public void setup() {
    // Prepare something
}

Mit diese Annotation wird die Initialisierung vor der Ausführung der Tests durchgeführt.

Wenn man Minecraft spielt, so macht man dies mit einem bestimmten Namen. Diesen Namen kann man über das Mojang-Profil ändern. Allerdings ist es von Mojang gewünscht das man dieses Namenshistorie nachvollziehen kann. Als passendes Tool hat sich die Webseite NameMC herauskristallisiert.

namemc.com

NameMC, welches unter namemc.com zu finden ist, ermöglicht das Durchforsten der Namensdatenbank. Daneben können auf der Webseite Skins gesucht und direkt über das Mojang-Profil auf den Minecraft-Charakter angewendet werden.

Das auf dem ESP8266 basierendem Entwicklungsboard NodeMCU gibt es unterschiedlichen Varianten, die sich unter anderem durch die Größe des Flashspeichers unterscheiden. Möchte man nun ermitteln welche Größe der Speicher beim eigenen NodeMCU-Board hat kann man dies mit einem Programm aus einem der ESP8266-Repositories sehr unkompliziert ermittelt.

Die Größe des Flashspeichers wird über die serielle Schnittstelle ausgegeben

Nachdem die Arduino IDE mit dem Programm geöffnet wurde und das Programm auf das NodeMCU-Board geflasht wurde, kann die Ausgabe über die serielle Schnittstelle ausgelesen werden. Dazu muss der serielle Monitor, im Menü unter Werkzeuge -> Serieller Monitor zu finden, aktiviert werden. Wichtig ist es, dass hier die korrekte Baudrate eingestellt wird.

Wer eine Apple Watch sein Eigen nennt, wird sich unter Umständen darüber wundern, das etwas was selbst günstige Fitnesstracker wie das Mi Band 2 beherrschen bei der Apple Watch nicht Out of the Box funktioniert. Die Rede ist vom Tracking und der Aufzeichnung des Schlafverhaltens.

Die App bei einer Auswertung

Dank der App AutoSleep kann man diese Funktionalität nachrüsten. Anhand der Bewegungsaktivität der Apple Watch und des iPhones versucht die App zu erkennen, wann der Träger der Apple Watch im Bett liegt und schläft.

Dabei kennt die App zwei unterschiedliche Modi. Beim ersten Modi trägt man die Apple Watch während der Nacht; AutoSleep erkennt anhand der Bewegungsmuster ob der Nutzer schläft. Da die Apple Watch ab und an auch geladen werden muss, gibt es den zweiten Modus. In diesem nimmt die App an dass man, während die Smartwatch nachts lädt, schläft. Damit die Ergebnisse möglichst nah an der Realität sind, gibt es eine Reihe von Einstellungsmöglichkeiten innerhalb der App. So kann man mit der Apple Watch mit etwas softwareseitiger Hilfe den Schlaf tracken.

Für ein U-Bahn-System welches ich auf meinem Minecraft-Server bauen wollte, war ich auf der Suche nach einem System um in einen Bahnhof einzufahren und nach einer gewissen Wartezeit wieder in die Richtung Fahrrichtung zu fahren, falls der Spieler nicht vorher aus der Lore aussteigt.

Das System von oben

Herausgekommen ist ein System, bei welchem der Zug einfährt und ein Redstone-Signal mit einer Aktivierungsschiene auslöst. Dieses Signal aktiviert eine Trichter-Clock. Über die Größe der Trichter-Clock kann die Zeitdauer des Stops auf dem Bahnhof bestimmt werden. Sobald die Trichter-Clock einmal im Kreis gelaufen ist, löst sie ein Signal aus und schießt den Zug ab. Damit das Signal lang genug ist wird eine Schaltung zur Verlängerung des Signals genutzt. Ansonsten würde der Zug während der Anfahrt stecken bleiben.

Die Signalverlängerung

Das Problem das der Zug in die richtige Richtung fährt, wurde dadurch gelöst das er vor dem Stopp eine Erhöhung befahren muss und in der Erhöhung zum stehen kommt. Bekommen die Schienen wieder das Redstone-Signal erledigt die Schwerkraft den Rest. Damit sind manuelle Abschüsse ebenfalls möglich.

Vor einigen Tagen bin ich über ein Trailer zu einem Spiel gestolpert, welches sich als selbst vorstellt als:

The only ancient germanic future lightning action game you need in 2016

Damit ist der Trailer ausreichend gut beschrieben.

Im Spiel selber geht es darum, den Lichtspeer, welcher von einem gelangweilten Gott entgegengenommen wurde, durch die Horde der Gegner zu führen. Das Spiel sollte am besten im englischen Original gespielt werden, da dadurch der recht schräge Humor der Lichtspeer-Macher besser zur Geltung kommt. Die Webseite des Spieles ist unter lichtspeer.com zu finden.

In Minecraft gibt es seit einigen Versionen sogenannte Banner. Diese werden aus unterschiedlichsten Elementen erstellt. Aus diesen Elementen innerhalb des Spieles ein Banner zu erstellen, kann dabei unter Umständen ein wenig kompliziert werden. Einfacher geht es mit einem Banner Generator im Browser.

Ein erzeugtes Banner kann anschließend exportiert werden

Mit dem Banner Generatur welcher unter needcoolshoes.com/banner zu finden ist, kann sich ein Banner aus den unterschiedlichsten Mustern und Farben einfach zusammengeklickt werden. Anschließend kann dieser Banner in Form eines Kommandos exportiert werden. Daneben wird auch die Bauanleitung generiert, so das der Banner von Hand direkt im Spiel gebaut werden kann.

Wenn man eine nicht mehr verfügbare Webseite aufrufen möchte oder einen älteren Stand einer Webseite benötigt ist die Wayback Machine vom Internet Archive stets zur Stelle. Das Internet Archive ist eine gemeinnützige Organisation, welche seit 2007 offiziell als Bibliothek vom US-amerikanischen Bundesstaat Kalifornien anerkannt ist.

archive.org/web/

Manchmal benötigt man einen Snapshot einer bestimmten Version der Webseite und möchte diesen nicht umständlich über das Webinterface der Wayback Machine herunterladen. In diesem Fall kann sich des Tools wayback-machine-downloader bedienen. Dieses Tool, welches in Ruby geschrieben ist, kann einfach über den Ruby-Paketmanager installiert werden:

gem install wayback_machine_downloader

Anschließend kann das Tool genutzt werden:

wayback_machine_downloader http://example.com

Damit wird der letzte gesammelte Snapshot heruntergeladen. Daneben existieren Option wie die –to Optionen um den Snapshot nur aus einem bestimmten Zeitraum zu holen. Da ich mehrere Snapshots einer Seite benötigte habe ich das ganze in ein Skript gegossen:

#sh

for i in `seq 127 1`;
  do
    # Define date postfix
    DATE_POSTFIX="28120000";
			
    # Linux (Linux date)
    #DATE=`date +%Y%m -d "$i month ago"`    
				
    # macOS (BSD date) 
    DATE=`date -j -v-${i}m +%Y%m` 
    
    # Add date postfix
    DATE=$DATE$DATE_POSTFIX
				
    # Create folder for snapshot
    mkdir $DATE
    cd $DATE

    # Download snapshot
    wayback_machine_downloader http://example.com --to $DATE

    # Leave folder
    cd ..
  done  

In diesem Skript wird durch das Skript 127 Monate in die Vergangenheit gereist und ein Snapshot der Webseite heruntergeladen. Das ganze läuft so lange durch bis das Ende der Schleife erreicht ist. So erhält man pro Monat einen Snapshot. Der Wayback Machine Downloader, dessen Quelltext auf GitHub zu finden ist, ist unter der MIT Lizenz lizenziert und damit freie Software.