Yet another tiling extension

Vor einiger Zeit habe ich ja bereits auf Shellshape hingewiesen. Die Kombination aus Gnome-Shell Extension und Mutter-Ersatz bringt echtes Tiling auf den Gnome-Desktop. Zum alltäglichen Einsatz konnte ich mich dann aber doch nicht durchringen: Die starke Unterscheidung der beiden Modi “Tiling” und “Floating” sprach mich nicht sonderlich an und die vielen Tastenkürzel um die jeweiligen Tiles zu vergrößern, zu verkleinern, zu verschieben und zu tauschen fand ich auch nicht übermäßig intuitiv.

Tiling mit gTile

Tiling mit gTile

gTile
Auf der neuen Gnome3-Extension-Seite bin ich dann noch auf gTile gestoßen. Diese Erweiterung erlaubt ebenfalls das überlappungsfreie Anordnen der Fenster – allerdings wird hier das jeweils aktive Fenster durch eine kleine Dialog-Box auf dem Bildschirm angeordnet. Auch ein sehr schöner Ansatz, der etwas einsteigerfreundlicher wirkt, als die Shellshape-Variante.

Mir war aber eher nach einem Ansatz, wie ich ihn unter Ubuntu einmal mit Compiz umgesetzt hatte: Durch Tastenkombinationen wollte ich die Fenster schnell und flexibel beliebigen Ecken des Bildschirms zuweisen können. Durch mehrmaliges Tasten-Drücken – so die Überlegung – würden die Fenster dann in ihrer Ecke verschiedene Größen annehmen. Eine gute Gelegenheit, sich einmal näher mit den Gnome-Shell-Extensions zu befassen.

Ein mit KeyTiling erstelltes Layout

Die verschiedenen Fenster wurden hier bequem mit “KeyTiling” angeordnet.

KeyTiling
Herausgekommen ist dabei “KeyTiling“, eine einfache Gnome-Shell-Erweiterung, die das Arrangieren der Fenster mittels Tastenkombinationen erlaubt. Natürlich sind die damit erreichbaren Layouts letztlich begrenzt; für die meisten Anwendungsfälle sollte es aber genügen. Außerdem unterstützt KeyTiling mehrere Monitore und erlaubt es beispielsweise, ein Fenster schnell auf den nächsten Monitor zu packen und dort nach Wunsch auszurichten.

Die Erweiterung läuft stabil, hat aber noch einen kleinen Pferdefuß: Ich habe bisher nur die Funktion “Main.wm.setKeybindingHandler” gefunden, um globale Tastenkombinationen aus der Erweiterung heraus zu registrieren. Diese Funktion scheint aber auf bestimmte vordefinierte Kombinationen in “/apps/metacity/global_keybindings” beschränkt zu sein. Daher ist es mir bisher nicht gelungen, neue Kombinationen zu registrieren – ich musste bestehende Schlüssel überschreiben, namentlich die Schlüssel “run_command_[1-11]“. Das sollte in der Regel nicht schmerzen, weil benutzerdefinierte Tastenkürzel in Gnome3 diese Schlüssel gar nicht mehr berühren. Dennoch: Bei der Aktivierung der Erweiterung werden die fraglichen Tastenkürzel kurzer Hand überschrieben und auf “KeyTiling” umgebogen.

Außerdem könnten die Fenstergrößen Anlass zur Kritik geben. Momentan nehmen die Fenster in den Ecken wahlweise 1/3, 1/2 oder 2/3 der Bildschirms ein. Eine strikte Aufteilung in Vierteln wäre sicher sinnvoller bezüglich der Kombinationsmöglichkeiten – die resultierende Fenstergröße fand ich aber nicht sonderlich günstig für meinen Bildschirm. Eine Aufteilung in Sechstel würde noch mehr Freiheiten bei der Anordnung der Fenster ermöglichen – dazu müsste der Nutzer aber bis zu 30 Mal eine bestimmte Tastenkombination drücken – nicht gerade erstrebenswert.

Schließlich scheint es in bestimmten Fällen Probleme mit der Positionierung der Fenster zu geben – eventuell ist dies auf Sekundärbildschirme beschränkt, die keine obere Leiste haben, ganz sicher bin ich mir da noch nicht.

Wie auch immer: Dieses kurze und nicht sonderlich unterhaltsame Video zeigt, wie verschiedene Fenster auf dem Desktop angeordnet werden und mittels mehrfacher Tastendrücke unterschiedliche Größen annehmen.

Von echtem Tiling kann, wie ihr seht, keine Rede sein – “KeyTiling” ist eher eine Hilfe, um Fenster nebeneinander anzuordnen.

Die Tastenkombinationen
Zur Zeit sind alle Tastenkombinationen fest im Script eingebaut. Sie können dort aber relativ leicht angepasst werden. Die Belegung stellt sich dabei wie folgt dar:

  • <Control><Alt>KP_1: Fenster unten links anordnen.
  • <Control><Alt>KP_2: Fenster unten anordnen.
  • <Control><Alt>KP_3: Fenster unten rechts anordnen.
  • <Control><Alt>KP_4: Fenster links anordnen.
  • <Control><Alt>KP_5: Fenster auf anfängliche Position und Größe zurück setzen.
  • <Control><Alt>KP_6: Fenster rechts anordnen.
  • <Control><Alt>KP_7: Fenster oben links anordnen.
  • <Control><Alt>KP_8: Fenster oben anordnen.
  • <Control><Alt>KP_9: Fenster oben rechts anordnen.
  • <Control><Alt>KP_0: Zwischen Vollbild- und Normalmodus hin- und herschalten.
  • <Control><Alt>KP_Enter: Fenster auf den nächsten Monitor verschieben.

Wer KeyTiling einmal testen möchte, kann es über Github beziehen. Für Rückmeldungen und Tipps – besonders bzgl. einer besseren Hotkey-Schnittstelle – bedanke ich mich schonmal.

Kleiner Ersatz für nautilus-open-terminal

Da die Erweiterung nautilus-open-terminal schon seit einiger Zeit für Probleme sorgt und Nautilus abstürzen lässt (Fehlermeldung,Bericht bei Chris) und ich mir ohnehin mal die Python-Schnittstelle von Nautilus ansehen wollte, habe ich eine kleine Erweiterung geschrieben, die nautilus-open-terminal ersetzen soll, bis das Original wieder einwandfrei arbeitet.

Die von Chris angesprochenen Probleme mit “Nautilus-Python” scheinen insgesamt darauf zurückzuführen zu sein, dass für Nautilus-Erweiterungen die GTK3-Anbindung jetzt zwingend erforderlich sind. Durch die Ableitung von GObject ließen sich in meinem Fall also die Probleme beseitigen.

Wer sich meine “open-terminal”-Variante einmal ansehen möchte, kann dies bei GitHub tun. Abgelegt wird das Skript im Verzeichnis ~/.local/share/nautilus-python/extensions/, wobei ich das Verzeichnis in meinem Fall erst noch erstellen musste.

Tiling in der Gnome-Shell mit ShellShape

ShellShape ist eine Erweiterung für die Gnome-Shell und erweitert diese um Tiling, also das überlappungsfreie Anordnen von Fenstern. ShellShape besteht streng genommen aus zwei Teilen: Der Gnome-Shell Extension und einem Fork von Mutter, dem Compositing- und Fenstermanager der Gnome Shell. Um zu verhindern, dass die Installation von ShellShape direkt die Originalversion von Mutter von der Platte fegt, wird auf der Seite des Projekts die Verwendung von ZeroInstall empfohlen, da der Konflikt so vermieden wird und die Systemdateien unangetastet bleiben.

shellshape demo von Tim Cuthbertson auf Vimeo.

Ich habe die Pakete allerdings über das Arch User Repository bezogen, aktuelle PKGBUILD-Dateien finden sich in den Kommentaren der jeweiligen Pakete.

Nach erfolgreicher Installation sollte die Gnome-Shell neu gestartet (Alt+F2, dann das Kommando “r” absetzen) und die ShellShape Extension aktiviert werden. In der Leite oben erscheint dann ein neuer Eintrag. Hier kann zwischen normalen Modus (“Floating”) und Tiling (merkwürdiger Weise übersetzt mit “Horizontal”) gewechselt werden. Das ist schonmal eine ganz gute Sache, da so schnell und bequem zwischen den beiden Modi gewechselt werden kann, abhängig davon, was und wie man gerade arbeiten möchte.

Wie von anderen Tiling-Managern gewohnt, bietet auch ShellShape eine ganze Reihe von Tastenkombinationen, mit denen die Fenster vergrößert, verkleinert und ausgetauscht werden können. Grundsätzlich funktioniert das Ganze auch wie erwartet. Allerdings hatte ich doch den Eindruck, dass es öfter zu Problemen und Darstellungsfehlern kommt, wenn man Fenster vergrößert / verkleinert / verschiebt oder sich sogar mit der Maus daran zu schaffen macht. So war es für mich dann doch öfter umständlich und müßig, das Layout zu erreichen, das intendiert war.

Hier könnte etwas mehr Einarbeitungszeit sicher Abhilfe schaffen. Insgesamt erscheint mir die Idee sehr attraktiv, einen modernen Desktop mit Tiling-Funktionen zu versehen, die je nach Anwendungsfall ein- und abgeschaltet werden können. Das macht viel Spaß, wenn man für bestimmte Arbeiten die Tiling-Funktionen möchte, ansonsten aber eher im Normalbetrieb unterwegs ist. Allerdings hatte ich dann doch den Eindruck, dass besonders die Mausbedienung der Tiles noch nicht ganz ausgereift ist – und das wäre mMn wirklich sinnvoll, wollte man die Gnome-Shell tatsächlich mit Tiling verheiraten. Auch die Unterstützung zweier Monitore im TwinView-Betrieb ließ in meinem kurzen Test zu wünschen übrig.

So gesehen kann ich einen kurzen Test durchaus empfehlen. Für eine dauerhafte Verwendung ist die Erweiterung zur Zeit wohl noch nicht ausgelegt, sogar die offizielle Seite rät davon ab.

Nvidia, Twinview und das Youtube-Vollbild

Bei der Verwendung des proprietären Nvidia-Treibers in Kombination mit Twinview kommt es bei einigen Flash-Video-Seiten zu einem hässlichen Fehler: Videos werden im Vollbild nicht korrekt dargestellt, das Bild füllt nur einen kleinen Teil des Bildschirms aus.

Ich hatte bisher noch keine zufriedenstellende Lösung gefunden. Einige Nutzer lassen durch zusätzliche Skripte den Flashplayer auf Youtube durch VLC ersetzen. Andere Nutzer lassen durch diesen Trick das Flash-Video das gesamte Browser-Fenster einnehmen und versetzen dann den Browser in den Vollbild-Modus. Wirklich befriedigend ist das alles nicht.

Alistair Buxton hat sich auf seiner Homepage einmal näher mit dem Problem beschäftigt und rausgefunden, warum der Flashplayer auf Youtube so skaliert, wie er skaliert. Letztendlich ermittelt das Flash-Plugin durch einen bestimmten API-Aufruf (XGetGeometry) die Größe der Anzeigefläche. Diese wird an den Flash-Player weitergereicht, der daraus seine Schlüsse zieht. Der Youtube-Player scheint zunächst das Flash-Video auf den gesamten Anzeigebereich zu skalieren, um dieses Bild dann (inklusive schwarzer Balken) wieder auf die Größe der primären Anzeige runterzuskalieren oder entsprechend zu beschneiden. Auf der Seite von Alistair Buxton ist das anhand verschiedener Bilder gut nachzuvollziehen.

Alistair hat nun einen kleinen Hack veröffentlicht, der den Aufruf der Methode “XGetGeometry” durch dynamisches Linken mittels LD_PRELOAD überschreibt. Wenn das Flash-Plugin nun nach der Anzeigegröße fragt, werden ihm Breite und Höhe des primären Bildschirms zurückgegeben. Der kleine Hack findet sich hier und ist leicht zu verwenden, in der Readme-Datei finden sich alle wichtigen Informationen.

Einen Nachteil hat auch diese Methode natürlich: Bei jedem Aufruf des Browsers muss die Umgebungsvariable LD_PRELOAD explizit gesetzt werden, damit die modifizierte XGetGeometry-Funktion zum Tragen kommt. Es empfiehlt sich daher, die .desktop-Datei des Lieblingsbrowsers entsprechend anzupassen. Alternativ könnte auch ein kleines Skript erstellt werden, das statt des Browsers aufgerufen wird:

#!/bin/bash
LD_PRELOAD=/usr/lib/libfullscreenhack.so chromium-browser $@

Letztlich ist natürlich auch diese Lösung keine Dauerlösung. Durch den kleinen Trick von Alistair kann man das Problem aber erstmal umschiffen. Endlich.

 

Thema der GnomeShell ändern

Mit der “user theme” Erweiterung für die GnomeShell lassen sich Themen sehr einfach wechseln. Prinzipiell muss dafür nur mit “dconf” der Schlüssel “/org/gnome/shell/extensions/user-theme/name” geändert werden. Damit die Erweiterung die Themen auch findet, müssen diese zuvor im Ordner “~/.themes” abgelegt worden sein.

Um nun das Thema zu ändern, genügt es, folgenden Befehl in der Konsole abzusetzen:

dconf write /org/gnome/shell/extensions/user-theme/name "'DarkGlass'"

Ebenso könnte mit dem Werkzeug “dconf-editor” der entsprechende Schlüssel angepasst werden.

Weil dieses Vorgehen doch eher umständlich ist, gibt es die Erweiterung “themeselector“, die die Möglichkeit, das Thema zu ändern, direkt in die GnomeShell integriert.

Leider scheint diese Erweiterung noch nicht mit der aktuellen Version der GnomeShell lauffähig zu sein und da es nicht mit einer einfachen Anpassung der Versionsnummer in der Datei “metadata.json” getan war, habe ich ein kleines Python-Skript geschrieben, das ebenfalls in der Lage ist, die GnomeShell-Themen auf die Schnelle zu ändern.

Das Skript findet sich hier auf GitHub und sollte mit Python2 und Python3 lauffähig sein. Voraussetzung ist natürlich die Installation der oben erwähnten und verlinkten Erweiterung “user theme”. Außerdem müssen die Bibliotheken für die Anbindung von Python an die GObject-Introspektion installiert sein, unter Ubuntu oder Arch sind diese beispielsweise im Paket “python-gobject” bzw. “python-gobject2″ zu finden.

Wer schnell mal ein paar Shell-Themen ausprobieren möchte, kann ja einen Blick darauf werden.

//edit: Wie Christoph in den Kommentaren erwähnt, steht diese Funktion auch über das “gnome-tweak-tool” zur Verfügung; da das die meisten Shell-Nutzer wohl installiert haben dürften, besteht natürlich kaum Bedarf für ein zusätzliches Skript :).

Gnome 3.2 – messageTray auf den primären Monitor verschieben

Ich habe gestern einen Blick auf die Beta von Gnome 3.2 gewagt und bin soweit eigentlich zufrieden: Die GDM-Anmeldebox passt nun besser zum Standard-Thema der Gnome-Shell und die messageTray wird jetzt anscheinend nicht mehr ganz so schlimm mit Benachrichtigungen zugepflastert. Auch der neue Manager für Wechselmedien springt sofort ins Auge.

Etwas frustrierend war für mich aber der Umstand, dass die messageTray bei mir nicht mehr auf dem primären Bildschirm, sondern dem meist abgeschalteten Zweitbildschirm dargestellt wurde. Mit ein paar Handgriffen lässt sich die messageTray aber wieder auf den “richtigen” Bildschirm befördern.

Schritt 1: messageTray.js

Im ersten Schritt wird die Datei /usr/share/gnome-shell/js/ui/messageTray.js mit Root-Rechten bearbeitet. Dabei wird in der Funktion _setSizePosition die Zeile

let monitor = Main.layoutManager.bottomMonitor

durch folgende Zeile ersetzt:

let monitor = Main.layoutManager.primaryMonitor

Schritt 2: layout.js

Auch die Datei /usr/share/gnome-shell/js/ui/layout.js wird mit Root-Rechten bearbeitet. In der Funktion _updateTrayBarrier wird die Zeile

let monitor = this.bottomMonitory

durch folgende Zeile ersetzt:

let monitor = this.primaryMonitor

In der Funktion _updateBoxed wird parallel verfahren: Jedes Vorkommen von “bottomMonitor” im Zusammenhang mit der messageTray wird durch “primaryMonitor” ersetzt. So wird aus:

this.trayBox.set_position(this.bottomMonitor.x, this.bottomMonitor.y + this.bottomMonitor.height); 
this.trayBox.set_size(this.bottomMonitor.width, -1);

this.trayBox.set_clip(0, -this.bottomMonitor.height, this.bottomMonitor.width, this.bottomMonitor.height);

dieses hier:

this.trayBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y + this.primaryMonitor.height);
this.trayBox.set_size(this.primaryMonitor.width, -1);

this.trayBox.set_clip(0, -this.primaryMonitor.height, this.primaryMonitor.width, this.primaryMonitor.height);

Schritt 3: Shell neu starten

Um die Änderungen wirksam zu machen, wird die Shell neu gestartet. Dazu genügt es im Ausführen-Dialog von Gnome3 (ALT+F2) das Kürzel “r” abzusetzen.

 

Kurztipp: Login-Maske auf dem falschen Bildschirm

Im Multi-Monitor-Betrieb zeigt GDM die Login-Maske für gewöhnlich auf dem Monitor, auf dem der Mauszeiger sich aktuell befindet. In meinem Fall ist das leider öfter mal der Zweitbildschirm.

Damit dieser zusätzliche Stromverbraucher nicht unnötig an- und ausgeschaltet werden muss, kann man GDM durch einen kleinen Kniff dazu zwingen, den Mauszeiger auf dem “richtigen” Monitor zu platzieren.

Dazu wird lediglich das Programm xdotool benötigt. Durch folgende Zeile am Ende (jedoch vor dem “exit 0″) der Datei  /etc/gdm/Init/Default wird der Mauszeiger beim Start von GDM an die gewünschte Stelle gebeamt:

xdotool mousemove 500 500

Die beiden letzten Ziffern geben dabei die Koordinaten des Mauszeigers an (gemessen von der linken, oberen Bildschirmecke).

//update:
Es ist natürlich die linke, obere Ecke. Fixed.

Kurztipp: Datei löschen unter Gnome3

Wer unter Gnome3 eine Datei oder einen Ordner in den Müll befördern möchte, wird sich zunächst wundern: Das Tastenkürzel “Entf” zeigt keine Reaktion. Tatsächlich spring Nautilus unter Gnome3 erst durch die Tastenkombination “STRG+Entf” in den Abfallbeseitigungsmodus.

Um das zu ändern, kann kurzzeitig die Option “can-change-accels” mit dem dconf-editor (der unter Umständen noch nachinstalliert werden muss) aktiviert werden. Diese findet sich im Pfad “org.gnome.desktop.interface”. Ist das entsprechende Häckchen gesetzt, wird in Nautilus eine beliebige Datei markiert. Danach wird der Mauszeiger im Menü Bearbeiten auf den Punkt In den Müll verschieben gesetzt – ohne zu klicken. Es kann nun eine neue Tastenkombination festgelegt werden – in unserem Fall durch das Drücken von “Entf” (ggf.  zwei Mal drücken).

Die Option “can-change-accels” kann danach wieder deaktiviert werden.

freiesMagazin – Python Sonderausgabe

Das freieMagazin hat eine Python-Sonderausgabe veröffentlicht, in der die bisher erschienenen 6 Teile meiner Python-Einführung, die ich nun seit etwa einem halben Jahr für das freieMagazin schreibe, zusammengefasst wurden.

Wer die Reihe noch nicht kennt, kann mit der Sonderausgabe ja mal einen Einstieg wagen. Und auch so ist diese Zusammenstellung vielleicht nochmal eine ganz nette Übersicht für Anfänger.

Ganz lieben Dank an dieser Stelle übrigens an Christian Hausknecht, der mir seit dem zweiten Teil der Reihe als geduldiger und kompetenter Korrektor zur Seite steht!

pyInputStats – Statistiken für Eingabegeräte

Funktastaturen und -mäuse sind in Sachen Energiehunger heute sicher nicht mehr mit den ersten Exemplaren ihrer Gattung zu vergleichen. Dennoch frage ich mich bei jedem Batteriewechsel, ob “die paar” Tastendrücke und Mausschubser tatsächlich den Batteriehunger meiner handbetätigten Eingabegeräte rechtfertigen.

Wie viele Tastendrücke, Mausklicks und Mausbewegungen so eine Batterie aushält, wäre doch eigentlich interessant zu wissen. Und überhaupt – was setze ich über meine Tastatur täglich so ans System ab?

Zur Beantwortung solcher Fragen gibt es zahlreiche Tools, teilweise sogar für Linux-Systeme. Das Programm “WhatPulse” beispielsweise ist “sogar” Freeware – aber eben auch “nur” Freeware. Als Möchtegern-Entwickler juckt es mich da direkt in den Fingern, mir das gute, alte xlib nochmal anzusehen – da müsste doch was zu machen sein….?

Herausgekommen ist das kleine Programm “pyInputStats”. Es klinkt sich mit der Record Extension (PDF) in die Tastatur- und Mausereignisse ein und kann so Statistiken über Mausklicks, gedrückte Tasten und Cursorbewegungen erstellen. Die Daten werden dabei so einer SQLite-Datenbank abgelegt, dass keine Rückschlüsse auf konkrete Texteingaben möglich sind. Im Normalbetrieb läuft das Programm weitestgehend unsichtbar und legt lediglich ein Icon im Systray ab. Erst nach einem Klick auf das kleine Lineal kommen die Grafiken zum Vorschein.

Was lässt sich mit dem Programm ablesen?

pyInputStats kann die gesammelten Daten auf unterschiedliche Weise darstellen:

  • Gesamtzahl aller Tastenanschläge und Mausklicks. Zurückgelegte Cursor-Meter.
  • Durchschnittliche Cursor-Meter, Tastenanschläge und Mausklicks.
  • Tages-Übersicht: Darstellung dieser Daten für einen bestimmten Tag – mit grafischer Darstellung des Tagesverlaufs.
  • Monats-Übersicht: Grafische Darstellung der Daten über einen gegebenen Monat.
  • Tasten-Statistik: Wie oft wurde welche Taste gedrückt?

Probleme und Anmerkungen

Das Skript ist dahingehend recht effizient, als dass es nicht ständig nach neuen Tasten- und Mausinformationen pollt, sondern sich direkt von der xlib über derartige Ereignisse benachrichtigen lässt. Das ändert natürlich nichts an der Tatsache, dass durch das Skript bei jedem Tastendruck und jeder Mausbewegung verschiedene Zähler hochgezählt werden müssen. In der Praxis macht sich dies jedoch nicht bemerkbar – zusätzlicher und eigentlich unnötiger Ballast ist es natürlich dennoch.

Auch sei darauf hingewiesen, dass sich mit dem Programm keine Texteingaben nachvollziehen lassen – es eignet sich also nicht als Keylogger. Allerdings wird schon protokolliert, in welchem Zeitabschnitt wie oft geklickt wurde, wie weit die Maus bewegt wurde und wie viele Tastenanschläge gemacht wurden. Wie in dem oben verlinkten Bild zu sehen, lässt sich aus diesen Daten durchaus ablesen, wann der PC wie intensiv genutzt wurde – eine durchaus sensible Information.

Die grafische Darstellung der Daten ist noch nicht ganz ausgereift. Gerade bei der ersten Nutzung werden vermutlich negative Werte etc. angezeigt. Bereits nach wenigen Minuten sollten die Grafen aber vernünftige Werte anzeigen.

Schließlich und letztlich bietet das Programm die Möglichkeit an, einen Autostart-Eintrag für den derzeitigen Nutzer anzulegen, so dass das Programm bei jeder Anmeldung gestartet wird. Diese Funktion ist derzeit noch etwas fehleranfällig, weswegen im Zweifelsfall händisch ein Autostart-Eintrag angelegt werden sollte.

Abhängigkeiten

Benötigt werden unter anderem die Pakete:

  • python-xlib
  • python-pysqlite2

sowie gegebenenfalls:

  • python-setuptools

Installation

Wie immer findet sich das Projekt bei Launchpad. Ein beherztes bzr branch lp:pyinputstats befördert Quellen auf das lokale System, wenn Bazaar installiert ist. Ansonsten kann das Paket natürlich auch ganz normal heruntergeladen werden.

Eine Installation ist grundsätzlich nicht notwendig – das Skript kann aus dem Skript-Verzeichnis mit python pyinputstats gestartet werden. Wer das Skript dennoch im System verankern möchte, kann einfach den Befehl python setup.py install mit Root-Rechten ausführen.

Probleme und Fehler bitte ich im Launchpad-Bugtracker oder hier in den Kommentaren zu notieren. Dafür schonmal vielen Dank! Und jetzt heißt es: Wer schafft die meisten Tastenanschläge am Tag? Mein erstes Gebot lautet 36.676.