Der SNEScast stellt sich vor

Nachdem etliche Monate der Ideenfindung und Planung ins Land gegangen sind, ging der SNEScast, vor knapp drei Wochen live. In diesem Podcast dreht es sich um das Super Nintendo Entertaiment System bzw. das Super Famicon.

Der SNEScast Podcast ist da

Einen Überblick über das Spektrum, welches wir mit dem SNEScast abdecken wollen, gibt unsere kurze Nullnummer:

Jeweils Freitags erscheint um 18 Uhr eine neue Episode des SNEScast. Zu finden ist der SNEScast unter snescast.de.

Der Stadia-Controller

Das Wochenende habe ich damit verbracht den Stadia-Controller zu testen. Dieser wird im Stadia-Paket mitgeliefert. An sich sieht der Controller wie andere Controller aus. Allerdings hat Google noch einmal von vorne angefangen und den Controller komplett neu entwickelt. Die optische Ähnlichkeit mit anderen Controllern ergibt sich daraus, dass die bekannte Controllerform nah am Optimum für einen Controller ist. Doch wie schlägt sich der Stadia-Controller in der Praxis?

Der Stadia-Controller

Im Gegensatz zu einem Xbox-Controller wirkt der Stadia-Controller wesentlich runder und das im wörtlichen Sinne. Er besteht aus zwei Schalen; die unter Schale ist angeraut, während die obere Schale glatt ist. Beim Xbox-Controller ist die Oberseite angeraut, weshalb der Stadia-Controller ein anderes Handgefühl abliefert. Neben den bekannten Steuerelementen wie zwei Analog-Sticks, dem Digitalkreuz, den Aktionstasten X, Y, A und B sowie je zwei Schultertasten pro Seite, verfügt der Controller über fünf weitere Tasten in der Mitte.

Auf der rechten Seite findet sich oben die Taste zum Aufrufen der Pause bzw. des Ingame-Menüs. Darunter befindet sich die Screenshot-Taste mit welcher Screenshots und Videos aufgenommen werden können. Auf der linken Seite befindet sich oben eine Taste für weitere Spielaktionen und unten die Taste für den Google Assistant. Der Google Assistant ist hierbei noch nicht aktiv und wird erst später mit einem Update aktiviert.

Das mitgelieferte Ladekabel für den Controller

Zwischen den beiden Analog-Sticks befindet sich die Stadia-Taste. Mit dieser können die Stadia-Einstellungen aufgerufen werden und z.B. Freunde in eine Party eingeladen werden oder die Lautstärke des Chromecast reguliert werden. In den Controller eingebaut sind ein Mikrofon und ein 3,5 mm Kopfhörer- bzw. Headsetanschluss. Auf der Rückseite befindet sich ein USB-C-Anschluss, über welchen der Stadia-Controller geladen oder an den PC angeschlossen werden kann. Eine drahtlose Nutzung am PC wird erst mit einem zukünftigen Update möglich sein.

Aus ergonomischer Sicht kann der Controller mehrere Stunden ohne Ermüdungserscheinungen genutzt werden. Mit einem Gewicht von 268 Gramm liegt er angenehm in der Hand und ist nicht zu schwer. Alles in allem wirkt der Stadia-Controller durchaus ein wenig anders, aber sehr wertig. Die Druckpunkte der Tasten geben ein gutes Feedback, der Controller liegt gut in der Hand, sodass sich mit dem Controller die Stadia-Spiele angenehm spielen lassen.

Was steckt hinter Stadia?

Der Spielestreaming-Dienst Stadia versteht sich als neue Plattform. Wer für diese Plattform entwickeln möchte, kann sich unter stadia.dev dafür bewerben. Auf der Seite erhält der Leser daneben weitere Informationen über die Plattform.

stadia.dev

Auf der Hardwareseite wird aktuell eine 2,7-GHz-Hyperthread-x86-CPU mit AVX2 SIMD und 9,5 MB L2- und L3-Cache, eine AMD-GPU mit HBM2-Speicher und 56 Recheneinheiten mit einer Leistung von 10,7 Teraflops, 16 GB RAM mit einer Bandbreite von bis zu 484 Gbit/s und SSD-Speicher in der Cloud genutzt.

Auf Softwareseite wird Linux genutzt. Google nutzt hierbei die Linux-Distribution Debian als Grundlage. Als Grafikschnittstelle müssen die Spiele Vulkan benutzen. Dazu wird eine API bzw. ein SDK mitgeliefert, welches Funktionalitäten für die Verwaltung von Spielständen, die Nutzung der Multiplayer-Modi und der Funktionen für die Unterstützung der Unterbrechung und Fortsetzung des Spieles liefert.

Zurzeit unterstützen das Entwicklerwerkzeug Unity und die Unreal Engine den Spielestreaming-Dienst. Daneben existieren weitere Werkzeuge von Google, welche bei der Entwicklung von Spielen für Stadia helfen.

Evoli in Pokémon Go selektiv entwickeln

Das Pokémon Evoli kann sich in unterschiedlichste Pokémon weiterentwickeln. In der ersten Generation waren dies Aquana, Blitza, Flamara. Mittlerweile sind noch Folipurba, Glaziola, Nachtara und Psiana hinzugekommen. Wird ein Evoli in Pokémon Go entwickelt, so wird es sich zufällig entwickeln.

Ein Evoli in der Stadt

Mit einem kleinen Trick lässt sich die Entwicklungsform eines Evoli allerdings steuern. Dazu muss dem Pokémon vor der Entwicklung ein bestimmter Name gegeben werden:

Rainer -> Aquana 	
Sparky -> Blitza 	
Pyro   -> Flamara 	
Linnea -> Folipurba 	
Rea    -> Glaziola
Tamao  -> Nachtara 	
Sakura -> Psiana

Wurde der entsprechende Name vor der Entwicklung vergeben, so entwickelt sich das Evoli in die entsprechende Form. Pro Form lässt sich der Trick exakt einmal anwenden.

ExecutorService unter Java nutzen

Wenn unter Java die Ausführung von Quelltext parallelisiert werden soll, so können hierfür Threads genutzt werden:

Thread thread = new Thread(new TestRunnable());
thread.start();

In diesem Beispiel wird für eine auszuführende Aufgabe ein Thread erstellt und dieser anschließend gestartet. Nun kann es Fälle geben, in welchem mehrere Threads die gleiche Aufgabe ausführen sollen, allerdings nicht unbedingt die entsprechende Anzahl von Threads angelegt werden soll. Für eine solche Aufgabe eignet sich ein ExecutorService. Im ersten Schritt sollte ein Runnable definiert werden. In diesem Interface wird eine run-Methode definiert, die den auszuführenden Quellcode enthält:

public static class TestRunnable implements Runnable {

    @Override
    public void run() {
        // Do something
    }
}

Nun kann der ExecutorService angelegt werden und mit einem Threadpool ausgestattet werden. Anschließend werden die neuen Instanzen des Runnable, mittels der execute-Methode, an den ExecutorService übergeben.

// Executor service
ExecutorService executorService = Executors.newCachedThreadPool();

// Add jobs to executor service
for (int i = 0; i < 100; i++) {
    executorService.execute(new TestRunnable());
}

// Shutdown executor service
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

Damit würden die Aufgaben abgearbeitet. Allerdings würde der ExecutorService nun bis zu einem Timeout noch bestehen bleiben. Stattdessen wird er im Beispiel kontrolliert heruntergefahren. Nach der Ausführung der shutdown-Methode nimmt der ExecutorService keine neuen Aufträge mehr an; bestehende Aufträge werden allerdings noch abgearbeitet. Über die Methode awaitTermination wird sichergestellt das der Service wartet, bis alle Aufgaben abgearbeitet sind. Bei der Methode wird ein Timeout angegeben, nach welchem der Service zwangsweise abgeschaltet wird. Damit werden die Aufgaben Stück für Stück abgearbeitet, ohne entsprechende viele Threads zu öffnen. Stattdessen werden Threads aus dem Threadpool wiederverwendet.