No-Offset Pagination für Blogsysteme
In diesem Artikel wird beschrieben, dass die Offset-Anweisung nicht der richtige Weg sei um Pagination umzusetzen. Das Problem sei, dass trotz Offset immer noch alle Datenbankeinträge geholt werden, selbst die später übersprungenen. Offset ist aber genau das Mittel, mit dem ich normalerweise Pagination umsetzen würde, beispielweise in ursprung – aber auch Serendipity macht das so.
Mit Offset ist das hier gemeint:
offset = totalEntries - (limit * page) @@db.execute "SELECT id FROM entries WHERE deleted != 1 ORDER BY date DESC LIMIT ?,?;", offset, limit
Basierend auf der aktuellen Seitenzahl wird offset erhöht oder reduziert, sodass nur ab der aktuellen Seite Einträge geholt werden. Dann reduziert ein LIMIT die Liste.
Die Alternative:
SELECT ... FROM ... WHERE ... AND id < ?last_seen_id ORDER BY id DESC LIMIT 10
Statt offset werden die Einträge ab dem letzten gesehenen Eintrag geholt, der Seitenmarkierung, z.B. dem ältesten Eintrag auf der vorherigen Seite.
Damit das in einem Blogsystem funktioniert, bei dem die Einträge nach Datum und nicht nach id sortiert sind, müssen die Pagination-Links also nicht mehr eine Seitenanzahl haben, sondern das Datum des vorherigen Eintrags. Ich sehe auch noch keinen Weg, echte Pagination zu bauen – also nicht nur zwei Links weiter und zurück, sondern einzelne Links für jede einzelne Seite; die einzelnen Links sind ja nicht bekannt. Auch braucht man leicht verschiedene SQL-Abfragen, um vor- und zurück zu gehen, und zusätzlichen Code, um festzustellen wann man auf der letzten der ersten Seite ist. Dinge wie ein stabiles Archiv sind auch schwieriger.
Eventuell ist all das lösbar, indem man beim Speichern eines neuen Eintrags die Navigation vorberechnet, sodass Seitennavigation auf Datumsgrenzen gemappt wird.
Dafür muss sich all das aber lohnen. Was für Auswirkungen hat es auf die Performance? Tatsächlich war in meinem Test die Pagination ohne Offset deutlich schneller. Für diesen Test habe ich ursprung modifiziert, zwei Testinstallationen (eine mit, eine ohne Offset) mit je 10000 Lorem-Ipsum-Einträgen befüllt und die Archivseite mit Eintrag 5000 aufgemacht. Dies ist die Server-Wartezeit:
60% schneller – und der Unterschied sollte bei mehr und mehr längeren Einträgen größer werden. Das ist ziemlich gut.
Die Frage ist, wieviel davon übrigbleibt wenn alle Probleme beseitigt werden, wie das Nicht-Anzeigen der Pagination-Links wenn es keine nächste Seite gibt. Aber angesichts des bisherigen Ergebnisses werde ich wohl versuchen, das zumindest für ursprung zu implementieren.
Für s9y dürfte es zu schwierig sein.
Mark of the Ninja
*The way of the Ninja is the way of life
Where lightning strikes once, a Ninja strikes twice*
Mark of the Ninja ist ein 2D Stealth-Plattformer mit funktionierender Linuxversion. Obwohl eines der bestbewertesten Steam-Spiele, war es bisher nicht auf meinem Radar. Inzwischen hab ich es etwas ausführlicher angespielt, und es ist wirklich ein nettes Spiel.
Mich erinnert es an Gunpoint. Gunpoint gefiel mir nochmal besser, aber das ist etwas pur subjektives – Mark of the Ninja hat eindeutig die bessere Grafik, größere Level und ist länger, hat mehr Varianz und ist das ausgereiftere Spiel. Als schwertbewehrter und mit Hilfsmitteln ausgestatteter Ninja schleicht man sich durch die Level, kann Gegner ausschalten oder umgehen, Lasern muss ausgewichen und Bewegungssensoren nicht ausgelöst werden. Dabei ist wie im Genre üblich das vollständig gewaltlose Lösen des Levels schwieriger, aber wird mit Pluspunkten belohnt.
In jedem Level werden Fähigkeitspunkte verdient und im Laufe des Spielsverlaufs mögliche Upgrades freigeschaltet. In drei Kategorien gibt es neue Techniken (z.B. das Ausschalten von Gegnern hinter Türen), neue Hilfsmittel (z.B. Rauchbomben) und Waffen (z.B. Minen). Die in comicartigen Zwischensequenzen erzählte Geschichte hat mich noch nicht richtig gefangen, aber das Upgradesystem ist durchaus motivierend. Und die Levels werden immer fordernder, auch das motiviert zum Weiterspielen.
Das Spiel selbst funktioniert technisch unter Linux einwandfrei. Aber ich habe ein paar Probleme mit der Steamversion: Sie bleibt hängen, wenn das Steam-Overlay aktiviert wird, und anders als alle anderen Spiele blockiert es die Tastenkombinationen des Fenstermanagers, sodass die Arbeitsfläche nicht gewechselt werden kann. Deshalb sind die Screenshots im Artikel auch nicht von mir. Aber das sind natürlich keine großen Probleme, dass das Spiel selbst einwandfrei funktioniert überwiegt diese Kritik.
Fazit: Kaufen, wenn es das nächste mal wieder reduziert ist.
Über die mögliche Beständigkeit des Linuxdesktops
Ziemlich genau 10 Jahre nutze ich nun Linux auf dem eigenen PC. Seitdem hat sich viel getan, und gleichzeitig hat sich gefühlt nichts verändert. Ich krame in meinen Erinnerungen und alten Screenshots und versuche zu beschreiben, was sich wirklich verändert hat und was wirklich noch genau gleich blieb.
Was gleich blieb
Gleichgeblieben ist der Fenstermanager. Damals installierte ich eine Minimal-Installation von Ubuntu und danach IceWM als grafische Oberfläche. IceWM läuft auch heute noch hier.
Die Kernsoftware ist auch immer noch gleich. Damals wie heute ist ein Terminal auf der ersten Arbeitsfläche, Pidgin auf der zweiten und Firefox auf der dritten. Nur dass Pidgin damals gaim hieß (und öfter benutzt wurde)
Es ist gar nicht verwunderlich, dass die Software die gleiche ist, wenn man sich die Hardware anschaut. Denn bei allem, was mit dem Desktop zu tun hat, hat sich nichts verändert. Eine Tastatur, eine Maus, ein Display – in zehn Jahren gab es null Innovation, nichtmal Sprachsteuerung ist auf dem Desktop angekommen. Warum sollte sich dann die Software oder ihre Bedienkonzepte ändern?
Immer noch läuft hier Ubuntu. Es ist nach wie vor ein benutzerfreundliches System auf Debianbasis.
Was sich verändert hat
Die technische Grundlage der Oberfläche ist immer noch der XServer, aber inzwischen läuft hier ein Compositor. Als die aufkamen hielt ich sie für eine unnütze Spielerei – und wenn man sich anschaut, was damals mit Compiz gemacht wurde, hat sich von der damaligen Nutzung auch fast nichts gehalten. Und doch hat sich der Compositor bewährt. Nicht wegen Spielereien, sondern weil der XServer und Linux sich allein als unfähig erwiesen haben einen flüssigen 2D-Desktop zu zeichnen. Schaltet einmal den Compositor ab: Es ist eine absurde Ruckelei samt Tearing, seit damals ist es nur noch schlimmer geworden (Edit: Allerdings nur auf meinem Hauptsystem, ist also vielleicht kein genereller Trend).
Während damals IceWM komplett genutzt wurde, inklusive Taskbar und Tray, ist es inzwischen nur noch für Tastenkürzel und die Fensterverwaltung zuständig. Mein Desktop ist zusammengestückelt: conky, simdock, stalonetray und izulu. Aber auch das sind alles alte Programme: Conky existiert mindestens seit 2005, simdock seit 2007, stalonetray mindesten seit 2004, izulu immerhin schon seit 2009.
Der Desktop sieht dank Ubuntus Ambiance-Design besser aus als damals.
Verschwunden ist die xorg.conf. Es war unheimlich wichtig, mit dieser Datei X ordentlich zu konfigurieren, vom Grafiktreiber bis zum genutzten USB-Port für die Maus. Das wurde später automatisiert, eine riesige Verbesserung.
Steam ist komplett neu. 2005 gab es kaum ernstzunehmende Linux-Spiele, inzwischen gibt es hunderte alleine auf Steam. Das ist immer wieder großartig.
Wandel
Drumherum und untendrunter gibt es natürlich viele Änderungen. Das Internet ist schneller, Videos besser aufgelöst und Flash tot, der Prozessor hat mehrere Kerne und der PC mehr Ram, Firefox von damals ist nicht wirklich der Firefox von heute und Webseiten sind hübscher und wichtiger, ext3 wäre ext4 und mein Dateisystem ist f2fs. Und doch: Das sind alles Details. Im großen und ganzen ist es immer noch der gleiche Desktop, der gleiche PC, die gleiche Nutzung. Der PC als Kategorie ist ein bisschen stehengeblieben, was die gerade erst aufkommenden Displays mit besserer DPI nur zu deutlich zeigen. Vielleicht ist das im großen und ganzen gut so, auch wenn es bei den Displays die letzten Jahre sehr schade war.
Und wie viele Programme immer noch genau gleich sind! Conky zum Beispiel. Das habe ich vor über 4 Jahren einmal installiert und konfiguriert, seitdem nicht mehr angefasst und es läuft noch genau gleich. Eine solche Kontinuität des Desktops ist unter Windows z.B. nahezu unmöglich, oder zumindest verantwortungslos – heute noch Windows XP zu nutzen ist Wahnsinn. Neue Windowsversionen aber haben andere Oberflächen, unterstützen andere Programme. Heute noch nahezu den Desktop von vor 10 Jahren zu nutzen ist unter Linux möglich, ein paar Programmupdates abgesehen, mit allen Vor- und Nachteilen.
Gleichzeitig ist all diese Konstanz ein Kuriosum selbst in der Linuxwelt. Hätte ich damals nicht auf einen kleinen Fenstermanager gewettet, hätte ich mich mit der fast gleichzeitigen Selbstzerlegung der großen Desktopumgebungen herumschlagen müssen (Gnome 3 und KDE 4), oder mit Ubuntus Wechsel auf Unity (den ich so nur auf dem Laptop mitgemacht habe).
Auch bin ich kein Supporter bei UbuntuUsers mehr und relativ wenig experimentierfreudig, kaum noch involviert in jedwede Linux-Community. Das sieht man an der geringen Frequenz meiner Linuxartikel. Eine größere Geschichte aber steht an: Da hier noch ein 32-Bit-System läuft werde ich das Betriebssystem neuinstallieren müssen. Ich bin ziemlich sicher, dass aufgrund der Systemd-Integration dies kein Ubuntu werden wird. Noch nicht entschieden ist, ob es stattdessen ein BSD oder ein GNU/Linux ohne systemd (wie Funtoo) werden wird. Empfehlungen?
Mal schauen, welche Änderungen das für den Desktop bringt. Und später, was Wayland und was sonst noch vielleicht kommt in den nächsten zehn Jahren ändern werden.
Quora-Nutzer? Du könntest mir helfen
Ich habe eine Umfrage für Quora-Nutzer erstellt.
Sie hat schon einige tolle Antworten bekommen, dann wurde aber leider auf Quora die Frage von einem übereifrigen Moderator gesperrt, die zur Umfrage linkte. Mir fehlen also noch ein paar Antworten, um die Umfrage sinnvoller auswerten zu können. Falls du jemals Quora benutzt hast, wäre es großartig wenn du diese Umfrage ausfüllen könntest.
Werde später hier im Blog beschreiben worum es geht und was bei rauskam.