Fryboyter

Slug aus URL mit htaccess entfernen

Normalerweise haben die Links auf Artikel mit Bolt CMS den Aufbau https://fryboyter.de/entry/Titel-des-Artikels. Die habe ich mittels der Routingfunktion auf https://fryboyter.de/Titel-des-Artikels umgebogen. Soweit so gut.

Zum Erzeugen des kompletten RSS-Feeds nutze ich allerdings die Erweiterung bolt-extension-rssfeed. In dieser ist die URL dann allerdings wieder https://fryboyter.de/entries/Titel-des-Artikels. An sich kein Problem, da die Artikel mit und ohne /entries aufgerufen werden können. Wäre da nicht Isso Comment.

Isso Comment verknüpft die Kommentare und Artikel anhand des Titels. Und da ist der mit /entries eben ein andere als ohne. Ruft nun jemand einen Artikel über den globalen RSS-Feed auf und gibt einen Kommentar ab, wird die URL mit /entries in der Isso-Datenbank gespeichert. Da ich aber eben die Artikel dank des Routings ohne /entries veröffentliche tauchen die Kommentare somit auch nicht auf, so dass ich hier immer in der SQLite-Datenbank herumpfuschen muss. An sich kein Problem es nervt aber trotzdem.

Im Template für den RSS-Feed oben genannter Erweiterung gibt es folgende Codezeile.

<link>{{ url('contentlink', { 'contenttypeslug': record.contenttype.singular_slug, 'slug': record.slug } ) }}</link>

In meinem nicht mehr ganz so jugendlichen Leichtsinn habe ich mir gedacht es reich hier einfach 'contenttypeslug': record.contenttype.singular_slug, zu entfernen. Pustekuchen. Sobald man versucht den Feed aufzurufen bekommt man eine unschöne Fehlermeldung. Zum einen reichen meine Programmierkenntnisse hier definitiv nicht aus, dass Problem zu lösen und zum anderen müsste ich nach jedem Update der Erweiterung diese anpassen. Also muss, zumindest vorübergehend, eine andere Lösung her.

Schlussendlich habe ich einfach die .htaccess-Datei für Bolt CMS angepasst. In dieser haben ich den Bereich <IfModule mod_rewrite.c> gesucht und in diesem folgende Zeile eingetragen.

RewriteRule ^entrie/(.+)$ https://fryboyter.de/$1 [R=301,L]

Abschließend noch den Cache von Bolt CMS gelöscht und fertig. Ruft nun jemand einen Link mit /entrie/ auf, wird er automatisch auf die Version ohne /entrie/ umgeleitet. Ich denke das ist derzeit die beste Lösung mit der ich nicht an der Erweiterung herumpfuschen muss.


Kopieren und Verschieben mit Fortschrittsanzeige

Heute morgen hatte ich eine Datei mit 35 Gigabyte kopiert. Nach ein paar Minuten war ich mir unsicher ob der Vorgang noch läuft oder eventuell hängen geblieben ist. Hier wäre mir eine Fortschritsanzeige recht lieb gewesen.

Der Befehl cp bietet diese Funktion leider nicht an, und da er als "feature complete" gilt wird er es auch nie. Nach etwas Google Fu habe ich neben rsync das Projekt pycp gefunden. In diesem sind die Befehle pycp und pymv enthalten. Erster ist ein Ersatz für cp und zweiter für mv. Und alle beide bieten eine Anzeige für den Fortschritt, die Datenübertragungsrate und die geschätzte verbleibende Zeit. Das ganze sieht dann beispielsweise wie folgt aus. Anstelle von pycp kann man auch pymv nutzen um Dateien zu verschieben.

pycp Screenshot

Natürlich kann man das auch mit Konstrukten wie cp "file" "destination" && pv $(pidof cp) oder rsync -avP <Quelle> <Ziel> arbeiten. Aber pycp große_datei ~/Downloads ist mir einfach lieber. Hier siegt die Faulheit und ich installiere mir lieber ein Tool mehr auf den Rechner.


Tannenberg - Willkommen im Ersten Weltkrieg

Eigentlich lasse ich von Early-Access-Spielen die Finger. Eigentlich. Letztes Wochenende habe ich aber diese Regel mal wieder gebrochen und mit neben Battalion 1944 auch Tannenberg gekauft. Letzteres läuft direkt unter Linux.

Tannenberg ist an der Ostfront im Ersten Weltkrieg angesiedelt. Hauptsächlich spielt man den Modus "Maneuver". Hier ist das Spielprinzip recht einfach. Es gibt mehrere Karten die in diverse Sektoren unterteilt sind. Zwei Teams mit insgesamt maximal 64 Spielern (bei Bedarf werden diese von Bots aufgefüllt) versuchen nun diese Sektoren zu erobern und zu halten. Klingt einfach? Ist es aber nicht.

Im Gegensatz zu anderen Shootern beißt man in der Regel nach einem Treffer ins Gras. Vor allem als Neueinsteiger kann dies richtig nerven da man während einer Runde teilweise mehr stirbt als bei einer Lanparty an einem ganzen Wochenende. Der Umgang mit den Waffen erfordert auch etwas Einarbeitungszeit. Scheinbar waren diese im Ersten Weltkrieg nicht gerade präziese und das haben die Entwickler wohl berücksichtigt. Zudem sind die Magazine oft sehr klein und das Nachladen dauert oft ewig. Wäre dies nicht schon genug Stress, kommen dann noch so nette Sachen wie Mörser- und Giftgasangriffe dazwischen. Für letzteres kann man sich zwar mit einer Gasmaske schützen, allerdings kann man sich diese oft nicht schnell genug aufsetzen. Kurz gesagt man stirbt schnell und oft und steht eigentlich immer unter Strom. Normalerweise würde ich daher die Finger von dem Spiel lassen. Aber irgendwie hat es mich am vergangenen Samstag mehrere Stunden gefesselt.

Aber trotzdem merkt man deutlich, dass es ein Early-Access-Spiel ist. Mit der Grafik lässt sich kein Preis gewinnen (vermutlich auch nicht wenn das Spiel fertig ist), trotzdem entsteht  eine gute Athmosphäre. Die Vertonung hingegen finde ich sehr gelungen. Die Übersetzung der Texte zumindest die in die deutsche Sprache ist, sagen wir mal unfertig, bringt aber auch etwas Witz ins Spiel (z. B. auf einen Kontrollpunkt klicken um zu laichen). Die Hardwareanforderungen sind alles in allem nicht gerade hoch. Empfohlen werden 8 GB RAM und eine Grafikkarte mit 4 GB.

Von den Spielern wurde ich, bis auf wenige Ausnahmen, sehr positiv überrascht. Alles in allem ein freundlicher Haufen, der sich auch nicht zu schade ist einzelnen Spielern oder allgemein dem gegnerischen Team zu gratulieren. Der Versuch mancher mit zum Beispiel mit einem preußischen Dialekt zu sprechen, hat auch für einige Lacher gesorgt. Vor allem wenn diese der deutschen Sprache kein Stück mächtig sind.

Muss man nun Tannenberg unbedingt spielen? Sicher nicht. Ich bereue es aber auch nicht, knapp 18 Euro dafür bezahlt zu haben und werde am Wochenende sicher wieder ein paar Runden spielen. Wer sich für das Spiel interessiert kann sich die offizielle Seite bzw. die Seite bei Steam anschauen.


Wörterliste für Diceware erstellen

Bei Diceware handelt es sich um ein Verfahren mit dem man lange, aber leichter zu merkende Passwörter erstellen kann. Hierzu braucht man einen Würfel und eine Liste mit Wörtern.

In dieser Liste findet man pro Zeile ein Wort dem eine fünfstellige, einzigartige Zahl vorangestellt ist. Will man nun zum Beispiel ein Passwort aus 5 Wörtern erstellen, muss man pro Wort 5 mal würfeln. Also insgesamt 25 mal. Am Ende hat man dann beispielsweise 54678 29412 37783 79381 erwürfelt. Nun schnappt man sich besagte Liste und sucht die betreffenden Wörter. Somit könnte beispielsweise DachsPlastikrodelnEinkaufFluss herauskommen. Wichtig hierbei ist, dass man die Wörter nicht neu würfelt oder sich eigene Wörter ausdenkt, wenn man mit dem Ergebnis nicht zufrieden ist.

Im Internet gibt es diverse Wörterlisten für Diceware. Zum Beispiel unter http://world.std.com/~reinhold/diceware.html. Diese ist aber inzwischen so bekannt, dass sie vermutlich schon von Crackern benutzt wird und zum anderen sind dort "nur" knapp 7800 Wörter enthalten.

Nehmen wir nun an, man trifft im Internet die Aussage, dass man Diceware nutzt. Somit steht die Chance für die bösen Buben nicht schlecht, dass man die offizielle Liste mit den Wörtern nutzt. Dies macht die Aufgabe das Passwort zu knacken schon etwas einfacher. Daher wäre eine eigene Liste wohl nicht verkehrt. Dies kann man mit folgendem Script erledigen.

wget "https://www.openthesaurus.de/export/OpenThesaurus-Textversion.zip"
wait
unzip OpenThesaurus-Textversion.zip
wait
grep -v '^#' openthesaurus.txt | \
tr ';' '\n' | \
tr [ÄÖÜ] [äöü] | \
grep  -v '[^[:alnum:] _]' | \
grep -v '[0-9]' | \
grep -v ' ' | \
grep -E '^.{3,8}$' | \
sort -uR | \
head -n 10000 | \
sort | \
nl -n rz -v 0 -w 4 > 'wordlist_de.txt'

Das Script macht zusammengefasst folgendes:

  • Herunterladen und Entpacken der OpenThesaurus-Textversion (deutlich mehr als 7800 Worte)
  • Je einen Eintrag in jeweils eine Zeile packen
  • Filtern der Einträge mit Umlaute, Unterstrich oder Zahlen sowie Einträge die aus mehreren Wörtern bestehen
  • Entfernen aller Wörter mit weniger als 3 und mehr als 8 Zeichen
  • Entfernen eventueller doppelter Einträge
  • Zufällige Sortierung der restlichen Einträge
  • Übernahme der ersten 10000 Einträge
  • Alphabetische Sortierung dieser Einträge
  • Nummerrierung der Einträge und das Abspeichern in die Datei "wordlist_de.txt"

Anhand dieser Liste lässt sich nun mittels eines Würfels ein Passwort aus einem großeren Pool an Wörtern erstellen. Wer hierzu keine Lust hat, kann auch Tools diceware nutzen. Diese kommen mit oben erstellter Liste auch zurecht. Es ist allerdings zu empfehlen wirklich selbst zu würfeln. Was die Anzahl der Wörter betrifft, sollte man aktuell mindestens 6 Wörter würfeln. Mehr sind natürlich besser. Wer will kann zwischen die Wörter noch ein Sonderzeichen oder ein Leerzeichen einfügen. Das erhöht die Sicherheit noch einmal.


Fünf Millionen für das Matrix-Protokoll

Bei Matrix handelt es ich um ein offenes Protokoll mit dem mittels Text, Sprache und Video kommuniziert werden kann. Aufgrund der Brücken in diverse andere Netzwerke wie IRC oder Slack halte ich Matrix für sehr vielversprechend. Allerdings sah vor ein paar Monaten die finanzielle Situation nicht wirklich gut aus.

Dank diverser Spenden konnte aber zumindest erreicht werden, dass das Team der Hauptenwickler weiter bezahlt werden konnte. Nun hat Matthew Hodgson, Mitbegründer von Matrix, bekannt gegeben, dass das Unternehmen Status 5 Millionen Dollar zur Verfügung stellt und eine Partnerschaft mit Matrix eingeht. Somit ist erst einmal die Weiterentwicklung von Matrix gesichert und es werden wohl auch noch einige Entwickler eingestellt werden. Spenden werden aber dennoch gerne angenommen. Eines der Ziele ist es daher auch die Matrix.org Foundation als non-profit Organisation zu etablieren. 

Mit der Partnerschaft von Matrix und Status wurden folgende gemeinsame Ziele gesteckt.

  • Brücke zwischen Matrix und Whisper (dem Protokoll von Ethereum)
  • Die Unterstützung von Olm/Megolm in Status
  • Gemeinsame Entwicklung des dezentralisiertem Reputationssystem für Matrix & Ethereum
  • Usw.

Bei Matrix an sich soll nun folgendes mit hoher Priorität umgesetzt werden.

  • Die Nutzbarkeit des Referenz-Client Riot soll verbessert werden
  • Die Ende-zu-Ende-Verschlüsselung soll den Beta-Status verlassen
  • Die Fertigstellung von Dendrite (Matrix-Server auf Basis von golang)
  • Verbesserung von Synapse (aktueller Referenz-Server)
  • Die Wartung / Aktualisierung der Spezifikationen von Matrix

Weitere Ziele mit einer niedrigeren Priorität sind zum Beispiel Matrix auf Basis von P2P, dezentralisierte Benutzerkonten, das Ändern von Nachrichten und noch einiges mehr.