Offsite-Backup mit borg und rsync.net
Monday, 29. February 2016
Es gibt so ein paar Daten, die mir wichtig sind. Meine Passwortliste beispielsweise. All das ist verschlüsselt und mehrfach gesichert – auf der lokalen Backupplatte, auf dem Heimserver, auf dem Laptop. All das hilft null, wenn hier mal ein Feuer ausbricht während der Laptop zuhause liegt. Das Offsite-Backup fehlte.
Auf Hacker News las ich in einem Kommentar von einem speziellen Angebot von rsync.net. 3 Cents pro GB per Monat, bei einer Mindestgröße von 20GB, zahlbar jährlich, ohne Transferkosten – das sind $7.20 im Jahr und ist damit das günstigste mir bekannte Angebot. Der Kniff ist wohl, dass es ausdrücklich für Profis gedacht ist. Außerdem werden nur die Backup-Tools attic und borg unterstützt, allerdings ohne speziellen Kundensupport. All das ist für mich super, denn die Tools sehen einfach genug aus – ich kann vom reduzierten Preis profitieren und werde wohl keinen speziellen Kundensupport brauchen.
Ich habe also die Profi-Warnung weitgehend ignoriert und einen Account angelegt, mich als Backup-Tool dann für borg entschieden. Mein Backupskript sieht so aus:
#!/bin/sh REPOSITORY=NUTZER@RSYNC-SERVER # Backup borg create --stats --compression lzma,2 \ $REPOSITORY::`hostname`-`date +%Y-%m-%d` \ /media/data/Dropbox \ # Remove old backup borg prune -v $REPOSITORY --keep-weekly=2
Das ist fast genau das Skript aus dem Schnelleinstieg. Vorher musste das Borg-Repository aber noch erstellt werden:
borg init --encryption=repokey NUTZER@RSYNC-SERVER:backup
Obwohl meine kritischen Daten sowieso verschlüsselt sind, war mir wohler dabei dieses Backup nochmal separat zu verschlüsseln.
Und das wars schon. Der pogo hat zwar beim ersten Backup ziemlich lange gerödelt, aber es musste ja auch eine ganze Menge an Daten über die Heimleitung hochgeladen werden, und ich hatte anfangs eine zu hohe Komprimierungsstufe gewählt (im Skript oben ist da schon angepasst). Der nächste Durchlauf wird schneller, weil schon vorhandene Daten nicht nochmal hochgeladen werden.
Bis jetzt bin ich sehr zufrieden damit, und es freut mich sehr, dass diese letzte gravierende Backuplücke endlich gefüllt ist. Nur automatisiert muss das noch werden.
Trojitá, ein schnelles Emailprogramm
Saturday, 27. February 2016
Trojitá gefällt mir gut, weil es minimalistisch und schnell ist. Ein echter IMAP-Client hat wohl wirklich Vorteile – neue Emails werden sofort angezeigt, es gibt durch den Fokus darauf auch anders als bei Sylpheed keine Probleme mit dem Neuladen der Emailliste. Generell reagiert die Qt-Oberfläche schnell und sieht ordentlich aus.
Aktuell ist Version 0.6 (nebenbei: via), und leider ist das wirklich keine fehlbezeichnete 1.0. Es fehlen Elemente der Oberfläche wie eine Möglichkeit, von der UI aus alle markierten Emails anzuzeigen. Verschlüsselung ist noch nicht integriert und die Sortierung der Emailliste funktioniert nur in einem bestimmten Modus, wird auch nur dann gespeichert. Trotzdem, bis jetzt konnte ich mich mit seinen Macken arrangieren und empfand Trojitá als angenehme Alternative. Falls die Entwicklung weitergeht wird das ein tolles Programm.
Kimonos Nutzerverachtung
Sunday, 21. February 2016
Kimono war ein SaaS-Anbieter, mit dem man Webseiten scrapen konnte und der die Daten dann in einer komfortablen API bereitgestellt hat. Nun schaltet er ab:
Was mich daran so ärgert sind die zwei Wochen bis zur Abschaltung. Mir ist bewusst, dass externe Dienste wegfallen können, und entsprechend war die Nutzung von kimono für pc-kombo so abstrahiert, dass es relativ leicht ersetzbar ist. Aber trotzdem sind die externen APIs ein kritischer Bestandteil der Seite. Und jeder kritische Bestandteil ist in zwei Wochen nur schwer ersetzbar.
Das ist auch nicht üblich. Wenn externe Dienste wegfallen versuchen verantwortungsvolle Betreiber normalerweise, ordentliche Migrationszeiten zu schaffen. Das nun abschaltende Copy zum Beispiel gibt bis Mai Zeit, die hochgeladenen Dateien zu sichern, drei Monate. Und Google, die das mit dem Abschalten ja nun wirklich nicht toll machen, hat das sogar durchdefiniert und garantiert immer monatelange Migrationszeiten und Warnungen.
Konsequenzen:
- Palantir steht nun auf meiner schwarzen Liste.
- Ebenso wie die beiden Kimono-Gründer, Ryan Rowe und Pratap Ranade.
- Ich nutze dieses Wochenende, um zu scrapy und zur Scrapy Cloud zu migrieren.
Wieder ein externer Anbieter? Nicht ganz: Ein externer Anbieter einer FLOSS-Lösung, die auch selbsthostbar ist. Das gewann ganz knapp den Kampf in meinem Kopf gegen die Alternative, so etwas selbst zu implementieren. Auch, weil ich die Scraper lokal definieren werde (die ja im Grunde nur eine URL mit mehreren Xpaths sind) und sie dann nochmal einfacher in einer selbstgebauten API-Software nutzen kann, falls scrapy doch nicht passen sollte.
Ich fand kimono toll und hilfreich. Es ist so richtig ärgerlich, eigentlich unfassbar, dass sie ihren Abgang so verkacken. Was für Gründe kann es geben, so unnötig verbrannte Erde zu hinterlassen?
Kleinigkeiten über Frankreich
Tuesday, 9. February 2016
- Manchmal ist Frankreich auch lustig, weil so wenige Leute Englisch sprechen: Asimat-Assmat würde man ansonsten wohl kaum als Name eines Pflegeanbieters finden.
- Ähnlich wenn bei Aufgabe eins Briefes nach Taiwan die ehrliche Frage gestellt wird, ob sie das denn wirklich verschicken könnten, denn die Adresse sei ja chinesisch und nicht französisch geschrieben. Im Urlaub, ohne genug Französisch zu sprechen um das zu klären, ist das vielleicht weniger charmant.
- Ich habe bis heute noch keine Schlagsahne im Supermarkt gefunden. Da steht nur Crème fraîche neben mir unbekannten Spezialsoßen für die Küche aus der Normandie.
- Auch fast unmöglich: Frische Milch. Manche Supermärkte führen sogar nur H-Milch. Und selbst wenn es normale Vollmilch gibt: Die einzig wirklich trinkbare ist eine, die es hier manchmal im Carrefour in der Ecke für Lokalprodukte gibt.
- Anders als in Deutschland gibt es tatsächlich Bananen aus Frankreich. Deutsche, kauft nur deutsche Bananen – der Witz funktioniert für Frankreich nicht. Den Kolonien sei Dank
Suits
Sunday, 31. January 2016
Ich werde Suits dann wohl doch weitergucken.
Vorhin beendete ich die dritte Staffel und ich war mir vorher unsicher, ob ich weitergucken will. Die Serie ist manchmal einfach zu doof. Anwalt auf hohem Ross droht anderem Anwalt, wie sehr er mit ihm den Boden aufwischen und ihn vernichten wird, sowas kam mir jetzt zehnmal zu oft vor und es war schon beim zweiten mal ziemlich lächerlich. Es ist eine sehr seltsame Überhöhung der Anwaltswelt, zusammen mit Charakteren, die sich entweder viel zu ernst nehmen (Harvey), unglaubwürdig ungeschickt (Mike jedes mal, wenn er später sein Gewissen entdecken soll) oder absolut lächerlich verhalten (Louis).
Aber das Finale der Staffel war dann doch wirklich spannend. Die Figuren sind jetzt aufgestellt, es ist Stoff für gute Stories da. Schlecht sind die Schauspieler sowieso nicht, und nach drei Staffeln kann ich langsam darüber hinwegsehen, wie lächerlich unpassend sie für ihre Rollen sind – selbst über das Model Meghan Markle als naive Rechtsanwaltsfachangestellte.
Ich hoffe, dass IMDB recht hat und die nächsten Staffeln besser werden. Ich fürchte nur, dass die Bewertungen nicht besonders richtig sind – denn für die vergangenen drei Staffeln waren sie viel zu hoch.
Medieval II: Total War
Wednesday, 20. January 2016
Auch wenn ich das Spiel den gescheiterten Spiele zurechne: Medieval 2 läuft nun unter Linux und macht erstmal wieder jede Menge Spaß.
In dem Spiel ist man uneingeschränkter Herrscher über ein Königreich. Städte müssen bebaut und Armeen rekrutiert, diese Generälen zugeteilt und über die Karte gezogen werden. Dazu kommt Diplomatie und ein durchaus wichtiger Familienstammbaum. Treffen zwei feindliche Armeen aufeinander kann die Schlacht entweder ausgewürfelt oder auf einer 3D-Karte ausgespielt werden. Auswürfeln ist nie empfehlenswert, die Verluste sind zu hoch, die Kämpfe sind der Kern des Spiels.
Das Spiel läuft mit dem freien radeon Treiber, zumindest mit der aktuellen Version aus dem PPA. Es gibt aber noch Probleme:
- Der Sound ist verzerrt, aber nicht alles. Die Sprachausgabe der Berater zum Beispiel stottert, aber die der Einheiten scheint okay, vorbeirauschende Pfeile wiederum klingen falsch. Generell stimmt da was nicht.
- Die Performance ist nicht toll und schon am Anfang stocken die KI-Gegner manchmal beim Ziehen – das könnte längere Partien verhindern
- Der dynamische Mauszeiger funktionierte in meiner ersten Partie, aber in der zweiten dann nicht mehr.
Trotz der bestehenden Probleme ist das für eine gerade veröffentliche Linuxversion ein guter Zustand, das Spiel läuft stabil und flüssig genug und hat keinerlei Grafikfehler. Wer das Spiel schon in seiner Steam-Bibliothek hat sollte es für Linux wiederentdecken, für alle anderen ist das Kernspiel im Humblestore auf 5€ reduziert.
Persona.org wird abgeschaltet
Tuesday, 12. January 2016
Persona/Browserid ist ein Loginsystem von Mozilla, dem nie eine Chance gegeben wurde. Das ist superschade, denn es ist ein wirklich gutes System. Es reicht eine Emailadresse um sich anzumelden, es wird kein weiteres Passwort benötigt. Außerdem ist es für Entwickler supereinfach einzubinden.
Zum November 2016 will Mozilla nun den zentralen Server unter persona.org abschalten:
Due to low, declining usage, we are reallocating the project’s dedicated, ongoing resources and will shut down the persona.org services that we run.
Persona.org and related domains will be taken offline on November 30th, 2016.
If you run a website that relies on Persona, you will need to implement an alternative login solution for your users.
Eine von zwei Möglichkeiten wird nun passieren: Entweder es formt sich endlich ein neues Projekt, das einen alternativen zentralen Server bereitstellt und das Persona-System übernimmt. Das wäre die gute Variante, ist aber leider die unwahrscheinliche. Die zweite ist, dass alle bestehenden Seiten mit Persona-Login zu einem anderen Loginsystem migrieren müssen. Das betrifft alleine für mich drei Webprojekte.
Das war keine gute Nachricht am frühen Morgen.
C.H.I.P, ein 9$ PC
Monday, 11. January 2016
Via diesem Artikel bin ich über Chip gestolpert, einen Mini-Computer.
Für 9$ hat das Ding:
- Wlan, inklusive 802.11n
- Bluetooth 4.0
- 4 GB integrierten Speicher
- 512 MB Ram
- Dazu: Composite Video Output, einen 1GHz ARMv7 Prozessor, verschiedene Pins und optionale Erweiterungsboards für HDMI and VGA
Das ist günstig. Der Raspberri Pi Zero kostet weniger, hat einen ähnliche Prozessor und gleichviel Ram, aber ihm fehlt das Wlan und der integrierte Speicher, wodurch am Ende für die meisten Zwecke der Chip günstiger sein dürfte. Bei mir kamen nur noch 2$ für ein Gehäuse und 6$ für Versand dazu.
Ich fand auch den PocketChip cool, das war mir dann aber für etwas ohne Idee eines Anwendungszwecks zu teuer.
Natürlich hab ich ihn noch nicht in den Händen, laut Webseite wird er erst gegen Juni fertig. Mal hoffen, dass das klappt. Er wäre wahrscheinlich mindestens guter Ersatz für den Pogo, sollte der irgendwann kaputtgehen. Vielleicht wird mir bis dahin auch klar, wie ich ihn am einfachsten in Betrieb nehme – wahrscheinlich über ein USB-Kabel zu meinen Computer?
Skyrim
Thursday, 7. January 2016
Als großer Fan von Morrowind ist Skyrim für mich schwierig zu bewerten. Es gibt wirklich viele Verbesserungen, auch viele Vereinfachungen mit denen ich gut zurechtkomme. Anderes dagegen gefällt mir deutlich weniger gut.
Die größte Verbesserung ist für mich die Ausgestaltung der Welt. Keine Höhle, die nicht irgendeine Mini-Geschichte erzählt, kein Jägerunterstand, in dem nicht Anzeichen für vorherige Aktivität liegen. Das geht weit über Quests und Nebenquests hinaus und ist auf jeden Fall ein Grund, dieses Spiel zu spielen und wertzuschätzen.
Andererseits wird man mit Quests zugeschüttet. Das Problem ist typisch für ein The Elder Scrolls Spiel, aber es ist hier nochmal so viel schlimmer als in den Vorgängern, dass es mich richtig überfordert. Ich musste umschalten in einen Modus, in dem ich nun nur noch Quests abschließe anstatt weiter frei zu erkunden. Das macht teilweise Spaß, denn die Mehrzahl der Quests ist interessant. Gleichzeitig ist es eine unangenehme Einschränkung. Und anders als in anderen Spielen ist das Lösen von Quests schnell relativ bedeutungslos, zum einen weil oftmals die großen Belohnungen fehlen, zum anderen weil viele gewichtige Quests zu einfach zu erreichen sind.
Ich spiele wie üblich einen Magierdieb, weniger wie üblich war das viel zu einfach. Oblivion war mit dem Auto-Levelling unspielbar, auch Skyrim brauchte jetzt wieder einen Mod.
Von den Veränderungen am Rollenspielsystem mag ich das Perksystem, dass bei Levelaufstieg in Fähigkeitsbäumen je nach Fähigkeitslevel unterschiedliche Boni freigeschaltet werden. Meinen Magierdieb kann ich so gut spezialisieren, und zusammen mit dem Rebalancing-Mod wurde das auch schnell nötig. Trotzdem hätte ich noch gerne Attribute gehabt, deren Wegfall scheint mit völlig unnötig.
Was mich überrascht hat war, wie beschissen das Spiel anfangs aussah. Nicht alles davon ist mit dem Alter zu erklären, nicht alles durch hochauflösende Texturenmods einfach zu fixen. Die Schatten zum Beispiel sind einfach kaputt, und man muss immer noch manuell die .ini anpassen um sie nicht grobklötzig und flickernd zu haben, und trotzdem noch wandern sie im Sonnenverlauf ruckartig und das Gras sieht seltsam aus, was auch an falschen Schattenberechnungen liegen dürfte.
Inzwischen habe ich es so weit, dass nur noch bestimmte Stellen (besonders: Lichtreflexionen auf Metalltüren) wirklich schlecht aussehen, mit den Mods wird es hübsch. Trotzdem bleiben viele Schlampereien – so ist Skyrim ein Spiel mit Fokus auf kalte Gegenden mit Schnee und Bergen, in dem der Schnee unecht aussieht und es keine Fußspuren gibt. Beides kann per Mods gefixt werden, beides hätte nie kaputt sein sollen. Gleiches gilt für das Inventar, das für den PC absolut ungeeignet und nur per Mod erträglich ist.
Ich bin im Fazit also gespalten. Ich habe es jetzt lange genug gespielt und dabei auch Spaß gehabt, sodass sich der Kauf gelohnt hat. In die Reihe der Openworld-Rollenspiele bringt es Verbesserungen, ich will auch schlicht diesen Teil der TES-Saga nicht verpassen. Trotzdem sind die Macken gewichtig genug, dass ich sehr zufrieden damit bin lange gewartet und nicht viel Geld für dieses Spiel ausgegeben zu haben.
Jahresrücklick 2015
Sunday, 20. December 2015
Mein zweites Jahr in Frankreich, mein zweites Jahr im PhD, das 8. Jahr dieses Blogs. Weil ich sonst nie dazu komme, fasse ich dieses Jahr mal etwas verfrüht zusammen was sich alles getan hat.
Projekte
Anfang des Jahres haben wir Serendipity 2.0 veröffentlicht. Das läuft seitdem ziemlich ruhig vor sich hin. Ich bin immer noch stolz über die Verbesserungen die wir damit geschaffen haben. Die anderen Leute des Projekts danach auf dem Serendipity-Treffen kennenzulernen war toll.
Meine eigene Blogengine habe ich von dsnblog in ursprung umbenannt, dsnblog (distributed social network blog) passte nicht mehr zu den Zielen (einfach eine gute Blogsoftware zu sein). Als ich auf Hackernews versuchte die Software zu zeigen, wurde ursprung erst völlig ignoriert. Vor ein paar Tagen wurde ich dann aufgefordert, es nochmal neu zu versuchen, und diesmal gab es Upvotes, Kommentare und einige Sterne auf Github. Sehr nett.
Für ursprung hatte ich vorher eine Vorstellungsseite gebastelt, nachdem ich das zuvor schon für feedtragón gemacht hatte. Feedtragón hatte ich am Anfang des Jahres weiter fertiggestellt, es fehlte nicht mehr viel. Das Jahr über war dies dann auch mein Feedreader, von einer kurzen Auszeit abgesehen.
Izulu hat wie die beiden anderen Projekte eine neue Projektseite und ein neues Release bekommen.
Große Bewegung gab es bei meinem Hardwareempfehler pc-kombo. Den hatte ich im März vervollständigt, sodass ab dann alle Bestandteile eines PCs berücksichtigt wurden. Später entdeckte ich mit /r/buildapc und /r/buildapcforme zwei Subreddits, für welche die Software perfekt passte. Im Sommer generierte die Seite sogar ordentlich Einnahmen, später beruhigte sich dann leider wieder. Trotzdem: Dass nach so langer Zeit stiller Entwicklung sich die Seite vor Nutzern bewähren konnte und aktiv genutzt wurde und wird war ein Riesenerfolg für mich und freute mich wirklich sehr.
Spiele
Meiner Selbstwahrnehmung zufolge spiele ich kaum noch. Dann schaue ich mir die gespielten Spiele an und darf feststellen, dass es so wenig gar nicht wahr – und dabei fehlt sicher einiges im Blog.
Ein shooterlastiges Jahr, besonders der Anfang. Hitman: Blood Money stand am Ende des letzten Jahres, und dieses tolle Spiel motivierte mich überhaupt erst dazu wieder etwas mehr zu spielen. Mit Spec Ops: The Line folgte dann direkt ein großartiges Spiel, über dessen Linearität ich mich aber auch etwas ärgerte. Bioshock Infinite spielte dann wie Spec Ops ziemlich auf der Meta-Ebene und mit der gleichen erzählerischen Macke, aber mit Elizabeth lieferte es auch einen Meilenstein.
The Darkness 2 war noch ein Shooter, Van Helsing dann endlich etwas anderes (und ein überraschend gutes Spiel), Shadow Warrior noch ein Shooter, unter Linux und sehr ähnlich zu The Darkess. Vor dem Urlaub gingen ein paar Stunden für Mount & Blade: Warband drauf, wieder bin ich nicht König aller Könige geworden bevor mich andere Spiele banden. Mark of the Ninja war davon nicht das letzte, inzwischen habe ich noch Skyrim angefangen.
Über Batman (Asylum und Arkham City) habe ich nicht geschrieben, mit dem zweiten Teil bin ich gar nicht warm geworden, aber auch Asylum gefiel mir nicht richtig – vom Spiel her etwas für Kinder, von der Inszenierung dafür aber zu düster. Planetside 2 hatte ich zwischendurch wieder angeschaut und einen Medic aufgebaut, Spaß gehabt, mich aber auch über die Pay2Win-Features geärgert und es bald wieder beiseite gelegt. Für League of Legends reichte die Zeit dann wirklich nicht, da ist es aber auch schmerzhaft, wieviel Praxis mir fehlt und was sich nach der (teils durch schlechtes Internet erzwungenen) Auszeit alles geändert hat. In Kerbal gab es noch ein paar Raketenstarts.
Musik
Ibrahim Maalouf, Diagnostic. Anfang oder Mitte des Jahres von einem Kollegen empfohlen bekommen und toll gefunden. Aber inzwischen finde ich es als Album nach dem melodischen Anfangs schwierig zu hören, besonders das Stück Diagnostic selbst.
Ratatat à la Route du Rock und das zugehörige Album dagegen kann ich immer noch rauf und runter hören. Großartiges Konzert und großartige Musik, die aber auch verdammt gut mitten in meine Musikhistorie passt. Stolperte ich bei ben drüber.
Software & Infrastruktur
Syncthing ersetzte Dropbox und damit freie Software proprietäre, wobei der reparierte Pogo als Heimserver das erst möglich machte.
Die Radeon HD 7850 konnte ich mit einer wassergekühlten 7950 ersetzen. Wasserkühlung war nicht der Plan, ich wollte ursprünglich nur ein bessere Grafikkarte um den Kühler auswechseln zu können, ohne das Geld in eine zu schwache Karte zu stecken. Ein leiserer PC sollte es sein. Die Wasserkühlung (Corsair H90) war dann ohne weitere Änderungen leise genug.
Kleine Entdeckung des Jahres waren ergonomische Mäuse. Meine Hand machte mir Probleme, zwei verschiedene ergonomische Mäuse (eine für Zuhause, eine für die Uni) halfen. Darüber schreib ich nochmal gesondert.
Normalerweise ist eine neue Maus keine große Änderung, ich aber hatte seit meinem ersten eigenen PC eine Logitech MX 500 genutzt.
Sichtbarere Neuerung war das Lightpack; LEDs für den Monitor, die je nach Bildschirminhalt die Farben ändern. Gefällt mir immer noch gut.
Arbeit
Ich durfte auf der Konferenz Communities & Technologies 2015 eine Studie präsentieren, das heißt sie kam durchs Peer-Review und wurde danach veröffentlicht (ohne Schranke hier). War wichtig für mich, mit Lerne die Sprache war Habe eine Veröffentlichung mein von mir gesetztes Minimalziel für das Doktorat.
Lieblingsfoto des Jahres
Chichen Itza in Mexiko, schlechte Handykamera aber tolles Licht:
Mochte aber auch schlicht den Urlaub dort.
Ausblick 2016
Das nächste Jahr könnte wichtig werden. Laut Plan schreibe ich die Doktorarbeit und habe Ende des Jahres die Verteidigung. Schon bald müsste ich einen Job für danach suchen.
Für Serendipity wird es hoffentlich eine neue Webseite geben. Und das nächste Treffen ist für den April geplant, Gäste sind immer noch willkommen.
Von meinen eigenen Projekten würde ich vor allem gerne pc-kombo weiterentwickeln und bekannter machen. Doch wenn ursprung und feedtragón Nutzer oder gar Mitentwickler finden wäre das ebenfalls hochwillkommen.
Bis bald
Damit verabschiede ich mich auch in den Weihnachtsurlaub, zumindest auf Blogseite. Ich wünsche ein frohes Fest und einen guten Rutsch, hoffe ihr hattet ein gutes Jahr, und dass man sich im nächsten wieder liest und sieht.
Featurebeschreibung für die neue Serendipity-Seite
Sunday, 13. December 2015
Auch ein Experiment: Für einen kleinen Teil der neuen Webseite für Serendipity fragen wir im Forum nach Rückmeldung. Es geht um den Abschnitt der Seite, der die Funktionen und Eigenschaften von Serendipity präsentieren soll. Da schwanken wir zwischen zwei Designs, die beide ihre Vor- und Nachteile haben: Einmal ein Design mit Icons und mehrspaltigen Text, und einmal ein Design mit Screenshots und mehrspaltigen Text.
Nicht jeder Block, nicht jeder Aspekt der Seite soll so entschieden werden. Hier aber erhoffe ich mir von der Abstimmung sowas wie eine Bauchentscheidung zwischen zwei Möglichkeiten, die wohl beide nicht verkehrt sind.
Alle Screenshots und die Auswahl der Blogs im mittleren Abschnitt sind rein vorläufig und mit niemanden abgesprochen.
No-Offset Pagination in ursprung
Thursday, 3. December 2015
Die schnellere Pagination ohne Offset habe ich inzwischen wirklich für ursprung umgesetzt. Das war letzten Endes einige Arbeit.
Statt einem Link wie archive/older=datum
sollte es dann doch wieder ein Link mit Seitenzahl sein, also archive/2
für Seite 2. Also brauchte das System eine Liste, um Seitenzahlen auf eine Datumsangaben zu mappen. Außerdem muss das System sich merken, welcher Eintrag bereits in der Pagination berücksichtigt ist. Denn immer dann, wenn die neu erstellt wird (bei jedem Löschen eines Eintrags) muss dies gezählt werden, statt einfach nur die Anzahl insgesamt vorhandener Einträge zu zählen.
Die Kernfunktion ist das Hinzufügen eine Seite zur Pagination und deren Anpassung:
# Add the page to the precomputed mapping of page to entry date, to enable the no offset pagination # This also has to take care of shrinking the buffer (the second archive page, n -1), so that all other archive pages remain stable def addToPagination(entry:) limit = 5 # the tag can't just be nil, because in sqlite3 INSERT OR REPLACE on shared primary keys detects ('abc', NULL) and ('abc', NULL) not as a conflict tags = entry.tags.empty? ? [self.NOTAG] : (entry.tags << self.NOTAG) tags.each do |tag| totalPages, totalEntries = self.getTotalPages(limit, tag) totalEntries += 1 # the current entry is not already counted by that function page = (totalEntries > 1 && totalEntries % limit == 1) ? totalPages + 1 : totalPages # start date of n is now entry.date @@db.execute("INSERT OR REPLACE INTO pagination(page, tag, startDate) VALUES(?, ?, ?)", page, tag, entry.date) if totalEntries > limit # now the start second archive page, the shrinking and growing buffer, has to be set as well tagSQL = tag == self.NOTAG ? "" : "AND id IN (SELECT entryId FROM tags WHERE tag = '#{SQLite3::Database.quote(tag)}')" bufferStart = @@db.execute("SELECT date FROM entries WHERE date < (SELECT startDate FROM pagination WHERE page = ? AND tag = ?) #{tagSQL} ORDER BY date DESC LIMIT ?", page, tag, limit).last['date'] @@db.execute("INSERT OR REPLACE INTO pagination(page, tag, startDate) VALUES(?, ?, ?)", page - 1, tag, bufferStart) if (totalEntries > (limit * 2)) && (totalEntries % limit == 1) # if we have more than two pages and the buffer just overgrew, we can set it back to 1 and move the full amount of entries to a stable page bufferEnd = @@db.execute("SELECT date FROM entries WHERE date < (SELECT startDate FROM pagination WHERE page = ? AND tag = ?) #{tagSQL} ORDER BY date DESC LIMIT ?", page - 1, tag, 1).last['date'] # this will never be changed again @@db.execute("INSERT OR REPLACE INTO pagination(page, tag, startDate) VALUES(?, ?, ?)", page - 2, tag, bufferEnd) end end end @@db.execute("UPDATE entries SET paginated = 1 WHERE id = ?", entry.id) end
Schließlich hat es aber durchaus funktioniert. Das Aufrufen einer Archivseite in einem vollen Blog ist schneller geworden, ohne dass sich für den Nutzer etwas geändert hätte. Es fehlt nur noch ein schlaueres Vorgehen beim Löschen eines Eintrags, dass die Pagination angepasst wird statt sie zu löschen und neu zu erstellen.
Wobei ich das Gefühl nicht loswerde, dass meine Implementation unnötig kompliziert ist.
Frauenparkplatz
Friday, 27. November 2015
No-Offset Pagination für Blogsysteme
Wednesday, 25. November 2015
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
Sunday, 22. November 2015
*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.