staging.inyokaproject.org

2025 Woche 21

25. Mai 2025

Der Name meines Blogs ist Programm. Es dient mir als digitales Gedächtnis für IT-Themen, die mich mich beschäftigt haben und die nochmal interessant werden können. Es ist eine Art Wissensdatenbank, auf die ich auch gerne zugreifen können möchte, wenn ich mal keine Internetverbindung habe.

Inspiriert durch den heutigen Beitrag von Dirk, möchte ich hier kurz beschreiben, was ich tue, um eine statische Version meines Blogs zu erstellen, welche ich einfach auf dem Laptop, Smartphone oder Tablet mitnehmen kann.

Ich verwende das Plugin Simply Static – The WordPress Static Site Generator, um eine statische Version meines Blogs zu erzeugen und als Zip-Archiv zu speichern. Möchte ich auf die statische Version meines Blogs zugreifen, entpacke ich das Zip-Archiv in ein Verzeichnis wie z.B. /tmp/simply-static/ und öffne anschließend in einem Webbrowser die Datei /tmp/simply-static/index.html.

Bildschirmfoto der statischen Version meines Blogs

So kann ich z.B. auch dann auf meine Artikel und Anleitungen zugreifen, wenn mein Webserver oder Internetzugriff nicht verfügbar ist. Die Suche auf der Seite funktioniert nur sehr eingeschränkt. Hier behelfe ich mir mit einer Dateisystemsuche im Terminal.

Ein paar Zahlen:

  • Dauer zur Erstellung des Zip-Archivs: ca. 10 Minuten
  • Größe des Zip-Archivs: 274 MB
  • Entpackte Größe: 355 MB
  • Rythmus der Erstellung: Wenn mir danach ist; in der Regel einmal pro Quartal

Mir gefällt an dieser Lösung, dass ich auf meinem mobilen Gerät keinen Container, ja noch nichmal einen Webserver, sondern nur einen Browser benötige. Das ist einfach, sparsam und robust.

Was haltet ihr davon ein Blog auf diese Weise offline verfügbar zu machen? Tragt ihr eure Blogs auch mit euch herum? Welche Werkzeuge nutzt ihr, um sie stets bei euch zu haben? Teilt euch gerne in den Kommentaren oder einem eigenen Blog mit.

Dieser Artikel ist Teil der #BlogWochen2025. Von Mai bis Oktober schreiben (zumindest) Robert, Dirk und ich über unterschiedliche Themen rund ums Bloggen. Du kannst gerne jederzeit einsteigen und mitmachen – die gesammelten Posts aller Teilnehmer:innen findest du auf dieser Seite und kannst sie auch als Feed abonnieren.

24. Mai 2025

Mit dem Programm nice können Programme bezüglich der CPU Nutzung priorisiert oder weniger priorisiert gestartet werden.

Das ist eine super Sache, aber manche Programme starten Unterprozesse und verleihen ihnen dann ganz eigene nice Prioriäten und das ist manchmal dann doch sehr störend. Aber mit renice kann die Priorität verändert werden während das Programm läuft. Von -19 bis +20.

Je höher, also positiver die Werte sind, desto nicer :) ist das Programm und lässt anderen Programmen den Vortritt. Je niedriger, also negativer die Werte sind, desto weniger nice :( lässt es anderen Programmen den Vortritt.

Mit zwei Befehlen auf der Konsole, kann das aber alles kontrolliert werden. In meinem Fall nehme ich das Programm Socialstream Ninja als Beispiel, das ich für den Chat bei meinen “Odo Musicproduction” Youtube Livestreams verwende.

Nach dem Starten von Socialstream Ninja muss mit dem Tool ps die Gruppen ID gefunden werden. Ich gebe nur einen Teil des Namens von Socialstream Ninja an, weil das schon reicht, um das Programm von allen anderen zu unterscheiden. In der Konsole aka Terminal:

ps -ejH | grep socialstr

Dann erhalte ich eine Liste, die ungefähr so aussieht.

 37458   37457   37457  ?        00:00:05   socialstream
 37466   37457   37457  ?        00:00:00   socialstream
 37495   37457   37457  ?        00:00:04   socialstream
 37467   37457   37457  ?        00:00:00   socialstream
 37581   37457   37457  ?        00:00:17   socialstream
 37589   37457   37457  ?        00:01:01   socialstream
 37639   37457   37457  ?        00:00:00   socialstream
 37649   37457   37457  ?        00:00:26   socialstream
 37501   37457   37457  ?        00:00:07   socialstream
 37533   37457   37457  ?        00:00:44   socialstream
 37560   37457   37457  ?        00:00:01   socialstream
 37461   37461   37461  ?        00:00:02   socialstream-0.

Die zweite bzw die dritte Spalte zeigt die Gruppen ID 37457 an.

Und mit dem Befehl renice ändere ich alle nice Werte für die gesamte Gruppe auf einmal

renice +15 -g 37457

Eventuell muss noch der Letzte in der Liste reniced werden, damit alle schön nice sind.

Das war es dann auch schon. Happy computing! :)

Mit dem Programm nice können Programme bezüglich der CPU Nutzung priorisiert oder weniger priorisiert gestartet werden.

Das ist eine super Sache, aber manche Programme starten Unterprozesse und verleihen ihnen dann ganz eigene nice Prioriäten und das ist manchmal dann doch sehr störend. Aber mit renice kann die Priorität verändert werden während das Programm läuft. Von -19 bis +20.

Je höher, also positiver die Werte sind, desto nicer 🙂 ist das Programm und lässt anderen Programmen den Vortritt. Je niedriger, also negativer die Werte sind, desto weniger nice 🙁 lässt es anderen Programmen den Vortritt.

Mit zwei Befehlen auf der Konsole, kann das aber alles kontrolliert werden. In meinem Fall nehme ich das Programm Socialstream Ninja als Beispiel, das ich für den Chat bei meinen „Odo Musicproduction“ Youtube Livestreams verwende.

Nach dem Starten von Socialstream Ninja muss mit dem Tool ps die Gruppen ID gefunden werden. Ich gebe nur einen Teil des Namens von Socialstream Ninja an, weil das schon reicht, um das Programm von allen anderen zu unterscheiden. In der Konsole aka Terminal:

ps -ejH | grep socialstr

Dann erhalte ich eine Liste, die ungefähr so aussieht.

 37458   37457   37457 ?        00:00:05       socialstream
 37466   37457   37457 ?        00:00:00         socialstream
 37495   37457   37457 ?        00:00:04           socialstream
 37467   37457   37457 ?        00:00:00         socialstream
 37581   37457   37457 ?        00:00:17           socialstream
 37589   37457   37457 ?        00:01:01           socialstream
 37639   37457   37457 ?        00:00:00           socialstream
 37649   37457   37457 ?        00:00:26           socialstream
 37501   37457   37457 ?        00:00:07         socialstream
 37533   37457   37457 ?        00:00:44         socialstream
 37560   37457   37457 ?        00:00:01         socialstream
 37461   37461   37461 ?        00:00:02     socialstream-0.

Die zweite bzw die dritte Spalte zeigt die Gruppen ID 37457 an.

Und mit dem Befehl renice ändere ich alle nice Werte für die gesamte Gruppe auf einmal

renice +15 -g 37457

Eventuell muss noch der Letzte in der Liste reniced werden, damit alle schön nice sind.

Das war es dann auch schon. Happy computing! 🙂

Views: 61

Mit dem Programm nice können Programme bezüglich der CPU Nutzung priorisiert oder weniger priorisiert gestartet werden.

Das ist eine super Sache, aber manche Programme starten Unterprozesse und verleihen ihnen dann ganz eigene nice Prioriäten und das ist manchmal dann doch sehr störend. Aber mit renice kann die Priorität verändert werden während das Programm läuft. Von -19 bis +20.

Je höher, also positiver die Werte sind, desto nicer :) ist das Programm und lässt anderen Programmen den Vortritt. Je niedriger, also negativer die Werte sind, desto weniger nice :( lässt es anderen Programmen den Vortritt.

Mit zwei Befehlen auf der Konsole, kann das aber alles kontrolliert werden. In meinem Fall nehme ich das Programm Socialstream Ninja als Beispiel, das ich für den Chat bei meinen “Odo Musicproduction” Youtube Livestreams verwende.

Nach dem Starten von Socialstream Ninja muss mit dem Tool ps die Gruppen ID gefunden werden. Ich gebe nur einen Teil des Namens von Socialstream Ninja an, weil das schon reicht, um das Programm von allen anderen zu unterscheiden. In der Konsole aka Terminal:

ps -ejH | grep socialstr

Dann erhalte ich eine Liste, die ungefähr so aussieht.

 37458   37457   37457  ?        00:00:05   socialstream
 37466   37457   37457  ?        00:00:00   socialstream
 37495   37457   37457  ?        00:00:04   socialstream
 37467   37457   37457  ?        00:00:00   socialstream
 37581   37457   37457  ?        00:00:17   socialstream
 37589   37457   37457  ?        00:01:01   socialstream
 37639   37457   37457  ?        00:00:00   socialstream
 37649   37457   37457  ?        00:00:26   socialstream
 37501   37457   37457  ?        00:00:07   socialstream
 37533   37457   37457  ?        00:00:44   socialstream
 37560   37457   37457  ?        00:00:01   socialstream
 37461   37461   37461  ?        00:00:02   socialstream-0.

Die zweite bzw die dritte Spalte zeigt die Gruppen ID 37457 an.

Und mit dem Befehl renice ändere ich alle nice Werte für die gesamte Gruppe auf einmal

renice +15 -g 37457

Eventuell muss noch der Letzte in der Liste reniced werden, damit alle schön nice sind.

Das war es dann auch schon. Happy computing! :)

22. Mai 2025

Mozilla hat heute überraschend angekündigt, seine beiden Dienste Pocket und Fakespot einzustellen. 

Mozilla hat heute die unerwartete Ankündigung gemacht, dass die beiden Dienste Pocket und Fakespot eingestellt werden. Offensichtlich hat dies finanzielle Gründe, denn Mozilla beginnt seine Ankündigung damit, dass man der einzige Browserhersteller ist, hinter dem kein Milliardär steht – eine Formulierung, die Mozilla genau so in den letzten Wochen sehr viel in seiner offiziellen Kommunikation verwendet, sowohl in Zusammenhang mit der aktuellen Kartell-Untersuchung gegen Google, welche im schlechtesten Fall Einfluss auf Mozillas Geschäftsbeziehung mit Google haben könnte, aber auch in der direkten Ansprache an die User über Social Media.

Da man aus diesem Grund priorisieren müsse, wofür man seine Zeit und Ressourcen investiert, wurde diese Entscheidung getroffen. Demnach soll Mozillas Fokus noch stärker auf Firefox gelegt werden – eine Aussage, die sich ebenfalls mit der offiziellen Unternehmens-Kommunikation deckt, seit Laura Chambers CEO der Mozilla Corporation ist.

Einstellung von Pocket

Im Februar 2017 hatte Mozilla Read it Later, den damaligen Entwickler von Pocket, für 30 Millionen USD gekauft. In der Folge erhielt Firefox eine Funktion zum Speichern von Artikeln in der Pocket-Ablage und Content-Empfehlungen auf der Firefox-Startseite. Außerdem wurde der Quellcode von Pocket als Open Source freigegeben. Die Pocket-Community soll aus über 30 Millionen Nutzern bestehen.

Bereits seit heute ist es nicht länger möglich, ein neues Abo für die Bezahlversion Pocket Premium abzuschließen. Bestehende Abos werden automatisch beendet und Abonnenten des Jahres-Abos werden ab dem 8. Juli 2025 eine Erstattung erhalten. An dem Tag wird auch Pocket abgeschaltet werden.

Bis zum 8. Oktober 2025 haben Nutzer Zeit, ihre Daten zu exportieren. Anschließend werden diese unwiderruflich gelöscht. Mit dem Tag wird auch die Pocket API für Entwickler eingestellt.

Auf die Content-Empfehlungen auf der Firefox-Startseite muss dies im Übrigen nicht zwingend Auswirkungen haben. Dazu wurde nichts explizit kommuniziert und das Pocket-Branding wurde dafür bereits entfernt, ohne das Feature als Solches zu entfernen. Außerdem wird es auch den Newsletter „Pocket Hits“ weiterhin geben, in Zukunft unter dem neuen Namen „Ten Tabs“. Lediglich die Wochenend-Ausgaben werden entfallen. Es wird also weiterhin kuratierte Inhalte und damit potentiell auch eine Quelle für die Firefox-Startseite geben – welche ja gleichzeitig auch eine Fläche für gesponsorte Inhalte ist.

Einstellung von Fakespot

Fakespot wurde von Mozilla im Mai 2023 gekauft und die Funktionalität anschließend in Firefox integriert. Die Fakespot-KI half dabei, gefälschte Bewertungen auf den Shopping-Portalen Amazon, Walmart und Best Buy zu erkennen.

Ab dem 10. Juni 2025 wird die in Firefox integrierte Funktion abgeschaltet werden. Ab dem 1. Juli 2025 werden dann die Website, Browser-Erweiterungen und Smartphone-Apps nicht länger zur Verfügung stehen.

Der Beitrag Mozilla stellt Pocket und Fakespot ein erschien zuerst auf soeren-hentzschel.at.

21. Mai 2025

Um aus PNG-Dateien WEBP-Dateien zu machen, nutze ich meist cwebp. Zum Beispiel cwebp -lossless bild.png -o bild.webp. Normalerweise erzeugt dies eine deutlich kleinere WEBP-Datei. Heute wollte ich das Gleiche mit JPG-Dateien machen. Die damit erzeugte WEBP-Datei war allerdings deutlich größer als die JPG-Datei.

Da normale JPG-Dateien, im Gegensatz zu PNG-Dateien, eine verlustbehaftete Kompression verwenden, war der Parameter -lossless wohl keine so gute Idee. Aus einer verlustbehafteten Datei eine verlustfreie Datei zu machen führt eigentlich immer dazu, dass das Ergebnis mehr Speicherplatz benötigt. Oft sogar deutlich mehr.

Also habe ich den Befehl noch einmal ohne -lossless ausgeführt. Nun war die damit erzeugte WEBP-Datei minimal größer als die JPG-Datei. Da ich WEBP-Dateien hauptsächlich deshalb verwende, um Speicherplatz zu sparen, kein zufriedenstellendes Ergebnis.

Laut https://developers.google.com/speed/webp/docs/cwebp verwendet das Tool standardmäßig einen Kompressions-Faktor von 75, wenn man -lossless nicht nutzt. Was in vielen Fällen ein guter Kompromiss zwischen Bildqualität und Dateigröße darstellt.

Was aber verwendet die betreffende JPG-Datei?

Mit dem Befehl identify -format "%Q" bild.jpg (Teil von ImageMagick) lässt sich die Qualität der Datei anzeigen. In diesem Fall war das Ergebnis 50 Prozent.

Also habe ich es mit dem Befehl cwebp -q 50 bild.jpg -o bild.webp getestet. Und siehe da, die WEBP-Datei war merklich kleiner als die JPG-Datei. Im Falle von JPG-Dateien muss man also den Kompressions-Faktor / die Qualität anpassen. Was allerdings dazu führt, dass die WEBP-Datei verlustbehaftet ist.

Abschließend möchte ich allerdings noch anmerken, dass der von identify angegebene Wert nicht irgendwo fest in der Bilddatei gespeichert ist. Das Tool schätzt den Wert auf irgendeine Art und Weise. Zudem gibt es noch das Problem, dass unterschiedliche Grafikprogramme intern unterschiedliche Einstellungen für den gleichen Wert nutzen.

Man sollte daher diesen nur als groben Richtwert ansehen und die beiden Bilder im Anschluss vergleichen. Bei meinen bisherigen Tests konnte ich aber keinen Unterschied erkennen. Allerdings handelt es sich in diesem Fall nur beispielsweise um einfache Screenshots oder Grafiken.

20. Mai 2025

Die MZLA Technologies Corporation hat mit Thunderbird 138.0.2 ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 138.0.2

Mit Thunderbird 138.0.2 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht. Die neue Version bringt mehrere Fehlerkorrekturen, welche sich in den Release Notes (engl.) nachlesen lassen.

Der Beitrag Thunderbird 138.0.2 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

Bedingt durch die Kürzungen der US-Regierung, war es in den letzten Wochen durchaus denkbar, dass die CVE-Liste, mangels monetärer Mittel, ihre Arbeit hätte einstellen müssen. Das veranlasste die Agentur der Europäischen Union für Cybersicherheit (ENISA), ihre eigene Schwachstellen-Datenbank, die European Vulnerability Database (EUVD), früher vorzustellen. Neben der offiziellen Seite, wird auch eine API bereitgestellt.

Das Webinterface der EUVD

Mehrere spezialisierte Endpunkte stehen innerhalb der API zur Verfügung: /api/lastvulnerabilities, /api/exploitedvulnerabilities und /api/criticalvulnerabilities liefern jeweils bis zu acht aktuelle Einträge. Über /api/vulnerabilities lassen sich Schwachstellen detailliert nach Kriterien wie Score, EPSS-Wert, Veröffentlichungszeitraum, Hersteller oder Produktname filtern. Weitere Routen ermöglichen den Zugriff auf konkrete Einträge per ENISA-ID oder geben zugehörige Advisories aus.

Die erstellte OpenAPI-Spezifikation

Die Dokumentation der API ist allerdings eher rudimentär und nicht wirklich strukturiert gehalten, so werden z.B. die Response-Objekte nirgendwo definiert. Da ich die API in Rust nutzen wollte, führte dies zur Entwicklung des Crates euvd. Passend dazu habe ich eine OpenAPI-Spezifikation erstellt, welche die API möglichst vollumfänglich abbildet. Damit können auch Clients abseits von Rust für die EUVD-API erzeugt werden.

Der Content-Type ist text/plain

Die API selbst enthält noch einige Merkwürdigkeiten bzw. Inkonsistenzen. Dies fängt damit an, das JSON-Objekte zurückgegeben werden:

{
    "id": "cisco-sa-ata19x-multi-RDTEqRsy",
    "description": "Cisco ATA 190 Series Analog Telephone Adapter Firmware Vulnerabilities",
    "summary": "Multiple vulnerabilities in Cisco ATA 190 Series Analog Telephone Adapter firmware, both on-premises and multiplatform, could allow a remote attacker to delete or change the configuration, execute commands as the root user, conduct a cross-site scripting (XSS) attack against a user of the interface, view passwords, conduct a cross-site request forgery (CSRF) attack, or reboot the device.\r\n\r\nFor more information about these vulnerabilities, see the Details [\"#details\"] section of this advisory.\r\n\r\nCisco has released firmware updates that address these vulnerabilities. There are no workarounds that address these vulnerabilities. However, there is a mitigation that addresses some of these vulnerabilities for Cisco ATA 191 on-premises firmware only.\r\n\r\n",
    "datePublished": "Oct 16, 2024, 4:00:00 PM",
    ...
}

Der Content-Type seitens der API wird allerdings als text/plain;charset=UTF-8 definiert und entsprechend zurückgegeben. Dies führte unter anderem bei der Client-Generation zu Problemen, da der Text nicht standardmäßig in die bereitgestellten JSON-Objekte konvertiert wurde.

In den API-Objekten selbst wird mit Camel case gearbeitet, allerdings existieren aus Ausnahmen, wie die enisa_id, welche als Snake case geschrieben wird und die API an einigen Stellen etwas inkonsistent wirken lässt.

"enisa_id": "EUVD-2024-45012\n",
"assigner": "mitre",
"epss": 0.05,
"enisaIdProduct": [
...

An anderen Punkten wird wieder die Schreibweise in Camel case genutzt, wie z.B. beim enisaIdProduct-Feld. Auch eine Versionierung ist nicht zu erkennen, was die Frage nach dem genauen Updateprocedere der API aufwirft.

In Bezug auf digitale Souveränität fällt zudem auf, dass die API bei Azure gehostet wird, wie ein whois zeigt:

% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

refer:        whois.arin.net

inetnum:      20.0.0.0 - 20.255.255.255
organisation: Administered by ARIN
status:       LEGACY

whois:        whois.arin.net

changed:      1994-10
source:       IANA

# whois.arin.net

NetRange:       20.33.0.0 - 20.128.255.255
CIDR:           20.64.0.0/10, 20.128.0.0/16, 20.40.0.0/13, 20.34.0.0/15, 20.36.0.0/14, 20.33.0.0/16, 20.48.0.0/12
NetName:        MSFT
NetHandle:      NET-20-33-0-0-1
Parent:         NET20 (NET-20-0-0-0-0)
NetType:        Direct Allocation
OriginAS:       
Organization:   Microsoft Corporation (MSFT)
RegDate:        2017-10-18
Updated:        2021-12-14
Ref:            https://rdap.arin.net/registry/ip/20.33.0.0

Dies lässt strategische Autonomie vermissen, wenn solche Dienste auf einer Infrastruktur betrieben werden, welche unter ausländischer Rechtshoheit steht.

Um die API bzw. den Client in Rust zu nutzen, muss im ersten Schritt das Crate ins eigene Projekt eingebunden werden:

cargo add euvd

Anschließend können die einzelnen Ressourcen aufgerufen werden:

use euvd::apis::configuration::Configuration;
use euvd::apis::default_api;

async fn get_last_vulnerabilities() {

    // Preparation
    let config = Configuration::default();
    let result = default_api::get_last_vulnerabilities(&config).await;

    // Print result if successful
    if let Ok(response) = &result {
        println!("Response received:");
        for vuln in response {
            println!("• ID: {:?}, Description: {:?}", vuln.id, vuln.description);
        }
    }

    // Asserts
    assert!(result.is_ok(), "API call failed: {:?}", result.err());
}

Weitere Beispiele zur Nutzung der API finden sich im Integrationstest. Der Client ist unter MIT- und Apache-Lizenz lizenziert und auf GitHub und crates.io zu finden.