Fryboyter

Github mit Mercurial nutzen

Vor ein oder zwei Wochen habe ich mir eines meiner Git-Repository zerlegt. Da mich die Lösung viel Zeit, zu viele Nerven und zwei Commits gekostet hat, bin ich nun wieder bei Mercurial gelandet. Dieses Werkzeug mag zwar nicht so mächtig wie Git sein, die Fehlermeldungen sowie die Dokumentation sind meiner Meinung nach viel besser verständlich.

Allerdings will ich auch weiterhin Github aufgrund dessen weiter Verbreitung nutzen. Sei es nun um dort selbst etwas zu veröffentlichen oder um mich an Projekten Dritter zu beteiligen. Mercurial bietet hierfür ein Plugin, dass sich Hg-Git nennt. Damit kann man ein Git-Repository herunterladen und es wird lokal automatisch in ein Mercurial-Repository umgewandelt. Nimmt man nun Änderungen vor, werden diese dann vor dem Hochladen in ein Git-Repository so geändert, dass sie mit Git kompatibel sind. Die Einrichtung von Hg-Git ist zudem ziemlich einfach.

Ich gehe bei folgender Anleitung davon aus, dass sowohl Mercurial als auch python-dulwich auf dem Rechner installiert ist und das im Home-Verzeichnis das Verzeichnis Projekte existiert. Dem Verzeichnis kann man natürlich einen anderen Namen geben.

Zuerst wechselt man im Terminal Emulator seiner Wahl in das Verzeichnis Projekte und lädt dort die Dateien von Hg-Git herunter.

cd ~/Projekte
hg clone https://foss.heptapod.net/mercurial/hg-git hg-git

Alternativ kann man Hg-Git auch über die Paketverwaltung seiner Distribution installieren.

Als nächstes erweitert man die Datei .hgrc im Home-Verzeichnis um folgenden Inhalt. Falls die Datei noch nicht vorhanden ist, einfach anlegen und die drei Zeilen eintragen.

[extensions]
hgext.bookmarks =
hggit = ~/Projekte/hg-git/hggit

Zeile zwei aktiviert das Plugin Bookmarks das in diesem Fall Branches simuliert. Zeile drei aktiviert das eben heruntergeladene Plugin Hg-Git.

Im Verzeichnis Projekte laden wir nun mit folgendem Befehl ein Git-Repository herunter (die Github-Adresse sowie das Zielverzeichnis fryboyter.git bitte entsprechend an die eigenen Gegebenheiten anpassen).

hg clone git@github.com:Fryboyter/Hugo.git fryboyter.hg

Da hierbei von Git zu Merurial umgewandelt wird, kann dies je nach Größe des Repository etwas dauern.

Als Nächstes wechselt man in das Verzeichnis, in dem das nun erstellte Mercurial-Respository liegt. In diesem Beispiel also fryboyter.hg. Dort führt man abschließend noch den Befehl hg bookmark -f main aus. Anstelle von main muss man die Bezeichnung des Haupt-Branch angeben. Ansonsten erkennt Mercurial bei einem Push keine Änderungen.

Nun sollte alles funktionieren. Bei meinen Tests konnte ich zumindest problemlos von Github pullen und zu Github pushen. Mehr brauche ich in meinem Fall eigentlich auch nicht. Was mir bei der ganzen Aktion aufgefallen ist, dass das lokale Mercurial-Repository weniger als 30 MB groß ist. Das lokale Git-Repository hingegen belegt etwas mehr als 60 MB. Davon geht die Welt jetzt nicht unter aber es ist trotzdem ein interessantes Detail.

OSBN | Allgemein

Heptapod - Gitlab mit Unterstützung von Mercurial

Bei Heptapod handelt es sich um eine Plattform zur Versionsverwaltung ähnlich Github. Im Gegensatz zu Github basiert diese allerdings auf Gitlab und unterstützt dank der Entwickler auch Mercurial. Vor ein paar Jahren hatte ich bereits in einem Artikel, bei dem es um die Einstellung der Unterstützung von Mercurial bei Bitbucket ging, schon einmal auf Heptapod hingewiesen. Damals war die Plattform allerdings noch neu und unfertig.

Da ich vor ein paar Tagen mir ein Git-Repository zerschossen habe (Layer-8-Problem) und mich die Lösung viel Zeit und Nerven gekostet hat, habe ich mich mal wieder im Bereich der Versionsverwaltung Mercurial umgesehen. Heptapod gibt es immer noch und inzwischen ist es auch öffentlich nutzbar. Neben heptapod.host was hauptsächlich für Unternehmen gedacht ist, gibt es auch noch das kostenlose Angebot https://foss.heptapod.net/public, das sich an FOSS-Projekt wendet.

Wer selbst hosten will, findet alle nötigen Informationen unter https://heptapod.net/pages/get-heptapod.html#get-heptapod.

Intern werde ich vermutlich wieder auf Mercurial wechseln. Git ist mir zu mächtig und zu kompliziert. Zudem finde ich die Dokumentation von Mercurial deutlich besser.

Aufgrund der weiten Verbreitung werde ich aber auch weiterhin Github nutzen, da es hierfür inzwischen funktionierende Lösungen gibt. Aber das ist ein Thema für einen weiteren Artikel.

OSBN | Allgemein

VS Code - Snippet für Front Matter anlegen

Meine Artikel erzeuge ich mittels Markdown-Dateien. Am Beginn dieser Datei ist der sogenannte Front-Matter-Bereich vorhanden, in dem Informationen wie der Titel, das Datum der Veröffentlichung oder die Tags eines Artikels hinterlegt werden.

Diesen Bereich jedes mal manuell zu erzeugen ist auf Dauer nervig. Der von mir verwendete statische Website-Generator Hugo bietet hierfür Templates an, sodass man mit einem Befehl wie hugo new vs-code-snippet-fuer-front-matter-anlegen.md einen neuen Artikel anlegen kann.

Ich bevorzuge es allerdings alles mit dem Editor zu machen. Aktuell nutze ich VS Code. Dieser bietet sogenannte Snippets, mit denen man Vorlagen erstellen kann.

Hierfür wählt man in den Einstellungen im Menü “Datei” “Benutzerausschnitte” aus. Im nun angezeigten Drop-Down-Menü wählt man “Neue globale Codeausschnittsdatei…” aus und gibt der Snippet-Datei einen aussagekräftigen Dateinamen.

Die nun angezeigte Datei füllt man mit folgendem Inhalt.

{
  "Blog post frontmatter": {
    "prefix": "fmc",
    "description": "Erzeugt Frontmatter für Hugo-Artikel",
    "body": [
      "---",
      "title: ${1}",
      "date: ${2:${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}+0100}",
	  "categories:", 
	  "- ${3}", 
	  "tags:",
    "- ${4}",
    "slug: ${5}",
      "---",
      "$0"
    ]
  }
}

In der ersten Zeile gibt man den Namen des Snippets an, der im Editor angezeigt wird. Der Prefix dient als Shortcode mit dem man den Inhalt des Snippets schnell einfügen kann. Hier kann man auch etwas anderes eintragen. Ich habe mir für fmc (front matter create) entschieden.

Im Body wird der Inhalt des Snippets angelegt, der automatisch eingefügt werden soll. In meinem Fall wird mit --- der Front-Matter-Bereich begonnen. Dann folgt der Titel, das Datum, die Kategorien, die Tags sowie der Slug über den der Artikel erreichbar ist. Mit --- wird der Front-Matter-Bereich wieder beendet.

Abschließend speichert man die Datei ab. Legt man nun einen neuen Artikel an, trägt man in der Datei fmc ein. Dies sollte bewirken, dass ein Menü erscheint, in dem man das Snippet ausführen kann. Macht man das, sollte automatisch folgender Inhalt eingetragen werden.

---
title: 
date: 2021-01-02T13:01:02+0100
categories:
- 
tags:
- 
slug: 
---


Im obigen Code-Beispiel werden dem einen oder anderen sicherlich ${1}, ${2} usw. aufgefallen sein. Dies sind Sprungmarken. Hat man mittels fmc das Snippet eingefügt, kann man mit der Tabulator-Taste diese Stellen der Reihe nach anspringen und somit die betreffenden Bereiche ausführen.

OSBN | Allgemein

Update auf Wallabag 2.4.0 - Row size to large

Bei Wallabag handelt es sich um ein Tool zum selbst hosten, mit dem man interessante Internetseiten abspeichern kann, um sie später zu lesen. Vor ein paar Tagen wurde Version 2.4.0 veröffentlicht auf die ich meine Instanz eben aktualisieren wollte.

Das Update ist leider mit der (gekürzten) Fehlermeldung “Syntax error or access violation: 1118 Row size too large.” abgebrochen und die Installation war nicht mehr nutzbar.

Die Ursache ist, dass in der Wallabag-Datenbank mindestens eine Tabelle das Zeilenformat “REDUNDANT” oder “COMPACT” hat. Die betroffenen Tabellen kann man sich mit folgender Datenbankabfrage anzeigen.

SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) 
FROM information_schema.TABLES 
WHERE ENGINE = 'InnoDB' AND ROW_FORMAT IN('Redundant', 'Compact') 
AND TABLE_NAME NOT IN('SYS_DATAFILES', 'SYS_FOREIGN', 'SYS_FOREIGN_COLS', 'SYS_TABLESPACES', 'SYS_VIRTUAL', 'SYS_ZIP_DICT', 'SYS_ZIP_DICT_COLS');

Da sich die Ausgabe nur auf ein paar Tabellen beschränkt hat und ich gerade keine Lust auf eine komplexere Lösung habe, habe ich bei diesen kurzerhand das Zeilenformat manuell mit folgendem Befehl auf “DYNAMIC” geändert.

ALTER TABLE $TABLENAME ROW_FORMAT=DYNAMIC;

Anstelle von $TABLENAME trägt man eine der Tabellen ein, die man mit der Datenbankabfrage angezeigt bekommen hat.

Hat man die betreffenden Tabellen entsprechend geändert hat, sollte das Update ohne Fehler abschließen und die betreffende Wallabag-Instanz sollte danach nutzbar sein

OSBN | Allgemein

Änderung an der Suchfunktion

Letztes Jahr hatte ich in https://fryboyter.de eine Suchfunktion eingebaut, die DuckDuckGo nutzt. So wirklich glücklich war ich damit nie, da ich somit auf Dritte angewiesen bin.

Daher habe ich vor ein paar Tagen die Suchfunktion umgebaut. Über https://fryboyter.de/search/ bzw. über das Lupen-Symbol im Footer der Seite ist nun die neue Suchfunktion erreichbar die unabhängig von Dritten ist. Intern wird hierfür eine JSON-Datei erzeugt, die als Datenquelle dient. Mittels eines kleinen Java-Scripts lässt sich diese Datei durchsuchen. Wer also die Suchfunktion nutzen will, muss Javascript aktivieren. Zumindest bei genannten Link.

Einen kleinen Nachteil hat das ganze natürlich auch. Die JSON-Datei wird auf den Rechner des jeweiligen Nutzers heruntergeladen, da die Suche lokal erfolgt. Hierbei werden aktuell etwas mehr als 300 kB übertragen. In Anbetracht dessen, dass heutzutage viele Internetseiten an sich um ein Vielfaches größer sind und die Datei nur bei Aufruf des genannten Links heruntergeladen wird, finde ich die Datenmenge vertretbar.

Die Änderung basiert auf der Anleitung von https://weitblick.org/post/simple-static-site-search-hugo-jamstack/. Vielen Dank dafür.

OSBN | Allgemein