Besondere Zeiten erfordern besondere Videokonferenzen: Wie führt man eine Online-Feierstunde durch?

Benjamin D. Ferencz ist der letzte noch lebende Ankläger der Nürnberger Prozesse. Für seine Verdienste wurde er vor kurzem mit der Ehrendoktorwürde ausgezeichnet. Wie die Online-Feierstunde aus technischer Sicht verlief, beschreiben wir hier als Erfahrungsbericht – auch als Beispiel für zukünftige, ähnliche Nutzungsszenarien.

Screenshot der Feierstundenaufzeichnung

Was hat das mit IT – beziehungsweise mit dem RRZK – zu tun? Wir wurden gebeten, diese mit rund 400 Teilnehmenden etwas größere Veranstaltung mit technischer Unterstützung zu begleiten und Fragen rund um die Durchführung im Vorfeld der Feierstunde zu klären.

Vorbereitungen

Geplant war die Veranstaltung als Videokonferenz beziehungsweise als Webinar über das Zoom-Portal der Uni Köln. Ein Zoom-Webinar hat den Vorteil, dass die Sprecher*innen auf dem virtuellen Podium als „Panelists“ für alle sichtbar sind. Die (passiv) Teilnehmenden der Feierstunde bleiben unsichtbar, können sich aber jederzeit mit Wortbeiträgen – wie beispielsweise Gratulationen – äußern.

Administration durch mehrere Hosts

In den Einstellungen wurden drei Hosts benannt. Dies hat den Vorteil, dass die Videokonferenz bei möglichen Verbindungsproblemen eines der drei Hosts zum einen aufrecht erhalten werden kann. Zum anderen hätten jederzeit bestimmte administrative Aufgaben (wie das Hineinlassen weiterer Teilnehmender aus dem Warteraum) von den jeweils anderen durch- oder weitergeführt werden können.

Aufzeichnung

Die Feierstunde sollte mit Bild und Ton aufgezeichnet werden. Um diese Aufzeichnung unabhängig von der Verbindungsqualität des jeweiligen Hosts zu erstellen, nutzten wir die Cloud-Aufnahmefunktion von Zoom, die mehrere Videos und Audiospuren als mp4- und mp3-Dateien nach dem Ende des Webinars bereitstellte. Warum mehrere Spuren und Dateien? Auf diese Weise gab es eine „Videogesamtspur“, die alle Panelisten in der Galerieansicht von Zoom zeigte. Zusätzlich wurden die Einzelansichten der Redner*innen separat aufgezeichnet. Am Ende ermöglichte uns das einen dynamischen Zusammenschnitt der Aufnahmen mit einem Wechsel zwischen Einzel- und Gesamtansicht. Wie man dies einstellen kann, beschreibt Zoom in seinem Help-Center.

Absprache zum Wechseln zwischen den Reden

Hätte man die Feierstunde in Präsenz abgehalten (vermutlich im größeren Rahmen der Aula der Universität) wären die Redner nacheinander aufs Podium vor das Mikrofon getreten. Im Virtuellen ist dies durch Zoom ebenfalls möglich, wenn man die Einzelansicht wählt. Zoom erkennt automatisch (leider mit ein paar Sekunden Verzögerung), wer gerade spricht und schaltet dann in der Einzelansicht auf die sprechende Person um. Deshalb sollten die jeweiligen Redenden zunächst einige Sekunden warten, um einen guten Übergang zu gewährleisten.

„Generalprobe“

Durch einen Probedurchlauf wurden die Panelisten vorab instruiert. Dies bezog sich auf den Ablauf der Feierstunde sowie auf die Reihenfolge der Ansprachen. So klärte man die technischen Details zur Einwahl in die Konferenzoberfläche, die Informationen zur Aufzeichnung und weitere Fragen sinnvollerweise im Vorhinein – gute Voraussetzungen für einen reibungslosen Ablauf.

Die Feierstunde

Wie zeigt man ein virtuelles Bühnenbild?

Alternatives Bühnenbild, Text als Überleitung zu Rektor A. Freimuth
Als Alternative zum Bühnenbild hier die Überleitungsgrafik zur Rede von Rektor A. Freimuth

Neben den Redner*innen zeigte man eine per Bildschirm geteilte Präsentation; sie diente sozusagen als Bühnenbild-Ersatz. Eine Folie visualisierte zu Beginn den Titel beziehungsweise den Anlass der Feierstunde sowie die (die Feierstunde ausrichtende) Rechtswissenschaftliche Fakultät mitsamt Fakultätslogo/-siegel. Zwischen den einzelnen Redebeiträgen leitete eine Folie mit Namen und Titel zu den angekündigten Personen über. So konnte die Moderation – in diesem Fall moderierte Prof. Dr. Claus Kreß – von visuellen Überleitungen unterstützt werden (die Reden selbst fanden ohne geteiltes Hintergrundbild statt). Danach blendete man zum Abschluss der Feierstunde einige Fotos aus dem Leben des Gewürdigten ein.

Voraufgezeichnetes Video vorführen

Höhepunkt der Feierstunde war ein Video des Geehrten, das wenige Tage vor der Veranstaltung aufgezeichnet wurde. Dieses blendeten wir mit Bild und Ton über die Bildschirm-Teilen-Funktion ein. Dabei muss man unbedingt darauf achten, die Audioausgabe des eigenen Rechners mit zu übertragen und am besten die Ausgabe für Videoclip zu optimieren.

Hosts / Technik ausgeblendet

Panelisten der Feierstunde
Nur die Redner*innen sollten während der Feierstunde sichtbar sein.

Sichtbar waren während der gesamten Feierstunde nur die Panelisten selbst. Die technisch Verantwortlichen, also die Hosts, hatten Mikrofon und Kamera deaktiviert. Über die Funktion „Teilnehmer ohne Videoübertragung ausblenden“ war sichergestellt, dass es nicht die üblichen „schwarzen Kacheln“ im Webinar zu sehen gab. Nur die Namen der Hosts waren in der Liste der Panelisten sichtbar. Diese angezeigten Namen konnten jedoch so angepasst werden, dass nur noch der jeweilige Einrichtungsname zu sehen war (zum Beispiel „RRZK“). Dies lässt sich entweder direkt im laufenden Meeting ändern oder gleich dauerhaft im eigenen Zoom-Profil einstellen.

Die Videoaufzeichnung

Um die Eindrücke der Feierstunde auch nachträglich verfügbar zu machen, haben wir ein Video aus der Aufzeichnung zusammengeschnitten.

Wie oben benannt, aktivierten wir im Vorhinein die Cloud-Aufzeichnungsfunktion von Zoom. Diese lässt die Hosts (beziehungsweise zunächst nur die Person, die das Webinar erstellt hat!) die Inhalte als mp4-Video- und mp3-Tondateien herunterladen. Zwar erhält man auch eine von Zoom bereitgestellte Webseite mit der bereits eingebetteten Aufzeichnung, die so problemlos auch der Öffentlichkeit hätte zugänglich gemacht machen können. Diese Seite wird jedoch nach 30 Tagen gelöscht. Somit wäre das Video dort nicht dauerhaft erhalten geblieben.

Darüberhinaus wollten wir das von Zoom bereitgestellte Video am Schluss nicht „einfach so“ veröffentlichen und haben dazu mit der Videoschnittsoftware Adobe Premiere Pro noch ein wenig nachbearbeitet. Warum? Zum einen wollten wir das Video etwas „schöner“ machen und hier und da die „leere“ Zeit zwischen den Sprecherwechseln etwas verkürzen. Durch Überblendungen wirkten die Übergänge nicht so hart und direkt. Sinnvollerweise haben wir die beiden Videospuren mit Einzel- und Galerieansicht zu allererst übereinandergelegt und durch entsprechende Schnitte eine passgenaue Überblendung erreichen können. Deshalb wirkt dies so, als wären wie bei einer Präsenzveranstaltung verschiedene Kameras eingesetzt worden.

Hätte es bei einem der Panelisten zwischendurch Audiostörungen (oder Nebengeräusche durch fälschlicherweise aktivierte Mikrofone) gegeben, könnte man durch eine separate mp3-Spur, die nur die jeweils Sprechenden aufgezeichnet hat, als Überbrückung mit hineinsynchronisieren. In diesem Fall war das aber nicht nötig (als Backup ist es aber sinnvoll).

Die während der Veranstaltung eingeblendeten Folien haben wir nachträglich als Grafikdateien eingebunden, so dass jeweils die unkomprimierten Grafiken zu sehen waren – anstatt die bei der Übertragung kleingerechneten, mit Artefakten versehenen Varianten.

So kam ein schöner, leicht dynamischer Bild-Mix zwischen Einzel- und Galerieansicht sowie den präsentierten Fotos zustande. Wer sich das Ergebnis anschauen möchte: Das fertige Video ist hier veröffentlicht. Bereitgestellt wird dies über die Opencast-Plattform der Uni Köln. Über das entsprechende Video-Modul im Typo3-Content-Management-System bindet man den Videoplayer direkt in die Webseite ein.

Fazit

Aus technischer Sicht darf man dieses Webinar als gelungen betrachten, denn: Alles funktionierte reibungslos, die Redebeiträge verliefen technisch einwandfrei, und darüberhinaus gab es keinerlei Störungen während der Übertragung. Nota bene: Nach nun fast einem Jahr Pandemie und ihrer Auswirkungen auf die Forschung und die Arbeitswelt zeigte sich erfreulicherweise, dass die Beteiligten mit der Durchführung von Videokonferenzen gut zurechtkamen und mit den Funktionen (in diesem Fall von Zoom) bestens vertraut waren. Dies wurde aber zusätzlich dadurch sichergestellt, dass das Vorbereitungsteam des Lehrstuhls für Völkerrecht  im Vorhinein gut geplant hatte, und dass alle Panelisten bei einer Testvideokonferenz ausführlich vom Vorbereitungsteam instruiert worden sind.

Inhaltlich lässt sich das Resümee ziehen, dass die Verantwortlichen sehr viel dafür getan haben, die Feierlichkeit einer solchen Zeremonie möglichst angemessen ins Digitale zu übertragen – auch dies ist dem Organisationsteam und den Durchführenden gut gelungen! Davon zeugen die vielen positiven, per Chat am Schluss der Veranstaltung eingegangenen Rückmeldungen der Teilnehmenden. Und für die verantwortliche RRZK-Mitarbeiterin war es abseits aller technischer Unterstützung ein eindrückliches und besonderes Erlebnis, dabei gewesen sein zu dürfen.

 

Webseitenstatistiken und SEO mit Matomo: Hinweise und Tipps

Immer wieder werden wir nach der richtigen Verwendung von Matomo gefragt, und wir helfen gern, soweit wir können.
Es gibt hier aber oft Fehleinschätzung der Bedeutungen der Statistiken. Das häufigste Problem ist das der Sample Size: Eine signifikante Statistik über eine Seite mit nur 2-3 Besuchern am Tag zu erstellen, wird nicht funktionieren.
Daher hier etwas Lesestoff mit Hinweisen und Tipps, die man verinnerlicht haben sollte, bevor man ein großen SEO-Programm oder eine Reichweiten-Analyse beginnt.

HINWEISE:

1. Fast alle Browser bringen eine Funktion mit, die das Tracken von Zugriffen untersagt, bei vielen Browsern ist diese per Default aktiviert. Sie sehen also nur einen Bruchteil der Klicks.

2. Sehr viel häufiger als von Menschen, werden die Webseiten von Bots, Crawlern und auch von böswilligen Angreifern besucht. Um halbwegs verwendbare Zahlen zu liefern, muss Matomo also ordentlich ausfiltern. Diese Filter sind nicht perfekt so dass eine Vielzahl von registrierten Klicks gar nicht auf reale Menschen zurückzuführen ist.

3. Aus der Sicht von Matomo ist jeder Browser zunächst eine eigene Person. Sind Sie mit Ihrem Mobilgerät mal im WLAN, mal im Funk-Netz und mal in einem anderen WLAN oder im VPN, sieht es so aus als wären es mehrere Personen. Haben Sie zuhause eine normale DSL Leitung bekommen Sie wahrscheinlich täglich eine andere IP-Nummer und zwar eine, die an anderen Tagen von anderen Kunden Ihres Providers genutzt wurde.
Aus dieser sehr schmutzigen Datenlage versucht Matomo mit „schlauen“ Filtern anhand von Indizien mehrere scheinbare Besucher zu eindeutigen Besuchern zusammenzufügen. Dies wird niemals perfekt gelingen, so dass die Anzahl von eindeutigen Besuchern immer zu hoch sein wird.

4. Viele Betreiber von Webseiten unterschätzen grob, wie viele Personen fälschlicherweise auf eine Webseite kommen, merken dass es nicht das ist, was sie suchten und wieder gehen. Die „Verweildauer“ einer Person auf der Seite ist sehr wichtig. Selbst reale Personen, die nur wenige Sekunden auf einer Seite bleiben, sollten statistisch eigentlich nicht berücksichtigt werden.

Die Zahlen der „korrekten“ Messungen werden also immer zu niedrig ausfallen, die Zahlen von „falschen“ Messungen immer zu hoch. Dies führt dazu, dass die absoluten Zahlen äußerst unzuverlässig sind, besonders wenn sie klein sind. Sie messen also nicht die tatsächliche Zahl der Besucher, sondern die nur die Wirksamkeit der Matomo-Filter.

Als Faustregel sagen wir immer:

Solange Sie nicht mindestens 100 Besucher am Tag angezeigt bekommen, dürfen Sie die Zahlen in Matomo ignorieren.

TIPPS:

Aber Matomo kann auch für Seiten mit wenigen Besuchern sehr nützlich sein, man muss lediglich mit den relativen Angaben in Matomo arbeiten. Es gilt also immer, zwei aussagekräftige Messungen zu finden und diese in Relation zu einander zu betrachten. Hier ein paar Beispiele:

1. Mobil-Anteil: Wählen Sie links unter „Besucher“/“Geräte“, und sie erhalten Auswertungen, mit was für Geräten Ihre Webseite aufgerufen wird. Oft wird unterschätzt, dass heute (Stand 2020) schon 30-50% Smartphone-User normal sind.

2. Uhrzeiten: Wenn Sie wissen, dass Ihre Zielgruppe aus Deutschland stammt, wählen Sie links unter „Besucher“/“Zeiten“, und Sie erhalten Auswertungen, zu welchen Uhrzeiten sich Personen auf Ihren Seiten bewegen. Haben Sie im Vergleich(!) zu den Spitzenzeiten ungewöhnlich viele Aufrufe zu Zeiten, zu denen Ihre Zielgruppe schlafen sollte, können Sie sehen, dass hier viele falsche Messungen erfasst wurden, und Sie somit auch den anderen Zahlen nicht trauen können. Man kann aber auch Abschätzungen treffen, ob Personen eher zu normalen Arbeitszeiten tagsüber auf Ihre Seite kommen, oder in der Freizeit am Wochenende oder Abend.

3. A/B-Vergleich: Bauen Sie zwei (oder mehrere) unterschiedliche Seiten mit dem gleichen Inhalt, Verlinken Sie diese auf unterschiedliche Weise: In Mailanschreiben, auf Postern, auf Ihrer Startseite als Teaser (verlinktes Bild) oder im Fließtext. Schauen Sie nach einer angemessenen Zeit nach, welche Seite mehr Klicks bekommen hat.

4. Vorher/Nachher-Vergleich: Erstellen Sie eine Seite und bewerben Sie diese eine Zeit lang nicht. Dann ergreifen Sie nacheinander und dokumentiert verschiedene Maßnahmen: Mail-Anschreiben, Verlinkungen auf anderen Seiten, Facebook, Twitter etc. und schauen Sie ob sich die Besucherzahlen nach einer dieser Maßnahmen signifikant ändern.

5. Verweildauer: Wie oben schon erwähnt sind die Verweildauer und die sog. Absprungrate extrem wichtige Messwerte um die Attraktivität Ihrer Seite einzuschätzen. Hier geht es selten um optisches Gefallen, sondern darum, ob ein Besucher nach dem Klick auf Ihre Seite glaubt, am richtigen Ort zu sein. Wird nach einer Detailfrage gegoogelt, man kommt aber auf einer Plakativen Startseite an, wird so manch einer abgeschreckt, auch dann, wenn die gesuchte Information irgendwo auf der Seite zu finden gewesen wäre. Das Verhältnis zwischen der Zahl derer, die Sofort gegangen sind, und derer, die geblieben sind, lässt Rückschlüsse auf die Qualität von Maßnahmen und der Seite als ganzes zu.

6. Transitions: Die Auswertung der Transitions ist ein komplexes Feld in sich welches hier zu erklären zu weit führen würde, doch man sollte dieses Tool zumindest kennen: Im Dashboard finden Sie die Aufzählung Ihrer Seiten und wie viele Klicks diese erhalten haben. Wenn Sie mit der Maus über einer Zeile (ggf. muss ein Order zunächst ausgeklappt werden) hovern, erscheinen drei Symbole, das mit den sich überkreuzenden Pfeilen steht für Transitions. Klicken Sie hierauf und erhalten Sie eine Darstellung, woher die Besucher auf Ihre Seite gekommen sind, und wohin sie danach gegangen sind, oder ob ein Download getätigt wurde. Dies kann gute Erkenntnisse darüber bringen, wie Ihre Seiten aufgebaut werden sollten. Beachten Sie dabei dass es mittlerweile vollkommen normal ist das die überwältigende Mehrheit der Besucher von Suchmaschinen kommt. Selbst wenn jemand die genaue Adresse einer Seite kennt, wird oft eine Suchmaschine verwendet, weil man „zu faul“ ist die Adresse als ganzes zu tippen.

Bedenken Sie aber bei all diesen Überlegungen, dass Matomo lediglich das Verhalten der Besucher aufzeichnet, die Ihre Seite tatsächlich gefunden haben. Nicht erfasst wird das eigentlich viel wichtigere Verhalten der Personen, die Ihre Seiten nützlich gefunden hätten, aber aufgrund falscher Suchbegriffe oder einfach dem Umstand dass die Suchenden gar nicht wissen, wonach sie suchen sollen, Ihre Seite nie gefunden haben.
Auch wissen Sie nicht, was Besucher eigentlich vor hatten, die es auf Ihre Seite geschafft haben.

Ich hoffe diese Informationen helfen Ihnen. Gerne beantworten wir Rückfragen, beachten Sie aber, dass das RRZK Matomo nur bereitstellt. Wir sind keine SEO- und schin gar keine Marketing-Experten.
Matomo ist ein Tool, mit welchem erfahrene Personen Probleme aufdecken können und den Erfolg gezielter Marketingstrategien bewerten können. Wenn Sie in dieses Thema einsteigen wollen, wenden Sie sich bitte an Personen, die sich hiermit beruflich beschäftigen.

 

Noch ein persönlicher Kommentar zu SEO (Suchmaschinenoptimierung):

Wir möchten gerne darauf hinweisen, dass SEO hauptsächlich von Redakteuren umgesetzt werden muss.
Es hält sich hartnäckig der Irrglaube, dass SEO nur die Anwendung technischer Tricks ist. Diese sind wichtig, keine Frage, aber die Suchmaschinen werden immer gute Webseiten belohnen. Wichtiger als dem neusten SEO-Trend hinterherzulaufen ist es meist, verständliche, übersichtliche Webseiten zu erstellen, die den Besuchern bereitwillig die Informationen geben, die gesucht werden, statt ihnen Informationen aufzudrängen, die nicht wirklich nachgefragt werden. (vgl. https://xkcd.com/773/)
Kurze, prägnante Überschriften, klare Einleitungen sind wichtig. Absatz-lange Überschriften, die sich in Details verlieren schrecken ab und lesen sich so gut wie das deutsche Steuergesetzbuch. Bedenken Sie dass Suchmaschinen-Benutzer mit unterschiedlichstem Vorwissen irgendwo auf Ihren Seiten einsteigen. Wer sich sofort gut aufgehoben fühlt, weiß wo man gelandet ist und findet, was er sucht, wird mit einer besseren Meinung die Webseiten verlassen.
Ein wesentlicher Bestandteil in Googles Bewertungssystem war und ist, ob eine Webseite von anderen Seiten verlinkt wird. Verlinken Sie Partnerseiten untereinander und sorgen Sie dafür, dass Sie an wichtigen Stellen erwähnt werden. (Haben Sie aber dabei Verständnis, dass die Startseite der Uni und ähnliche Seiten nur einen begrenzten Platz haben und nicht jede Seite ganz oben stehen kann.)
Beachten Sie aber auch, dass keine Suchmaschinen Optimierung nötig ist, wenn die Suchenden gezielt zu Ihnen wollen: Solange es keine zweite konkurrierende Uni-Köln gibt, werden die Suchbegriffe „Uni Köln“ immer zu uns führen. Finden Sie lieber die Schlagworte, die Sie von anderen Suchergebnissen abgrenzen, und verwenden Sie diese prominent in Überschriften und Seitentiteln.

LOGIN:
Haben Sie eine Webseite, auf der die Statistik Erfassung aktiviert ist, loggen Sie sich mit Ihrem Uni-Account ein unter: https://matomo.rrz.uni-koeln.de. Haben Sie mehrere Webseiten, für die Sie zuständig sind, können Sie zwischen diesen innerhalb von Matomo hin und her wechseln.

Die Statistikerfassung ist bei den meisten TYPO3 Seiten der Uni-Köln bereits aktiviert, falls nicht, wenden Sie sich an Ihren Administrator.

Mit freundlichen Grüßen
Thomas Moll

Zeig‘ Dich, Fenster: Mit AltTab unter macOS durch alle Fenster switchen

Liebe Mac-User:innen, kennen Sie das? In Thunderbird oder im Ticketsystem hat sich ein weiteres Fenster geöffnet (zum Beispiel das Fenster mit der E-Mail-Antwort), und Sie wollen „nur nochmal“ mit einem Tastatur-Shortcut in ein anderes Fenster wechseln?

Bildschirmfoto: AltTab-FensterwechslerFür die Leute mit Windows-Systemen ist das kein Problem: Mit der Tastenkombination [Alt] + [Tab] kann man bequem zwischen Fenstern wechseln. Beim Mac ist dies nativ nur programmweise möglich, das heißt: Mit der bekannten Tastenkombination [cmd] + [Tab] wechseln Mac-Nutzende „nur“ von einem Programm zum nächsten. Damit wird das extra E-Mail-Fenster buchstäblich hinten liegen gelassen. Oder (für alle OTRS-Nutzenden) das offene Ticket-Beantwortungs-Fenster. Wie es so schön heißt: Wer es anders kennt – oder schon immer gern mit Tastaturkürzeln gearbeitet hat –, wird es vermissen.

Abhilfe schafft das schöne, kleine Tool „AltTab“. Das Programm ergänzt die von Windows bekannte Alt-Tab-Kombination um die Möglichkeit, von Fenster zu Fenster zu wechseln. Es ist OpenSource; die Releases stehen außerdem über GitHub zum Download zur Verfügung.

Für das bequeme Wechseln zwischen den Fenstern benötigt AltTab den Zugriff auf den Bildschirm. Also nicht wundern, wenn das Programm um Berechtigungen in der Systemsteuerung bittet.

Den Privaten IP-Adressbereich von Docker anpassen

In der Standardeinstellung verwendet die Container-Engine “Docker” das private 172.17.0.0/16 Subnetz um Container mit IPv4-Adressen zu versorgen.

Dieser IP-Bereich, wird im UKLAN schon durch die Abteilung Netze des RRZK verwendet. In diesem werden zentrale universitätsweite Dienste bereitgestellt. Damit es zu keiner Beeinträchtigung durch Überschneidungen kommt, muss der IP-Bereich der Docker-Engine auf Systemen, welche innerhalb des UKLANs betrieben werden, geändert werden.

Beispiel für eine häufig aus diesem Grund auftretende Beeinträchtigung: Wenn Sie von einem Linux-Desktop-System auf welchem Docker installiert ist, innerhalb des UKLANs auf die VMware Admin-Oberfläche zugreifen wollen (https://vmfront6.uni-koeln.de), ist dies nicht möglich.

Notwendige Schritte für: Docker CE ab Version 18.06 | Docker 1.13 auf RHEL7

„Den Privaten IP-Adressbereich von Docker anpassen“ weiterlesen

Dateikomprimierung auf dem Mac

Die Datei überschreitet die zulässige Dateigröße.
Wem dieser Satz nur allzu vertraut ist, der wird sicherlich den ein oder anderen Abend mit der Suche nach Komprimierungsmöglichkeiten verbracht haben. Die Scans der Heimdrucker werden immer hochauflösender, Bilder mit immer besseren Kameras aufgenommen und bei Videos etabliert sich so langsam 4k als Standard. Doch so manche Internetleitung oder Website macht bei so großen Dateien nicht mit.
Im Folgenden möchte ich deshalb einige nützliche Programme auf dem Mac vorstellen, die das digitale Leben ein wenig leichter machen.

PDF-Dokumente

Am häufigsten dürfte wohl dieser Fall eintreten: Für eine Bewerbung oder einen Antrag muss ein Dokument hochgeladen werden, leider umfasst dieses mehrere Seiten, die natürlich in guter Qualität vorliegen – man muss sie ja schließlich gut lesen können.
Das ausgewählte Dokument überschreitet die zulässige Dateigröße von (hier lächerlich kleine Zahl einfügen). Bitte versuchen Sie es erneut.“
Und jetzt?
Das Programm Vorschau, das auf jedem Mac installiert ist, liefert bereits einen eigenen Filter für das Reduzieren der Dateigröße. Man muss einfach nur das entsprechende Dokument öffnen und es anschließend exportieren. Dabei hat man die Möglichkeit einen „Quartz-Filter“ hinzuzufügen. Hier einfach „Reduce File Size“ auswählen und bestätigen. Wem dieser vorgefertigte Filter zu stark ist, der kann über das Programm „ColorSync“ (ebenfalls auf jedem Mac vorhanden) unter „Filter“ auch eigene Einstellungen vornehmen. Dabei legt man am besten einen neuen Filter (beispielsweise „Reduze File Size Good“) an und geht wie folgt vor: Rechts neben dem Namen des Filters ist ein kleiner Pfeil, dort fügt man „Bild-Anpassung (Farbe)“ und „Bild-Komprimierung“ hinzu. Bei „Bild-Anpassung“ sollte man die Qualität auf „Hoch“ und den Haken bei „Auflösung festlegen“ setzen und als Wert 100 eingeben. Bei „Bild-Komprimierung“ sollte der Modus auf JPEG gesetzt und der Schieberegler etwa im rechten Drittel platziert sein. Ausgehend von diesen Werten kann man dann je nach geforderter Größe und der gewünschten Qualität etwas experimentieren.

Fotos

Bei Fotos reicht es meist schon, das Dateiformat von dem Apple-üblichen .png auf .jpg zu ändern. Dies geht ebenfalls ganz einfach über die Vorschau. Man exportiert das Bild und wählt als Dateiformat .jpg. Dort kann man auch gleich mittels eines Schiebereglers die Qualität festlegen. Aber Achtung: stellt man die Qualität zu niedrig ein, kann es schnell zu sogenannten Artefakten, also Störungen und Verpixelungen im Bild kommen. Da die Dateigröße von JPEGs ohnehin geringer ist, kann man den Regler ruhig auf maximale Qualität stellen.

Videos

Hier scheitern leider die Bordmittel von Apple, daher stelle ich ein kleines Tool für die möglichst verlustfreie Komprimierung von Videodateien vor: Handbrake! Das Programm ist Open Source und somit kostenlos nutzbar. Beim Starten wählt man aus, welche Videodatei man bearbeiten möchte und im Anschluss bekommt man vielerlei Einstellungsmöglichkeiten um die Ohren gehauen. Unter dem Menüpunkt „Übersicht“ lässt sich praktischerweise das Dateiformat einstellen, was das Programm auch zur Konvertierung wirklich nützlich macht. Der für die Komprimierung wichtige Teil befindet sich jedoch unter dem Punkt „Video“. Hier kann eine Reduzierung der Bildfrequenz oder ein direktes Einstellen der Qualität zu geringeren Dateigrößen genutzt werden. Man sollte natürlich möglichst sparsam einstellen, denn gerade bei Videos macht sich eine schlechte Qualität schnell negativ bemerkbar. Es gilt: Experimentieren und immer wieder exportieren, um die Dateigröße zu überprüfen.

Damit sollte die nächste Uploadgrenze einer Website kein Hindernis mehr sein!

Auch Apple kann kompliziert: Mails signieren und verschlüsseln mit iPhone und iPad

Auf die Gefahr hin, dass die letzten Beiträge unseres Blogs ein klein wenig Apple-lastig werden, folgt auf den letzten Beitrag ein weiterer über iGeräte, genauer: Über verschlüsselte E-Mails, und warum die Sache mit der Usability nicht immer so einfach ist, wie man das als User*in gerne hätte.

Haben Sie, liebe Blog-Lesende, schon einmal eine E-Mail verschlüsselt? Nein? Dann gehören Sie wahrscheinlich zur großen Mehrheit von IT-Nutzenden, die das Thema zwar „schon einmal irgendwo gehört oder gelesen“ haben, aber sich selbst noch nie damit befasst haben.

Zumindest könnten Sie einmal darüber nachdenken, Ihre E-Mails mit Hilfe eines S/MIME-Zertifikats zu signieren, was gleichzusetzen ist mit einer Unterschrift. Wie Sie an der Uni Köln ein solches Zertifikat beantragen und wofür das gut ist, können Sie hier nachlesen.

Wie man sein Zertifikat dann auf verschiedenen Geräten einrichtet und nutzt, haben wir an dieser Stelle dokumentiert. Einmal eingerichtet, ist das Ganze sofort lauffähig, und Ihre Mails werden fast unmerklich digital signiert. In diesem Beitrag legen wir den Fokus auf mobile Apple-Geräte. iOS unterstützt S/MIME-Zertifikate und die E-Mail-Verschlüsselung schon seit dem Jahr 2015 – so neu ist das Thema zugegebenermaßen also nicht.

Bildschirmabbild, das das Fenster zum Erstellen einer neuen E-Mail zeigt

Verschlüsselte oder signierte E-Mails zu empfangen ist kinderleicht. Neben dem Absende-Namen taucht bei einer signierten und/oder verschlüsselten E-Mail ein kleines Häkchen und gegebenenfalls ein Schlosssymbol auf.

Jetzt kommt der Teil, der komplizierter ist, als es sein müsste: Spannend wird es, wenn man seine Mails neben dem Signieren auch verschlüsseln möchte. Dazu schweigt sich interessanterweise sogar die Anleitung von Apple selbst aus. Das führt dann dazu, dass man zunächst einmal eine Fehlermeldung erhält, wenn man es mit dem Verschlüsseln versucht (siehe Bild). Wo hakt’s? Die Anleitung von Apple sagt, dass in diesem Fall das Zertifikat der Empfänger*in nicht gefunden wurde. Aber kein Wort darüber, was man nun tun soll, damit das iGerät diesen öffentlichen Schlüssel der anderen Person kennenlernen kann…?

Spoiler: Dazu muss man das Zertifikat tatsächlich „installieren“, sagt die Oberfläche, wenn man ein bisschen danach sucht.

Hat man diese Schritte einmal gefunden, ist es ganz einfach:

1.) Eine E-Mail der Person öffnen,
2.) in der Kopfzeile auf den Namen klicken,
3.) gegebenenfalls nochmals auf den Namen klicken, dann
4.) auf „Zertifikat anzeigen“, und zum Schluss
5.) auf „Installieren“ klicken.


Bildschirmabbild, das die Details eines Mail-Zertifikats anzeigt

Diese Schritte muss man für jede Person vornehmen, der man verschlüsselte E-Mails senden will.

Zusammenfassend kann man sagen: Wenn man einmal weiß, was man tun muss, ist es gar nicht so kompliziert. Aber warum gestaltet man – beziehungsweise Apple – diesen Vorgang so umständlich? Einfacher wäre es wie beim Open-Source-Mail-Programm Mozilla Thunderbird: Hier wird der öffentliche Schlüssel der Absender*in – also der Teil des Zertifikats, der dem iOS-System wie oben genannt zunächst „bekannt gemacht“ werden muss – direkt automatisch gespeichert.

Kurzes Fazit: Weniger ist mehr. Ich würde mir wünschen, dass Apple dieses Prozedere vielleicht etwas einfacher gestaltet und zukünftig weniger Arbeitsschritte nötig sind. Das würde zur Akzeptanz von E-Mail-Zertifikaten und deren Einsatz sicher enorm beitragen.

Wie die iOS-App „Kurzbefehle“ den Alltag erleichtern kann

Die Anwendung, die ich heute vorstellen möchte, ist ein wirklich mächtiger Helfer, der an das Mac Programm „Automator“ angelehnt ist. Mit diesem lassen sich lästige Aufgaben zu Routinen zusammenfassen und mit einem einzigen Klick ausführen. Eine abgewandelte Form gibt es seit iOS 12 auch auf iPhone und iPad.
Die App gehört nicht zu den standardmäßig vorinstallierten Apps und muss erst aus dem App Store geladen werden. Aber dafür ist sie Apple-typisch natürlich kostenlos. Öffnet man die App zum ersten Mal ist die Oberfläche ein wenig gewöhnungsbedürftig und es wird schnell klar, dass sich die Anwendung eher an Erfahrene richtet. Möglicherweise ist es hilfreich erst einmal in der Galerie zu stöbern und ein paar der Tools dort unter die Lupe zu nehmen. Der Trinkgeldrechner zum Beispiel ist sehr praktisch oder auch der Wäschetimer, der eine Erinnerung sendet, wenn die Waschmaschine fertig ist. Das erspart zum einen das Warten in der ungemütlichen Waschküche, bis nach 10 Minuten endlich die letzte Minute des Waschgangs abgeschlossen ist und zum anderen vergisst man die Wäsche nicht, wenn man unterwegs ist.
Wenn man sich einmal in die App reingedacht hat, ist das Erstellen eigener Routinen aber gar nicht so schwer. Als Beispiel habe ich eine Morgenroutine erstellt, weil mir aufgefallen ist, dass ich jeden Morgen die gleichen Apps brauche. Über das Plus in der Bibliothek lege ich also nun eine neue Routine an. Vom Grundprinzip her lege ich in der Mitte alle Aktionen ab, die ablaufen sollen. Das iPhone spielt diese dann eine nach der anderen ab. Eigentlich ein simples Prinzip.
Zunächst möchte ich also, dass mein iPhone morgens das WLAN einschaltet. Über die Suche gebe ich deshalb einfach „WLAN“ ein und es erscheint die Aktion „WLAN konfigurieren“ – genau das will ich. Es erscheint die Aktion, daneben befindet sich ein Kippschalter, der auf grün steht. Das WLAN wird also eingeschaltet. Als nächstes möchte ich das Wetter angezeigt bekommen. Ich tippe also in die Suche „Wetter“ ein und schon erscheint die Aktion „Wetter am aktuellen Standort anzeigen“. Perfekt.

Und nun meine E-Mails! Damit ich genug Zeit habe mir zu überlegen, was ich heute anziehe, bevor sich die E-Mail-App öffnet, füge ich die Aktion „Warten“ hinzu. Fünf Sekunden sollten genügen, im Zweifelsfalle lässt sich die Routine nachher jederzeit anpassen und die Zeit hoch oder runter setzen. Nun also zu den E-Mails. Dazu müssen wir einen kleinen Umweg gehen, und zwar über die Aktion „App öffnen“. Nachdem die Aktion unter den anderen erscheint, wählt man dann die E-Mail App seiner Wahl aus. Tada!Übrigens, wen es auch ärgert, dass sich WLAN und Bluetooth über das Kontrollzentrum nicht mehr vollständig abschalten lassen, der sollte sich dafür eine Routine zusammenstellen. Die Aktionen „WLAN konfigurieren“ und „Bluetooth konfigurieren“ schalten WLAN und Bluetooth nämlich mit einem Klick komplett aus.
Alle Helfer lassen sich entweder im Widget anzeigen oder als App auf dem Home Bildschirm ablegen. Mehr Konfigurationsmöglichkeiten findet man in der erstellten Routine oben rechts, wenn man auf das Symbol der beiden Kippschalter tippt. Mit einem eigenen Hotword lassen sich die Routinen sogar zu Siri hinzufügen.

 

Sprachassistent im Eigenbau – Snips auf dem Raspberry Pi

„Alexa, wie wird das Wetter heute in Köln?“
Sprachassistenten werden immer beliebter. Ob zu Hause auf dem Smart-Speaker oder mobil auf iPhone und Co. Denkt man am Anfang noch, dass man so eine Spielerei niemals brauchen wird, merkt man schnell, dass die smarten Helfer einem doch so manchen Arbeitsschritt ersparen können. Ein Timer für die Pizza ist mit einem kurzen Sprachbefehl eben schneller gestellt, als erst einmal das Smartphone entsperren zu müssen und dann die richtige App zu finden. Der Nachteil: Die aufmerksamen Helfer hören ständig mit. Was also tun, wenn man seine Daten nicht irgendwo auf einem Server in den USA wissen will?

Für Bastler gibt es mit dem Alleskönner Raspberry Pi eine eingeschränkte, aber passable Lösung. Snips heißt der Sprachassistent, der ohne Cloud auskommt und überdies auch nicht ständig eine Internetverbindung benötigt – alle Daten bleiben lokal auf dem Rechner.
Für das Projekt habe ich mir kurzerhand meinen vorhandenen Raspberry Pi 3, auf dem mein MagicMirror läuft, ein USB-Mikrofon und einen günstigen Lautsprecher mit Aux-Kabel geschnappt und losgelegt.

Die Dokumentation von Snips ist wirklich ausführlich, und sofern man ein bisschen Erfahrung mit der Eingabe von Terminalbefehlen hat, auch gut nachvollziehbar. Aber auch Personen ohne Vorkenntnisse sollten mit der Anleitung zurechtkommen. Mein Vorteil war es, dass mein Raspi bereits eingerichtet war und über eine WLAN-Verbindung, aktivierten SSH-Zugriff sowie Node verfügte. Das hat die Zeit der Vorbereitung deutlich verringert. Mein Perfektionismus hat das Ganze dann allerdings wieder um einige Stunden gestreckt – doch zu meinen Versuchen den Assistenten umzubenennen später mehr. Zunächst einmal zur eigentlichen Konfiguration des Sprachassistenten: Die „Skills“, wie sie beispielsweise bei Alexa genannt werden, können über eine übersichtliche Online-Plattform eingespielt werden. Sobald „Sam“, das Kommandozeilen-Interface installiert ist, kann man die Skills jederzeit aktualisieren. Die Auswahl ist noch überschaubar: Wetter über openweather anzeigen, Witze erzählen, Rechnen, einen Timer stellen aber auch Smarthome-Geräte steuern. Auch eigene Befehle lassen sich programmieren. Dafür sollte man aber Zeit und ein bisschen Know-How mitbringen.
„Hey Snips, wie wird das Wetter heute in Köln?“ funktionierte ebenso gut wie „Hey Snips, erzähle einen Witz.“ Spoiler: Die Witze stehen Alexas Flachwitzen in nichts nach. Sie sind nur ein weniger schlechter zu verstehen, weil Snips‘ Sprachausgabe etwas von einem Dalek hat.

Kommen wir aber zurück zum Perfektionismus: Schon als Siri auf dem iPhone Einzug hielt, entbrannte vermutlich nicht nur in mir der Wunsch, den persönlichen Assistenten, der ab diesem Zeitpunkt im Smartphone wohnte, umzubenennen. Und seit dem ersten Iron Man Film dürften viele Leute bei Sprachassistenten direkt an Jarvis denken. Mein Ziel war es also Snips in Jarvis umzubenennen – auch wenn das nichts an der etwas blechernen Stimme ändern würde und auch wenn ich danach immer noch keinen Superheldenanzug bauen könnte. „Hey Jarvis, wie wird das Wetter heute?“ klingt einfach viel cooler als „Hey Alexa“ oder „Hey Snips“.
Um ein eigenes Hotword festzulegen, muss der Assistent erst einmal trainiert werden. Laut Dokumentation ist das kein großer Aufwand und ein paar Terminalbefehle später begann ich mit der Aufzeichnung. Leider blieb die Kalibrierung immer bei der dritten Aufnahme hängen. Kein Problem, ich hatte ja Zeit, also nahm ich selber die nötigen Audiospuren auf. „Hey Jarvis“, „Hey Jarvis“, „Hey Jarvis“ – wenn man das drei Mal hintereinander zu seinem Computer sagt und nichts passiert, kommt man sich doch ein wenig verrückt vor.
Leider scheiterte auch dieser Versuch den Assistenten umzubenennen. Snips schien beharrlich bei diesem Namen bleiben zu wollen. Meine Vermutung ist, dass mein Mikrofon zu schlecht war. Sprachbefehle funktionieren nur aus einer sehr kurzen Entfernung und laut und deutlich ausgesprochen. Ich bin also jetzt auf der Suche nach einem leistungsfähigen Mikrofon, das überdies nicht zu sehr aufträgt. Der Plan ist nämlich dem MagicMirror, der immer noch parallel zu Snips läuft, einen ordentlich großen Bildschirm und einen guten Spiegel zu spendieren. Da sollten Lautsprecher und Mikrofon natürlich nicht auffallen. Vielleicht schaffe ich es ja Snips ein paar Komplimente beizubringen. „Spieglein, Spieglein an der Wand…“

Visual Regression Testing mit Puppeteer und Resemble.js (Teil 2)

In meinem letzten Artikel habe ich mit einem Beispiel beschrieben, wie man mittels Puppeteer automatisert Screenshots von Websites erstellt. Das Problem stellte sich für uns, weil wir im großen Umfang CMS-Unterseiten auf Frontend-Probleme nach einem Upgrade testen wollten.

Ziel war es, ein Skript zu erstellen, welches vor einem Upgrade gestartet werden kann und zunächst den Status Quo von Websites in Screenshots festhält.
Nachdem die Upgrades an den Websites durchgeführt wurden, kann das Skript erneut gestartet werden und es werden automatisch visuelle Vergleichtests durchgeführt.

Test-Logik

Zum Ablauf der Visual Regression Tests habe ich folgende kleine Test-Logik entwickelt:

Flowchart

Wenn ich keinen Screenshot finde, erstelle ich einen für einen späteren Vergleich. Finde ich einen vor, dann erstelle ich einen neuen und vergleiche ihn direkt.

Visual Regression Testing mit Puppeteer und Resemble.js

Um den obigen Test-Algorithmus abzubilden, muss die app.js aus meinem letzten Artikel um eine Testschleife, die zusätzliche Library Resemble.js und das File System-Modul von Node.js erweitert werden.

Die folgende Vorgehenswiese lässt sich auch anhand meiner Commits im Github-Repository nachverfolgen.

Dateizugriff einrichten

Für den Zugriff auf das Dateisystem stellt Node.js das fs-Modul bereit. Damit lassen sich klassische Dateioperationen durchführen (copy, move etc.).

Um das Modul zu verwenden, muss es mittels require in der app.js eingebunden werden:

const fs = require('fs')

Bisher war der Pfad- und Dateiname der Screenshots, die in der takeScreenshot()-Funktion erstellt werden noch hard coded. Weil die Funktion zukünftig sowohl Vorher- als auch Nachher-Screenshots festhalten soll, werden folgende Änderungen vorgenommen:

const screenshotsFolder = './screenshots/'

und

await page.screenshot({ path: filename, fullPage: true })

Test-Logik aufbauen

Jetzt kann die eigentliche Test-Logik aufgebaut werden. Ziel ist es, die Screenshots noch nicht zu vergleichen, aber schon die nötige Schleife zusammenzubasteln. Ich habe dafür eine Funktion erstellt, welche den Test startet. Hierfür eignet sich in diesem Fall die Verwendung der Immediately-invoked Function Expression.

Die Immediately-invoked Function Expression ist eine Möglichkeit, Funktionen sofort auszuführen, sobald sie erstellt werden:

(() => {
  /* Befehle */
})()

Unsere asynchrone Funktion sieht dann so aus:

// Immediately-invoked arrow function after launch
(async () => { 
    // Create screenshots folder if it does not exist
    if (!fs.existsSync(screenshotsFolder)) {
        fs.mkdir(screenshotsFolder, (err) => {
            if (err) throw err
        })
    }

    for (const website of websites) {
        const orgScreenshotPath = screenshotsFolder + website.filename + '.png'
        const testScreenshotPath = screenshotsFolder + website.filename + '_test.png'
        // Check if both original and testing screenshot already exist
        if (fs.existsSync(orgScreenshotPath) && fs.existsSync(testScreenshotPath)) {
            // Both exist run regressionTest()
        } else {
            if (fs.existsSync(orgScreenshotPath)) {
                // Original exists create test screenshot
                await takeScreenshot(website.url, testScreenshotPath)
                    .then(console.log('Created test: ' + website.filename))
                // run regressionTest()
            } else {
                // No Original exists, let's create a new one
                await takeScreenshot(website.url, orgScreenshotPath)
                    .then(console.log('Created original: ' + website.filename))
            }
        }
    }
})()

Mit fs.existsSync() wird geprüft, ob eine Datei unter dem angegeben Pfad existiert. Dies könnte auch mittels Promises/await asynchron und ohne Callbacks gemacht werden (Momentan noch experimental).

Vergleichen von Screenshots mit Resemble.js

Jetzt fehlt nur noch die regressionTest()-Funktion, damit wir unsere Tests durchführen können.

Hierfür muss zunächst Resemble.js mittels npm installiert und eingebunden werden:

$ npm install resemblejs --save

In unserer app.js:

const resemble = require('resemblejs')

Die asynchrone regressionTest()-Funktion sieht wie folgt aus:

const regressionTest = async (filename, orgScreenshotPath, testScreenshotPath) => {
    console.log('Visual Regression: ' +  filename)

    const diffFolder = screenshotsFolder + 'diff/'

    resemble(orgScreenshotPath).compareTo(testScreenshotPath).onComplete(data => {
        if (data.misMatchPercentage > 0) {
            console.log('Missmatch of ' + data.misMatchPercentage + '%')

            // Create screenshots/diff folder only when needed
            if (!fs.existsSync(diffFolder)) {
                fs.mkdir(diffFolder, (err) => {
                    if (err) throw err
                })
            }

            // Set filename and folder for Diff file
            const diffScreenshotPath = diffFolder + filename + '_' + data.misMatchPercentage + '_diff.png'
            fs.writeFile(diffScreenshotPath, data.getBuffer(), (err) => {
                if (err) throw err
            })
        }
    })
}

Die Funktion erhält die Parameter filename aus dem websites-Array, sowie den zusammengesetzten Pfad zum Original. Dazu kommt ein Vergleichsscreenshot (orgScreenshotPath, testScreenshotPath).

Diese werden nun durch resemble verglichen:

resemble(orgScreenshotPath).compareTo(testScreenshotPath)

Wenn ein Unterschied zwischen orgScreenshotPath und testScreenshotPath besteht wird eine Differenzgrafik erstellt. Diese zeigt standardmäßig die Unterschiede in Magenta an. Damit Fehler schneller gefunden werden können, werden diese Differenzbilder im Unterverzeichnisscreenshots/diff abgelegt.

In folgenden Screenshots fehlen Seiteninhalte. Resemble.js findet den Unterschied und stellt ihn gut sichtbar dar:

Resemble.js Animation

Schneller Vergleichen von einzelnen Screenshots

Wenn eine einzelne URL verglichen werden soll, ist es etwas mühselig diese immer in das websites-Array in app.js einzufügen. Deshalb habe ich in dem Skript die Möglichkeit ergänzt, beim Aufruf URL(s) als Kommandozeilenargumente anzuhängen:

$ node app.js https://rrzk.uni-koeln.de/

let websites = []

process.argv = process.argv.slice(2) // Slice away the first two command line arguments

if (process.argv.length == 0) { 
    // If no command line arguments are given add hardcoded examples
    websites = [
        { url: 'https://rrzk.uni-koeln.de/', filename: 'homepage' },
        { url: 'https://rrzk.uni-koeln.de/aktuelles.html', filename: 'news' },
        { url: 'https://typo3.uni-koeln.de/typo3-angebote.html', filename: 'typo3-offerings' },
        { url: 'https://typo3.uni-koeln.de/typo3-links-und-downloads.html', filename: 'typo3-links-and-downloads' }
    ]
} else {
    process.argv.forEach((val, index) => {
        try { // Check if argument is a URL
            let screenshotURL = new URL(val)
            // Add URL to websites array if valid and create filename
            websites.push({ url: screenshotURL.href, filename: index + '_' + screenshotURL.host})
        } catch (err) {
            console.error('"' + val + '" Is not a valid URL!')
        }
    })
}

Mittels der Klasse URL, wird die Zeichenkette in ein URL-Objekt konvertiert. Wenn dies fehlschlägt, enthält die Zeichenkette keine gültige URL.

Das finale app.js-Skript:

Das finale app.js Skript ist nun fertig app.js Download

Zum Starten einfach app.js ausführen: $ node app.js.

Wenn Screenshots von einzelnen Websites verglichen werden sollen, kann dies folgendermaßen gemacht werden:

$ node app.js https://rrzk.uni-koeln.de/
Created test: 0_rrzk.uni-koeln.de
Visual Regression: 0_rrzk.uni-koeln.de
Missmatch of 58.22%

Ausführen mittels Docker

Dieses Skript kann auch in einer containerbasierten Umgebung ausgeführt werden. Als Basis-Image verwende ich zenato/puppeteer. Das Image enthält einen standardisierten „Chrome“-Browser und stellt eine Umgebung bereit, in der Screenshots in konsistenter Weise erstellt werden.

Mein Dockerfile dafür sieht so aus:

FROM zenato/puppeteer:latest
USER root
COPY package.json /app/
COPY app.js /app/
RUN cd /app && npm install --quiet
WORKDIR /app
ENTRYPOINT [ "node" , "app.js" ]

Image erstellen:

$ docker build -t movd/puppeteer-resemble-testing:latest .

Container ausführen:

$ docker run --rm -v "${PWD}/screenshots:/app/screenshots" movd/puppeteer-resemble-testing:latest http://example.com

Das Image kann auch direkt vorgebaut von „Docker Hub“ geladen werden:

$ docker pull movd/puppeteer-resemble-testing:latest

Die hier erstellte Lösung basiert auf den Anforderungen im RRZK. Ich freue mich über Feedback und weitere Use-Cases, weil die Test-Logik eine einfache Schleife ist, ließe sich diese auch für andere Testreihenfolgen anpassen. Resemble.js ließe sich auch besonders gut in automatisierte Test mit Mocha oder Jest verwenden.

Windows auf dem Mac – Parallels vs. Bootcamp (und warum beides gleichzeitig nicht geht)

Früher oder später findet man als macOS Nutzer etwas, für das man ganz dringend Windows braucht. Die Alternativen für Mac sind entweder nicht gut genug, teuer oder gar nicht existent.

Ich muss gestehen, dass es bei mir in erster Linie ein Spiel war, das nicht für meinen Mac verfügbar war. Ich weiß, Schande über mich, dass ich versuche mit einem Mac zu zocken, aber ich habe nun einmal keinen anderen Rechner. Aus Kostengründen versuchte ich es zunächst mit Wine, was allerdings eher einem Glücksspiel glich. Mal funktioniert es, mal nicht. Schon alleine um Steam zu installieren, brauchte es drei verschiedene Programme von Wine, die abwechselnd funktionierten oder gar nicht erst starteten. Irgendwann vergeht einem dann die Lust. Also schaffte ich mir Parallels an. 

Parallels hat den Vorteil, dass macOS ganz bequem im Hintergrund laufen kann und nicht alle Aktionen in Windows ausgeführt werden müssen. Die Installation ist einfach, die Nutzung simpel und man kann sogar von Windows auf macOS-Dateien zugreifen und umgekehrt. Einziger Nachteil: man sollte einen Mac mit mindestens 8GB RAM haben, wenn man vernünftig damit arbeiten möchte. Es laufen eben zwei Betriebssysteme gleichzeitig, die sich den RAM teilen. Ein weiterer Nachteil, der für die meisten vielleicht unerheblich ist: Parallels unterstützt kein DirectX11. Da Apple die 3D-Grafikschnittstelle mit der Zeit komplett auf Metal umgestellt hat, funktioniert DirectX11 einfach nicht, wenn macOS im Hintergrund läuft. Was also tun?

Bootcamp heißt die zweite Möglichkeit, um Windows auf dem Mac zu nutzen. Das Einrichten ist etwas komplizierter, der Bootcamp-Installer aber schon auf dem Mac vorinstalliert. Je nach Modell des Macs braucht man einen leeren USB Stick und die ISO der gewünschten Windows Version. Bei neueren Macs läuft die Installation über eine kleine FAT32-Partition, auf die sowohl macOS als auch Windows zugreifen können und ein Stick ist nicht nötig.

Der Nachteil: man muss den Mac jedes Mal neu starten, wenn man Windows nutzen möchte und auf Dateien kann man nur von macOS zugreifen. Benötigt man unter Windows etwas von macOS heißt es neu starten und einen USB Stick suchen, oder einen Cloud-Dienst bemühen.

Zu Beginn der Installation von Bootcamp muss man sich entscheiden, wie groß die Windows-Partition werden soll.

Aber Vorsicht, wenn man auf Parallels nicht verzichten möchte bekommt man hier Probleme. Parallels scheint, was Speicherplatz angeht, ein wenig gierig zu sein. Auf meiner Festplatte waren über 200GB frei, Parallels nahm vom belegten Platz etwa 30GB ein. Trotzdem konnte ich im Bootcamp Installer nur 43GB zur Windows -Partition zuweisen. Zwei Stunden Googeln und einige Wutanfälle später war klar: Parallels reserviert sich den freien Festplattenspeicher vorsorglich. Wird dieser durch Programme oder Dateien unter macOS belegt ist das okay, doch beim Partitionieren der Festplatte legt Parallels Einspruch ein. Immerhin könnte es den Speicher ja irgendwann mal brauchen. Hier hilft dann nur der Verzicht auf Parallels oder das De- und Neuinstallieren, nachdem Bootcamp fertig ist. Backup nicht vergessen!

Lange Rede kurzer Sinn: Je nach Ansprüchen an den Arbeitsprozess können entweder Parallels oder Bootcamp die bessere Wahl sein. Auf beides gleichzeitig sollte man verzichten, es sei denn man stellt sich und seine Nerven auf einige zeitfressende Probleme ein.