Lautstärke für Alexa Lautsprecher-Gruppen einstellen

Alexa bzw. mehrere Alexa-Geräte können als Multiroom-Beschallung genutzt werden. Dazu werden sogenannte Lautsprecher-Gruppen in der Alexa-App eingerichtet.

‎Amazon Alexa
Preis: Kostenlos+
Amazon Alexa
Preis: Kostenlos

Die Lautstärke der einzelnen Geräte kann individuell geregelt werden. So führt der Befehl:

Alexa, Lautstärke 4

dazu das die Lautstärke des Gerätes auf einer Skala von 1 bis 10 auf die Lautstärke 4 gestellt wird. Alternativ können die Befehle Alexa, leiser und Alexa, lauter genutzt werden.

Alexa ist aktiv

Neben dieser Möglichkeit der Einstellung der einzelnen Geräte können auch alle Geräte einer Lautsprecher-Gruppe gemeinsam auf eine neue Lautstärke gestellt werden. Dazu dient der Befehl:

Alexa, Lautstärke Überall auf 4

Damit wird die Lautstärke aller Geräte der Gruppe Überall auf vier gestellt. Die Anfrage kann auch variiert werden, solange das Wort Lautstärke, der Wert und der Name der Gruppe in der Anfrage vorkommt. Diese Funktionalität ist vor allem dann praktisch, wenn eine größere Anzahl an Alexa-Geräten genutzt wird.

Klassenname für Logger unter Java automatisch ermitteln

Vor einiger Zeit schrieb ich einen Artikel darüber, wie der Klassenname für einen Logger ermittelt werden kann. Im Endergebnis sah die damalige Lösung, unter Nutzung der Simple Logging Facade for Java kurz SLF4J, wie folgt aus:

Logger log = LoggerFactory.getLogger(new Exception().fillInStackTrace().getStackTrace()[0].getClassName());

Damit wird der gesamte Stacktrace zusammengesammelt und entsprechend der Klassenname extrahiert. Das Problem an dieser Variante ist das der gesamte Stack dafür ausgewertet wird und für jede Nutzung eines Logs eine relativ unintuitive und lange Zeile von A nach B kopiert werden muss. Anders sieht es mit folgender Lösung aus:

package net.seeseekey.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Utility class to get logger
 */
public final class Logging {

    private Logging() {
    }

    public static Logger getLogger() {

        StackWalker.StackFrame frame = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
                .walk(stream -> stream.skip(1)
                        .findFirst()
                        .orElse(null));

        if (frame == null) {
            return LoggerFactory.getLogger("Common");
        }

        return LoggerFactory.getLogger(frame.getClassName());
    }
}

Bei dieser Utility-Klasse wird der entsprechende Klassenname dynamisch über einen StackWalker ermittelt. Zurückgegeben wird hierbei der Klassenname des Aufrufers. Konnte kein Klassenname ermittelt werden, so wird stattdessen ein Logger mit dem Namen Common zurückgegeben. Damit kann der eigentliche Logger nun wie folgt angelegt werden:

Logger log = Logging.getLogger();

Der StackWalker ist ab Java 9 verfügbar und kann somit in neueren Projekten problemlos genutzt werden. Im Gegensatz zu den bisherigen Methoden Teile des Stacktrace zu erhalten, ist der StackWalker aus Performancesicht zu bevorzugen. Definiert wurde diese API in der JEP 259.

Seiten des Homescreen unter iOS anordnen

Die Seiten des Homescreen unter iOS ließen sich früher mittels iTunes anordnen. Diese Möglichkeit ist mittlerweile weggefallen. Allerdings gibt es seit einigen iOS-Versionen die Möglichkeit die Seiten des Homescreens direkt unter iOS anzuordnen. Dazu muss im ersten Schritt die Bearbeitung des Homescreens aktiviert werden, indem etwas länger auf ein App-Icon geklickt wird und dort dann der Punkt Home-Bildschirm bearbeiten ausgewählt wird.

Die Bearbeitung der Seiten des Homescreens unter iOS

Die Punktleiste zwischen den App-Icons und dem Dock kann daraufhin selektiert werden. Nach einem Druck auf diese öffnet sich ein Bildschirm, auf dem die einzelnen Seiten des Homescreens neu angeordnet werden können. Daneben ist es zur Organisation des Homescreens auch möglich, entsprechende Apps im Bündel zu verschieben.

SFP-VDSL-Modem auf einem MikroTik-Router einrichten

Reine VDSL-Modems sind eine aussterbende Art. Trotzdem gibt es noch hier und da entsprechende Modems, unter anderem im SFP-Standard. Diese SFP können genutzt werden z.B. einen MikroTik-Router mit einer entsprechenden Funktionalität nachzurüsten. In diesem Fall sollte es die Möglichkeit sein VDSL über das Interface sfp1 zu nutzen. Die erhältlichen SFP-Module für VDSL sind meist baugleich mit dem VersaTec VX-160CE VDSL2-SFP.

Ein VDSL Modem als SFP

Nachdem das Modul im MikroTik-Router installiert wurde, ist das Interface sfp1 aktiv. Die Auto Negotiation muss für das Modul deaktiviert werden. Andernfalls schlägt später die Neuverbindung nach einem Neustart fehl, da das Modul nicht mehr erkannt wird.

Die Auto Negotiation muss für das Modul deaktiviert werden

Eingestellt wird das Modul hierbei auf 1Gbps bei Full Duplex. Im nächsten Schritt muss ein VLAN für die Schnittstelle angelegt werden. Hintergrund ist, das erwartet wird das die Daten sich im VLAN mit einer bestimmten ID befinden. Bei der Deutschen Telekom ist dies die 7, bei anderen Anbietern kann dies teilweise abweichen. So z.B. bei 1&1; dort wird je nach genutzter Infrastruktur die 7 oder die 8 genutzt.

Das VLAN-Interface

Beim anzulegenden VLAN-Interface ist darauf zu achten, das kein Service-Tag gesetzt wird. Nachdem das Interface sfp1 und das entsprechende VLAN-Interface konfiguriert sind, kann im nächsten Schritt die PPPoE-Verbindung eingerichtet werden. Dazu wird unter PPP ein neues PPPoE-Interface eingerichtet. Das zu nutzende Interface für das PPPoE-Interface ist hierbei das VLAN-Interface, im Beispiel sfp1-v7.

Das PPPoE Interface

Im Tab Dail Out müssen die Zugangsdaten von Internetanbieter eingetragen werden. Im Falle einiger Anbieter wie z.B. 1&1 kann es notwendig sein vor dem eigentlichen Nutzernamen ein H zu setzen, da dieser sonst nicht akzeptiert wird und der Authentifizierungsvorgang fehlschlägt. Damit ist das SFP-Modul eingerichtet und die Verbindung kann genutzt werden. Je nach genutztem Modell aus der MikroTik-Palette kann es sein, das nicht die volle Bandbreite genutzt werden kann. Das Problem ist in diesen Fällen meist die CPU-Auslastung durch die PPPoE-Verbindung da diese komplett durch die CPU verarbeitet werden muss. In einem solchen Fall kann zu den Cloud Core-Routern von MikroTik gegriffen werden.

Nachdem die Verbindung hergestellt war, stellte ich im Laufe eines längeren Testes allerdings fest, dass der PPPoE-Link in regelmäßigen Abständen nach 30 – 80 Minuten zusammenbrach und somit leider kein stabiles Internet lieferte. Vermutlich handelt es sich um ein Problem des SFP-Moduls im Zusammenhang mit dem DSLAM.

Factorio gegeneinander im Mehrspieler-Modus spielen

Factorio ist eine großartige Simulation, welche sich um den Aufbau immer größerer Fabriken dreht. Das Spiel kann sowohl im Einzel- als auch im Mehrspieler-Modus gespielt werden.

Factorio
Preis: 32 €

Im Mehrspieler-Modus kann hierbei gemeinsam an einer oder mehreren großen Fabriken gearbeitet werden. Allerdings gibt es auch eine Möglichkeit das Spiel im Mehrspieler-Modus gegeneinander zu spielen.

Factorio mit einer größeren Fabrik

Hierzu muss mittels der Zirkumflex-Taste (^) die Konsole in einem Mehrspieler-Spiel aufgerufen werden. Zu berücksichtigen ist, das bei der Nutzung der Konsolenbefehle, keine Errungenschaften mehr für den entsprechenden Spielstand erworben werden können. Um dies zu bestätigen, muss das erste Konsolen-Kommando deswegen zweimal eingeben werden. Das Spiel weist den Spieler auf diesen Umstand hin. Die einfachste Variante ist es einen zweiten Spieler in eine andere Gruppe zu setzen:

/c game.create_force("Gruppe")
/c game.players["Spielername"].force = game.forces["Gruppe"]

Damit ist der entsprechende Spieler in einer anderen Gruppe und kann Basen anderer Spieler angreifen. Zusätzlich sollte noch der Spawnpunkt dieser neuen Gruppe verschoben werden:

/c game.forces["Gruppe"].set_spawn_position({x = -975, y = -36}, game.surfaces[1])

Die aktuelle Koordinate kann hierbei über den Befehl:

/c game.player.print(game.player.position.x .. ", " .. game.player.position.y)

ermittelt werden. Alternativ können alle Spieler in unterschiedliche Gruppen gesteckt werden.

/c game.create_force("Gruppe1")
/c game.create_force("Gruppe2")

/c game.players["Spieler1"].force = game.forces["Gruppe1"]
/c game.players["Spieler2"].force = game.forces["Gruppe2"]

/c game.forces["Gruppe1"].set_cease_fire("Gruppe2", true)
/c game.forces["Gruppe2"].set_spawn_position({x = -975, y = -36}, game.surfaces[1])

Unterschiedliche Gruppierungen können ihre Fließband-, Strom- und Flüssigkeitsnetzwerke miteinander verbinden und es ist möglich von den Fließbändern anderer Gruppierungen Gegenstände aufzuheben. Daneben werden automatisch nur Gebäude angegriffen, die offensiven Zwecken dienen, wie z.B. Laserkanonen.