ubuntuusers.de

15. Januar 2024

Das Jahr 2024 ist nun schon zwei Wochen alt. Dennoch möchte ich noch einen Blick zurückwerfen und mich erinnern, wie das Jahr 2023 für meinen Blog verlaufen ist.

In 2023 wurden auf My-IT-Brain insgesamt 45 Artikel veröffentlicht. Dies sind 16 mehr als in 2022 und 14 mehr als in 2021. Jeden Monat sind mindestens zwei Artikel veröffentlicht worden.

Die Themen waren dabei wieder bunt gemischt. Allein Artikel über die Red Hat Enterprise Linux (RHEL) System Roles zogen sich wie ein roter Faden durch den Blog. Welche Artikel haben denn euch am besten gefallen? Lasst es mich gerne in den Kommentaren wissen.

Ich hoffe, es war für jeden von euch etwas Interessantes mit dabei und ihr folgt diesem Blog auch in 2024. Ihr könnt mir auch gerne Anregungen in die Kommentare schreiben, welche Themen ihr hier gerne behandelt sehen wollt. Vielleicht greife ich ja einige davon auf.

Und nun aber auf in ein spannendes Jahr 2024!

10. Januar 2024

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

Neuerungen von Thunderbird 115.6.1

Mit dem Update auf Thunderbird 115.6.1 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht. Eine Authentifizierung über OAuth2 wird jetzt auch für comcast.net understützt. Außerdem wurden mehrere Probleme behoben, welche sich in den Release Notes (engl.) nachlesen lassen.

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

9. Januar 2024

Mozilla hat Firefox 121.0.1 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion.

Download Mozilla Firefox 121.0.1

Mit dem Update auf Firefox 121.0.1 behebt Mozilla ein Problem, welches verursachte, dass ein USB-Sicherheitsschlüssel von anderen Anwendungen nicht mehr verwendet werden konnte, nachdem dieser zuvor während einer Firefox-Sitzung verwendet wurde.

Ein Problem, bei dem bei Websites mit spaltenbasierten Layouts unter bestimmten Umständen nicht mit der Website interagiert werden konnte, wurde behoben.

Ein Video mit abgerundeten Ecken, welches über einem anderen Video lag, hatte keine abgerundeten Ecken mehr angezeigt.

Ein unerwarteter Zeilenumbruch in einigen CJK-Kontexten (Chinesisch, Japanisch, Koreanisch) wurde behoben, der durch Änderungen bei der Behandlung von ideographischen Leerzeichen verursacht wurde.

Behoben wurde außerdem eine mögliche Absturzursache bei Programmstart im „Headless“-Modus sowie eine mögliche Absturzursache des Default Browser Agent Hintergrund-Tasks unter Windows und eine mögliche Absturzursache, welche beim Debugging auftreten konnte.

Auf der Standard-Startseite von Firefox kann Mozilla gesponserte Verknüpfungen jetzt auch auf anderen Positionen anzeigen.

Für Nutzer englischsprachiger Sprachversionen experimentiert Mozilla für Nutzer, die derzeit nicht mit einem Mozilla-Konto in Firefox angemeldet sind, damit, bei Klick auf die Schaltfläche mit dem Avatar die Synchronisation, Firefox Monitor, Firefox Relay sowie das Mozilla VPN in einem Menü darzustellen, statt direkt die Login-Seite für das Mozilla-Konto zu öffnen.

Mozilla-Konto Button

Außerdem gab es noch einen Fix für die Fakespot-Integration, mit der Mozilla in den USA experimentiert.

Der Beitrag Mozilla veröffentlicht Firefox 121.0.1 erschien zuerst auf soeren-hentzschel.at.

  1. Experiment: Pixel Tablet als Notebook-Ersatz
  2. Google Pixel Tablet als Notebook-Ersatz: Die Hardware
  3. Google Pixel Tablet als Notebook-Ersatz: Erste Erfahrungen

In meinem persönlichen Jahresrückblick hatte ich bereits über die Überlegungen berichtet, mein Notebook zugunsten eines Pixel Tablet zu ersetzen. Ich bin selbst noch nicht ganz davon überzeugt, aber möchte es gerne mal ausprobieren.

Die Überlegung basiert auf zwei komplementären Beobachtungen:

  1. Ich habe beruflich mindestens einmal im Jahr mit größeren Gruppen von Studierenden zu tun. Dabei stelle ich seit einiger Zeit fest, dass immer weniger klassische Laptops verwendet werden und immer mehr mit Tablets kommen. Manche Leute reagieren darauf mit einer mürrischen „Junge-Leute-haben-keine-Ahnung“-Attitüde. Ich selbst hinterfrage durch solche Erfahrungen immer wieder mein eigenes Nutzungsverhalten. Brauche ich wirklich ein Notebook oder bin ich es nur gewohnt?
  2. Ich habe mir einen All-in-One-PC für zu Hause gekauft. Mein Notebook liegt so viel ungenutzt herum, dass vor kurzem sogar der komplette Akku leer war, ohne dass ich es gemerkt habe. Das hat zwei Nebeneffekte. Erstens sinkt mein Anspruch an das mobile Gerät, weil ich vieles nur noch auf meinem großen PC erledige und die Daten auch nicht mehr synchronisiere. Zweitens entsteht ein gewisses Missverhältnis zwischen dem Pflegeaufwand einer Linux-Installation und dem Nutzen. Hier werden wieder einige mit den Augen rollen, aber keine Linux-Installation ist so wartungsarm wie mein GrapheneOS auf dem Smartphone.

Das finanzielle Risiko dieses Experiments war für mich tragbar, da wir uns sowieso ein Tablet für den Urlaub etc. anschaffen wollten. Schließlich nehme ich mein Notebook nicht mit in den Urlaub, um Touren zu planen. Mit dem Smartphone wird uns das schnell zu „fummelig“. Wenn das Experiment also scheitert und ich weiterhin ein vollwertiges Notebook brauche, dann wird das Google Pixel Tablet nur noch für solche Dinge zum Einsatz kommen. Ohne dieses Experiment hätte ich mir aber wahrscheinlich ein günstigeres iPad aus dem Vorjahr gekauft.

Das Pixel Tablet hat eher durchwachsene Bewertungen erhalten (z.B. Test bei Golem), aber es ist leider für mich das einzige in Frage kommende Tablet. Apples iPads sind immer noch das Maß der Dinge, aber integrieren sich halt überhaupt nicht in mein Geräte-Ökosystem. Alternativen gibt es nur mit Android. Der Mobile-Zug bei Linux ist meiner Ansicht nach abgefahren. Die Herstellerversionen von Android würde ich aber niemals nutzen, weil mir da zu viele Daten an Google und den Gerätehersteller abfließen. LineageOS halte ich hinsichtlich der Sicherheit für eine fragwürdige Alternative und der Support für die Hardware ist ein reines Glücksspiel. Das einzige für mich in Frage kommende Aftermarket-System ist GrapheneOS und das unterstützt halt nur Pixel-Geräte.

Bei der Zusammenstellung schielt man schon neidisch auf die Apple-Kundschaft. Die bekommen ein iPad Pro gleich mit Folio Keyboard mitgeliefert. Will man das Pixel Tablet vergleichbar nutzen, muss man sich die einzelnen Komponenten zusammensuchen. Das ist zwar etwas günstiger als die Apple-Lösung, aber für echte Budgetpreise darf man auch nicht zum Pixel greifen, sondern muss sich ein Huawei oder ähnliches suchen, das man dann mit seinen Daten bezahlt. Ich benutze diesen Blog nicht als Werbeplattform, daher verzichte ich auf meine persönlichen Empfehlungen für ein Cover und eine kleine Tastatur. Diese Defizite haben Golem zu der Einschätzung veranlasst, dass das Pixel eher als Sofa-Tablet konzipiert ist. Man muss es aber nicht so benutzen.

Die Installation von GrapheneOS ist sehr gut beschrieben und verläuft völlig reibungslos. Die Unterstützung des Pixel Tablet entspricht derjenigen von Google. Das betrifft meines Erachtens nach zwei wesentliche Modifikationen. Es gibt ein Dock am unteren Bildschirmrand und der Launcher als Startmenü-Ersatz, wenn man vom unteren Bildschirmrand hinein wischt.

Da ich GrapheneOS auf meinem Smartphone benutze, waren mir die Reichweiten und Grenzen von F-Droid natürlich bewusst. Auf meinem mobilen Begleiter brauche ich nicht viel. Browser, Mail, Kalender, ein paar Synology Apps und die Möglichkeit Office-Dateien anzuzeigen und ggf. zu bearbeiten. Das ist im Prinzip alles.

Im täglichen Betrieb merkt man aber leider, dass Google mit Android bisher keinen Fokus auf Tablets gelegt hat. Obwohl es seit einigen Jahren die beliebten Tablets von Samsung gibt, sind viele Apps schlecht an das große Format angepasst. Einige starten sogar in einem kleineren Format, andere nutzen den Platz schlecht aus.

Zur Veranschaulichung zwei exemplarische Apps. Zuerst die in GrapheneOS integrierte App zur Dateiverwaltung:

Hier erscheint die in der Smartphone-Variante nur per Wischgeste einblendbare Sidebar dauerhaft im größeren Format und die App kann im Tablet-Format sinnvoll genutzt werden. Weniger Funktionen als z.B. in der Dateiverwaltung von GNOME werden dem Nutzer auch nicht geboten.

Ein negatives Beispiel ist K9Mail:

Das Bild zeigt einen Screenshot von K9-Mail in der Tablet-Ansicht

Es wird lediglich die Nachrichtenliste eingeblendet. Es wäre genug Platz um gleichzeitig die Ordnerliste und/oder die E-Mail-Vorschau zu zeigen, aber dies wird von der App nicht unterstützt.


Edit: K9Mail kann doch auch die Nachrichtenvorschau anzeigen. Mehr in den Kommentaren.

Der Artikel Experiment: Pixel Tablet als Notebook-Ersatz erschien zuerst auf Curius

Ein Vortrag von Lorna Mitchell auf dem emf2022 Kongress über die aktuelle Landschaft der der Opensource Datenbanken. Eine rassante und guter Einblick was es alles gibt und welche Funktionalitäten die einzelnen Datenbanken besonders macht.

Every year we collect more data than before, and the tools we use to manage that data are evolving to accommodate our changing needs – but it can be difficult to keep up with all the innovations! This session will give you a tour of what’s happening in open source databases, from someone who lives the adventures of open source data in her day job. You will travel from the well-trodden paths of relational databases, through the leafy glades of time series, to the landmarks of search and document databases. This session is recommended for people with an interest in software who want to learn about the overall trends, license changes, rising stars, and which database technologies are here to stay.

Video https://media.ccc.de/v/emf2022-325-landscape-of-open-source-databases

The post Landscape of Open Source Databases first appeared on Dem hoergen Blog.

7. Januar 2024

Mit mozilla.social betreibt Mozilla seine eigene Instanz des dezentralen sozialen Netzwerks Mastodon. Noch befindet sich diese in einem geschlossenen Betatest, sodass sich noch nicht jeder dort anmelden kann. Dieser Artikel beschreibt meine ersten Eindrücke nach drei Wochen Nutzung und geht auch auf ein paar Unterschiede zu anderen Mastodon-Instanzen ein.

Was ist Mastodon?

Mastodon ist eine Microblogging-Plattform oder auch soziales Netzwerk, welches vor allem mit X, ehemals Twitter, verglichen werden kann, oder auch dem neuen Threads von Meta. Der große Vorteil von Mastodon ist seine dezentrale Natur: Das Netzwerk gehört keinem einzelnen Unternehmen. Stattdessen kann jeder seine eigene Instanz mit eigenen Moderationsregeln und eigener Oberfläche betreiben. Die dafür verwendete Software ist Open Source und frei verfügbar.

Was ist mozilla.social?

Mit mozilla.social betreibt auch Mozilla eine Mastodon-Instanz. Dabei setzt Mozilla auf die offizielle Mastodon-Software in einer Version, welche Mozilla an die eigenen Bedürfnisse angepasst hat. Als Oberfläche verwendet Mozilla nicht die Standard-Oberfläche von Mastodon, sondern Elk in einer ebenfalls an die eigenen Bedürfnisse angepassten Version.

Derzeit befindet sich mozilla.social noch in einem geschlossenen Betatest. Das bedeutet, dass sich noch nicht jeder frei registrieren kann. Man kann sich aber auf eine Warteliste setzen lassen und ist dann hoffentlich bei der nächsten Runde neuer Nutzer dabei.

Ich bin seit dem 15. Dezember 2023 auf mozilla.social und im Folgenden beschreibe ich meine ersten Eindrücke und beobachteten Besonderheiten.

Erste Eindrücke und Besonderheiten von mozilla.social

Anmeldung mittels Mozilla-Konto

Praktisch ist, dass man für die Anmeldung bei mozilla.social keine zusätzlichen Anmeldedaten benötigt, wenn man bereits ein Mozilla-Konto hat. Dieses könnte man bereits aus einigen Gründen haben: für die Synchronisation von Firefox-Daten, für Pocket, das Mozilla VPN, Firefox Relay, Firefox Montitor, MDN Plus oder in Zukunft auch die Synchronisation in Thunderbird. In das Mozilla-Konto wiederum kann man sich entweder klassisch mittels E-Mail-Adresse oder auch via Google- oder Apple-Konto anmelden.

Die Oberfläche

Als ich neu in der Welt von Mastodon war, war mein erster Gedanke, wie altbacken Mastodon doch aussieht. Die Standard-Oberfläche erfüllt ihren Zweck, hat mich als langjährigen Twitter-Nutzer optisch aber nicht angesprochen. Erfreulicherweise nutzt Mozilla nicht die Standard-Oberfläche, sondern Elk. Das Elk-Projekt gibt sich selbst noch den Alpha-Status und schreibt, noch nicht bereit für eine größere Verbreitung zu sein. Aber Mozilla ist offensichtlich bereits genug überzeugt, um auf eine angepasste Version von Elk zu setzen. Ohne dabei etwas komplett anderes zu sein, erinnert Elk stärker an X / Twitter und wirkt dadurch nicht nur vertrauter, sondern auch moderner.

mozilla.social Web

Wie auch die originale Oberfläche bieten Elk und damit auch mozilla.social wahlweise ein helles oder ein dunkles Farbschema an. Im Allgemeinen empfinde ich helle Farben als freundlicher und weniger anstrengend. In diesem Sinne begrüße ich auch, dass anders als bei der originalen Oberfläche das helle und nicht das dunkle Farbschema Standard für nicht angemeldete Nutzer ist. Elk bietet im Gegensatz zur originalen Oberfläche aber auch für Gäste die Möglichkeit an, das Farbschema per Button-Klick zu ändern.

mozilla.social Web mozilla.social Web

Und ein Zen-Modus blendet große Teile der Oberfläche ganz aus, sodass man sich rein auf das Lesen der Inhalte fokussieren kann.

mozilla.social Web

Artikel-Empfehlungen ersetzen aktuelle Mastodon-Trends

Normalerweise zeigt Mastodon auf einer Seite Beiträge aus dem gesamten Netzwerk an, welche am jeweiligen Tag an Bedeutung gewinnen. Neben Aktualität ist die Anzahl der sogenannten „Boosts“ sowie Favoriten relevant. Mozilla hat diese Seite gestrichen und zeigt stattdessen eine Seite mit Artikel-Empfehlungen über Mozillas hauseigenen Dienst Pocket an.

mozilla.social Web

Können Nutzer bald weitere Nutzer einladen?

Auf mozilla.social gibt es einen Reiter für Einladungen. Hier erscheint derzeit nur ein Platzhalter-Text, der darauf hinweist, dass man „in ein paar Tagen“ wieder vorbeischauen soll und es dann Einladungs-Codes gibt, die man mit seinen Freunden teilen kann. Die Zeitangabe sollte man nicht wörtlich verstehen, denn der Text steht dort bereits von Anfang an.

mozilla.social Web

Einladungs-Codes für Mastodon sind kein neues Konzept von Mozilla. Aber weder Mastodon im Original noch Elk sehen Einladungen als Teil der Hauptnavigation vor. Deswegen kann man wohl davon ausgehen, dass Mozilla vor einer generellen Öffnung für alle Nutzer zumindest bald die Möglichkeit aktivieren wird, dass bestehende Nutzer weitere Nutzer zu mozilla.social einladen.

Moderations-Richtlinien

Mit dem Start der damals noch ausschließlich internen Betaphase im Mai 2023 hatte Mozilla auch seine Pläne bezüglich der Inhaltsmoderation angekündigt:

Sie werden einen großen Unterschied in unserem Ansatz der Inhaltsmoderation im Vergleich zu anderen großen Social-Media-Plattformen feststellen. Wir bauen keine weitere selbsterklärte „neutrale“ Plattform. Wir glauben, dass viel zu oft „Neutralität“ als Vorwand verwendet wird, um Verhaltensweisen und Inhalte zu ermöglichen, die darauf abzielen, diejenigen aus Gemeinschaften zu belästigen und zu schädigen, die schon immer Schikanen und Gewalt ausgesetzt waren. Unser Plan zur Moderation von Inhalten basiert auf den Zielen und Werten, die in unserem Mozilla-Manifest zum Ausdruck kommen – Menschenwürde, Inklusion, Sicherheit, individuelle Meinungsäußerung und Zusammenarbeit. Wir verstehen, dass die individuelle Meinungsäußerung, besonders in den USA, oft als absolutes Recht um jeden Preis gesehen wird. Selbst wenn dieser Preis die Schädigung anderer ist. Wir schließen uns dieser Ansicht nicht an. Das wollen wir klarstellen. Wir bauen eine großartige Sandbox, in der wir alle spielen können, aber es gibt auch Regeln, wie wir miteinander umgehen. Es steht Ihnen völlig frei, woanders hinzugehen, wenn Ihnen diese nicht gefallen.

Inwieweit diese Moderations-Richtlinien bereits Anwendung finden und sich in der Praxis tatsächlich von anderen Instanzen unterscheiden, ist für mich nicht zu beurteilen.

Mozillas eigene Anpassungen

Wie bereits beschrieben nutzt Mozilla weder Mastodon noch Elk in der jeweiligen Original-Version, sondern passt diese an. Dies kann neben den bereits genannten Dingen optische Details wie ein anderes Standard-Avatar bedeuten, aber auch bedeutsamere Anpassungen wie ein sofortiges Löschen hochgeladener Medien, wenn ein Beitrag gelöscht wird, was im Original-Mastodon erst zeitversetzt geschieht, oder eine Opt-Out-Einstellung für die Erhebung technischer Daten. Dies sind nur wenige Beispiele für Anpassungen, welche Mozilla auf Grundlage der jeweils aktuellen Versionen von Mastodon und Elk umsetzt.

Ersteindruck von Mastodon-App Mozilla Social für Android

Mittlerweile gibt es auch eine erste Vorschauversion der Mastodon-App Mozilla Social für Android. Diese kann auch von Mastodon-Nutzern verwendet werden, welche nicht auf mozilla.social, sondern auf einer anderen Mastodon-Instanz sind. Ich habe vor wenigen Tagen einen Ersteindruck-Artikel über Mozilla Social für Android veröffentlicht.

In eigener Sache: Dieser Blog auf Mastodon

Auch dieser Blog ist auf Mastodon vertreten. Wer mir folgen möchte, findet mich unter dem Namen @s_hentzschel@mozilla.social.

Der Beitrag Ein Ersteindruck von Mozillas Mastodon-Instanz mozilla.social erschien zuerst auf soeren-hentzschel.at.

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help tab-page
Kommando: <none>

Öffnen

  • tabnew <NAME> Neues Tab (Buffer)
  • tabf <NAME> Find – sucht im aktuellen Verzeichnis nach einer Datei. Tabulator Completion funktioniert
  • tab <VIM BEFEHL> öffnet ein neues Tab und führt einen Vim Befehl aus z.B. :tab help tab-pages

Mit einem neuen Tab kann auch gleich eine bestehende Datei geladen werden, indem mit dem Befehl der Dateiname mitgegeben wird.

Mehrere Dateien können als Tabs direkt bei Aufruf von vim mit dem Parameter -p geladen werden

vim -p Datei1 Datei2 Datei3 Datei4

Standardmäßig können 10 Dateien gleichzeitig geladen werden. Dieses Maximum kann verkleinert oder erweitert werden mit der Direktive :set tabpagemax=<NUMMER> oder in der vimrc mit set tabpagemax=<NUMMER>

Schließen

  • tabclose Schliesst das Tab. Mit einem ! Ausrufezeichen, wenn Änderungen nicht gespeichert werden sollen
  • :q
  • Strg+w q funktioniert nur, wenn nichts geändert wurde
  • tabonly Schliesse alle anderen Tabs außer dem aktuellen Tab

Navigation

  • Strg+BildRunter / Strg+BildHoch Tab wechseln rechts/links. Tipp: 2+Strg+BildRunter
  • gt / :tabn zum nächsten Tab rechts wechseln (next). Tipp: 5gt springt 5 Tabs nach rechts
  • gT / :tabp zum vorherigen Tag links wechseln (previous)
  • :tabs zeigt eine Übersicht aller Tabs

Reihenfolge

  • :tabm / :tabmove verschiebt das aktuelle Tab ganz nach rechts
  • :tabm <NUMMER> verschiebt das aktuelle Tab aun die Postion von NUMMER. Fängt bei 0 an !

Weitere Infos

  • :set showtabline=<NUMMER> 0 = Tabline ausblenden, 1 = automatisch, 2 = immer einblenden
  • :tabdo Einen Befehl für alle offenen Tabs ausführen. Zum Beispiel :tabdo %s/foo/bar/g

Mehr Artikel zu Vim im Blog

The post Vim – mit Tabs fensterln first appeared on Dem hoergen Blog.

6. Januar 2024

Die Firefox-Erweiterung Lightbeam veranschaulicht Drittanbieter-Verbindungen von Websites, indem diese durch einen Graphen visualisiert werden.

Während wir Websites besuchen, passieren im Hintergrund Dinge, von denen man als Nutzer nichts mitbekommt. So werden vor allem Ressourcen von anderen Domains geladen, welche wiederum unter Umständen Daten von wieder anderen Domains laden. Und so entsteht sehr schnell ein großes Netz an Verbindungen. Die Firefox-Erweiterung Lightbeam visualisiert genau das und hilft so zwar nicht direkt beim Reduzieren des Trackings durch Websites, aber macht das Ganze anschaulich und schärft so das Bewusstsein.

Firefox-Erweiterung Lightbeam

Download der Browser-Erweiterung Lightbeam für Mozilla Firefox

Sowohl die Idee als auch der Name klingen vertraut? Das hat einen Grund. Ursprünglich wurde die Erweiterung im Februar 2012 von Mozilla unter dem Namen Collusion veröffentlicht. Im Oktober 2013 folgte eine Umbenennung in Lightbeam. Nach einer Neuentwicklung als WebExtension mit reduziertem Funktionsumfang im Rahmen eines Outreachy-Projekts im Herbst 2017 hat Mozilla die Erweiterung Lightbeam im Oktober 2019 schließlich offiziell eingestellt und auch den Download von seiner Erweiterungs-Plattform entfernt. Zwar wurde die Erweiterung dann durch jene Entwicklerin privat neu bereitgestellt, welche bereits in die Neuentwicklung als WebExtension involviert war, aber auch das hatte im Jahr 2022 ein Ende und die Erweiterung verschwand erneut von Mozillas Erweiterungsplattform. Noch im selben Jahr entstand ein neuer Fork von Christoph Klassen, der auch heute noch besteht.

Sein Hauptziel ist nach eigenen Angaben, dafür zu sorgen, dass die Erweiterung verfügbar bleibt. Das heißt, der Fokus liegt auf dem Anpassen der Erweiterung, falls Änderungen seitens Mozilla dies notwendig machen, dem Aktualisieren verwendeter Bibliotheken etc. Die Entwicklung neuer Funktionen ist ausdrücklich kein Ziel. Mit dem Fusion-Modus gibt es allerdings tatsächlich eine neue Funktion, welche die ursprüngliche Lightbeam-Version von Mozilla nicht hatte. Dabei werden verschiedene Drittanbieter-Domains zu einem gemeinsamen Knoten „fusioniert“. Welche Domains fusioniert werden sollen, lässt sich in den Einstellungen der Erweiterung konfigurieren.

Firefox-Erweiterung Lightbeam

Die Erweiterung ist sowohl mit Firefox für Windows, macOS und Linux kompatibel als auch mit Firefox für Android.

Der Beitrag Firefox-Erweiterung Lightbeam visualisiert Drittanbieter-Verbindungen von Websites erschien zuerst auf soeren-hentzschel.at.

Das ist der zweite Teil einer Mini-Serie zur GPIO-Nutzung am Raspberry Pi 5:

  • GPIO Reloaded I: Python (gpiozero, lgpio, gpiod, rpi-lgpio)
  • GPIO Reloaded II: Bash (gpiod, gpioget, gpioset, pinctrl)
  • GPIO Reloaded III: Kamera (rpicam-xxx, Picamera2)

Zu den wichtigsten Neuerungen beim Raspberry Pi 5 zählt nicht nur der viel schnellere SoC (System-on-a-Chip), sondern auch ein eigener I/O-Controller, der als eigener Chip realisiert ist (RP1). Dieser I/O-Chip bringt mit sich, dass etablierte Mechanismen zur GPIO-Steuerung nicht mehr funktionieren. Besonders stark betroffen sind Kommandos, die im Terminal oder in Bash-Scripts aufgerufen werden.

Veraltet: WiringPi, »gpio«, »raspi-gpio« und »pigpiod/pigs«

Im Verlauf eines Jahrzehnts haben sich diverse Kommandos etabliert, die mittlerweile veraltet sind. Dazu zählt das Kommando gpio aus dem WiringPi-Projekt, das bereits 2019 eingestellt wurde. Ebenfalls verabschieden müssen Sie sich von dessen Nachfolger-Kommando raspi-gpio: Das Kommando ist nicht mit dem neuen I/O-Chip RP1 kompatibel. Glücklicherweise lässt sich das Kommando relativ einfach durch pinctrl ersetzen.

Deutlich ärgerlicher ist, dass auch der beliebte Dämon pigpiod und das dazugehörende Kommando pigs der Kompatibilität zu RP1 zum Opfer gefallen ist. Absurderweise kann der Dienst Anfang 2024 im Raspberry-Pi-Konfigurationsprogramm als GPIO-Fernzugriff scheinbar weiterhin aktiviert werden.

Der »GPIO-Fernzugriff« kann scheinbar weiterhin aktiviert werden. Er ist aber inkompatibel zum Pi 5!

journalctl -u pigpiod beweist aber, dass der Dienst nicht funktioniert:

journalctl -u pigpiod

systemd[1]: Starting pigpiod.service - Daemon required to control GPIO pins via pigpio...
systemd[1]: Started pigpiod.service - Daemon required to control GPIO pins via pigpio.
pigpiod[88161]: 2023-12-29 11:02:24 gpioHardwareRevision: unknown rev code (d04170)
pigpiod[88161]: 2023-12-29 11:02:24 initCheckPermitted:
pigpiod[88161]: +---------------------------------------------------------+
pigpiod[88161]: |Sorry, this system does not appear to be a raspberry pi. |
pigpiod[88161]: |aborting.                                                |
pigpiod[88161]: +---------------------------------------------------------+
pigpiod[88161]: Can't initialise pigpio library
systemd[1]: pigpiod.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: pigpiod.service: Failed with result 'exit-code'.

Das Problem ist bekannt, aber es sieht nicht so aus, als könnte es behoben werden: https://github.com/joan2937/pigpio/issues/589

gpioget und gpioset

Welche Kommandos funktionieren dann noch? Sie haben die Wahl zwischen den gpioxxx-Kommandos aus dem Paket gpiod sowie pinctrl (siehe den folgenden Abschnitt). Das Paket gpiod ist standardmäßig installiert. Die darin enthaltenen Kommandos nutzen zur Kommunikation mit dem Kernel die Device-Dateien /dev/gpiochip<n> und die Bibliothek libgpiod2.

Der größte Nachteil der Kommandos gpioget, gpioset usw. besteht darin, dass Sie als ersten Parameter die GPIO-Chip-Nummer angeben müssen. Diese variiert je nach Raspberry-Pi-Modell. Bei den Modellen der Serie 1 bis 4 müssen Sie die Nummer 0 angeben, ab Modell 5 die Nummer 4.

# LED ein- und ausschalten, die über den GPIO 7 gesteuert wird
# (= Pin 26 des J8-Headers)

# gpioset auf dem Raspberry Pi 5
gpioset 4 7=1; sleep 3; gpioset 4 7=0

# gpioset auf dem Raspberry Pi 1 bis 4
gpioset 0 7=1; sleep 3; gpioset 0 7=0

Warum variiert die GPIO-Chip-Nummer? Weil beim Raspberry Pi 4 die Kernel-Schnittstelle /dev/gpiochip0 für die GPIO-Steuerung verantwortlich ist (das sind in den BCM 2711 integrierte Funktionen), beim Pi 5 aber der RP1 (ein externer Chip) mit der Kernel-Schnittstelle /dev/gpiochip4. Informationen darüber, welche GPIO-Schnittstellen es gibt und welche GPIO-Funktion wie »verdrahtet« ist, geben die Kommandos gpiodetect und gpioinfo. Die folgenden Ausgaben gelten für den Raspberry Pi 5:

gpiodetect  

  gpiochip0 [gpio-brcmstb@107d508500] (32 lines)
  gpiochip1 [gpio-brcmstb@107d508520] ( 4 lines)
  gpiochip2 [gpio-brcmstb@107d517c00] (17 lines)
  gpiochip3 [gpio-brcmstb@107d517c20] ( 6 lines)
  gpiochip4 [pinctrl-rp1]             (54 lines)


gpioinfo    

  gpiochip0 - 32 lines:
    line   0:   "-"              unused   input  active-high 
    line   1:   "2712_BOOT_CS_N" "spi10 CS0" output active-low
    line   2:   "2712_BOOT_MISO" unused   input active-high 
    ...
  gpiochip1 - 4 lines:
    line   0: "WIFI_SDIO_D0"     unused   input active-high 
    line   1: "WIFI_SDIO_D1"     unused   input active-high 
    ...
  gpiochip2 - 17 lines:
    line   0: "RP1_SDA"          unused   input  active-high 
    line   1: "RP1_SCL"          unused   input  active-high 
    line   2: "RP1_RUN" "RP1 RUN pin"     output active-high 
    ...
  gpiochip3 - 6 lines:
    line   0: "HDMI0_SCL"        unused   input  active-high 
    line   1: "HDMI0_SDA"        unused   input  active-high 
    ...
  gpiochip4 - 54 lines:
    line   0: "ID_SD"            unused   input  active-high 
    line   1: "ID_SC"            unused   input  active-high 
    line   2: "PIN3"             unused   input  active-high 
    line   3: "PIN5"             unused   input  active-high 
    line   4: "PIN7"        "onewire@0"   output active-high
    line   5: "PIN29"       "onewire@0"   output active-low
    line   6: "PIN31"            unused   input  active-high 
    line   7: "PIN26"            unused   input  active-high 
    line   8: "PIN24"            unused   input  active-high 
    line   9: "PIN21"            unused   input  active-high 
    line  10: "PIN19"            unused   input  active-high 
    ...
    line  28: "PCIE_RP1_WAKE"    unused   input  active-high 
    line  29: "FAN_TACH"         unused   input  active-high 
    line  30: "HOST_SDA"         unused   input  active-high 
    line  31: "HOST_SCL"         unused   input  active-high 
    line  32: "ETH_RST_N"   "phy-reset"  output  active-low 
    ...

Um Scripts zu programmieren, die universell funktionieren, können Sie die folgenden Zeilen in den Code einbauen:

# chip=4 für RPi5, chip=0 für ältere Modelle
if gpiodetect | grep -q "pinctrl-rp"; then
  chip=4
else
  chip=0
fi

In der einfachsten Form schalten Sie mit gpioset einen GPIO-Ausgang auf High oder Low. In den folgenden Beispielen bezieht sich der erste Parameter auf die gpiochip-Nummer. 7 gibt die GPIO-Nummer in BCM-Nomenklatur an, 1 oder 0 den gewünschten Zustand:

gpioset $chip 7=1   # GPIO 7 (Pin 26) auf High stellen
gpioset $chip 7=0   # GPIO 7 (Pin 26) auf Low stellen

Sie können auch mehrere Ausgänge auf einmal steuern (hier GPIO 7, 8 und 25):

gpioset $chip 7=0 8=1 25=0 

Durch diverse Optionen können Sie weitere Funktionen steuern (siehe auch man gpioset):

  • --bias=as-is|disable|pull-down|pull-up aktiviert die internen Pull-up- oder Pull-down-Widerstände.
  • --mode=exit|wait|time|signal gibt an, wie lange das Kommando laufen soll. Standardmäßig gilt exit, das Kommando wird also sofort beendet. Mit wait wartet das Programm, bis der Benutzer [Return] drückt. Bei der Einstellung time können Sie mit --sec=<n> oder --usec=<n> die gewünschte Wartezeit einstellen. signal bedeutet, dass das Programm weiterläuft, bis es mit [Strg]+[C] beendet wird.

  • --background führt das Kommando als Hintergrunddienst weiter.

gpioget funktioniert analog zu gpioset: Sie übergeben im ersten Parameter die gpiochip-Nummer (in aller Regel 0), im zweiten Parameter die BCM-Nummer des GPIOs, dessen Input Sie auswerten wollen. Das Ergebnis des Kommandos lautet 0 oder 1, je nachdem, welchen Zustand der Eingang hat.

gpioget $chip 9   # Zustand von GPIO 9 (Pin 21) auslesen
0

pinctrl

Auch mit pinctrl aus dem Paket raspi-utils können Sie GPIO-Funktionen steuern. Der Vorteil von pinctrl besteht darin, dass das Kommando zur Zeit mit allen Raspberry-Pi-Modellen kompatibel ist. Eine Fallunterscheidung, ob das Script auf einem alten oder neuen Modell mit RP1-Chip läuft, entfällt. Außerdem ist das Kommando syntaktisch weitestgehend zu raspi-gpio kompatibel.

Gegen den Einsatz des Kommandos spricht der Umstand, dass das Kommando laut pinctrl -h (der einzigen mir bekannten Dokumentation) nur für Debugging-Zwecke gedacht ist.

Die folgende Aufzählung fasst die wichtigsten Anwendungen des Kommandos zusammen:

  • pinctrl get [gpionr] ermittelt den aktuellen Status aller GPIOs bzw. des angegebenen GPIOs.
  • pinctrl funcs [gpionr] ermittelt, welche alternativen Funktionen der angegebene GPIO bzw. alle GPIOs erfüllen können.

  • pinctrl set gpionr options verändert den Status des angegeben GPIOs. Mögliche Optionen sind:

    • ip = Input
    • op = Output
    • dl = Zustand Low (Drive Low)
    • dh = Zustand High (Drive High)
    • pu = Pull-up-Widerstand aktiv
    • pd = Pull-down-Widerstand aktiv
    • pn = keine Pull-up/down-Funktion
    • a0 bis a7 = alternative Funktion n aktivieren
    • no = Deaktivieren (no function)

Soweit sich sinnvolle Kombinationen ergeben, dürfen mehrere der obigen Optionen auf einmal übergeben werden, jeweils getrennt durch Leerzeichen. Welche alternative Funktionen ein GPIO unterstützt und wie sie nummeriert sind, geht aus pinctrl funcs hervor.

Das folgende Kommando ermittelt, welche Funktionen der GPIO mit der BCM-Nummer 23 unterstützt. Auf dem Raspberry Pi ist dieser GPIO mit Pin 16 des J8-Headers verbunden. GPIO23 kann diverse Funktionen übernehmen:

pinctrl funcs 23

  23, PIN16/GPIO23, SD0_CMD, DPI_D19, I2S0_SDO1, SCL3, 
  I2S1_SDO1, SYS_RIO023, PROC_RIO023, PIO23

Wenn Sie über Pin 26 (BCM-Nummer 07) eine Leuchtdiode angeschlossen haben, dann können Sie die LED wie folgt ein- und ausschalten:

pinctrl set 7 op dh   # LED an Pin 26 ein
pinctrl set 7 op dl   # LED an Pin 26 aus

Quellen/Links

5. Januar 2024

Mozilla hat eine erste Vorschauversion von Mozilla Social für Android veröffentlicht. Dabei handelt es sich um eine App für die Nutzung des dezentralen sozialen Netzwerks Mastodon. Diese unterstützt natürlich nicht nur Mozillas eigene Mastodon-Instanz, sondern kann von Nutzern aller Mastodon-Instanzen genutzt werden.

Download Mozilla Social Nightly für Android

Mozilla hat heute die erste Nightly-Version von Mozilla Social für Android veröffentlicht. Bislang steht die Version nur über GitHub zur Verfügung und aktualisiert daher auch nicht automatisch auf neuere Versionen. Bald soll Mozilla Social aber auch im Google Play Store und dann mit automatischen Updates zur Verfügung stehen. Auch Mozilla Social für Apple iOS befindet sich in Entwicklung, dort ist die Entwicklung aber noch nicht so weit vorangeschritten.

Download Mastodon-App Mozilla Social Nightly für Android

Erste Eindrücke von Mozilla Social für Android

Zunächst eine Anmerkung, die für das Erwartungshaltungsmanagement wichtig ist: Die Veröffentlichung von Mozilla Social als Nightly-Version bedeutet, dass wir hier von einer frühen Vorschau sprechen. Es handelt sich um kein finales Produkt. Noch nicht alles sieht hübsch aus, ein paar wichtige Funktionen fehlen noch. Darauf werde ich später noch etwas mehr eingehen.

Der erste Start

Bereits der Startbildschirm weist einen darauf hin, dass es sich noch um eine „Beta“-Version handelt, wobei es wohl auch nicht falsch wäre, noch von einer „Alpha“-Version zu sprechen, auf Grund noch fehlender Funktionen und weil es ja auch eine Nightly-Version ist.

Die große Schaltfläche führt einen zum Login für Mozillas Mastodon-Instanz. Das Praktische hierbei: Man kann sich mit seinem bestehenden Mozilla-Konto anmelden, was wahlweise über die Eingabe der E-Mail-Adresse, via Google oder via Apple funktioniert. Allerdings befindet sich Mozillas Mastodon-Instanz derzeit noch in einem geschlossenen Beta-Test. Hier kann also noch nicht jeder teilnehmen. Ich habe bereits Zugang und habe meine ersten Eindrücke von Mozillas Mastodon-Instanz, welche sich in ein paar Punkten von anderen Mastodon-Instanzen unterscheidet, in einem eigenen Artikel beschrieben.

Der Link unter der großen Schaltfläche führt zur Eingabe eines anderen Mastodon-Servers. Nach Eingabe des Servers landet man auf der entsprechenden Login-Seite. Mozilla Social kann also für jede Mastodon-Instanz genutzt werden, nicht nur für die von Mozilla.

Mozilla Social für Android: Erste Vorschauversion

Ein Rundgang durch die App

Nach dem Login ist das erste, was man sieht, der persönliche Feed. Also die Nachrichten von den Nutzern, denen man folgt. An der Stelle gibt es keinen Algorithmus, der einem potenziell interessante Nachrichten wildfremder Nutzer oder bezahlte Beiträge vorschlägt. Beiträge anderer Nutzer der gleichen Instanz sieht man, wenn man vom Reiter „For You“ zum Reiter „Local“ wechselt, und im Reiter „Federated“ gibt es dann auch Beiträge von Nutzern anderer Instanzen. Diese Information ist in erster Linie für diejenigen, welche beispielsweise von X, ehemals Twitter, kommen. Bestehende Mastodon-Nutzer kennen das Konzept.

Mozilla Social für Android: Erste Vorschauversion

Rechts oben geht es zur Suche. Die Ergebnisse sind aufgeteilt auf die Reiter „Top“, „Accounts“, „Posts“ sowie „Hashtags“. Aus den Ergebnissen heraus kann direkt einem Profil oder einem Hashtag gefolgt oder mit Beiträgen interagiert werden.

Mozilla Social für Android: Erste Vorschauversion

Der zweite Tab ist eine Besonderheit von Mozilla Social. Darüber gibt es Inhaltsempfehlungen. Aber nicht etwa von Mastodon-Nutzern, sondern von Mozillas hauseigenem Dienst Pocket, wie man sie auch von der Firefox-Startseite kennt. Die Artikel sind sogar schon auf Deutsch, obwohl der Rest der App noch auf Englisch ist.

Die Artikel können direkt in der App gelesen oder auch mit anderen Apps geteilt werden. Man findet hier auch noch Schaltflächen zum Teilen sowie Setzen als Lesezeichen innerhalb von Mastodon, diese Schaltflächen sind aber noch ohne Funktion.

Mozilla Social für Android: Erste Vorschauversion

Der mittlere Tab führt dann zum Verfassen eines eigenen Beitrags. Neben dem eigentlichen Textinhalt sowie dem Sichtbarkeitsstatus können hier auch Fotos oder Videos hochgeladen, eine Umfrage angehängt und eine Content-Warnung konfiguriert werden.

Mozilla Social für Android: Erste Vorschauversion

Der vierte Tab ist derzeit nur ein Platzhalter. Hier sollen in Zukunft die Lesezeichen erscheinen. Der fünfte Tab ist schließlich das eigene Profil. Hierüber gelangt man zu den eigenen Beiträgen, Medien, Beiträgen, die man mit „Gefällt mir“ markiert hat, sowie Personen, die einem folgen und denen man selbst folgt. Das eigene Profil kann bearbeitet werden und es geht in die Einstellungen.

Mozilla Social für Android: Erste Vorschauversion

Die Einstellungen beinhalten einen Link zum Verwalten des Accounts, was einen de facto zur entsprechenden Webansicht des Mastodon-Servers bringt, sowie zum Logout. Auch blockierte und stumm geschaltete Nutzer können bereits verwaltet werden. In den Datenschutz-Einstellungen kann Telemetrie aktiviert werden. Standardmäßig ist diese ausgeschaltet. Schließlich gibt es noch einen Info-Bildschirm.

Mozilla Social für Android: Erste Vorschauversion

Noch fehlende Funktionen

Während also schon einige Dinge da sind, gibt es auch noch ein paar Funktionen, die zu diesem Zeitpunkt noch fehlen. Das aus meiner Sicht Wichtigste zuerst: Benachrichtigungen. Noch gibt es keine Benachrichtigungen über neue Follower oder Beiträge, die von anderen Nutzern geteilt werden oder die anderen gefallen. Lesezeichen wurden bereits angesprochen. Auch befindet sich die komplette App noch ausschließlich in englischer Sprache und ist nicht ins Deutsche übersetzt. Ebenfalls gibt es noch keine Möglichkeit, mehrere Profile innerhalb der App zu verwalten und im Vergleich zur offiziellen Mastodon-App fehlt auch noch die eine oder andere Einstellung.

Fazit

Mozilla Social macht bereits einen sehr guten Ersteindruck, wenn man den frühen Entwicklungsstand berücksichtigt, und könnte eine interessante Alternative zur offiziellen Mastodon-App werden. Gleichzeitig wird natürlich schnell klar, dass zu diesem Zeitpunkt noch ein paar Dinge fehlen, die dafür zwingend notwendig sind. Auch optisch verträgt die eine oder andere Stelle noch ein bisschen Feinschliff. Aber es ist davon auszugehen, dass in den kommenden Wochen noch einiges passieren wird.

Ich persönlich könnte sogar tatsächlich schon den vollständigen Wechsel zu Mozilla Social beim aktuellen Stand der Dinge in Betracht ziehen, wenn die Benachrichtigungen implementiert wären. Denn diese Funktion ist für mich wesentlich, auf alles andere kann ich warten.

Wenn es um die Frage geht, wieso Nutzer überhaupt zu Mozilla Social anstelle der offiziellen Mastodon-App greifen sollten, wird es spannend zu sehen sein, was sich Mozilla einfallen lässt, um nicht nur Feature-Gleichheit herzustellen, sondern sich abzuheben. Die Content-Empfehlungen von Pocket sind ein Anfang, den andere Mastodon-Apps nicht bieten. Und vielleicht hat Mozilla ja noch weitere Einfälle.

In eigener Sache: Dieser Blog auf Mastodon

Auch dieser Blog ist auf Mastodon vertreten. Wer mir folgen möchte, findet mich unter dem Namen @s_hentzschel@mozilla.social.

Der Beitrag Mozilla veröffentlicht Mastodon-App Mozilla Social für Android als Nightly-Version – Ersteindruck mit vielen Screenshots erschien zuerst auf soeren-hentzschel.at.

Heutzutage bevorzugen viele Nutzer eine Anleitung in Form eines Videos und nicht mehr in Textform. Wenn man in einem solchen Video im Terminal Emulator einen Befehl wie beispielsweise pacman -Syu eingibt, ist das kein Problem. Was aber, wenn man beispielsweise Shortcuts ausführt? Diese werden nicht angezeigt.

Natürlich kann man in dem Video die nicht angezeigten Eingaben verbal nennen. Aber eine visuelle Darstellung ist einigen Nutzern dann doch lieber. Hierfür gibt es glücklicherweise Tools wie Show Me The Key. Mit diesen wird die Eingabe, die über die Tastatur erfolgt, visuell dargestellt. Will man beispielsweise ein Video über den Editor Helix erstellen, könnte es wie in folgendem Screenshot aussehen.

Beispiel wie die Darstellung mit Show Me The Key aussieht.

In diesem Beispiel wird mit gezeigter Eingabe die betreffende Zeile markiert und in die Zwischenablage kopiert.

Einige, die solche Videos schon länger erstellen, werden sich nun fragen, warum ich nicht das deutlich bekanntere Tool screenkey genannt habe. Die Antwort ist ganz einfach. Screenkey unterstützt Wayland nicht. Ich habe aber inzwischen alle meine Rechner mit grafischer Oberfläche auf Wayland umgestellt.

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help windows
Kommando :wincmd Strg+w

Die aktuelle Ansicht in mehrere Fenster aufteilen.

Detailliertere Informationen und weitere alternative Befehle sind in der Hilfe zu finden

Teilen & Neu

  • Strg+w s / :sp / :split Fenster horizontal teilen (gleicher Inhalt/Buffer)
  • Strg+w v / :vs / :vsplit Fenster vertikal teilen (gleicher Inhalt/Buffer)
  • Strg+w n / :new Fenster horizontal teilen und neues Dokument (leerer Buffer) erstellen
  • :vne / :vnew Fenster vertikal teilen und neues Dokument (leerer Buffer) erstellen

Schliessen

  • Strg+w q / :q Fenster schließen.
  • Strg+w o / :on / :only schließt alle anderen Fenster, ausser das aktuelle Fenster
  • Es gibt noch viele weitere Parameter zum Fenster schließen

Navigation

  • Strg+w Pfeiltasten Zwischen den Fenstern wechseln. Es gehen auch die Vim Cursor
  • Strg+w p Zum letzten Fenster zurück wechseln
  • Strg+w r / Strg+w R Fenster durchrotieren runter/rechts und hoch/links

Größe

  • Strg+w = Alle Fenster gleich groß machen
  • Strg+w - Das aktuelle Fenster um 1 vertikal kleiner machen. Strg+w 5 - um 5 kleiner machen
  • Strg+w + Das aktuelle Fenster um 1 vertikal größer machen
  • Strg+w _ Das aktuelle Fenster vertikal maximieren. Alle anderen Fenster so klein wie möglich machen
  • Strg+w < Das aktuelle Fenster um 1 horizontal kleiner machen. Strg+w 7 < um 7 kleiner machen
  • Strg+w > Das aktuelle Fenster um 1 horizontal größer machen
  • Strg+w | Das aktuelle Fenster horizontal maximieren
  • In einer grafischen Oberfläche lassen sich die Fenster am Rahmen mit der Maus kleiner und größer machen

Mehr Artikel zu Vim im Blog

The post Vim – Windows first appeared on Dem hoergen Blog.

Luc Lenôtre stellt Maestro vor, einen Unix-ähnlichen Kernel und ein Betriebssystem, das von Grund auf in Rust geschrieben wurde. Maestro soll leichtgewichtig und kompatibel genug mit Linux sein, um im Alltag genutzt werden zu können.

Es gibt sie noch, die Wunderkinder. Wie den 13-jährigen Willis Gibson, der am 21. Dezember als erster Mensch Tetris zu Ende gespielt hat, und das nach fast 40 Jahren. Oder Luc Lenêtre, der Student, der mal eben alleine einen UNIX-ähnlichen Kernel in Rust schreibt. Er ist Student an der Schule 42 in Paris. Über sich selbst und seine Motive schreibt er:

Ich bin ein französischer Softwareentwickler. Ich habe mit dem Programmieren begonnen, als ich 10 Jahre alt war und liebe osdev, Systemprogrammierung, Rust und Mathematik. Derzeit schreibe ich mein eigenes Unix-ähnliches Betriebssystem von Grund auf mit der Sprache Rust, nur zum Spaß 🙃.

Falls euch "nur zum Spass" bekannt vorkommt, dann schaut mal hierhin.

In seinem Blog schreibt Lenêtre:

"Der erste Commit des Kernels datiert auf den 22. Dezember 2018, um 3:18 Uhr morgens (die beste Zeit, um Code zu schreiben). Es begann als Schulprojekt. Ursprünglich wurde es in der Sprache C implementiert, und zwar für etwa anderthalb Jahre, bis die Codebasis zu schwer sauber zu halten war. In diesem Moment beschloss ich, zu Rust zu wechseln (mein erstes Projekt in dieser Sprache), was mehrere Vorteile mit sich brachte:

  • Das Projekt von vorne beginnen und dabei die Lehren aus früheren Fehlern ziehen.
  • Etwas innovativer zu sein als nur einen Linux-ähnlichen Kernel in C zu schreiben.
  • Die Sicherheit der Sprache Rust nutzen, um einige Schwierigkeiten der Kernelprogrammierung zu überwinden. Die Verwendung des Typisierungssystems von Rust ermöglicht es, einen Teil der Verantwortung für die Speichersicherheit vom Programmierer auf den Compiler zu verlagern.

Bei der Kernel-Entwicklung ist das Debugging aus mehreren Gründen sehr schwierig:

  • Dokumentation ist oft schwer zu finden, und BIOS-Implementierungen können fehlerhaft sein (häufiger, als man denkt).
  • Beim Booten hat der Kernel vollen Zugriff auf den Speicher und kann dort schreiben, wo er es nicht sollte (z. B. seinen eigenen Code).
  • Die Fehlersuche bei Speicherlecks ist nicht einfach. Tools wie valgrind können nicht verwendet werden.
  • gdb kann mit QEMU und VMWare verwendet werden, aber der Kernel kann sich anders verhalten, wenn er auf einem anderen Emulator oder einer anderen virtuellen Maschine läuft. Außerdem kann es sein, dass diese Emulatoren gdb nicht unterstützen (Beispiel VirtualBox).
  • Einige Funktionen in der Unterstützung für gdb in QEMU oder VMWare fehlen (z.B. Record und Replay) und gdb kann manchmal sogar abstürzen.

All diese Probleme sind Gründe für die Verwendung einer speichersicheren Sprache, um sie so weit wie möglich zu vermeiden. Alles in allem ermöglichte die Verwendung von Rust im Kernel die Implementierung zahlreicher Sicherheitsvorkehrungen. Und ich glaube, dass dies bis heute die beste Entscheidung ist, die ich für dieses Projekt getroffen habe."

Die folgenden Funktionen sind derzeit in Maestro implementiert:

  • Terminal mit VGA-Textmodus und PS/2-Tastatur (mit Vorwärtskompatibilität zu USB, die von der Firmware des Motherboards verwaltet wird)
    • Teilweise Unterstützung von ANSI-Escape-Codes
  • Speicherzuweisung/virtueller Speicher
    • Buddy-Allokator
    • Interner Speicherallokator, der Ähnlichkeiten mit der Implementierung von dlmalloc aufweist und auf dem Buddy-Allokator aufbaut
  • Prozesse und Scheduler (round-robin)
    • POSIX-Signale
  • Aufzählung von PCI-Geräten
  • Dateien:
    • Mountpoints
    • IDE/PATA-Treiber
    • Dateisystem (vorerst nur ext2)
    • Festplattenpartitionen (MBR und GPT)
    • Virtuelle Dateisysteme (/tmp und /proc)
    • initramfs
  • Zeit/Uhr (RTC)
  • Linux-Systemaufrufe (etwa 30% sind derzeit implementiert)
  • Kernel-Module
  • ELF-Programme

Wo steht das Einmann-Projekt zurzeit?

Maestro ist ein monolithischer Kernel, der im Moment nur die x86-Architektur (in 32 Bit) unterstützt. Momentan sind 135 von 437 Linux-Systemaufrufen (etwa 31 %) mehr oder weniger implementiert. Das Projekt hat 48 800 Codezeilen in 615 Dateien (alle Repositories zusammen, gezählt mit dem Befehl cloc). Neben dem Kernel besteht das Betriebssystem derzeit aus den folgenden Komponenten:

  • Solfège: ein Boot-System und ein Daemon-Manager (ähnlich wie systemd, aber weniger aufwendig)
  • maestro-utils: Befehle für Systemdienstprogramme
  • blimp: ein Paketmanager

Bislang wurde die folgende Software von Drittanbietern getestet und funktioniert auf dem Betriebssystem:

  • musl (C-Standardbibliothek)
  • bash
  • Einige GNU coreutils Befehle wie ls, cat, mkdir, rm, rmdir, uname, whoami, etc...
  • neofetch (eine gepatchte Version, da das Original neofetch Maestro nicht kennt)

Selbst ausprobieren

Da sich das Projekt in einer sehr frühen Phase befindet, dürft ihr bezüglich Funktionalität und Stabilität nicht vier erwarten. Hier ist ein ISO-Image und hier die Anleitung zum selbst kompilieren. Ich habe versucht, das Image in GNOME-Boxes zu starten, bin aber nicht über den Startbildschirm hinausgekommen, was so aussah:

Nach Press ENTER passierte nichts mehr. Vielleicht habt ihr mehr Glück.

Quellen:
https://blog.lenot.re/
https://github.com/llenotre/maestro


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

Gentoo vollzieht den Wandel: Binäre Pfade im Quellcode-Dschungel! Am 29. Dezember 2023 sorgte Gentoo Linux für Aufsehen, als verkündet wurde, dass der altbewährte Paketmanager Portage nicht mehr nur auf Quellcode setzt, sondern nun auch mit binären Paketen jongliert. Ein Schritt, der die Flexibilität steigert, da beide Welten nun harmonisch koexistieren können.

Warum diese Kursänderung? Um auf älteren Hardware-Plattformen effizienter zu agieren und für mehr Anwenderfreundlichkeit zu sorgen. Und hier kommt das Highlight: Ab sofort könnt ihr euch binäre Pakete direkt schnappen und sie ohne Umwege installieren. Aber: Für die meisten Architekturen beschränkt sich das auf das Grundsystem und wöchentliche Updates. Aber es bleibt festzuhalten: Bei amd64 und arm64 steht ein imposantes Paketarchiv von über 20 Gigabyte bereit – von LibreOffice über KDE Plasma bis zu Gnome und Docker. 

Die "Gory Details"

Die Ankündigung bietet detaillierte Anleitungen zur Integration von Binärpaketen in eine bestehende Gentoo-Installation. Die Einrichtung erfordert die Erstellung einer Konfigurationsdatei in /etc/portage/binrepos.conf/. Für neue Stages ist bereits eine passende gentoobinhost.conf vorhanden. Die Installation erfolgt über "emerge -uDNavg @world".

Für AMD64-Pakete werden Kompilierungseinstellungen wie CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe" verwendet. Die verfügbaren Use-Flag-Einstellungen entsprechen den Profilen amd64/17.1/nomultilib, amd64/17.1/desktop/plasma/systemd und amd64/17.1/desktop/gnome/systemd.

Arm64-Pakete verwenden CFLAGS="-O2 -pipe" und haben entsprechende Use-Flag-Einstellungen für Profile wie arm64/17.0 (openrc), arm64/17.0/desktop/plasma/systemd und arm64/17.0/desktop/gnome/systemd.

Die Q&A klärt Unklarheiten zur Signatur von Paketen und betont, dass Benutzer selbst kompilieren können, wenn sie spezifische Optimierungen wünschen. Bei langsamen Downloads wird empfohlen, lokale Mirror zu nutzen, wobei die kryptografische Signatur standesgemäße Sicherheit bietet.

Es wird erläutert, wie man mit Fehlern bei der Signaturverifikation umgeht und dass Benutzer, die ihre eigenen Binärpakete erstellen, einen Signaturschlüssel einrichten müssen. Es gibt auch Hinweise zur Behebung von Problemen, zur Nutzung auf einem "merged-usr"-System und man klärt auf, dass die Binärpakete nur mit bestimmten Profilversionen kompatibel sind.

Quelle:

https://www.gentoo.org/news/2023/12/29/Gentoo-binary.html


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

MX Linux 23.1 RPi Respin ist gerade erschienen. Neben Ubuntu gibt es damit das zweite "große" Desktop-System, das auf einem Raspberry Pi läuft. Und nach einigen Test-Tagen muss ich sagen: Die Entwickler haben hervorragende Arbeit geleistet.

MX Linux nimmt im Ranking von DistroWatch seit langer Zeit den ersten Platz ein, gefolgt von Linux Mint und den anderen bekannten Namen.

Das Ranking bezieht sich zwar nur auf das Interesse an einer bestimmten Distro und sagt nichts über die Zahl der tatsächlich genutzten Installationen aus. Aber man wird MX Linux sicher zu den sehr beliebten und ausgereiften Systemen zählen dürfen. Durch die recht genügsame Xfce-Umgebung ist MX Linux zudem recht gut geeignet für schwächere oder ältere Computer.

Im Begrüßungstext für neue Anwender heißt es daher:

MX-23 RPi Respin vereint Debian 12 (Bookworm), Raspberry Pi OS und die Flaggschiff-Xfce-Version von MX Linux. Es wurde auf Pi 4, Pi 400, Pi 5 sowie Orange Pi 5 entwickelt und getestet.

Besonderheiten der Version für den Raspberry Pi

  • Als Standardbrowser wird Chromium statt Firefox während der Erst-Installation eingerichtet (Firefox lässt sich aber problemlos nachrüsten). Chromium startet auf dem Raspberry Pi in der Regel etwas schneller.
  • Die Benutzereinrichtung erfolgt beim Start.
  • Auf ein Live-System wurde verzichtet (bei den MX-Tools fehlt auch das Snapshot-Werkzeug).
  • Die Anzahl der vorinstallierten Anwendungen ist geringer, kann aber nach eigenen Wünschen später ergänzt werden.

Der Desktop verlinkt ein kurzes Erklär-Video zur Einführung in die Raspberry Pi-Version und eine Wiki-Seite mit kurzen Tipps für Einsteiger. Weiterhin finden sich in den Menüs eine Reihe von Programmen, die man vom Raspberry Pi OS her kennt:

  • Raspberry Pi - Konfiguration
  • Raspberry Pi - Dokumentation
  • Raspberry Pi - Imager
  • SD Card Copier usw.

Wie schlägt sich diese Version nun im Vergleich zum hauseigenen Raspberry Pi OS?

Bereits für den 4-er gab es nach kurzer Zeit ARM-kompatible Versionen von Ubuntu bis zu Manjaro. Die "funktionierten" auf den kleinen Pi-Geräten zwar auch einigermaßen, waren aber speicherhungriger und träger als das Pi-OS. Ich habe damals fünf oder sechs ausprobiert - und bin immer wieder zurück zu Raspberry Pi OS. Das System ist zwar optisch kein Hingucker und funktional eher an Basics orientiert - aber von LibreOffice bis hin zu Docker-Anwendungen läuft ja alles, was man im Alltag so benötigt. Und die Bookworm-64-Variante für den 5-er ist nun wirklich derart flott geworden, dass ich ausgesprochen zufrieden mit ihr bin.

Daher war ich vor der Installation von MX Linux skeptisch.

Meine Testumgebung:

  • Raspberry Pi 5 mit 8 GB
  • Raspberry Pi Originalgehäuse mit "Lüfter im Deckel"
  • Raspberry Pi USB-C Netzteil (bis 27 W)

Der Start von MX Linux geschieht zügig, im Arbeitsspeicher belegt es 775 MB.

WLAN wird sofort gefunden, Bluetooth läuft, Bildschirmanzeigen tadellos. Netzwerk-Drucker und -Scanner werden auf Anhieb gefunden. Die Anwendungen aus der MX-Toolbox funktionieren ebenfalls - von der Nutzerverwaltung bis zur Samba-Konfiguration.

Programmaufrufe, Webseiten, Installation von neuen Programmen usw. - alles läuft ausgesprochen flott. Einen Unterschied zum OS von Raspberry Pi konnte ich nicht wahrnehmen. Was YouTube oder Streaming-Dienste betrifft, so haben beide Systeme das gleiche Problem: In hohen Auflösungen laufen die Videos nicht rund, aber etwas niedriger eingestellt ist dann auch dieser Bereich einigermaßen okay. Videokonferenzen z.B. mit Jitsi laufen hingegen recht gut. Ein großer Pluspunkt ist die übersichtliche Darstellung der verschiedenen Paketquellen. Von der Empfehlungsrubrik für Einsteiger bis zu Flatpaks wird ein großer Kosmos von Möglichkeiten eröffnet.

Neugierig war ich auf das Lüfter-Management - hier hatte wohl die Ubuntu-Ausgabe für den Raspberry Pi Probleme (der Lüfter lief ununterbrochen). Aber auch hier war alles in Ordnung: Während der Alltagsnutzung, z.B. bei der Nutzung von Office-Anwendungen, blieb es meist im 55 bis 58-Grad-Bereich. Unter Belastung, zwei Videos gleichzeitig plus zwei unterschiedliche Browser plus 10 Browser-Tabs, wurde der Lüfter zwar eingeschaltet, war aber kaum zu hören. Höher als 68 Grad kam ich bei dieser Belastung nicht, danach ging es innerhalb von Sekunden wieder auf unter 60 Grad.

Ich werde das System noch einige Tage testen. Wenn es sich bei allen Anforderungen als stabil erweist, steige ich zumindest auf dem 5-er auf MX Linux um. Aber auch auf einem 4-er oder 400-er sollte sich ein Test von MX Linux lohnen.

Quellen:
https://mxlinux.org/blog/mx-23-1-raspberry-pi-os-respin/
https://mxlinux.org/wiki/rpi-tips/
https://distrowatch.com/dwres.php?resource=popularity)


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

4. Januar 2024

Manchmal möchte ich mein Auditorium über eine Aussage, eine Theorie oder einen anderen Gedanken nachdenken lassen. Deshalb habe ich mir für meine Folien einen kleinen Timer in Javascript gebaut, der eine gewünschte Anzahl an Minuten oder Sekunden herunterzählt.

Javascript

Ich erstelle die Datei timer.js und gebe ihr folgenden Inhalt:

// inspired by Mateusz Rybczonec

const FULL_DASH_ARRAY = 283;
const WARNING_THRESHOLD = 10;
const ALERT_THRESHOLD = 5;

const COLOR_CODES = {
  info: {
    color: "green"
  },
  warning: {
    color: "orange",
    threshold: WARNING_THRESHOLD
  },
  alert: {
    color: "red",
    threshold: ALERT_THRESHOLD
  }
};

// Funktion zur Initialisierung des Timers in einem Container
function initializeTimer(containerId, timeLimit) {
  let timePassed = 0;
  let timeLeft = timeLimit;
  let timerInterval = null;
  let remainingPathColor = COLOR_CODES.info.color;

  // Dynamisches Erstellen des Timer-HTML-Inhalts für jeden Container
  document.getElementById(containerId).innerHTML = `
    <div class="base-timer">
      <svg class="base-timer__svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
        <g class="base-timer__circle">
          <circle class="base-timer__path-elapsed" cx="50" cy="50" r="45"></circle>
          <path
            id="${containerId}-path-remaining"
            stroke-dasharray="283"
            class="base-timer__path-remaining ${remainingPathColor}"
            d="
              M 50, 50
              m -45, 0
              a 45,45 0 1,0 90,0
              a 45,45 0 1,0 -90,0
            "
          ></path>
        </g>
      </svg>
      <span id="${containerId}-label" class="base-timer__label">${formatTime(
        timeLeft
      )}</span>
    </div>
  `;

  startTimer();

  // Startet den Timer für einen bestimmten Container
  function startTimer() {
    timerInterval = setInterval(() => {
      timePassed = timePassed += 1;
      timeLeft = timeLimit - timePassed;
      document.getElementById(`${containerId}-label`).innerHTML = formatTime(
        timeLeft
      );
      setCircleDasharray();
  

    setRemainingPathColor(timeLeft);

      if (timeLeft === 0) {
        onTimesUp();
      }
    }, 1000);
  }

  // Funktion, die aufgerufen wird, wenn der Timer abgelaufen ist
  function onTimesUp() {
    clearInterval(timerInterval);
  }

  // Funktion zur Formatierung der verbleibenden Zeit
  function formatTime(time) {
    const minutes = Math.floor(time / 60);
    let seconds = time % 60;

    if (seconds < 10) {
      seconds = `0${seconds}`;
    }

    return `${minutes}:${seconds}`;
  }

  // Funktion zur Festlegung der Farbe des verbleibenden Pfades basierend auf der verbleibenden Zeit
  function setRemainingPathColor(timeLeft) {
    const { alert, warning, info } = COLOR_CODES;
    const pathId = `${containerId}-path-remaining`;

    if (timeLeft <= alert.threshold) {
      document.getElementById(pathId).classList.remove(warning.color);
      document.getElementById(pathId).classList.add(alert.color);
    } else if (timeLeft <= warning.threshold) {
      document.getElementById(pathId).classList.remove(info.color);
      document.getElementById(pathId).classList.add(warning.color);
    }
  }

  // Funktion zur Berechnung des Anteils der verstrichenen Zeit
  function calculateTimeFraction() {
    const rawTimeFraction = timeLeft / timeLimit;
    return rawTimeFraction - (1 / timeLimit) * (1 - rawTimeFraction);
  }

  // Funktion zur Festlegung der Strichlänge des verbleibenden Pfades basierend auf dem Anteil der verstrichenen Zeit
  function setCircleDasharray() {
    const circleDasharray = `${(
      calculateTimeFraction() * FULL_DASH_ARRAY
    ).toFixed(0)} 283`;
    document
      .getElementById(`${containerId}-path-remaining`)
      .setAttribute("stroke-dasharray", circleDasharray);
  }
}

quarto Dokument

Innerhalb des quarto-Dokuments kann ein Timer wie folgt eingebunden werden:

<div id="UNIQUE-ID"></div>
<script src="timer.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        initializeTimer("UNIQUE-ID", SECONDS); 
    });
</script>

…wobei UNIQUE-ID an beiden Stellen durch eine eindeutige ID und SECONDS durch die gewünschte Anzahl an Sekunden ersetzt werden müssen.

Ein Beispiel für einen 4minütigen Timer könnte so aussehen:

Please think about this for 4 minutes.
<div id="4minWaiting"></div>
<script src="timer.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        initializeTimer("4minWaiting", 240); 
    });
</script>

Es können beliebig viele Timer verwendet werden, solange immer eine eindeutige UNIQUE-ID verwendet wird.

Countdown-Timer im Einsatz

Quarto-Extension

Mittlerweile gibt es eine eigene kleine Extension, über die der Timer the quarto way installiert werden kann:

$ quarto add produnis/quarto-timer

Viel Spass damit!

Weblinks




kommentiere per [matrix]:

Manchmal möchte ich mein Auditorium über eine Aussage, eine Theorie oder einen anderen Gedanken nachdenken lassen. Deshalb habe ich mir für meine Folien einen kleinen Timer in Javascript gebaut, der eine gewünschte Anzahl an Minuten oder Sekunden herunterzählt.

Javascript

Ich erstelle die Datei timer.js und gebe ihr folgenden Inhalt:

// inspired by Mateusz Rybczonec

const FULL_DASH_ARRAY = 283;
const WARNING_THRESHOLD = 10;
const ALERT_THRESHOLD = 5;

const COLOR_CODES = {
  info: {
    color: "green"
  },
  warning: {
    color: "orange",
    threshold: WARNING_THRESHOLD
  },
  alert: {
    color: "red",
    threshold: ALERT_THRESHOLD
  }
};

// Funktion zur Initialisierung des Timers in einem Container
function initializeTimer(containerId, timeLimit) {
  let timePassed = 0;
  let timeLeft = timeLimit;
  let timerInterval = null;
  let remainingPathColor = COLOR_CODES.info.color;

  // Dynamisches Erstellen des Timer-HTML-Inhalts für jeden Container
  document.getElementById(containerId).innerHTML = `
    <div class="base-timer">
      <svg class="base-timer__svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
        <g class="base-timer__circle">
          <circle class="base-timer__path-elapsed" cx="50" cy="50" r="45"></circle>
          <path
            id="${containerId}-path-remaining"
            stroke-dasharray="283"
            class="base-timer__path-remaining ${remainingPathColor}"
            d="
              M 50, 50
              m -45, 0
              a 45,45 0 1,0 90,0
              a 45,45 0 1,0 -90,0
            "
          ></path>
        </g>
      </svg>
      <span id="${containerId}-label" class="base-timer__label">${formatTime(
        timeLeft
      )}</span>
    </div>
  `;

  startTimer();

  // Startet den Timer für einen bestimmten Container
  function startTimer() {
    timerInterval = setInterval(() => {
      timePassed = timePassed += 1;
      timeLeft = timeLimit - timePassed;
      document.getElementById(`${containerId}-label`).innerHTML = formatTime(
        timeLeft
      );
      setCircleDasharray();
  

    setRemainingPathColor(timeLeft);

      if (timeLeft === 0) {
        onTimesUp();
      }
    }, 1000);
  }

  // Funktion, die aufgerufen wird, wenn der Timer abgelaufen ist
  function onTimesUp() {
    clearInterval(timerInterval);
  }

  // Funktion zur Formatierung der verbleibenden Zeit
  function formatTime(time) {
    const minutes = Math.floor(time / 60);
    let seconds = time % 60;

    if (seconds < 10) {
      seconds = `0${seconds}`;
    }

    return `${minutes}:${seconds}`;
  }

  // Funktion zur Festlegung der Farbe des verbleibenden Pfades basierend auf der verbleibenden Zeit
  function setRemainingPathColor(timeLeft) {
    const { alert, warning, info } = COLOR_CODES;
    const pathId = `${containerId}-path-remaining`;

    if (timeLeft <= alert.threshold) {
      document.getElementById(pathId).classList.remove(warning.color);
      document.getElementById(pathId).classList.add(alert.color);
    } else if (timeLeft <= warning.threshold) {
      document.getElementById(pathId).classList.remove(info.color);
      document.getElementById(pathId).classList.add(warning.color);
    }
  }

  // Funktion zur Berechnung des Anteils der verstrichenen Zeit
  function calculateTimeFraction() {
    const rawTimeFraction = timeLeft / timeLimit;
    return rawTimeFraction - (1 / timeLimit) * (1 - rawTimeFraction);
  }

  // Funktion zur Festlegung der Strichlänge des verbleibenden Pfades basierend auf dem Anteil der verstrichenen Zeit
  function setCircleDasharray() {
    const circleDasharray = `${(
      calculateTimeFraction() * FULL_DASH_ARRAY
    ).toFixed(0)} 283`;
    document
      .getElementById(`${containerId}-path-remaining`)
      .setAttribute("stroke-dasharray", circleDasharray);
  }
}

quarto Dokument

Innerhalb des quarto-Dokuments kann ein Timer wie folgt eingebunden werden:

<div id="UNIQUE-ID"></div>
<script src="timer.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        initializeTimer("UNIQUE-ID", SECONDS); 
    });
</script>

…wobei UNIQUE-ID an beiden Stellen durch eine eindeutige ID und SECONDS durch die gewünschte Anzahl an Sekunden ersetzt werden müssen.

Ein Beispiel für einen 4minütigen Timer könnte so aussehen:

Please think about this for 4 minutes.
<div id="4minWaiting"></div>
<script src="timer.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        initializeTimer("4minWaiting", 240); 
    });
</script>

Es können beliebig viele Timer verwendet werden, solange immer eine eindeutige UNIQUE-ID verwendet wird.

Countdown-Timer im Einsatz

Quarto-Extension

Mittlerweile gibt es eine eigene kleine Extension, über die der Timer the quarto way installiert werden kann:

$ quarto add produnis/quarto-timer

Viel Spass damit!

Weblinks




kommentiere per [matrix]:

3. Januar 2024

Mit quarto können über revealjs schöne HTML-Folien erstellt werden.

Über die YAML-Parameter

format: 
  revealjs: 
    embed-resources: true

wird eine HTML-Datei erzeugt, die alle benötigten Daten (z.B Medien- oder Scriptdateien) enthält. Der Vorteil liegt auf der Hand: eine solche HTML-Datei läuft auch offline, und ich muss mich nicht um weitere Ressourcen kümmern. Auf Konferenzen beispielsweise läuft eine solche HTML-Datei direkt auf (fast) jedem Gerät.

Möchte man in den Folien lokale Schriftdateien (Fonts) verwenden, so können auch diese in 3 Schritten in die HTML-Datei integriert werden.

Schritt 1: Font-Dateien in resources-Liste

In diesem Beispiel möchte ich die Schrift Vollkorn als Hauptschrift und Roboto Mono als Monotype verwenden. Von der Webseite habe ich die woff2-Dateien heruntergeladen, und innerhalb meines Quartoprojektes in den Unterordner “fonts” gespeichert. Um sicherzustellen, dass diese Dateien auch exportiert werden, gebe ich sie im YAML-Header expliziet unter resources an:

format: 
  revealjs: 
    embed-resources: true
    resources:
      - fonts/Roboto-Mono-regular.woff2
      - fonts/Vollkorn-Bold.woff2
      - fonts/Vollkorn-BoldItalic.woff2
      - fonts/Vollkorn-Italic.woff2
      - fonts/Vollkorn-Regular.woff2

Schritt 2: SCSS-Datei

Damit die Datei später erkannt wird, müssen wir sie mittels einer SCSS-Datei quarto bekannt machen. Es bietet sich dabei an, für jede lokale Schrift, die verwendet werden soll, eine eigene SCSS-Datei anzulegen.

Monospace

Für Roboto Mono ist dies schnell erledigt. Ich nenne die Datei fontrobotomono.scss und gebe ihr folgenden Inhalt:

/*-- scss:defaults --*/
$font-family-monospace: "Roboto Mono" !default;

@font-face {
  font-family: 'Roboto Mono';
  src: url('../../../../../fonts/Roboto-Mono-regular.woff2') format('woff2');
  font-weight: normal;
  font-style: normal;
}

Beachten Sie den relativen Pfad zu der woff2-Datei. Quarto benötigt 5x ../, um sich später im richtigen Verzeichnis mit den Schriften wiederzufinden.

Sans Serif

Für die Vollkorn-Fonts erzeuge ich die Datei fontvollkorn.scss mit folgendem Inhalt:

/*-- scss:defaults --*/
$font-family-sans-serif: "Vollkorn" !default;

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Regular.woff2') format('woff2');
  font-weight: normal; // Black
  font-style: normal;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Italic.woff2') format('woff2');
  font-weight: normal; // Black
  font-style: italic;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Bold.woff2') format('woff2');
  font-weight: bold;
  font-style: normal;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-BoldItalic.woff2') format('woff2');
  font-weight: bold;
  font-style: italic;
}

Beachten Sie auch hier den relativen Pfad zu den woff2-Dateien. Quarto benötigt 5x ../, um sich später im richtigen Verzeichnis mit den Schriften wiederzufinden.

Schritt 3: SCSS-Datei einbinden

Nun können wir im YAML-Header die SCSS-Dateien über den theme-Parameter einbinden, und somit die Hauptschrift auf Vollkorn, und Monospace auf Roboto Mono umzustellen.

format: 
  revealjs: 
    embed-resources: true
    resources:
      - fonts/Roboto-Mono-regular.woff2
      - fonts/Vollkorn-Bold.woff2
      - fonts/Vollkorn-BoldItalic.woff2
      - fonts/Vollkorn-Italic.woff2
      - fonts/Vollkorn-Regular.woff2
    theme: [default, fontvollkorn.scss, fontrobotomono.scss]

Und schon ist die Hauptschrift in Vollkorn, und Monospace ist Roboto Mono, und die Fontdateien sind in der HTML-Datei enthalten.

Weblinks




kommentiere per [matrix]:

Mit quarto können über revealjs schöne HTML-Folien erstellt werden.

Über die YAML-Parameter

format: 
  revealjs: 
    embed-resources: true

wird eine HTML-Datei erzeugt, die alle benötigten Daten (z.B Medien- oder Scriptdateien) enthält. Der Vorteil liegt auf der Hand: eine solche HTML-Datei läuft auch offline, und ich muss mich nicht um weitere Ressourcen kümmern. Auf Konferenzen beispielsweise läuft eine solche HTML-Datei direkt auf (fast) jedem Gerät.

Möchte man in den Folien lokale Schriftdateien (Fonts) verwenden, so können auch diese in 3 Schritten in die HTML-Datei integriert werden.

Schritt 1: Font-Dateien in resources-Liste

In diesem Beispiel möchte ich die Schrift Vollkorn als Hauptschrift und Roboto Mono als Monotype verwenden. Von der Webseite habe ich die woff2-Dateien heruntergeladen, und innerhalb meines Quartoprojektes in den Unterordner “fonts” gespeichert. Um sicherzustellen, dass diese Dateien auch exportiert werden, gebe ich sie im YAML-Header expliziet unter resources an:

format: 
  revealjs: 
    embed-resources: true
    resources:
      - fonts/Roboto-Mono-regular.woff2
      - fonts/Vollkorn-Bold.woff2
      - fonts/Vollkorn-BoldItalic.woff2
      - fonts/Vollkorn-Italic.woff2
      - fonts/Vollkorn-Regular.woff2

Schritt 2: SCSS-Datei

Damit die Datei später erkannt wird, müssen wir sie mittels einer SCSS-Datei quarto bekannt machen. Es bietet sich dabei an, für jede lokale Schrift, die verwendet werden soll, eine eigene SCSS-Datei anzulegen.

Monospace

Für Roboto Mono ist dies schnell erledigt. Ich nenne die Datei fontrobotomono.scss und gebe ihr folgenden Inhalt:

/*-- scss:defaults --*/
$font-family-monospace: "Roboto Mono" !default;

@font-face {
  font-family: 'Roboto Mono';
  src: url('../../../../../fonts/Roboto-Mono-regular.woff2') format('woff2');
  font-weight: normal;
  font-style: normal;
}

Beachten Sie den relativen Pfad zu der woff2-Datei. Quarto benötigt 5x ../, um sich später im richtigen Verzeichnis mit den Schriften wiederzufinden.

Sans Serif

Für die Vollkorn-Fonts erzeuge ich die Datei fontvollkorn.scss mit folgendem Inhalt:

/*-- scss:defaults --*/
$font-family-sans-serif: "Vollkorn" !default;

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Regular.woff2') format('woff2');
  font-weight: normal; // Black
  font-style: normal;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Italic.woff2') format('woff2');
  font-weight: normal; // Black
  font-style: italic;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-Bold.woff2') format('woff2');
  font-weight: bold;
  font-style: normal;
}

@font-face {
  font-family: 'Vollkorn';
  src: url('../../../../../fonts/Vollkorn-BoldItalic.woff2') format('woff2');
  font-weight: bold;
  font-style: italic;
}

Beachten Sie auch hier den relativen Pfad zu den woff2-Dateien. Quarto benötigt 5x ../, um sich später im richtigen Verzeichnis mit den Schriften wiederzufinden.

Schritt 3: SCSS-Datei einbinden

Nun können wir im YAML-Header die SCSS-Dateien über den theme-Parameter einbinden, und somit die Hauptschrift auf Vollkorn, und Monospace auf Roboto Mono umzustellen.

format: 
  revealjs: 
    embed-resources: true
    resources:
      - fonts/Roboto-Mono-regular.woff2
      - fonts/Vollkorn-Bold.woff2
      - fonts/Vollkorn-BoldItalic.woff2
      - fonts/Vollkorn-Italic.woff2
      - fonts/Vollkorn-Regular.woff2
    theme: [default, fontvollkorn.scss, fontrobotomono.scss]

Und schon ist die Hauptschrift in Vollkorn, und Monospace ist Roboto Mono, und die Fontdateien sind in der HTML-Datei enthalten.

Weblinks




kommentiere per [matrix]:

2. Januar 2024

Mit dem AI Guide stellt Mozilla ein kollobaratives Nachschlagewerk zum Thema Künstliche Intelligenz bereit, welches Entwicklern den Einstieg in die KI-Branche erleichtern soll.

Bereits im November hatte Mozilla eine erste Version vom Mozilla AI Guide angekündigt. Im Rahmen der Innovation Week im Dezember hat das Mozilla Innovation Team eine aktualisierte Fassung veröffentlicht.

Beim AI Guide handelt es sich um ein Nachschlagewerk mit Fokus auf Entwicklern, welches Grundlagen über Künstliche Intelligenz (KI), Sprachmodelle und mehr erklärt. Dabei ist die Community explizit eingeladen, Beiträge beizusteuern, um den Guide zu erweitern.

Mozilla AI Guide

Der Beitrag Mozilla AI Guide: Nachschlagewerk zum Thema KI erschien zuerst auf soeren-hentzschel.at.

1. Januar 2024

Mit MemoryCache hat das Mozilla Innovation Team ein weiteres KI-Experiment vorgestellt. Dieses soll aus vom Benutzer bereitgestellten Daten wie besuchten Websites lernen.

Im Rahmen der Innovation Week im Dezember hat das Mozilla Innovation Team mehrere Projekte aus dem Bereich der Künstlichen Intelligenz vorgestellt, darunter mit Solo einen KI-basierten Website-Builder und mit llamafile eine revolutionäre Möglichkeit, einen LLM-Chatbot in einer einzigen Datei auszuliefern, welche auf verschiedenen Betriebssystemen einfach gestartet werden kann und im Gegensatz zu ChatGPT & Co. lokal auf dem Computer läuft. Ein weiteres Projekt ist MemoryCache.

Die Idee von MemoryCache ist es, einen lokalen KI-Assistenten bereitzustellen, welcher nicht etwa aus großen Modellen, sondern aus vom Anwender selbst bereitgestellten und kategorisierbaren Informationen lernt und dann beispielsweise bei der Recherche oder beim Brainstorming hilft, scheinbar nicht zusammenhängende Themen miteinander zu verbinden und so neue Einsichten und Erkenntnisse zu gewinnen. So können zum Beispiel besuchte Websites gespeichert werden, aber auch Dateien, die manuell hinzugefügt werden. Der große Datenschutz-Vorteil, wie auch schon bei llamafile: Alles findet lokal auf dem eigenen Computer statt, es werden keine Daten an irgendeinen Dritten weitergeleitet.

Das folgende Bild zeigt ein Mockup einer möglichen zukünftigen Oberfläche:

Mozilla MemoryCache Mockup

MemoryCache befindet sich noch in einem früheren experimentellen Status. Dementsprechend kompliziert ist die Ausführung zu diesem Zeitpunkt noch. Neben einem lokalen Setup einer älteren Version von PrivateGPT sowie einem konfigurierten Symlink auf dem System wird derzeit noch eine Firefox-Erweiterung sowie ein angepasster Firefox-Build benötigt. Zu einem späteren Zeitpunkt soll das idealerweise einfacher funktionieren.

Der Beitrag MemoryCache: Lokaler KI-Assistent erschien zuerst auf soeren-hentzschel.at.

31. Dezember 2023

Es ist der 31.12.2023 und somit wird es wieder Zeit für den traditionellen Jahresrückblick. Dieses Jahr dominierten zwei Buchstaben: KI. Die Veröffentlichung von ChatGPT erfolgte zwar kurz vor 2023, in diesem Jahr wurden allerdings die Auswirkungen sichtbar. Ich muss sagen, dass es lange kein Werkzeug gab, an dem ich so viel Experimentierfreude erleben konnte.

Dabei ist die Mensch-Maschine-Schnittstelle besonders spannend. Die natürlichsprachliche Interaktion verbessert nicht nur die Zugänglichkeit, sondern erhöht auch die Interoperabilität: Das Werkzeug kann nicht nur die Aufgabe verstehen, sondern die Ergebnisse in der gewünschten Form darstellen. Schreibe ich eine Software, erfüllt sie nur einen Zweck. ChatGPT kann besonders einfach an neue Aufgabenbereiche angepasst werden. Man muss nicht einmal im klassischen Sinne "programmieren". Somit wird die Arbeit mit dem Computer auf eine ganz neue Stufe gehoben.

Auf die technische Ebene möchte ich heute gar nicht direkt eingehen, das haben wir das Jahr schon im Detail in diesem Blog ergründet. Diskussionen über Technik und Innovationen stellen nur eine Augenblickaufnahme dar. Im Rückblick auf eine größere Zeitepisode wie ein mindestens Jahr werden allerdings gesellschaftliche Entwicklungen deutlich. Und hier gab es einiges zu beobachten.

KI für die Massen

ChatGPT hat eine große Nutzerbasis erreicht, die zumindest ein Mal das Werkzeug ausprobiert hat. Im deutschsprachigen Raum, der sonst sich so "datenschutzorientiert" und innovationskritisch gibt, ist das schon bemerkenswert. Diskussionen über Datenschutz waren zweitrangig, die Menschen waren von der Innovation durch das Werkzeug fasziniert. Natürlich kam über das Jahr die Erkenntnis, dass in der aktuellen Form die Technologie je nach Branche noch nicht weit genug ausgereift ist, trotzdem wollte jeder einmal schauen, was es damit auf sich hat und ob es den Alltag erleichtern kann.

Und doch hat OpenAIs Werkzeug in meinen Augen ein wenig den Blick verengt: Durch das schnelle Wachstum wurde ChatGPT zum Sinnbild von "KI" und hat Ängste geschürt. Denn einerseits will jeder, dass KI ihm das Leben einfacher macht, jedoch nicht, dass andere mit KI ihm seine Lebenssituation verschlechtern bzw. ihn zu einem Umdenken zwingen. Ein Zeitungsredakteur möchte gerne KI für die Verbesserung seiner Texte einsetzen, fürchtet jedoch um seine Jobzukunft, wenn andere ihn durch automatische Generierung ganzer Zeitungsbeiträge drohen, überflüssig zu machen.

Dieser Umstand hat die Diskussion rund um den europäischen AI Act noch einmal deutlich angeheizt. An Large Language Models wurden auf einmal hohe Anforderungen gestellt, um subjektiven Ängsten entgegenzutreten. Dann war man sich aufgrund der Innovationsgeschwindigkeit auf einmal nicht sicher, ob es jetzt schon Zeit für eine starre Regulierung ist. Und schlussendlich zeichnet sich eine politische Entwicklung ab, jetzt lieber irgendeinen Kompromiss als später eine gut ausgearbeitete Fassung präsentieren zu können. Wie der AI Act kommt, werden wir dann im nächsten Jahr sehen.

Das alles war aber nicht das, was dieses Jahr in meinen Augen besonders gemacht hat. Es ist etwas anderes: die neue Rolle von Open Source.

Neue Hürden für Technologie?

Anfang des Jahres sah es so aus, als setzt eine besondere Kommerzialisierung in der Technikwelt ein: die Kommerzialisierung von Basistechnologie. Über die verschiedenen Jahre haben wir gesehen, dass es für verschiedene Produkte in der IT proprietäre und freie Lösungen gibt. Zwar sind erstere gerne technologisch mitunter überlegen, da die Profitorientierung Anreize setzt, für bestimmte Anwendungszwecke besonders passende Lösungen zu entwickeln. Kostet eine Software Geld, kann der Hersteller Programmierer anstellen, die auch die Features entwickeln, die man ungern freiwillig programmiert. Auf diese Weise entstehen runde Produkte für einen Anwendungszweck.

Freie bzw. zumindest quelloffene Software ermöglicht zumindest aber der Öffentlichkeit, einen Blick in die Funktionsweise zu werfen, um zu sehen, wie etwas funktioniert. Das ist die Grundlage, um Technologie zu verbessern.

In der Welt des maschinellen Lernens entstand allerdings durch die benötigte Compute Power eine hohe Eintrittshürde. Es sah so aus, als wären die Large Language Models nur noch großen Konzernen bzw. gut finanzierten Start-ups vorbehalten, die sich die Trainingspower leisten können. Während die Vorgängersysteme wie GPT-2 noch öffentlich zugänglich waren, wurden gerade Systeme wie GPT-3 und GPT-4, bei denen das Produkt endlich richtig nutzbar wurde, zurückgehalten.

Im Laufe des Frühlings habe ich allerdings vermutet, dass freie Modelle die proprietären outperformen können, weil die öffentliche Zugänglichkeit die Chance eröffnet, dass Experten weltweit mit ihren eigenen Erfahrungen, Eindrücken und ihrem Domänenwissen eine Technologie entwickeln können, die verschlossenen Produkten überlegen ist.

Überraschend war, dass es gerade das AI-Team von Facebook war, das den Stein mit LLaMA ins Rollen gebracht hat. Es folgten zahlreiche weitere Abkömmlinge, Weiterentwicklungen oder gänzliche Alternativansätze, die eines gemein hatten: ihr Kern mit den Gewichten war zugänglich.

Wie es aussieht, könnte die Dominanz proprietärer Systeme gebrochen werden, sodass auch die Möglichkeit gewahrt bleibt, einen wissenschaftlichen Diskurs zu führen. Technische Berichte proprietärer Modelle sind zwar nett, aber die Forschungsarbeiten, in denen reproduzierbare Fortschritte aufgezeigt werden, bringen uns tatsächlich eher voran.

Um die rasante Entwicklung im Frühling, als scheinbar jedes KI-Team großer Konzerne und Forschungseinrichtungen alle in der Schublade angesammelten LLM-Projekte zu veröffentlichen versuchte, im Auge zu behalten, habe ich die LLM-Timeline entwickelt. Sie wurde vor einigen Tagen wieder aktualisiert und zeigt besonders, wie sehr LLaMA als eines der ersten praktisch verwertbaren Modelle mit offenen Gewichten die Entwicklung beeinflusst hat.

Ein weiteres Projekt, das ich in der Zusammenarbeit mit der Fachhochschule Kiel realisiert habe, war der Podcast KI & Kultur, der generative Modelle aus der Perspektive Kulturschaffender beleuchtet hat.

Was bleibt

Das Jahr hat den 70 Jahre alten Begriff der KI wieder mal in die Massen gebracht. Dabei wird ChatGPT dem Begriff eigentlich gar nicht gerecht, weil es streng genommen relativ dumm ist. Insbesondere beschränkt es die Zustandsfähigkeit nur auf eine Prompt und lernt nicht, während es denkt. Training und Inferenz sind entkoppelt.

Und trotzdem ist es diese natürlichsprachliche Schnittstelle, die es so faszinierend macht. Allerdings ist auch diese Erkenntnis nicht neu und wurde schon vor 55 Jahren mit ELIZA diskutiert.

Erfreulich ist es, dass "Open Source" nicht mehr nur bei Software, sondern in neuen Technologien Anwendung findet. Der Gedanke, dass Technologie zugänglich sein muss, kann so erhalten werden. Und dass es hilft, wenn Wissenschaftler auf der ganzen Welt mit ihrem Wissen beitragen können, sehen wir weiterhin auch in dieser Thematik.

LLMs ermöglichen es, dass wir uns endlich wieder der Mensch-Maschine-Schnittstelle widmen können, die Technologie nutzbar macht. Menschen wollen, dass Technik das Leben einfacher macht. Die bisher begrenzte Rechenleistung hat uns zu Hilfsmitteln wie Displays, Touchscreens oder Tastaturen gezwungen. In den nächsten Jahren können wir schauen, wie wir das überwinden können, um endlich nutzbare Computer zu erhalten, die wirklich was bringen.

Und so ist es schon fast ironisch, dass die naheliegendste Technologie, die in den 2010er-Jahre euphorisch gefeiert wurde, von den LLMs noch wenig profitiert hat: Sprachassistenten. Sie sind überwiegend noch genau so begrenzt und unflexibel wie früher. Hier gibt es einiges zu tun.

Frohes Neues

Abschließend möchte ich meinen Lesern des Blogs und Zuhörern des Podcasts Risikozone sowie KI & Kultur danken, dass ihr den Blog lest, den Podcast hört und regelmäßig Feedback gebt. Ich wünsche euch einen guten Rutsch in das neue Jahr 2024.

Im nächsten Jahr werden wir wieder gemeinsam neue Technologien ergründen und die aktuellen Nachrichten diskutieren. Es wird auch mehr um Grundlagen und Visualisierungen gehen, hierauf freue ich mich schon besonders!

Viel Glück, Gesundheit und Erfolg!

Die Firefox-Erweiterung Obfuscate kann genutzt werden, um Inhalte auf Websites unkenntlich zu machen. Praktisch ist dies vor allem, wenn es um das Teilen von Screenshots geht und man dabei konkrete Inhalte nicht preisgeben möchte.

Manchmal kommt man in die Situation, in der man einen Screenshot oder eine Bildschirmaufnahme einer Website teilen möchte, ohne dabei bestimmte Informationen preiszugeben, weil es sich dabei beispielsweise um persönliche Informationen handelt. Abhilfe kann hierbei die Firefox-Erweiterung Obfuscate von Mozilla-Entwickler Vincent Tunru schaffen. Diese macht bei Aktivierung die Texte und Bilder der aktuellen Website unkenntlich, ohne dabei die Struktur der Website zu verändern. Per Schaltfläche oder Tastenkombination können entweder auf der gesamten Website die Inhalte unkenntlich gemacht werden oder man markiert vorher einen Teil des Textes. In dem Fall betrifft das dann nur die markierte Stelle.

Firefox-Erweiterung Obfuscate

Die Erweiterung ist sowohl mit Firefox für Windows, macOS und Linux kompatibel als auch mit Firefox für Android.

Der Beitrag Firefox-Erweiterung Obfuscate kann Inhalte auf Websites unkenntlich machen erschien zuerst auf soeren-hentzschel.at.

Ein Update des Spiels Baldurs Gate 3 hat kürzlich den Speicherplatz der NVMe gesprengt auf der ich Arch Linux inkl. diverser Benutzerdaten wie die Steam-Datenbank installiert habe. Da ich mir immer Ende jeden Jahres sozusagen selbst eine Art Weihnachtsgeschenk schenke, fiel wie Wahl diesmal auf eine größere NVMe. Also ist demnächst ein Umzug der Daten angesagt.

Da meine Datenträger verschlüsselt sind und ich nicht unbedingt alle Daten umziehen will, habe ich mich für eine Neuinstallation mit anschließender Wiederherstellung von Benutzerdaten aus dem Backup entschieden. Ein Klonen inkl. anschließender Vergrößerung der Partitionen wäre zeitlich aufwändiger.

Als Bootloader verwende ich systemd-boot, da dieser von Haus aus installiert ist und dessen Konfigurationsdateien ziemlich übersichtlich sind. Ein Eintrag, mit dem man Arch Linux startet, könnte wie folgt aussehen.

1title Arch Linux
2sort-key 01
3linux /vmlinuz-linux-zen
4initrd /amd-ucode.img
5initrd /initramfs-linux-zen.img
6options cryptdevice=UUID=28645e67-6626-49a7-b915-a3e3320d2ddb:luks:allow-discards root=/dev/mapper/luks rootflags=subvol=@ rw nowatchdog nmi_watchdog=0

Leider bietet systemd-boot keine Möglichkeit an, diese Einträge automatisch zu erstellen. Was kein Problem wäre, wäre nicht die UUID. So sinnvoll es ist UUID zu nutzen (weil sie sich nicht ändert), so nervig ist es diese einzutragen. Für zukünftige Installationen will ich es mir daher bequemer machen.

1uuid=$(blkid -s UUID -o value /dev/nvme0n1p1)
1cat <<EOF >/home/laythos/arch.conf
2title Arch Linux
3sort-key 01
4linux /vmlinuz-linux-zen
5initrd /amd-ucode.img
6initrd /initramfs-linux-zen.img
7options cryptdevice=UUID=${uuid}:luks:allow-discards root=/dev/mapper/luks rootflags=subvol=@ rw nowatchdog nmi_watchdog=0
8EOF

Der erste Befehl liest die UUID der Partition von /dev/nvme0n1p1 aus, auf der das Betriebssystem installiert ist, und speichert diese in der Variable uuid. Die Partition muss man natürlich an seine eigenen Gegebenheiten anpassen.

Der zweite Befehl erzeugt unter /boot/loader/entries die Datei arch.conf mit entsprechendem Inhalt. Anstelle von ${uuid} wird die UUID eingetragen die der erste ausgegeben hat. Bei diesem Beispiel verweist rootflags auf das Btrfs-Subvolumen @. Dort ist in meinem Fall die Distribution installiert. Wer beispielsweise ext4 als Dateisystem nutzt, muss den Eintrag daher ebenfalls anpassen.

Das Beispiel lässt sich natürlich auch für andere Dinge nutzen. Zum Beispiel zum nachträglichen Erzeugen von Einträgen in der /etc/fstab um einen neuen Datenträger dauerhaft zu mounten.

30. Dezember 2023

Mozilla als Organisation ist komplexer strukturiert, als es viele annehmen. Dies führt immer wieder zu Verwirrungen darüber, wieso Mozilla einerseits so hohe Einnahmen hat und mitunter auch hohe Gehälter auf Führungsebene bezahlt, andererseits aber immer wieder betont, auf Spenden angewiesen zu sein. Dieser Artikel soll etwas Klarheit schaffen.

Wenn von Mozilla die Rede ist, denkt man häufig nur an Firefox. Dabei ist Mozilla heute sehr viel mehr als nur Firefox. Und Nutzer, die an Mozilla spenden, meinen unter Umständen, damit für die Entwicklung von Firefox zu bezahlen. Böse Zungen behaupten sogar, damit würde ein üppiges CEO-Gehalt bezahlt werden. Solche Annahmen basieren aber auf grundlegenden Irrtümern über die Organisationsstruktur von Mozilla.

Mozilla besteht aus mehreren Organisationen

Wenn die Menschen alles, was irgendwie mit Mozilla zu tun hat, einfach nur dem Namen Mozilla zuordnen, haben sie in gewisser Weise recht. Mozilla steht für bestimmte Werte und Ziele, welche in Form des Mozilla Manifests ausformuliert sind. Diese gelten gleichermaßen über alle Mozilla-Organisationen hinweg. Eine Unterscheidung ist häufig gar nicht notwendig. Um den Zusammenhang zwischen kommerziellen Produkten und Partnerschaften auf der einen und Spenden auf der anderen Seite zu verstehen, ist es allerdings unausweichlich, die Organisationsstruktur ein wenig besser zu verstehen.

Mozilla Corporation

Da gibt es zum einen die Mozilla Corporation. Diese ist unter anderem für die Entwicklung von Firefox sowie einen Großteil der Einnahmen verantwortlich. Im Jahr 2022 hat Mozilla einen Umsatz in Höhe von 594 Millionen USD erzielt, davon 510 Millionen USD durch Partnerschaften mit Suchmaschinen für Firefox.

Die Mozilla Corporation entwickelt aber auch andere, teils kostenlose und teils kommerzielle Produkte. Darunter fallen beispielsweise das Mozilla VPN, Firefox Relay, Firefox Monitor, Mozilla Hubs und Pocket.

Mozilla Online ist eine eigenständige Tochterorganisation der Mozilla Corporation, welche für den Betrieb in China verantwortlich ist.

Mozilla Ventures, Mozilla.ai, MZLA

Mit Mozilla Ventures hat Mozilla im November 2022 die Gründung eines Risikokapitalfonds für Startups bekannt gegeben. Im März 2023 folgt die Ankündigung von Mozilla.ai, wo man sich dem Thema der vertrauenswürdigen Künstlichen Intelligenz (KI) widmet. Beide wurden jeweils als eigenständige Organisationen innerhalb von Mozilla gegründet.

Und dann gibt es noch die MZLA Technologies Corporation. Diese entwickelt den E-Mail-Client Thunderbird. Die Entwicklung von Thunderbird findet tatsächlich komplett spendenfinanziert statt, immerhin erzielt MZLA aktuell 99,9 Prozent seiner Einnahmen durch Spenden. Spenden an MZLA funktionieren aber komplett getrennt von Spenden an „Mozilla“, wie sie im kommenden Absatz beschrieben werden.

Mozilla Foundation

Damit kommen wir zur Mozilla Foundation. Die Mozilla Foundation ist die Dachorganisation der zuvor genannten Mozilla Corporation, Mozilla Ventures, Mozilla.ai sowie MZLA Technologies Corporation.

Als steuerbefreite Not-for-Profit-Organisation nach 501(c)(3) ist es der Mozilla Foundation nicht erlaubt, Einnahmen in dieser Höhe beispielsweise durch Suchmaschinen-Partnerschaften zu erzielen, was ein wesentlicher Grund für die Existenz der Mozilla Corporation ist.

Wenn Nutzer an „Mozilla“ spenden, tun sie das für die Mozilla Foundation. Deren Aufgabe ist nicht die Entwicklung von Firefox oder anderen kommerziellen Produkten und auch nicht die Bezahlung des CEO-Postens der Mozilla Corporation.

Die Aufgaben der Mozilla Foundation umfassen Dinge wie politisches Engagement, indem man sich beispielsweise für eine Gesetzgebung im Sinne der Nutzer einsetzt. Dinge wie Common Voice, dem weltweit größten öffentlichen Datensatz menschlicher Stimmen, das Mozilla Festival, der Einkaufsberater mit Datenschutzfokus Datenschutz nicht inbegriffen, das Data Futures Lab oder Studien wie YouTube Regrets, um fragwürdige YouTube-Empfehlungen besser zu verstehen, sind Projekte der Mozilla Foundation. Aktuell arbeitet die Mozilla Foundation an einer App, um die Algorithmen von TikTok besser zu verstehen. Außerdem unterstützt die Mozilla Foundation andere Projekte durch Förderungen und Stipendien.

Die Mozilla Foundation ist auf Spenden angewiesen. Außerdem erhält sie einen Prozentsatz des Jahresumsatzes der Mozilla Corporation als „Lizenzgebühren“. So hat die Mozilla Corporation im Jahr 2022 etwas über 19 Millionen USD an die Mozilla Foundation gezahlt.

Mozilla Finanzen Diagramm
Bildquelle: Mozilla

Moment, aber wie spende ich nun für die Firefox-Entwicklung?

Es gibt keine direkte Möglichkeit, für die Entwicklung von Firefox oder einem anderen Mozilla-Produkt zu spenden. Ausnahme ist wie bereits beschrieben Thunderbird, was über ein separates Spendenformular funktioniert. Alle anderen Spenden kommen der Mozilla Foundation zugute.

Um die Entwicklung eines Mozilla-Produkts zu unterstützen, besteht die Möglichkeit, ein Abo eines kommerziellen Mozilla-Produkts zu nutzen, beispielsweise das Mozilla VPN, Firefox Relay Premium, Pocket Premium oder MDN Plus. Diese Form der Unterstützung ist zwar nicht steuerlich absetzbar, dafür erhält man aber eine Gegenleistung, die man nutzen kann. Diese Einnahmen erreichen die Mozilla Corporation, wovon unter anderem auch die Entwicklung von Firefox profitiert.

Fazit

Wie man sieht, muss man zwingend zwischen den Einnahmen durch unter anderem Suchmaschinen einerseits und Spenden andererseits unterscheiden. Weder handelt es sich bei den großen Geldbeträgen, die immer wieder durch die Medien gehen, um Mittel, welche der Mozilla Foundation zur Verfügung stehen, noch sind die Spenden an die Mozilla Corporation und deren CEO gerichtet. Beides hat schlicht und ergreifend nichts miteinander zu tun, außer dass die Mozilla Foundation auch vom Erfolg der Mozilla Corporation direkt profitiert, nicht aber umgekehrt.

Der Beitrag Die Organisationsstruktur von Mozilla erschien zuerst auf soeren-hentzschel.at.