Fryboyter

Version 0.13.0 des Kommetarsystems Isso veröffentlicht

Bei Isso handelt es ich um ein auf Python basierendes Kommentarsystem, dass man selbst hosten kann, sodass die Kommentare der Nutzer nicht auf Server Dritter gespeichert werden.

Isso hatte lange Zeit zwei Probleme. Zum einen verlief die Entwicklung teilweise etwas schleppend. Und zum anderen, was das größere Problem war, konnte nur eine Person neue Versionen veröffentlichen. Und diese hatte, und hat vermutlich weiterhin, im echten Leben sehr viel zu tun.

Das hat sich seit Version 0.12.6 geändert. Neue Entwickler beteiligen sich und die nötigen Rechte um neue Versionen zu veröffentlichen sind vorhanden. Daher wurde vor etwas weniger als 24 Stunden die Version 0.13.0 veröffentlicht. Die Änderungen sind ziemlich unfangreich und können unter https://isso-comments.de/news/#isso-version-0-13-0-released nachgelesen werden.

Weiterhin ist Isso nun über https://isso-comments.de erreichbar und soll als Gemeinschaftsprojekt weitergeführt werden.

Ich habe die Isso-Instanz, die ich auf fryboyter.de nutze, bereits auf Version 0.13.0 aktualisiert. Ich musste lediglich nachträglich die CSS-Datei aktualisieren, da diese grundlegend von den Isso-Entwicklern überholt wurde.

OSBN

Kommentarfunktion Isso unter Hugo deaktivieren 2.0

2019 hatte ich bereits einen Artikel veröffentlicht, wie man das Kommentarsystem Isso für bestimmte Artikel unter Hugo deaktiviert. Hierbei wurde aber nur der Code entfernt der für das Anlegen neuer Kommentare und das Anzeigen vorhandener Kommentare zuständig ist. Im Hintergrund wurde beispielsweise die JavaScript-Datei “embed.min.js” weiterhin geladen. Auch wenn diese nur ca. 25 kB groß ist (was einen Großteil von https://fryboyter.de ausmacht), bin ich mit der Lösung unzufrieden.

Da ich aktuell privat etwas Zeit habe, und ich diese Funktion demnächst wohl öfter nutzen werde, habe ich mir eine bessere Lösung überlegt.

Als Erstes habe ich mir die Datei single.html vorgenommen. Diese ist für das Anzeigen von einzelnen Artikeln zuständig. Den betreffenden Code habe ich wie folgt geändert.

{{ if and ( isset .Params "nocomments" ) ( eq .Params.nocomments true ) -}}
    <p>Die Kommentarfunktion ist für diesen Artikel deaktiviert</p>
{{ else }}
    <section id="isso-thread" data-title="{{ .Title }}"></section>
	<noscript>
		<p>Die Kommentarfunktion kann nur mit aktiviertem Javascript genutzt werden</p>
	</noscript>
{{ end }}	

Wichtig ist hier im Grunde genommen die erste Zeile. Damit wird geprüft, ob im Front-Matter-Bereich des jeweiligen Artikels die Zeile nocomments: vorhanden ist und ob diese den Wert true hat. Wenn ja, wird der Hinweis angezeigt, dass die Kommentarfunktion für diese Artikel deaktiviert ist. Wenn nicht, wird der Code eingetragen, mit dem man als Nutzer neue Kommentare erzeugen kann und vorhandene Kommentare anzeigt. Also im Grunde genommen, was im Artikel von 2019 beschrieben wurde.

Als Nächstes habe ich die Datei metadata.html angepasst. Diese erzeugt die Zeile direkt unter dem Titel des Artikels, in der bisher unter anderem die Anzahl der Kommentare angezeigt wird. Was bei einer deaktivierten Kommentarfunktion nicht wirklich nötig ist.

{{ if or (not ( isset .Params "nocomments" )) ( ne .Params.nocomments true ) -}} | <a href="{{ .Permalink }}#isso-thread">Comments</a>{{ end }}

Hiermit wird geprüft, ob die Zeile nocomments: nicht hinterlegt ist oder wenn doch, ob dessen Wert nicht true entspricht. Wenn eines der beiden zutrifft, wird der Code für die Anzahl der vorhandenen Kommentare angezeigt. Den Code habe ich bewusst etwas verkompliziert, da ich verhindern wollte, dass beispielsweise nocomments: treu unabsichtlich dazu führt, dass die Kommentare deaktiviert werden. Wer hierfür eine bessere Lösung hat, die weniger Code benötigt, kann sich gerne melden. Oder einfach einen Pull Request erstellen. Denn an der Stelle zeigt es sich, dass ich nicht wirklich programmieren kann.

Abschließend ist die Datei head.html an der Reihe.

{{ if or (not ( isset .Params "nocomments" )) ( ne .Params.nocomments true ) -}}
	<script data-isso="https://isso.fryboyter.de/" data-isso-feed="true" data-isso-css="false"
		data-isso-lang="{{.Site.Language.Lang }}" data-isso-max-comments-top="inf" data-isso-max-comments-nested="inf"
		data-isso-vote="false" data-isso-reply-notifications="true"
		src="https://isso.fryboyter.de/js/embed.min.js"></script>
	{{ end }}

Hier kommt unterm Strich die gleiche Abfrage wie für metadata.html zum Einsatz. Nur das in diesem Fall nicht die Anzeige der vorhandenen Kommentare ausgeblendet wird, sondern die Datei embed.min.js geladen wird oder eben nicht.

Das ganze Changeset kann man sich unter https://github.com/Fryboyter/Hugo/commit/5dfb4459aa7f9c8b08a21a9568d775808e290b49 ansehen.

Warum nun diese Änderung? Im Grunde aus zwei Gründen.

Zum einen schalte ich bereits jetzt weniger als 80 Prozent der Kommentare frei, da viele Kommentare nur SEO-Spam oder Kommentare sind, die nicht weiterhelfen. Daher auch die manuelle Freischaltung der Kommentare.

Das größere Problem ist aber, dass ich oft keine Lust oder Zeit habe Kommentare zeitnah freizuschalten, sodass diese oft Tage oder gar Wochen nicht angezeigt werden. Das nützt daher weder den Nutzern noch mir etwas. Daher verzichte ich im Zweifelsfall zukünftig lieber auf Kommentare Dritter.

OSBN | Allgemein

Isso in Go

Isso ist aktuell mein bevorzugtes Kommentarsystem für Internetseiten, da man hierfür nur eine SQLite-Datenbank benötigt. Leider war die Installation in der Vergangenheit oft etwas problematisch. Aktuell ist wohl eine Installation über PyPI gar nicht bzw. nur über Umwege möglich (https://github.com/posativ/isso/issues/617).

Durch Zufall bin ich heute bei Github auf go-isso gestoßen. Der Entwickler möchte eine API kompatible Alternative zu Isso anbieten, für die er die Programmiersprache Go nutzt. Somit braucht man im besten Fall nach Veröffentlichung einer neuen Version nur eine einzelne Datei herunterladen und ausführen. Bei Hugo klappt das zumindest sehr gut.

Der Entwickler weist aber aktuell darauf hin, das go-isso noch mit Vorsicht zu genießen ist, da es sich um sein erstes Projekt mit Go handelt, sodass der Code vermutlich qualitative Verbesserungen vertragen kann. Bugs sind ebenfalls nicht ausgeschlossen. Kurz gesagt, Benutzung auf eigene Gefahr.

Vielleicht hat ja der eine oder andere Leser dieses Artikels Lust und Zeit, sich an go-isso zu beteiligen. Gesucht werden auch Leute die sich mit Javascript auskennen. Da ich weder das eine noch das andere beherrsche, werde ich wohl selbst nur testen und ggf. Bugs melden.

OSBN | General

IP-Nummer in der Isso-Datenbank nach 7 Tagen anonymisieren

Martin von blog.mdosch.de hat vor einiger Zeit einen Artikel veröffentlicht, in dem er gezeigt hat, wie man die in der Datenbank von Isso gespeicherten IP-Nummern der Kommentare anonymisiert, indem man diese einmal wöchentlich mit 127.0.0.1 überschreibt.

Den Befehl (Update comments set remote_addr = “127.0.0.1”;) habe ich damals für meine Isso-Instanz übernommen. Am Wochenende hatte ich mir mal wieder meine diversen Konfigurationen und Dokumentationen angesehen und bin auch auf besagten Befehl gestoßen. Hierbei habe ich mir überlegt, was ist, wenn jemand die IP-Nummer jedes einzelnen Eintrags für beispielsweise 7 Tage aufbewahren will oder muss? Denn das klappt mit dem Befehl nicht wirklich.

Denn nehmen wir mal an, der Cronjob der den Befehl ausführt wird immer am Sonntag um 15 Uhr gestartet. Schreibt nun jemand um 14 Uhr einen Kommentar, wird dessen IP-Nummer in der Datenbank trotzdem um 15 Uhr mit 127.0.0.1 überschrieben.

Ich habe mir daher einmal die Datenbank von Isso genauer angesehen. In der Tabelle comments gibt es die Spalte created. In dieser ist pro Kommentar ein Wert wie 1369140347.0 vorhanden. Hierbei handelt es sich um die sogenannte Unixzeit die angibt wie viele Sekunden seit dem 01. Januar 1970, 00:00 UTC vergangen sind. Die Verwendung dieser Zeitrechnung ist in Datenbanken weit verbreitet, aber für den Menschen quasi nicht lesbar und nicht im Kopf umrechenbar.

Ich habe mir daher erst einmal eine Ausgabe erstellt die mir den Timestamp, den Timestamp in einer für Menschen lesbaren Forum sowie den jeweiligen Kommentar anzeigt.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments;

Somit sehe ich bei weiteren Tests wie alt die Kommentare tatsächlich sind.

Als Nächstes habe ich den Befehl so erweitert, dass nur die Kommentare angezeigt werden, die 7 Tage alt sind.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments
WHERE created > strftime("%s", "now", "-7 days");

Hiermit wird der aktuelle Zeitpunkt abzüglich 7 Tage berechnet und verglichen, ob der Wert in created größer als dieser Wert ist.

Hierbei werden allerdings auch die Kommentare angezeigt bei denen die IP-Adresse in der Spalte remote_addr bereits auf 127.0.0.1 geändert wurde. Da es unnötig ist jedes Mal den Wert mit dem gleichen Wert zu überschreiben, habe ich den Befehl nun noch einmal um eine Bedingung erweitert, bei der nur die Einträge angezeigt werden bei denen bei remote_address etwas anderes als 127.0.0.1 eingetragen ist.

SELECT created, strftime('%d-%m-%Y %H:%M:%f', datetime(created, 'unixepoch')) as createdhr, text 
FROM comments
WHERE created > strftime("%s", "now", "-7 days")
AND NOT remote_addr = '127.0.0.1';

Nachdem ich mir nach ein paar Tests ziemlich sicher bin, dass es funktioniert habe ich den Befehl so geändert, dass er mir die betreffenden Einträge nicht anzeigt, sondern bei diesen die IP-Nummern mit 127.0.0.1 überschreibt.

Update comments set remote_addr = "127.0.0.1"
WHERE created > strftime("%s", "now", "-7 days")
AND NOT remote_addr = '127.0.0.1';

Nun kann man den Befehl mittels eines Cronjobs täglich ausführen. Hierbei sollte man allerdings berücksichtigen, dass die Berechnung des Alters nicht absolut genau ist, so das manche Kommentare unter Umständen erst nach 7,x der 8 Tagen berücksichtigt werden. Hier dürfte es helfen den Cronjob so zu konfigurieren, dass er mehrmals pro Tag ausgeführt wird. Wer in seiner Datenbank noch Einträge mit einer richtigen IP-Nummer hat die älter als 7 Tage sind, sollte den Befehl einmalig manuell ausführen und anstelle von “-7 days” einen entsprechend höheren Wert eintragen, sodass alle Kommentare berücksichtigt werden.

Wer sich genauer informieren will, was zum Beispiel strftime oder datetime genau macht, kann dies zum Beispiel unter https://www.sqlite.org/lang_datefunc.html tun.

OSBN | General

Kommentarfunktion Isso unter Hugo deaktivieren

hinweis
Zwischenzeitlich wurde ein Artikel mit einer besseren Lösung veröffentlicht.

Ein Bekannter von mir nutzt für seine Internetseite ein selbst (schlecht) programmierte Lösung. Er hat sich nun selbst für eine Kombination aus Hugo und Isso entschieden. Allerdings stört es ihn, dass man die Kommentarfunktion nicht deaktivieren kann.

Daher hat er mich nach einer Alternative für Isso gefragt. Da ich aber keine Erfahrungen mit anderen Kommentarfunktionen habe, habe ich mir überlegt, wie man Isso trotzdem für einzelne Artikel deaktivieren kann. Was leichter als gedacht ist.

Isso bindet man normalerweise wie folgt ein.

<section id="isso-thread" data-title="Fryboyter.de um Suchfunktion erweitert"></section>
<noscript><p>Die Kommentarfunktion kann nur mit aktiviertem Javascript genutzt werden</p></noscript>

Damit wird die Eingabemaske aber immer angezeigt. Wie kann man also verhindern, dass diese bei bestimmten Artikeln nicht angezeigt wird? Die Lösung ist bei Hugo if else.

{{ if ne .Params.nocomments true }}
<section id="isso-thread" data-title="{{ .Title }}"></section>
<noscript><p>Die Kommentarfunktion kann nur mit aktiviertem Javascript genutzt werden</p></noscript>
{{ else }}
<p>Die Kommentarfunktion ist für diesen Artikel deaktiviert</p>
{{ end }}

Hiermit wird geprüft, ob nocomments nicht true ist. Wenn ja, wird die Eingabemaske von Isso angezeigt. Ist nocomments allerdings true, wird der Hinweis angezeigt, dass die Kommentarfunktion deaktiviert ist.

Soll nun bei einem bestimmten Artikel die Kommentarfunktion deaktiviert werden, erweitert man den Frontmatter-Bereich einfach entsprechend.

---
title: Kommentarfunktion Isso unter Hugo deaktivieren
date: 2019-07-06T20:12:06+0200
categories:
- OSBN
- Allgemein
tags:
- Hugo
- Isso
- Kommentarfunktion
nocomments: true
slug: kommentarfunktion-isso-unter-hugo-deaktivieren
---
Ein Bekannter von mir nutzt für seine Internetseite ein selbst (schlecht) programmierte Lösung. Er hat sich nun selbst...

Das war es auch schon. Was man auch noch machen könnte, wäre anhand von nocomments: true zu prüfen, ob die Javascript-Datei von Isso überhaupt geladen werden soll oder nicht.

OSBN | Allgemein