Fryboyter

JavaScript - If-Anweisung mit mehreren Bedingungen

Vor ein paar Tagen habe ich den Artikel Feedreader mit Filterfunktion veröffentlicht, bei dem es um einen Feedreader geht, der eine auf JavaScript basierende Filterfunktion nutzt. Zwischenzeitlich habe ich mehrere Anfragen erhalten wie man Beiträge mehrerer Autoren entfernen kann.

Mein ursprüngliches Beispiel war Folgendes und hat sich nur auf einen Autor bezogen.

function filterMessage() {
  if (msg.author == "soeren-hentzschel.at") {
    return MessageObject.Ignore;
  }
}

Da ich von JavaScript so gut wie keine Ahnung habe, wollte ich schon vorschlagen, dass man bei Bedarf einfach mehrere Filter anlegt. Wenn man nur wenige Filter insgesamt hat, mag das funktionieren. Mir wäre aber ein Filter lieber der alle Einträge bestimmter Autoren auf einmal ausblendet, damit die Filterliste übersichtlicher bleibt. Die Lösung hierfür ist der Logik-Operator ||.

Will man obiges Beispiel also erweitern würde dieser Code funktionieren:

function filterMessage() {
  if (msg.author == "soeren-hentzschel.at" || msg.author == "fryboyter.de") {
    return MessageObject.Ignore;
  }
}

Der Operator || steht in diesem Fall für “oder”. Somit wird abgefragt, ob der Autor soeren-hentzschel.at oder fryboyter.de ist. Und wenn ja, wird der Beitrag entfernt. Will man nun Beiträge eines weiteren Autoren löschen, dann fügt man einfach ein weiteres || msg.author == mit entsprechender Bedingung ein.

OSBN

Feedreader mit Filterfunktion

Neben vielen anderen Feeds habe ich den Feed von beispielsweise osbn.de oder planet.ubuntuusers.de aboniert. Manche Blogs veröffentlichen darüber Artikel die mich in keinster Weise interessieren. Diese möchte ich daher möglichst nicht einmal in meinem Feedreader angezeigt bekommen.

Da ich seit einiger Zeit lokale Feedreader bevorzuge, habe ich in letzter Zeit QuiteRSS genutzt, da dies einer der wenigen Clients ist, die überhaupt eine Filterfunktion anbieten. Die letzte Version von QuiteRSS ist allerdings von 2020 und die Entwicklung ist ziemlich eingeschlafen. Wenn man sich Issues wie https://github.com/QuiteRSS/quiterss/issues/1470 oder https://github.com/QuiteRSS/quiterss/issues/1519 durchliest, könnte das Programm wohl in absehbarer Zeit auch aus den Paketquellen diverser Distributionen verschwinden. Ich habe mich daher einmal umgesehen was es für Alternativen gibt, die derzeit aktiv weiterentwickelt werden. Erschreckend wenig, wenn man eine halbwegs gute Filterfunktion will. Ist das so ein ungewöhnlicher Anwendungsfall? Oder habe ich nur die falschen Programme angesehen?

Wie auch immer. Aktuell teste ich RSS Guard. Dessen Filterfunktion ist zwar nicht so einfach nutzbar, dafür aber deutlich mächtiger als die von QuiteRSS. Was daran liegt, dass diese auf Javascript basiert. Ein Filter der beispielsweise alle Artikel eines bestimmten Authors automatisch löscht, würde beispielsweise wie folgt aussehen.

function filterMessage() {
  if (msg.author == "soeren-hentzschel.at") {
    return MessageObject.Ignore;
  }
}

Ein Vorteil der Filterfunktion von RSS Guard ist, dass man den Filter erst einmal testen kann ohne das tatsächlich Änderungen vorgenommen werden und dass die betroffenen Artikel farblich markiert werden. Neben Linux wird das Programm übrigens auch für Windows und macOS angeboten.

Abschließend noch eine Anmerkung zum Schluss. Nicht, dass es böses Blut gibt. Nur weil bestimmte Artikel bestimmter Seiten für mich nicht von Interesse sind, sagt das weder etwas über deren Qualität aus noch möchte ich, dass diese Seiten mit der Veröffentlichung dieser Artikel aufhören. Ich will die Artikel einfach nicht angezeigt bekommen und auch nicht lesen. Genauso wie vermutlich einige Nutzer meine Artikel nicht lesen wollen.

OSBN

Mercurial - Lokale Änderungen in zweites lokales Repository übertragen

Ab und zu beginne ich damit, Änderungen in einem lokalen Mercurial Repository durchzuführen und werde damit nicht fertig. In der Regel mache ich dann später einfach weiter und nutze dafür den gleichen Rechner. Ab und zu möchte ich aber lieber mit einem anderen Rechner weiterarbeiten. Zum Beispiel mit meinem Notebook auf dem Sofa.

Wie nun am besten die lokalen Änderungen von Rechner A auf Rechner B übertragen?

Am einfachsten wäre es wohl, einen Commit über die unfertigen Änderungen zu erstellen, diesen bei beispielsweise Github hochzuladen und dann auf Rechner B das Arbeitsverzeichnis dammit zu aktualisieren. Ich vermeide aber möglichst solche Work in Progress Commits.

Das Repository mit Tools wie Syncthing von einem Rechner auf den anderen übertragen? Das klappt bei Repositories wohl in der Regel. Aber es gibt auch schon einige negativen Erfahrungen. Wohl hauptsächlich mit den Verzeichnissen wie .git oder .hg in denen unter anderem die Historie gespeichert ist. Ein zusätzliches bare Repository zu nutzen wäre vermutlich eine Alternative.

Da ich den Anwendungsfall aber nur sehr habe, habe ich mich für eine andere Lösung entschieden. Im Arbeitsverzeichnis des Repositories in dem ich mit den Änderungen begonnen habe, erstelle ich mittels hg diff > patch.diff einen Patch über die vorhandenen Änderungen. Diesen Patch spiele ich dann im zweiten Repository mittels hg import –no-commit patch.diff ein. Wichtig ist hierbei den Parameter –no-commit zu nutzen, da sonst für die Änderungen ein Commit erstellt wird, was ich ja erst einmal vermeiden will bis ich wirklich fertig bin.

Das mag nun nicht die beste Lösung sein. Und vielleicht kann man es mit einer anderen Versionsverwaltung (die ich nicht nutzen will) einfacher lösen. Aber für mich ist es erst einmal ausreichend.

OSBN | VCS

Mehrere Befehle mit einem Shortcut unter VS Code ausführen

Wenn ich einen Artikel erstelle, in dem ich ein oder mehrere Code-Beispiele zeige, wandle ich erst einmal diverse Zeichen des Codes in Entitäten um, sodass der Browser nicht versucht den Code auszuführen. Dies hat sonst oft ungewollte Nebenwirkungen. Somit wird das Zeichen < beispielsweise in &lt; umgewandelt. Danach packe ich den Code in einen pre und einen code Tag der für das Hervorheben des Codes zuständig ist. Dies sieht dann beispielsweise wie folgt aus.

<pre class="line-numbers language-bash" style="white-space:pre-wrap;">
<code class="language-bash">#!/bin/bash

if [ $# -eq 0 ]
  then
    echo &quot;Usage: $0 &lt;user_name&gt; &quot;
    exit;
fi

USER=$1

for repo in $(curl -s https://api.github.com/users/&quot;$USER&quot;/repos?per_page=1000 |grep git_url |awk &apos;{print $2}&apos;| sed &apos;s/&quot;\(.*\)&quot;,/\1/&apos;);do
git clone &quot;$repo&quot;;
done;</code>
</pre>

Hierfür nutze ich jeweils einen extra Shortcut der dies automatisiert. Für das Umwandeln der Zeichen wäre es dieser Shortcut.

{
    "key": "shift+f3",
    "command": "extension.htmlEntities"
}

Mittels Shift + F3 wird die Erweiterung html-entities ausgeführt. Und genau das vergesse ich ab und zu.

Nützlich wäre daher ein Shortcut der automatisch beide Aktionen durchführt. Das unterstützt VS Code aber leider aktuell nicht. Da ich derzeit keinen anderen Editor nutzen möchte, habe ich mir die Erweiterung multi-command installiert. Damit ist es möglich mehrere Befehle nacheinander auszuführen. Herausgekommen ist schlussendlich folgender Shortcut.

{
    "key":"shift+f5",
    "command":"extension.multiCommand.execute",
    "args":{
        "sequence":[
            "extension.htmlEntities",
            {
                "command":"editor.action.insertSnippet",
                "args":{
                    "name":"wrap_highlight"
                }
            }
        ]
    }
}

Der Shortcut Shift + F5 ruft die Erweiterung multi-command auf welche als Erstes die Erweiterung html-entities und danach das Snippet wrap_highlight ausführt. Letzteres hebt in meinem Fall den Code entsprechend hervor. Zukünftig werde ich also nicht mehr vergessen, Code-Beispiele vor der Veröffentlichung eines Artikels umzuwandeln.

OSBN | Allgemein

Pi-hole - Interface eth0 does not currently exist

Seit einiger Zeit erhält man als Nutzer von Pi-hole unter Umständen die Fehlermeldung interface eth0 does not currently exist in der grafischen Oberfläche.

Der Grund hierfür ist in der Regel, dass Pi-hole schneller startet als die Netzwerkverbindung aufgebaut wird. Auf die Funktion hat dies keinen Einfluss, auch noch später getestet wird, ob eine Netzwerkverbindung vorhanden ist. Irgendwie nervt es aber trotzdem, da diese Meldung anhand eines hüpfenden Symbols anagezeigt wird. Löscht man die Meldung, verschwindet es zwar, aber nach einem Neustart des Raspberry Pi geht es wieder von vorne los.

Die Lösung diese (kosmetischen) Problems ist ziemlich einfach. Man trägt einfach am Anfang der Datei /etc/pihole/pihole-FTL.conf DELAY_STARTUP=5 ein. Damit wird der Start um 5 Sekunden verzögert, sodass zwischenzeitlich die Netzwerkverbindung aufgebaut werden kann.

Je nach Konfiguration und verwendeten Raspberry Pi kann man eventuell einen niedrigeren Wert eintragen. Mit 5 Sekunden sollte man aber immer auf der sicheren Seite sein und es dürfte zu verschmerzen sein, wenn Pi-Hole etwas später zur Verfügung steht. Zumal man in der Regel ja nicht täglich mehrere Neustarts durchführt.

OSBN | Linux