Phoniebox: Vom MVP zur richtigen Box (Toniebox-Alternative)


 

Vorab: Die erste Phoniebox, mein MVP (Minimum Viable Product) in einem Pappkarton, ist extrem gut angekommen, zum Teil werden die beklebten und bemalten RFID-Karten wie der größte Schatz behandelt und sogar versteckt oder mit zum Tisch gebracht. Zeit also, aus dem MVP eine richtige Box zu bauen. Wer den ersten Teil über meinen MVP nicht gelesen hat, die Phoniebox ist eine Open Source-Alternative zur Toniebox zum Selberbauen. Der Vorteil ist, dass man keine teuren Tonies kaufen muss, sondern günstige RFID-Karten oder -Sticker verwenden kann, um damit selbst ausgewählte Musikdateien abzuspielen.

Ich bin handwerklich höchst unbegabt, und die Frage, wie ich die Löcher wo in die Holzkiste bekomme, hat mich schwer beschäftigt. Einfach wieder nur kleine Löcher reinzubohren fand ich doof, zumal ich dieses Mal bessere Lautsprecher haben wollte. Und so kam eines zum anderen. Diese Box ist um einiges teurer geworden. Was habe ich gekauft?

Insgesamt kommt man hier also auf ca. 200€! Den Kreissägen-Aufsatz kann ich natürlich noch weiter verwenden, und handwerklich Begabtere haben sowas vielleicht eh zuhause. Man muss sich aber im Klaren sein, dass die Phoniebox zunächst einmal viel teurer werden kann als die Toniebox. Sobald man aber mehrere Tonies für die Toniebox kaufen würde, und jetzt gehen wir mal nur von den Kreativ-Tonies für 11,99€ aus, dann ist man bei 10 Tonies beim gleichen Preis, ab der 11. Karte wird die Phoniebox also günstiger. Klanglich ist meine Box auf jeden Fall eine andere Liga als die kleine Toniebox.

Die Aktivierung des MiniAmps war nicht ganz trivial. Olaf Splitt beschreibt die notwendigen Schritte hier sehr gut, ich hatte allerdings anscheinend schon die Toniebox-Software aufgespielt, und die belegt dummerweise dann einige der GPIO-PINs. Diese müssen dann deaktiviert werden. Irritierend ist, dass der Raspberry die Soundkarte zwar findet und man auch die Lautstärke regeln kann, aber dummerweise kein Ton rauskommt. Das machte die Fehlersuche nicht einfach. Der Sound zusammen mit den Lautsprechern ist aber wirklich toll. Ich hatte die Teile zunächst einmal ohne Kiste zusammengebaut um zu schauen, ob auch alles funktioniert.

Die EasyAcc PowerBank ist eine der wenigen, die gleichzeitig ausreichend Strom abgeben können, während sie auch lädt. So ist unterbrechungsfreier Musikgenuss möglich. Allerdings, bisher habe ch noch keine guten Erfahrungen sammeln können, dass tatsächlich auch mehr Strom in den Akku gepumpt als an den Raspberry ausgegeben wird. Genau das erwähnt Olaf Splitt in seinen ansonsten großartigen Anleitungen nicht so genau, er spricht sogar von Wochen (!), nach denen man das Ding mal wieder aufladen muss. Der große Unterschied ist wahrscheinlich, dass bei mir ein Raspberry 4 seine Arbeit tut, und der saugt die EasyAcc PowerBank schneller leer als sie das Netzteil vollladen kann. Die PowerBank darf theoretisch mit 5V 4A betankt werden, allerdings auch nur dann, wenn man beide USB-Ports zum Laden nutzt, ansonsten bleibt es bei 5V 2,4A. Für den Raspberry 4 wird ein 5V 3A-Netzteil angeboten, er soll aber auch mit 5V 2,5A betrieben werden können, je nachdem, welche Verbraucher noch angeschlossen sind. Bei mir halt noch der MiniAmp sowie der USB-Kartenleser. Eventuell werde ich daher den Raspberry 4 noch mal auswechseln gegen einen Raspberry 3.

Hier ist das Endergebnis, das Video spiegelt nicht den echten, wirklich guten Sound dar:

 

So sieht das Innenleben aus:

Andere Bastler hatten Kartenleser aus dem Plastikgehäuse geholt und dann direkt innen reingeklebt. Es funktioniert aber auch so gut, die Wand der Box ist nicht so dick, dass das Signal der Karte nicht funktionieren würde. Auch eine zusätzliche WLAN-Antenne war nicht notwendig, allerdings ist das das WIFI bei uns in der Wohnung auch sehr stark.

Die USB-Buchse habe ich noch nicht angebracht. Im nächsten Schritt würde ich auch noch einen Ein-/-Aus-Schalter anbringen, der die Box erst runterfährt, bevor sie vom Strom getrennt ist.

Phoniebox, die günstige Alternative zur Toniebox (mein erster Prototyp und MVP)


Wenn ich irgendetwas geliebt hatte als Kind, dann war es stundenlang Schallplatten oder Kassetten zu hören. Unser Nachwuchs hört auch gerne Musik, glücklicherweise stehen die bekannten Arien aus der Zauberflöte hoch im Kurs, aber auch Kraftwerks Roboter oder Herman van Veens seltsame Abenteuer. Wie kann man aber Kleinkindern heute in der Spotify- und Sonos-Welt einen geeigneten Zugang zu “ihrer” Musik geben?

Eine Toniebox kam für uns nicht in Frage, auch wenn das User Interface natürlich sehr kindgerecht ist. Glücklicherweise gibt es Open Source-Alternativen, und was noch besser ist, viele der dafür notwendigen Teile hatte ich bereits zuhause. Zum einen sei hier die Arduino-basierte Version Tonuino genannt, die den großen Vorteil hat, dass sie kaum Strom verbraucht und einen extrem kurzen Bootvorgang hat. Zum andern, und das ist das Projekt, das ich nachgebaut habe, die Phoniebox, die auf einem Raspberry 3 basiert. Hier dauert die Bootzeit mehr als eine Minute, falls die Box vom Strom getrennt wird, und natürlich wird auch viel mehr Strom verbraucht. Der große Vorteil für mich ist hier aber, dass Musik über ein Web-Interface verwaltet werden kann. Und ich kann Musik auch einfach leiser machen, wenn der Nachwuchs es zu bunt treibt 🙂

Wie funktioniert es genau? Auf der SD-Karte werden in einem definierten Verzeichnis Ordner angelegt, in denen Musikdateien oder Stream-URLs abgelegt werden. Die RFID-Karten werden mit den jeweiligen Ordnern verbunden, so dass eine Karte sozusagen das Abspielen der Musik in dem Ordner “anschubst”. Auf der Karte selbst wird also nichts abgespeichert, und man die Karten-Verknüpfung immer wieder neu konfigurieren. Die Karten kann man bemalen oder mit Aufklebern versehen, damit die Kids eine Orientierung haben, welche Musik oder welches Hörbuch oder welcher Stream sich mit einer Karte abspielen lässt.

Die Einkaufsliste auf der Phoniebox-Seite fand ich etwas verwirrend und zum Teil auch ungeeignet. Was ich gekauft habe:

Insgesamt 94,15€. Zum Vergleich, eine Toniebox kostet 79,90€. Da ist dann ein Tonie dabei, ein bespielter Tonie kostet ansonsten 14,99€, ein Kreativtonie kostet 11,99€. Wenn ich das Konzept richtig verstanden habe, dann kann man auf einen Kreativtonie 90 Minuten Inhalt laden, alles über eine Cloud, wobei man die Tonies auch offline nutzen kann. Ich habe bei 50 RFID-Karten also sozusagen schon 50 Tonies, nur noch ohne Inhalt. Der ist entweder schon da (ich hatte viele meiner alten Kassetten mal digitalisiert, weil ich sie nicht als CD bekommen konnte!) oder eben günstiger zu bekommen. So kann eine RFID-Karte auch mit einem Spotify-Song- oder Album oder einem Radiosender verbunden werden. Insgesamt ist man also günstiger dabei, wenn man mehr Inhalte hat, und außerdem ist man unabhängig von einer Plattform. Baut man eine Box mit dem Arduino, so wird diese sehr wahrscheinlich um einiges günstiger sein, und auch eine Batterie wird wahrscheinlich sehr viel länger halten.

Das Setup der PhonieBox hat bei mir ca 90 Minuten gedauert:

  • Das Image für Raspian Buster auf die SD-Karte flashen
  • SSH und WIFi vorab konfigurieren, damit ich keinen Monitor und Keyboard benötige
  • Komponenten zusammenstecken und Strom anschließen
  • per SSH einloggen und dann Installation mit dem Oneliner starten
  • Dann ist die Box bereits einsatzbereit

So sieht das Ganze dann aus, wenn es zunächst einmal ohne Gehäuse zusammengebaut ist:

Am meisten habe ich dann Zeit damit verbraten, die Karten zu bespielen. Man kann die Audio-Dateien entweder direkt via SMB auf die Platte laden oder über das Web Interface. Allerdings wurden nicht immer alle MP3s sofort erkannt.

Ein Gehäuse hatte ich erst einmal nicht geplant, da ich zunächst schauen wollte, ob ich die Phoniebox überhaupt zusammengebaut bekomme und ob die Jungs damit klarkommen. Dementsprechend ist die erste Version nicht besonders hübsch geraten, aber hey, es ist ein Minimum Viable Product 🙂

Sehr viel schönere Boxen kann man hier sehen:

Was sind die Erfahrungen nach ein paar Stunden/Tagen?

  • Die Box wird heißgeliebt und zum Teil auch stark umkämpft. Es muss also auf jeden Fall eine zweite Box her.
  • Die Jungs verstehen mit 2 1/2 Jahren noch nicht ganz, dass mit einer Karte mehrere Lieder abgespielt werden können und die Karte nochmal an den Leser gehalten werden muss, um zum nächsten Stück zu kommen (sofern das so konfiguriert ist). Daher habe ich so wieder so konfiguriert, dass das Stück wieder von vorne spielt, das mit der Karte verbunden ist.
  • Auch empfiehlt es sich, am Anfang nur eine kleine Auswahl an Karten bereitzustellen, es ist für die Kleinen ansonsten zu viel. Bei uns gibt es Karten zu:
    • “Zu Hilfe, zu Hilfe” aus der Zauberflöte
    • “Der Vogelfänger bin ich ja” aus der Zauberflöte“
    • “Weg da” von Herman van Veen
    • “Das Lied der Schlümpfe” von Vader Abraham
    • “Die Roboter” von Kraftwerk
    • “The Young Person’s Guide to the Orchestra”
    • “Peter und der Wolf”, gesprochen von Loriot
  • Einer der Jungs hat die Karte zum ersten Stück in der Liste gebunkert, sie ist sein größter Schatz, der kaum losgelassen wird.
  • Eine Anker PowerBank kann ich nicht empfehlen, da sie nicht gleichzeitig lädt während sie dem Raspberry Pi Strom gibt. Ich werde daher in der Version 0.2 auf dieses Modell ausweichen. Das macht das Gerät dann noch mal 33€ teurer.

Meine nächste Version:

  • wird in einer richtigen Holzbox gebaut werden,
  • und ich werde auch auf bessere Lautsprecher sowie den HifiBerry MiniAmp zugreifen.
  • Außerdem will ich eine Buchse in das Gehäuse einbauen, mit der der Akku aufgeladen werden kann.
  • Auf Knöpfe will ich erst einmal verzichten, je mehr drin ist, desto mehr kann auch kaputt gehen 🙂
  • Zuguterletzt sollen die beiden Boxen dann auch synchronisiert werden können, dazu gibt es bei Olaf Splitt auch eine Anleitung.

Und hier ist der Post zu meiner zweiten Phoniebox!

Material zum Web Analytics Wednesday 8. April 2020


Schön, dass Du beim ersten virtuellen Web Analytics Wednesday dabei warst. Hier sind die versprochenen Links:

Alle mit + markierten Link sind Affiliate-Links

Von WordPress zu Hugo: 15 Jahre Blogging


Zum 15. Geburtstag dieses Blogs gibt es nicht nur ein Redesign, sondern auch neue Technik unter der Motorhaube:

  • Blogdown ermöglicht es, mit R eine Website auf Basis von Hugo zu erstellen. So kann ich mit meiner Lieblingssprache mein Blog gestalten und muss nicht jedes Mal überlegen, wie ich meinen R-Code oder die Grafiken in WordPress kriege.
  • Der Output ist pures HTML, was die Abhängigkeit von Datenbanken, WordPress-Plugins etc zum einen abschafft und zum andern, und das ist für mich extrem wichtig, eine superschnelle Auslieferung von Inhalten ermöglicht (siehe Screenshot von den Google PageSpeed Insights unten bei den Tests mit meinem Preview-Server). Ich bekomme nun auch keine Mails mehr, weil irgendjemand versucht hat, in meinen Server einzudringen, oder weil der Datenbankserver zu viel Arbeitsspeicher benötigt.
  • Der Workflow ist fast vollautomatisch: Ich schreibe meine Texte in RStudio, committe einen Stand auf GitHub, und von da aus wird automatisch auf meinen Webserver deployed. Wenn mir was misslingt, gehe ich halt auf einen früheren Commit zurück. Continuous Deployment heißt das auf wohl auf Neudeutsch.

2005 hatte ich die erste Version des Blogs mit Movable Type realisiert. Damals wurden auch schon HTML-Seiten produziert, die dann nicht mehr in Echtzeit bei einem Seitenaufruf generiert werden mussten. Ich weiß nicht mehr, wann und warum ich auf WordPress wechselte. Vielleicht weil es dort mehr Erweiterungen gab. 10 Jahre war ich dann mindestens auf WordPress und mehr als einmal enorm genervt.

Der Wechsel auf Hugo lief nicht vollautomatisch. Der WordPress to Hugo Exporter war die einzige von den populären Optionen, die bei mir halbwegs funktioniert hat. Es ist notwendig, den Platz, den ein Blog heute auf der Disk und in der DB beansprucht, noch mal auf der Disk frei zu haben, denn alles wird darauf als Flatfiles repliziert. Die Fehlermeldungen, die das Skript ausspuckt, sind nicht hilfreich bei der Identifikation dieses zu erwartenden Fehlers. Gleichzeitig wurden nicht alle Seiten korrekt konvertiert, so dass ich fast alle Seiten noch mal anfassen musste.

Dabei ist mir zum einen aufgefallen, was sich alles seit 2005 geändert hat:

  • Menschen und Blogs, die ich vermisse, gefühlt gibt es kaum noch richtige Blogs,
  • Themen, die mich entweder heute noch interessieren oder bei denen ich mich frage, wie sie mich überhaupt interessieren konnten,
  • und jede Menge Links zu externen Seiten, die einfach tot sind, obwohl es die Seiten noch gibt.

Das Web ist genau so wenig statisch wie wir es sind, und die 15 Jahre sind für mich eine schöne Dokumentation meiner unterschiedlichen Etappen.

Werden meine Texte gelesen? Analytics-Implementierung im Detail


Zum Jubiläum der Website Boosting (60. Ausgabe!) gibt es hier einen Deep Dive, wie man einen benutzerdefinierten Bericht zu den bis zum Ende gelesenen Texten erstellen kann. Dies ist eine Ergänzung zu meiner vierteiligen Serie “Webanalyse: Wie aus Daten Taten folgen”, in der 60. Ausgabe findet sich der 3. Teil. Grundsätzlich hatte ich über das Thema auch schon einmal hier geschrieben im Vergleich zur Scrolltiefe. Dies ist ein Beispiel dafür, wie benutzerdefinierte und berechnete Messwerte verwendet werden können.

In dem Screenshot wird pro Seite angegeben:

  • Wie viele Wörter ein Text hat
  • Wie häufig eine Seite aufgerufen wurde
  • Der Anteil der Aufrufe, der zu einem Ausstieg geführt hat
  • Die Anzahl der Sichtbarkeit des YARPP-Elements (YARPP steht für Yet Another Related Posts Plugin, welches ähnliche Artikel am Schluss eines Artikels anzeigt. Ist dieses Element auf dem Bildschirm des Nutzers sichtbar, so wird davon ausgegangen, dass der Artikel über dem Element zu Ende gelesen wurde)
  • Der Anteil der Sichtbarkeit des YARPP-Elements mit Hinblick auf alle Seitenaufrufe
  • Die Anzahl der Klicks auf einen YARPP-Link
  • Der Anteil der Klicks auf einen YARPP-Link in Bezug auf die Sichtbarkeit des Elements

Welches Problem wird mit diesem Bericht gelöst?

  • Wird ein Text seltener zu Ende gelesen als andere Texte, dann scheint dieser Text nicht so interessant geschrieben zu sein.
  • Die Länge des Textes könnte ein Prädiktor dafür sein, ob ein Text zu Ende gelesen wird; wird aber ein kürzerer Text nicht zu Ende gelesen, so könnte das ein noch stärkeres Signal dafür sein, dass der Text optimierungswürdig ist.
  • Werden die Links zu ähnlichen Artikel nicht angeklickt, obwohl sie sichtbar sind, so scheinen sie nicht relevant zu sein.

Erstellen der benutzerdefinierten Dimension und Messwerte

  • In Analytics auf Verwaltung (links unten) gehen und dann in der Property-Spalte auf Benutzerdefinierte Definitionen klicken.
  • Zunächst auf Benutzerdefinierte Messwerte und dann auf den roten Button Neuer Benutzerdefinierter Messwert klicken
  • Einen verständlichen Namen auswählen (z.B. “YARPP Seen”)
  • Der Umfang (Scope) ist Treffer (Hit)
  • Der Formatierungstyp ist Ganzzahl (Integer)
  • Die restlichen Werte können leer gelassen werden
  • Auf Speichern klicken.
  • Den Prozess noch einmal wiederholen, dieses Mal für die “YARPP Clicks”. Die Einstellungen sind dieselben.

Der erste Eintrag sollte nun den Index-Wert 1 haben, der zweite Eintrag den Index-Wert 2, es sei denn, es wurden schon einmal benutzerdefinierte Variablen definiert.

Sollte auch die Anzahl der Wörter eines Textes erfasst werden, so ist dazu eine benutzerdefinierte Dimension notwendig. Der Prozess ist ähnlich, hier wieder einen passenden Namen auswählen und den Umfang Treffer. Auch hier muss der Index-Wert für diese benutzerdefinierte Dimension in Erinnerung oder notiert werden, da er später im Google Tag Manager verwendet werden soll.

Implementierung im Google Tag Manager

Sind die benutzerdefinierten Definitionen und Messwerte implementiert, so können nun Werte in diese Variablen geschrieben werden. Dies geschieht mit dem Tag Manager. Zunächst einmal muss das Element ausgewählt werden auf der Seite, bei dem der Trigger der Sichtbarkeit ausgelöst werden soll. Die dazu notwendigen Schritte sind bereits in diesem Artikel beschrieben. Dann wird der folgende Trigger konfiguriert:

Der Trigger feuert einen Tag, der nun auch noch konfiguriert werden muss:

Wichtig ist in diesem Schritt, dass die Einstellungen überschrieben werden, da nur so ein Messwert als benutzerdefinierter Messwert (im Screenshot Custom Metrics) übergeben werden kann. Hier muss dann der Indexwert gewählt werden, der in dem Schritt oben von Analytics definiert wurde. Der Wert des Messwerts ist hier 1, da für jede Sichtung der Zähler um 1 nach oben springt.

Die Variable Scroll Depth Threshold ist nicht notwendig, eventuell muss sie zunächst konfiguriert werden. Dieser Schritt muss dann noch einmal wiederholt werden für die Klicks auf einen YARPP-Link und gegebenenfalls für die benutzerdefinierte Dimension der Anzahl Wörter pro Text. Diese können aber bereits in den Google Analytics Einstellungen übergeben werden, die als Variable definiert werden. In meinem Fall sieht die Konfiguration so aus:

Wie man schön sehen kann, ist an meiner Konfiguration einiges speziell, aber der WordCount wird in eine benutzerdefinierte Dimension mit dem Indexwert 7 übergeben.

Erstellen des berechneten Messwerts

Damit eine Ratio beziehungsweise Conversion Rate angezeigt werden kann, wird ein berechneter Messwert erstellt. Dies sind die Spalten “YARPP Seen CVR” und “YARPP Click CVR” in dem Beispiel-Bericht im ersten Screenshot. Hinweis: Es kann etwas dauern, bis die benutzerdefinierten Messwerte hier sichtbar sind! Das heißt, dass dieser Arbeitsschritt eventuell erst nach einigen Stunden oder sogar erst nach einem Tag durchführbar ist.

In dem Screen Verwaltung in der ganz rechten Spalte findet sich der Eintrag Berechnete Messwerte. Hier auf den roten Button Neuer Berechneter Messwert klicken und dann im folgenden Screen die folgenden Einstellungen übernehmen. Es reicht, die ersten Buchstaben des Variablennamens einzutippen, Analytics vervollständigt die Namen. Dies ist die Einstellung für die Click CVR:

Für die Seen CVR wird die Formel {{YARPP seen}} / {{Seitenaufrufe}} verwendet.

Erstellen des benutzerdefinierten Berichts

Zu guter Letzt wird nun ein Bericht erstellt, so wie er im ersten Screenshot oben zu sehen ist. Unter Anpassung (links oben) und Benutzerdefinierte Berichte kann ein neuer Bericht erstellt werden. Hier werden alle gerade benutzerdefinierten und relevante ab Bord verfügbare Metriken ausgewählt und dazu die passende Dimension ausgewählt. Leider kann hier keine sekundäre Dimension bereits ausgewählt werden; dies muss dann manuell geschehen, wenn der benutzerdefinierte Bericht aufgerufen wird.

Das wars! Weiteres wertvolles Wissen zur Webanalyse gibt es in meinem Buch “Einführung in die Webanalyse”!

Lebensbetriebssysteme


 

Apple ist kein Computer-Hersteller mehr, Google keine Suchmaschine, und Amazon nicht nur ein Online-Einkaufszentrum. Diese Firmen verbindet, dass sie von ihrem jeweiligen Startpunkt aus weitere Bereiche des Lebens erobern. Die Auswirkungen sind schon jetzt vorhersehbar.

Google bietet über die Suchmaschine hinaus E-Mail, ein Mobiltelefon-Betriebsystem und Mobiltelefone, einen mit Sprache bedienbaren Assistenten, ein Computerbetriebssystem, einen Browser, selbstfahrende Autos, einen Fotodienst und weitere Dienste in der Cloud, Musik, Filme, Heimüberwachungssysteme (Nest), YouTube und vieles mehr. Apple bietet Mobiltelefone, Computer, iPads, Software, einen Musikservice, eine SmartWatch, Kopfhörer, einen mit Sprache bedienbaren Assistenten, einen TV-Dienst und eine Cloud-Lösung und vieles mehr. Amazon bietet neben anderen Produkten die Belieferung von Lebensmitteln, eigene Produkte, einen mit Sprache bedienbaren Assistenten, Videokonferenz-Hardware, einen Musik-Service, einen Film-Service und ist außerdem der größte Cloud-Anbieter. Und vieles mehr.

Auf den ersten Blick mögen die Dienste jeweils ein buntes Potpourri darstellen, aber schaut man einmal genauer hin, so basteln die drei großen Digital-Schwergewichte (Facebook aus dem GAFA-Akronym einmal ausgenommen) Lebensbetriebssysteme. Unser Leben wird immer stärker von digitalen Systemen unterstützt werden, und Apple, Amazon und Google arbeiten daran, möglichst viel von diesem Systemen zur Verfügung zu stellen. Ein System, das das digitale Leben schlüssig und kohärent verknüpft, könnte man ein Lebensbetriebssystem nennen.

Das wird vor allem deutlich, wenn man von einem System auf das andere wechseln will oder mit einem anderen System Daten austauschen muss. Das ist zum Teil jetzt schon schwer. Android-Handy und MacBook? Macht keinen Spaß. Von einem Android auf ein Apple-Handy umsteigen? Zunächst kein Problem, es gibt einen Assistenten. Aber der Kalender? Und die Kontakte? Wie bekomme ich die Fotos nun in die elegante Foto-App von Apple? Richtig effizient ist es erst, wenn alle digitalen Aktivitäten mit Apple-Produkten gestaltet werden. Fotos synchronisieren sich über mehrere Geräte hinweg, Dateien ebenso, egal wie viel Speicherplatz man auf dem jeweiligen Gerät hat.

Bei Google lernt der Assistent hinzu. Je mehr von den Google-Produkten genutzt wird, desto bessere Vorschläge werden erstellt. Stau auf dem Weg zur Arbeit? Kein Problem, das Android-Handy warnt seinen Benutzer auf Basis historischer Daten und der gegenwärtigen Verkehrslage. Auch hier wird über mehrere Geräte hinweg synchronisiert.

Amazon scheint noch abgeschlagen zu sein. Aber die Strategie, Hardware vergünstigt abzugeben wie in dem Fall der Tablets, hilft dabei, Kunden an das Amazon-Universum zu binden.

Und so könnte sich bald eine neue Klassengesellschaft, die sich auf die Verwendung des jeweiligen Lebensbetriebssystems ergeben:

  • Die, die es sich leisten können, nutzen das Apple-System. Es ist teuer, aber zeitsparend und schick.
  • Etwas günstiger wird das Google-System sein, auch wenn sich Google mit den Pixel-Geräten in den oberen Preis-Segmenten versucht. Es ist das System für die breite Masse.
  • Am günstigsten wird es ein Amazon-System geben. Es bietet nicht die schnellste Hardware, aber alles was man braucht, ist dabei.
  • Die, die unabhängig bleiben wollen, arbeiten mit Linux-Rechnern und freier Software. Die Rebellen. Sie bezahlen vor allem mit Lebenszeit, behalten dafür aber auch die Kontrolle über ihre Daten.

Richtig spannend wird es aber erst werden, wenn die KI-basierten Assistenten wirklich gut sind. Wenn sie dann alle Informationen, die sie über einen Nutzer über mehrere verschiedene Services sammeln, verwenden können, dann wäre eine richtige Unterstützung wie in “Her” erst möglich. Und dann wird es noch schwerer werden, von einem System auf das nächste zu wechseln.

Vielleicht werden sich die Internet-Giganten aber auch öffnen und gegenseitig Schnittstellen bereitstellen. So könnte Siri aus Google Mails lernen und Alexa aus der YouTube-Playlist. Sehr wahrscheinlich klingt das aber nicht. Stattdessen sieht es eher so aus, dass wir in den jeweiligen Systemen gefangen sein werden, weil ein Wechsel zu viele Nachteile mit sich bringen würde.

Das hat auch ganz praktische Auswirkungen: Was wenn eine Apple-Frau mit einem Amazon-Typen zusammenziehen will? Sie kann seine Hardware nicht steuern und umgekehrt. Oder wird dann nicht mehr zwischen den Klassen gedatet?

Google Wifi versus Netgear Orbi Erfahrungen


Nach knapp 2 Jahren habe ich meine 3 Google Wifi Pucks –in Rente geschickt– auf eBay eingestellt. Erste Probleme hatten sich bereits vor einem Jahr eingestellt als einer der Pucks von einem Tag auf den anderen aufgehört hatte zu arbeiten. Zwar funktionierte er noch, aber er konnte sich nicht mehr mit dem Haupt-Zugangspunkt auf der anderen Seite der Mauer verbinden. Selbst wenn er genau neben dem anderen Puck stand, wollte er sich nicht mehr zuverlässig verbinden. Der Google Wifi Puck wurde von Google sofort ausgetauscht, nur das Problem war nicht gelöst. Sehr wahrscheinlich hatte sich ein anderes Netzwerk in der Nachbarschaft breit gemacht, und tatsächlich hatte der Nachbar unter mir sich ein neues, starkes WLAN besorgt. Das automatische Wechseln der Kanäle ist eine nette Theorie, aber so richtig gut funktioniert es nicht. Zwar wechseln die Wifis ihre Kanäle ab und zu, aber nur um dann gemeinsam auf dem gleichen Kanal abzuhängen.

Als wir diese Wohnung in dem fast 150 Jahre alten Haus sanierten, fragte uns der Elektriker, ob wir nicht Ethernet gelegt haben wollten. “Nein, warum denn, ich hab doch WIFI?”, sagte ich, und das war eine der schlechtesten Entscheidungen, die ich jemals getroffen habe. Mit 8 Sonos-Boxen, 3 bis 5 Handys, 1 Tablet, mehreren Smart Home-Devices wie zum Beispiel von tado sowie jede Menge anderer Geräte im WLAN gibt es hier schon jede Menge Stress. Die Lösung für mein WLAN-Problem sollten daher PowerLine-Adapter von tp Link bilden. Diese leiten angeblich bis zu 1.300 MBit/s durch, und natürlich ist das ein theoretischer Wert. Tatsächlich aber schafften sie tatsächlich je nach Raum zwischen 200 und 950 MBit. Nur im Arbeitszimmer, wo ich das Netz am nötigsten bräuchte, da war die Verbindung sehr unsicher. Entweder war sie gar nicht da, oder sie schwankte zwischen 8 und 200 MBit/s. Richtig Spaß macht das nicht.

Da ich momentan etwas mehr Zeit im Arbeitszimmer verbringe (nach dem Buch ist vor dem Buch), nervte die schlechte WIFI-Verbindung immer mehr. Und ständig den Ethernet-Adapter (der muss an meinem MacBook Air an den alten Thunderbolt-Port, denn der USB-Adapter schafft nur 100MBit/s) anzuschließen, nun ja…. Gestern Abend fiel das Netz dann ständig aus, und dann suchte ich noch mal nach anderen Mesh-Netzwerken. Von dem Netgear Orbi hatte ich schon einige gute Sachen gelesen. Um 0:58 am Samstag Morgen bei Amazon das NETGEAR Orbi High Speed Mesh WLAN System RBK50-100PES (3.000 MBit/s Tri-Band Mesh Router + Satellit Repeater, 350 m² Abdeckung) bestellt, um 11:58 am selben Tag hatte ich es von einer Amazon Locker Station abgeholt (Danke, Amazon! Eigentlich sollte das erst nach dem Wochenende geliefert werden, aber noch am selben Tag ist schon sehr nett).

Weniger als eine Stunde später war es eingerichtet. So einfach wie mit dem Google Wifi ist es nicht. Die App ist weniger verständlich, manche Einstellungen wie Port-Weiterleitungen können nur im Browser vorgenommen werden. Aber die Geschwindigkeit… der Satellit steht nun im Arbeitszimmer, und seitdem habe ich keinen einzigen Abbruch mehr gehabt. Besser noch, die Geschwindigkeit ist besser als was ich jemals bisher hatte. In dem Screenshot links sieht man eine Tx Rate von 867 MBit/s. Das scheint das Maximum zu sein, was mein altes MacBook Air auf dem 5 GHz-Band zustande bekommt. Natürlich sind wir hier noch nicht bei den 3.000 MBit/s, die das Netz theoretisch bietet. Aber, um ganz ehrlich zu sein, mit wem sollte sich das MacBook dann auch verbinden? Meine NAS hat zwar einen 10 GBit-Ethernet-Anschluss, hängt aber an einem 1 GBit-Switch, an dem auch das Orbi hängt. Meine Tests zeigen momentan eine maximale Geschwindigkeit von 330 MBit/s zur NAS, wenn ich dort auf eine SSD schreibe, das sind etwas mehr als 40 MByte/Sekunde. Nicht schlecht, wenn man überlegt, dass ich vorher eher nur bangen konnte, dass meine Verbindung überhaupt hält.

Natürlich ist es kein Wunder, dass das Netgear-Gerät mehr Dampf drauf hat: Es ist um einiges größer, so dass auch mehr Platz für Antennen drin steckt. Ja, es ist teurer im Vergleich zum Google Wifi, aber bei mir scheint es zumindest momentan die Lösung für WLAN-Probleme zu sein. Der Langzeit-Test steht noch bevor. Zumindest die Google Wifi-Pucks haben ihn leider nicht überstanden.

Kommentare (seit Februar 2020 ist die Kommentarfunktion von meinem Blog entfernt):

Internet Speedtest says

  1. November 2019 at 16:05 Hallo, ich nutze auch ein Netgear Orbi RBK53 System mit 3000MBit/s. Genau diese 3000MBit/s möchte ich dir kurz erklären bzw. wie sich diese zusammensetzen.

1733 MBit/s (4MIMO Streams mit je 433 MBit/s im 5GHz Netz für den Orbi Router und den Satellitten) Dieses Netz siehst du nicht dass ist nur für die interne Verbindung. 867 MBit/s (2MIMO Streams mit je 433 MBit/s im 5GHz Netz für die Clients) 400 MBit/s (2MIMO Streams mit je 200 MBit/s im 2,4GHz Netz für die Clients)

1733 + 867 + 400 = 3000 MBit/s (die du aber an einem Client nie bekommen kannst)

Viel Spaß mit deinem Orbi System! Ich werde mir nie wieder etwas anderes fürs WLAN kaufen…

Wie Suchmaschinen Data Science verwenden (schon bevor es Data Science genannt wurde)


Mit jedem Google-Update werden die Rankings für manche Seiten durcheinander gewirbelt, und ab und zu fragt man sich, warum es manche Seiten trifft und andere nicht. Denn zum Teil werden Seiten „abgestraft“, bei denen man sich die Frage stellt, wie kann das sein? Das ist doch eigentlich eine gute Seite?

Dass Google Machine Learning nutzt, um die Relevanzberechnungs-Algorithmen zu optimieren, ist bekannt. Aber wie genau funktioniert das? Und was bedeutet das für Suchmaschinenoptimierer?

Wie Machine Learning funktioniert

Zunächst einmal wird zwischen Supervised und Unsupervised Learning unterschieden. Entweder überlässt man es der Maschine, Muster in Daten zu finden. Oder man gibt der Maschine vorab Trainingsmaterialien und sagt zum Beispiel, was gute und was schlechte Dokumente sind, damit die Maschine auf Basis des Gelernten in Zukunft bei neuen Dokumenten entscheiden kann, ob es ein gutes oder ein schlechtes Dokument ist.

Im Machine Learning wird häufig mit Distanzen gearbeitet, und das ist so ein zentrales Konzept, dass es genauer beleuchtet werden soll. Die folgenden Zeilen sind stark vereinfacht. Wir beginnen außerdem mit einem Unsupervised Learning-Beispiel, das in der Suchmaschinenwelt wahrscheinlich keine so große Rolle spielt, aber es zeigt das Konzept der Distanz auf eine sehr einfache Weise.

Stellen wir uns vor, wir haben eine Menge von Dokumenten, und für jedes Dokument sind Eigenschaften gemessen worden. Eine Eigenschaft ist zum Beispiel die Anzahl der Wörter in einem Dokument (X1), eine andere ist eine Maßzahl wie der stark vereinfachte PageRank der Domain, auf der das Dokument liegt (X2). Dies sind jetzt wirklich fiktive Werte, und es soll auf keinen Fall ausgesagt werden, dass es hier eine Korrelation gibt. Es geht nur um die Verdeutlichung.

Zunächst werden die Werte auf diesselbe Skala gebracht (Befehl scale), danach wird eine Distanzmatrix erstellt (Befehl dist). Die Befehle für das Cluster werden später besprochen.

In der Distanzmatrix sind die Distanzen zwischen den einzelnen Reihen abgebildet. So ist der Abstand von Reihe 1 zu Reihe 3 geringer als der von Reihe 1 zu Reihe 4. Schaut man sich die Werte an, so sind diese Distanzberechnungen nachvollziehbar. Im nächsten Schritt werden daraus dann Cluster gebildet und diese in einem Dendrogramm geplottet:

Auch hier kann man gut nachvollziehen, warum die Werte aus den Reihen 7 und 10 eher zusammen gehören als die Werte aus Reihe 1 und 3. Die Maschine hat diese Cluster allein aus den Distanzen berechnen können.

Was haben Googles Human Quality Rater mit Machine Learning zu tun?

Nun gehen wir einen Schritt weiter. Wir wissen, dass Google Menschen Suchergebnisse beurteilen lässt, von highest zu lowest usw. Die Rater Guidelines sind einfach zu finden. Auch hier kommen wieder Distanzen ins Spiel, sobald “highest” eine Zahl bekommt und “lowest” und alle Werte dazwischen.

Natürlich können die Human Quality Rater nicht alle Suchergebnisse durchsehen. Stattdessen werden bestimmte “Regionen” trainiert, das heißt, dass die Bewertungen genutzt werden, um den Algorithmus für bestimmte Suchanfragen oder Signalkonstellationen optimieren zu lassen. Anders als im vorherigen Beispiel haben wir es hier mit Supervised Learning zu tun, denn wir haben eine Target Variable, das Rating. Gehen wir jetzt davon aus, dass mehr als 200 Faktoren für das Ranking verwendet werden, dann könnte man die Aufgabe für den Algorithmus so formulieren, dass er all diese Faktoren so anpassen muss, dass er auf das Target Rating kommt.

Um genauer zu verstehen, wie so etwas funktioniert, nehmen wir wieder ein stark vereinfachtes Beispiel, dieses Mal von einer Support Vector Machine.

Das Prinzip der Support Vector Machines ist ein simpler, aber ziemlich durchdachter Ansatz, um die optimale Distanz zwischen zwei verschiedenen Segmenten zu berechnen. Nehmen wir im obigen Bild die rote Linie. Sie durchtrennt die blauen und die grünen Kreise. Sie könnte aber genau so gut ein paar Grad nach links oder rechts gedreht werden, und sie würde immer noch die beiden Segmente perfekt voneinander trennen. Und nun kommt der Trick: Um die optimale Trennung zu berechnen, wird die Linie einfach erweitert um zwei parallele Linien. Und der Winkel, bei dem die beiden Parallellinien am breitesten oder am weitesten voneinander entfernt sind, das ist der optimale Winkel für die rote Linie.

Nehmen wir nun an, die beiden Segmente sind wieder Signale aus dem Ranking, x1 ist der PageRank, x2 die PageSpeed. Die Daten werden hier in einem zweidimensionalen Raum geplottet, und man kann schön sehen, dass sie wunderbar voneinander getrennt sind. Wir könnten also unsere Maschine anhand dieser Daten trainieren und dann in Zukunft sagen, wenn neue Elemente in den Raum kommen, dass sie basierend auf dem Gelernten klassifiziert werden sollen. Und das funktioniert nicht nur mit 2 Variablen, sondern auch mit ganz vielen. Der Raum zwischen den Punkten wird dann Hyperplane genannt.

Nun sind Daten nicht immer so genau trennbar. Nehmen wir das Beispiel mit PageRank und PageSpeed. Nur weil eine Seite einen hohen PageRank hat, bedeutet das nicht, dass sie auch eine super Speed haben muss. Es könnte in dem Bild oben also auch vorkommen, dass ein paar grüne Kreise in den blauen sind und umgekehrt. Wie kann dann noch ein ein Trennbalken durch die Segmente berechnet werden? Ganz einfach: Für jeden Kreis, der sich nicht klar auf “seiner” Seite befindet, gibt es einen Minuspunkt. Und nun wird einfach berechnet, bei welchem Balken und seiner Lage die wenigsten Minuspunkte zustande kommen. Dies wird als “Loss Function” bezeichnet. Um es anders auszudrücken: Selbst “gute” Seiten könnten nach einer Support Vector Machine als “schlecht” klassifiziert werden, der Trick ist halt, sowenig gute Seiten wie möglich als schlecht zu klassifizieren und umgekehrt. Es ist halt unwahrscheinlich, dass alle “guten” Seiten dieselben Eigenschaften haben.

Was bedeutet das für Suchmaschinenoptimierer?

Zunächst einmal bedeutet es, was ich schon vor über einem Jahr auf der SEO Campixx-Konferenz gesagt habe, dass es keine statische Gewichtung gibt; das Ranking ist dynamisch. Bei Ask.com hatten wir einzelne Regionen trainiert, zum Beispiel wenn es keine Backlinks gab oder wenig Text oder bei Gesundheitssuchanfragen usw. No one size fits all. Uns stehen heute eben nicht alle 200 Signale zur Verfügung, um das Ranking pro Suchbegriff zu re-engineeren.

Gleichzeitig wird aber auch klar, warum manchmal Seiten abgestraft werden, die es eigentlich nicht verdient hätten. Es liegt nicht daran, dass sie für schlecht befunden worden wären, nur dummerweise haben sie zu viele Signale, die für ein schlechteres Ranking sprechen. Und da die Rater nicht bewusst nach irgendwelchen Signalen gesucht haben, hat der Algorithmus, sei es Support Vector Machines oder etwas anderes, halt selbst die Signale ausgewählt, die einen minimalen Loss bedeuten. Und da wir nicht alle 200 Signale haben, ist es für uns auch oft unmöglich nachzuvollziehen, was es genau gewesen sein kann. Man kann bei einem Re-engineering nur hoffen, dass unter den zur Verfügung stehenden Signalen schon etwas Brauchbares dabei ist.

Umso wichtiger ist die Beschäftigung mit den Quality Rater Guidelines. Woran machen die Rater Expertise, Trust und Authority fest? Was führt zur “highest” Bewertung? Auch wenn es langweilig ist, einen besseren Tipp kann man neben den Hygienefaktoren wahrscheinlich kaum geben.

Support Vector Machines wurden übrigens in den 60er Jahren entwickelt. Als von Data Science noch nicht die Rede war. Auch noch interessant sind die Ranking SVMs