staging.inyokaproject.org

5. Januar 2024

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 = `
    
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 " > ${formatTime( timeLeft )}
`; 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.

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.



Aktualisierung und Kernel-Umstellung auf Raspberry Pi OS Bookworm

WARNUNG: SORGFÄLTIG LESEN UND VORHER EIN BACKUP DER SD-KARTE ERSTELLEN

Diese Anleitung ermöglicht die Aktualisierung von Raspberry PiOS auf die neueste Version (Bookworm) und den Wechsel zu den neuen Kernels. Bitte beachten, dass dieser Vorgang nicht offiziell empfohlen wird und möglicherweise nicht für alle Anwendungen geeignet ist, besonders das Upgrade einer Installation mit grafischer Oberfläche wurde nicht getestet und wird höchstwahrscheinlich nicht ohne weiteres möglich sein. Auch ein Upgrade der 32-Bit Version von PiOS wurde nicht getestet.

With that out of the way:

Die 10 Schritte

Schritt 1: Sicherstellen, dass alles auf dem neuesten Stand ist

sudo apt-get update && sudo apt-get dist-upgrade

Schritt 2: Umstellen auf Bookworm-Repositorys

sudo sed -i -e 's/bullseye/bookworm/g' /etc/apt/sources.list
sudo sed -i -e 's/bullseye/bookworm/g' /etc/apt/sources.list.d/raspi.list

Inhalt von /etc/apt/sources.list sollte jetzt so aussehen:

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
#deb-src http://deb.debian.org/debian bookworm main contrib non-free
#deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free
#deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free

Inhalt von /etc/apt/sources.list.d/raspi.list:

deb http://archive.raspberrypi.org/debian/ bookworm main
#deb-src http://archive.raspberrypi.org/debian/ bookworm main

Schritt 3: Tatsächliches Update durchführen

sudo apt update && sudo apt -y full-upgrade && sudo apt -y clean && sudo apt -y autoremove

Schritt 4: Neustart

sudo reboot

Schritt 5: Alte Konfigurationsdateien entfernen

sudo apt purge ?config-files

Schritt 6: Wechseln zu den neuen Kernels

Vorbereitung

sudo dpkg --purge --force-depends raspberrypi-kernel raspberrypi-bootloader
sudo umount /boot
sudo fsck -y /boot
sudo mkdir /boot/firmware
sudo sed -i.bak -e "s#boot#boot/firmware#" /etc/fstab
sudo systemctl daemon-reload
sudo mount /boot/firmware
sudo apt install raspi-firmware

Tatsächliche Installation der Kernel (Die richtige Version für den Pi wählen)

# 64-Bit
sudo apt install linux-image-rpi-v8 linux-headers-rpi-v8

# 32-Bit
# sudo apt install linux-image-rpi-v7l linux-headers-rpi-v7l

# 32-Bit (alternative Version)
# sudo apt install linux-image-rpi-v6 linux-headers-rpi-v6

Auto_initramfs hinzufügen

sudo sed -i.bak '$ a\auto_initramfs=1' /boot/firmware/config.txt

Schritt 7: Neustart

sudo reboot

Schritt 8: Überprüfen mit "uname -a" (alter Stand, sollte mittlerweile etwas aktuellere Versionen anzeigen)

Alter Kernel:

Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

Neuer Kernel:

Linux raspberrypi 6.1.0-rpi4-rpi-v8 #1 SMP PREEMPT Debian 1:6.1.54-1+rpt2 (2023-10-05) aarch64 GNU/Linux

Schritt 9: Wechseln zu NetworkManager (optional)

sudo systemctl enable --now NetworkManager
sudo systemctl disable --now dhcpcd

Statische IP einrichten (Anpassen nach Bedarf)

sudo nmcli -p connection show 
sudo nmcli -p connection show "Wired connection 1"
sudo nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addresses 192.168.1.5/24 ipv4.gateway 192.168.1.1

Schritt 10: Neustart

sudo reboot

Hinweise:

  • Falls der Wechsel zu NetworkManager nicht durchgeführt wird, kann die Netzwerkverbindung nach dem Neustart verloren gehen.

Quelle:

https://gist.github.com/jauderho/6b7d42030e264a135450ecc0ba521bd8


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.

29. Dezember 2023

Das Mozilla Innovation Team hat llamafile vorgestellt und bringt damit die Möglichkeit, einen vollständigen LLM-Chatbot in einer einzigen Datei auszuliefern, die auf sechs Betriebssystemen läuft. Dies begünstigt unter anderem die Entwicklung von ChatGPT-Konkurrenten, die ganz einfach lokal auf dem Computer ausgeführt werden können und nicht auf die Cloud eines Tech-Giganten angewiesen sind.

Sogenannte große Sprachmodelle, besser bekannt als LLMs, werden häufig über cloudbasierte, gerne auch kommerzielle, Dienste genutzt. Dies geschieht entweder direkt über den jeweiligen Dienst oder indem ein Produkt genutzt wird, welches auf einer Schnittstelle eines solchen Dienstes aufbaut, was Fragen in Bezug auf Datenschutz, Zugang und Kontrolle aufwirft. Werden die Unterhaltungen beispielsweise mitgelesen und wie werden die Daten verwendet? Wenn man nichts unternehme, würde in Zukunft „diese neue Ära der KI von einer Handvoll mächtiger Technologieunternehmen dominiert werden“, denen man dann vertrauen müsse, dass sie das Richtige tun, so Mozilla. Aus diesem Grund bräuchte es einen Plan B.

Diesen Plan B sieht Mozilla in der Open Source Community, welche dafür sorgen kann, dass der Zugang zu Künstlicher Intelligenz frei und kostenlos bleibt. Während Open Source KI in den letzten Jahren enorme Fortschritte gemacht hat, ist es immer noch nicht einfach, einen Open Source KI-Stack zum Laufen zu bekommen. Dies erfordert immer noch einiges an Fachwissen und Aufwand.

Im Rahmen der Innovation Week im Dezember hat das Mozilla Innovation Team llamafile vorgestellt. Mit llamafile werden LLM-Gewichte in ausführbare Dateien umgewandelt. Diese laufen auf Windows, macOS, Linux, OpenBSD, FreeBSD sowie NetBSD. Damit wird die Nutzung einer KI quasi so einfach wie der Doppelklick auf eine App, schreibt Mozilla. Dies ermögliche es mehr Entwicklern, mit der Technologie zu arbeiten, und mehr Endnutzern, Lösungen einzusetzen, welche Open Source statt Closed Source sind.

Für die Umsetzung von llamafile greift Mozilla auf bereits bestehende Open Source Technologie zurück. Zum einen ist dies llama.cpp, was eine Portierung von Metas LLaMA-Modellen in C/C++ ist und es ermöglicht, LLMs auf gewöhnlicher Endnutzer-Hardware laufen zu lassen. Zum anderen ist dies Cosmopolitan, was die Verteilung und Ausführung von Programmen auf einer Vielzahl von Betriebssystemen und Hardware-Architekturen unterstützt und deren Entwicklerin auch die Entwicklerin von llamafile ist. Zuvor hatte Mozilla über sein MIECO-Programm bereits die Entwicklung von Cosmopolitan 3.0 gesponsert. Mit llamafile werden diese beiden Projekte quasi kombiniert, um so beispielsweise einen Chatbot, vergleichbar mit ChatGPT, ganz einfach lokal auf dem eigenen Computer ausführen zu können.

Mozilla sieht in llamafile einen großen Schritt nach vorne, was den Zugang zu Open Source KI betrifft. Darüber hinaus möchte Mozilla mit dem Projekt „lokale KI“ vorantreiben. Keine Abhängigkeit von einer Cloud, man behält die Kontrolle über die Daten, niemand liest die Fragen oder Antworten mit. Ein weiterer Vorteil ist, dass die KI immer verfügbar ist und man nicht auf eine bestehende Internetverbindung angewiesen ist.

Wer llamafile testen möchte, findet auf GitHub mehrere Beispiel-Dateien zum Herunterladen. Nach Ausführung der entsprechenden Datei kann über den Browser eine Eingabe-Maske aufgerufen werden. Neben einigen Parametern, die sich darüber konfigurieren lassen, kann damit eine Unterhaltung mit dem Chatbot geführt werden. Es ist sogar möglich, Bilder hochzuladen und sich diese von der KI beschreiben zu lassen.

Mozilla llamafile Mozilla llamafile Mozilla llamafile

Der Beitrag Mit llamafile revolutioniert Mozilla den KI-Zugang und damit auch die Chatbot-Technologie erschien zuerst auf soeren-hentzschel.at.

28. Dezember 2023

Ich lese auf GNU/Linux.ch nun schon eine ganze Weile mit großer Begeisterung mit. Bei den Artikeln rund um das Smartphone, fehlte mir bisher immer ein Android Custom-Rom: CalyxOS. Das wollte ich nun ändern, indem ich einen eignen Artikel dazu schreibe.



Meine ersten Erfahrungen mit Smartphones und alternativen Custom-Roms, reichen etwas weiter zurück und starteten seiner Zeit mit dem legendären Nokia N900, welches ich mit Maemo geflasht habe. Voller Begeisterung von Maemo, habe ich mir noch das N9 gekauft und ebenfalls mit Maemo geflasht. Tolle Smartphones! Nun hatte ich Lunte gerochen und mir das Jolla Phone gebraucht gekauft, was leider irgendwann durch einen Hardwaredefekt zum Erliegen kam. SailfishOS (SFOS) hatte mich jedoch so sehr begeistert, dass ich SFOS dann auf diversen Sony Xperia Modellen geflasht habe. Da ich immer wieder für mich auf Einschränkungen und Unzulänglichkeiten bei den SFOS tauglichen Smartphones gestoßen bin, habe ich mir einen Ruck gegeben und mich mit Android-Custom-Roms beschäftigt und ausprobiert. Mein Daily Driver wurde dann ein Motorola Moto G7 mit LineageOS (LOS).

Leider hatte ich später ein Akkuproblem bei meinem Moto G7 und daher habe ich mich weiter mit alternativen Custom-Roms und geeigneten Geräten beschäftigt. Hierzu wurde ich durch eine tolle Artikelserie Android ohne Google: Take back control! von Mike Kuketz, inspiriert. Schnell hatte ich mich auf GrapheneOS und CalyxOS fokusiert. Durch einen Bekannten, der sich ebenfalls mit dem Thema auskennt und beschäftigt, bin ich auf die Google Pixel Geräte gestoßen. Da er auf seinem Smartphone CalyxOS einsetzt, habe ich mich schlussendlich dafür entschieden.

Der Entschluss war also gefasst, CalyxOS zu installieren. Hierzu habe ich mich umgeschaut, welche Geräte von diesem Custom-Rom unterstützt werden. Dabei ist die Wahl auf ein Google Pixel 6a gefallen. Für mich stellte das 6a das beste Preis-/Leistungsverhältnis von der Hardware dar und was mir sehr wichtig gewesen ist: Ein langer Firmware Support durch den Hersteller (Wichtig für Sicherheits-Updates ). In dem Fall von dem Pixel 6a wurden hier min. fünf Jahre zugesichert.

Gerne hätte ich mir ein Shift- oder FairPhone gekauft, da ich von der Idee zu Nachhaltigkeit, Modularität, guter Reparierbarkeit und deren Philosophie, sehr überzeugt bin. Allerdings hat mich leider das Preis-/Leistungsverhältnis nicht überzeugt (ich bin/war nicht bereit so viel Geld für ein Smartphone auszugeben) und CalyxOS hat zu dem Zeitpunkt nicht das Gerät, welches ich mir hätte vielleicht vorstellen können, unterstützt. Trotzdem möchte ich für diese Geräte und Hersteller Werbung machen und schließe für mich in der Zukunft nicht aus, mir ein solches zu kaufen.

Da wären wir auch schon bei dem ersten Argument für CalyxOS: Entgegen GrapheneOS unterstützt CalyxOS weitere Geräte wie nur die der Google Pixel Familie. Dazu zählen Shift, FairPhone und diverse Motorola Geräte (s. Geräteübersicht). Dazu kommt noch, dass bei den Google Geräten der Bootloader nach dem Flashen wieder geschlossen wird. Nicht ganz unwesentlich und leider ein Schwachpunkt bei den LOS Installationen. Hinzu kommt, dass der Bootloader der Pixel Geräte (ich kann das für mein 6a bestätigen, weiß aber, dass dies auch bei weiteren Geräten aus der Familie funktioniert) ohne Zustimmung und aufwendiges Beantragen beim Hersteller, entsperrt werden können. Die für meinen Geschmack gut beschriebene und recht einfache Installation (Beispiel Pixel 6a) von CalyxOS auf den Pixel Geräten, rundet den Gesamteindruck für mich ab. Das Device-Flasher-Script von CalyxOS macht es sehr einfach, die Geräte zu flashen. Natürlich müssen auch hierzu die Standard-Tools, wie z.B. die „android-sdk-platform-tools-common“ installiert sein, aber das ist wirklich sehr gut und einfach beschrieben und sollte für ambitionierte User ohne Probleme zu stemmen sein. Das Flashen des Pixel 6a habe ich unter Linux (wie alle meine Smartphones) erledigt. Ist aber genauso für Mac- wie auch Windows Rechner möglich und beschrieben.

Erwähnen möchte ich auch, dass es Geräte mit vorinstalliertem CalyxOS von den Calyx Institute zu erwerben gibt. Aus meiner Sicht ist das sicherlich ein Vorteil von Projekten wie z.B. Murena oder das Volla Phone (um nur mal zwei zu nennen), die mit bereits vorinstalliertem System auf Geräten erworben werden können. Das trägt m.M.n. zur Verbreitung und Akzeptanz bei den Nutzern bei, da die Hemmschwelle durch das selber Flashen doch recht hoch ist.

Hervorheben möchte ich bei CalyxOS, dass während der Einrichtung, also nachdem die Installation (Flashen) auf dem Gerät abgeschlossen ist und ihr das Smartphone das erste Mal bootet, ausgewählt werden kann, ob ihr microG auf dem Gerät verwenden möchtet oder nicht. Ich habe mich aufgrund meiner vorherigen Erfahrungen dafür entschieden microG zu verwenden und bereue das kein Stück. Für mich wird damit das Smartphone deutlich mehr alltagstauglich, da ihr deutlich weniger Einschränkungen bei diversen Apps, die Google Services voraussetzen, habt. Allerdings möchte ich auch nicht verschweigen, dass Ihr mit dem Einsatz von microG einen hart erkämpften Vorteil, von dem aufwendig entgoogeltem Phone, abgebt. Wie groß dieser Nachteil (wenn man das so überhaupt sagen kann) ist, kann ich nicht beantworten und muss jeder für sich selber entscheiden. Allerdings sehe ich das so mit den Android (AOSP) Smatphones: Nichts ist 100 % sicher und ich muss bewusst damit umgehen und mich an diverse Regeln halten. Es gibt ganz sicherlich Informationen oder Daten, die nicht auf ein solches Gerät gehören und Dinge, die ich damit nie tun würde!

Was mich von CalyxOS auch überzeugt hat, ist die App Auswahl nach der Installation (während der Installation kann ich diverse Apps auswählen): Ein aufgeräumtes System mit einer guten, aber nicht überladenen Vorauswahl an Apps. Dazu zählen z.B. der F-Droid und Aurora Store, Signal, K9 als E-Mail App, Tor Broser, Calyx VPN und diverse weitere Apps. Hinzu kommt, dass ich entgegen diverser anderer Custom-Roms, so gut wie alle Apps einfach deinstallieren kann.

Ich finde das CalyxOS hier einen guten Mittelweg gefunden hat, ohne das Gerät zu überladen oder den User zu bevormunden.

Die Sicherheits-Updates kommen automatisch einmal monatlich rein und werden in Bezug zu Google m.M.n. recht zeitnah zur Verfügung gestellt. Die Updates werden im Hintergrund (so macht es Google selber auch) installiert, um den Nutzer so wenig wie möglich in der Nutzung des Smartphones zu stören. Hier gibt es ein paar Konfigurationsmöglichkeiten im Handling. Des Weiteren kann ich zwischen Sicherheitsexpress, Stabil und Beta wechseln. Inwieweit ich da hin und her switchen kann, weiß ich nicht, da ich nur Stable nutze. Finde die Möglichkeit aber gut und kenne das bereits von SFOS.

Selber nutze ich Apps, wo immer das möglich ist aus dem F-Droid Store. Wenn das nicht zu vermeiden ist, kommt der Aurora Store zum Einsatz. Sehr wenige Apps beziehe ich auch vom Hersteller direkt.

Die Einrichtung von CalyxOS geht wirklich leicht von der Hand. Dabei wird der User nicht unnötig bevormundet, jedoch gut und sinnvoll unterstützt. Die Community ist rege dabei und z.B. im Matrix Kanal (Englisch) m.M.n. schnell bei der Unterstützung, wenn es doch mal irgendwo hakt oder Ihr eine Frage habt.

Mittlerweile habe ich auch das Moto G7 meiner Frau durch ein Pixel 6a mit CalyxOS ersetzt und es gab bisher keinerlei Beschwerden. Ich selber bin seit gut einem Jahr mit dem Pixel 6a und CalyxOS unterwegs und bereue meine Entscheidung kein Stück.

Natürlich gibt es auch andere tolle und hervorragende Projekte, die absolut empfehlenswert sind.
Calyx ist nur eines davon.

Ich möchte mich hier ausdrücklich bei allen Beteiligten des Projektes für die unermüdliche und hervorragende Arbeit bedanken. Aber auch bei der Community, die immer da ist, wenn es doch mal klemmt. Selbstverständlich gilt der Dank auch der Open Source Gemeinde, die sich jeden Tag aufs neue einbringt und dafür sorgt, dass wir alle diese freien Systeme und Programme nutzen dürfen.

In diesem Sinne frohe Festtage und eine unbeschwerte Zeit. Kommt gut und vor allem gesund nach 2024 rüber.

Quelle: https://gitlab.com/CalyxOS/branding/-/blob/master/calyxos/Logo_CalyxOS.jpg


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.

27. Dezember 2023

Das Mozilla Innovation Team hat Solo gestartet. Dabei handelt es sich um einen Website-Builder für Selbständige, der auf Künstliche Intelligenz (KI) und einen maximal einfachen Erstellungsprozess setzt.

Im Rahmen der Innovation Week im Dezember hat das Mozilla Innovation Team Solo gestartet. Dabei handelt es sich um einen sogenannten Website-Builder mit Fokus auf Selbständige. Wie Mozilla auf seinem Blog schreibt, sind in den USA 39 Prozent der Arbeitnehmer selbständig, sei es hauptberuflich oder im Nebenerwerb. Ein Drittel der von Selbständigen gegründeten Unternehmen hätten aber keine Website. Bei denen, die eine Website haben, würde sich laut Umfragedaten von Mozilla die Mehrheit auf „Technikfreunde“ verlassen, um eine Website zu erstellen – was zur Folge hat, dass die Unternehmer für Änderungen an der Website abhängig von diesen Freunden sind. Andere würden auf bestehende Website-Builder setzen, die es aber schwer machen, Inhalte zu erstellen und zu pflegen.

Solo möchte dieses Problem durch eine generative Künstliche Intelligenz lösen. Solo fragt grundlegende Informationen zum Unternehmen ab. Es kann außerdem auf eine bestehende Seite verwiesen werden. Daraufhin generiert Solo eine passende Website inklusive Kontaktformular, die dann weiter personalisiert und schließlich veröffentlicht werden kann. Der ganze Prozess dauert nur wenige Minuten. Die KI erstellt zum Unternehmen passende Textvorschläge, bezieht Bilder von Unsplash und kümmert sich um die Optimierung für Suchmaschinen.

Solo Website Builder Solo Website Builder Solo Website Builder Solo Website Builder Solo Website Builder

Solo ist derzeit noch als Beta gekennzeichnet. Die Verwendung einer eigenen Domain wird noch nicht unterstützt, soll aber bald kommen, ebenso wie das Hochladen eigener Bilder. Das Team kommuniziert diese und andere geplante Features auf der Website.

Die Nutzung von Solo ist kostenlos. Schon bald sollen gegen eine monatliche Gebühr aber auch zusätzliche Funktionen zur Verfügung stehen.

Der Beitrag Solo: Website-Builder von Mozilla setzt auf KI erschien zuerst auf soeren-hentzschel.at.

Mozilla hat in Firefox 120 eine Funktion implementiert, die im Idealfall Einwilligungsabfragen auf Webseiten (sog. Cookie-Banner) automatisch beantwortet. Die Funktion ist derzeit noch versteckt.

Die Funktion ist derzeit noch versteckt und bei Aktivierung zunächst nur für private Fenster aktiv. Das ist eine übliche Vorgehensweise bei Mozilla für neue Funktionen und wird vermutlich in künftigen Versionen vereinfacht. Diese Anleitung zeigt, wie sie überall aktiviert werden kann.

Dazu muss zunächst about:config in die Adresszeile getippt werden. Das öffnet die erweiterten Einstellungen von Firefox. Dort sucht man zunächst

cookiebanners.ui.desktop.enabled

Und setzt diesen Wert auf true.

Hierdurch erscheint in den Einstellungen eine neue Option in Datenschutz & Sicherheit.

Wenn diese Einstellung aktiviert ist, blockiert Firefox im privaten Modus alle erkannten Cookie-Banner. Um diese Einstellung auf den Normalbetrieb auszuweiten, ist wiederum eine Änderung in about:config notwendig. Die Suche nach folgendem Wert ergibt zwei Einstellungen

cookiebanners.service.mode

Zunächst die bereits in der UI modifizierte Einstellung für den privaten Modus (Fett) sowie die globale Einstellung. Es gibt drei Möglichkeiten:

  • 0 Cookie-Banner-Blocker ist deaktiviert
  • 1 Cookie-Banner-Blocker lehnt Cookies ab, sofern möglich
  • 2 Cookie-Banner-Blocker lehnt Cookies ab, sofern möglich und wenn nicht, dann akzeptiert es den Rest

Für eine auf Datenschutz und Privatsphäre ausgerichtete Nutzung empfehle ich den Wert 1. Wer nur in Ruhe gelassen werden möchte, sollte den Wert 2 eintragen.

Die Technik funktioniert noch nicht fehlerfrei. Insbesondere bei selbstgebastelten Lösungen ist der Erfolg begrenzt. Ich denke aber, dass das in Zukunft besser werden wird.

Eigentlich ist es schade, dass man solche technischen Lösungen braucht, um die ungewollten Folgen der DSGVO in den Griff zu bekommen.

Der Artikel Cookies automatisch ablehnen mit Firefox erschien zuerst auf Curius

Passkeys sind das bisher überzeugendste Konzept, um Passwörter endlich hinter uns zu lassen. Mit dem FIDO2-Standard ist ein etabliertes Gremium involviert und alle großen Hersteller ziehen mit. Im Jahr 2023 konnte man sehen, wie es Gestalt annimmt und ich gehe davon aus, dass sich Passkeys in den nächsten Jahren sukzessive etablieren werden. Linux und freie Android-Systeme wie GrapheneOS sind leider nicht dabei.

Passkeys sind eine Weiterentwicklung des FIDO2-Prinzips. Anstelle des physischen zweiten Faktors, z.B. in Form eines YubiKeys, wird nun ein anderes Verfahren mit Hilfe z.B. des Smartphones eingesetzt. YubiKeys haben sich einfach nicht durchgesetzt. Selbst in IT-Kreisen war das Verfahren vielen zu kompliziert, an die breite Masse braucht man gar nicht zu denken. Passkeys werden von den Herstellern mit biometrischen oder erweiterten Sicherheitseinstellungen der Geräte gekoppelt. Hier greifen also verschiedene Trends der letzten Jahre ineinander. Das ist keine Pflicht, aber stärkt das Vertrauen in das Prinzip. Zum Verständnis der Funktionsweise möchte ich zwei Artikel bei Heise empfehlen:

Das Problem ist nur, dass sowohl Linux als auch die Google-freien Android-Varianten außen vor sind. Bei Linux fehlt einfach die Implementierung und bei den vielen Baustellen im Sicherheitsbereich habe ich meine Zweifel, ob Linux Passkeys überhaupt sicherheitskonform implementieren kann. KeePassXC wird dies aber in Kombination mit dem Browseraddon bald anbieten. Bei Android hat Google wie so oft die Funktionalität nicht in AOSP implementiert. Mit Android 14 sind aber Lösungen von Drittanbietern erlaubt, so dass KeePassDX mittelfristig wohl Passkeys unterstützen wird.

Ob das mit Linux und Android so komfortabel wird wie mit Microsoft, Apple oder Google, sei dahingestellt. Auf jeden Fall ist dies ein weiterer Bereich, in dem Open-Source-Systeme nicht den Anschluss verlieren dürfen.

Der Artikel Passkeys aktuell ohne Linux und GrapheneOS erschien zuerst auf Curius

Ab Anfang 2024 wird Google Drittanbieter-Cookies in Chrome blockieren. Dieses Instrument ist schon seit einiger Zeit auf dem Rückzug und mit diesem Schritt von Google werden Drittanbieter-Cookies für die Tracking-Branche endgültig uninteressant. Wir werden sie vermissen.

Damit mich niemand falsch versteht. Tracking ist die Pest des Internets. Aber Cookies von Drittanbietern waren in einer Hinsicht wunderbar. Sie waren die Allzweckwaffe für hemmungsloses Tracking, aber sie waren auch eindeutig identifizierbar. Es gab ein klares Kriterium dafür, welche Cookies zur besuchten Seite gehörten und welche nicht. Dieses klare Unterscheidungsmerkmal half, Cookies effektiv und mit wenig negativen Begleiterscheinungen zu blockieren. Zunächst nur über Add-ons, wurde die entsprechende Blockfunktionalität bald auch in Mozilla Firefox und Apples Safari integriert. Irgendwann hatten viele Internetnutzer begriffen, dass Cookies von Drittanbietern irgendwie böse sind oder installierten Adblocker, die das Problem nebenbei lösten. Die allgegenwärtigen Cookie-Banner in der EU nerven zwar viele Nutzer, haben aber die Botschaft verbreitet, dass es sich um eine schlechte Technologie handelt, und viele Nutzer für das allgegenwärtige Tracking sensibilisiert.

Insgesamt funktionierten diese Maßnahmen so zuverlässig, dass Google das Interesse an Drittanbieter-Cookies für seine Tracking-Maschinerie verlor. Denn der als Suchmaschine getarnte Werbekonzern Alphabet (Google) ist einer der größten Nutznießer des gezielten Trackings im Internet. Google entscheidet nie altruistisch, sondern trennt sich öffentlichkeitswirksam von veralteten Technologien, wenn sie keinen Nutzen mehr bringen. Genau das war bei Drittanbieter-Cookies der Fall, denn zu viele Anwender blockierten sie irgendwann wissentlich oder unwissentlich. Für die Abkehr vom Drittanbieter-Cookie brauchte Google jedoch zunächst eine Alternative zum Tracking. Denn das einzige funktionierende Geschäftsmodell darf keinesfalls leiden. So können IT-Medien und Blogs (die sich fast ausschließlich über Werbung finanzieren und oft in irgendeiner Form Google-Technologien nutzen) diesen tollen Schritt von Google loben und in den Augen vieler Menschen ist Google plötzlich ein bisschen weniger böse, während gleichzeitig weiterhin Geld fließt.

Die Tracking-Alternative ist jetzt fertig. Google braucht einfach keine Drittanbieter-Cookies mehr. Durch den Siegeszug von Android im mobilen Bereich und Chrome auf dem Desktop kontrolliert Google das Eingangstor zum Internet. Damit hat Google die Kontrolle und mit der Privacy Sandbox eine neue Lösung auf den Markt gebracht, um Werbung zielgerichtet auszuspielen. Diese Funktion hat Google seinen Nutzern in den letzten Monaten schmackhaft zu machen versucht und vermutlich haben viele zugestimmt. Verglichen mit dem hemmungslosen Tracking, das Drittanbieter-Cookies ermöglichten, ist die Privacy Sandbox vielleicht sogar ein Fortschritt, aber es ist eben kein Internet ohne Tracking. Es bleibt abzuwarten, wie Google den kleinen Teil der Nutzer ohne Chrome/Android adressieren will.

Für die anderen Anbieter auf dem Werbemarkt ist die Herausforderung ungleich größer. Sie können nicht auf die Privacy Sandbox und die Kontrolle der Zugangswege ins Internet vertrauen. Andere Anbieter werden eigene Lösungen implementieren, um den Wegfall von Drittanbieter-Cookies zu kompensieren. Fingerprinting wird dadurch an Bedeutung gewinnen und der Aufwand für die Nutzer, sich dem zu entziehen, wird steigen. Auch Mozilla und Apple werden hier aktiv werden, wobei beide ein doppeltes Spiel spielen, da Apple auch Werbung anbietet und Mozilla noch finanziell von Google abhängig ist. Für die Nutzerinnen und Nutzer beginnt damit ein Katz-und-Maus-Spiel mit Google und den anderen Targeting-Anbietern, um die vielfältigen Möglichkeiten des Fingerprinting zu blockieren.

Cookies von Drittanbietern waren ein mächtiges Werkzeug für die Werbeindustrie, aber sie waren auch klar definiert und leicht zu blockieren. Die Welt des Tracking wird nun vielfältiger werden, mit verschiedenen Anbietern und unterschiedlichen Systemen. Datenschutzbewusste Nutzer müssen eine noch steilere Lernkurve durchlaufen und ihr Wissen ständig auf dem neuesten Stand halten. Das relativ einfache Drittanbieter-Cookie wird uns also noch fehlen.

25. Dezember 2023

Wie die MZLA Technologies Corporation bekannt gegeben hat, wird die Veröffentlichung von Thunderbird für Android auf das kommende Jahr verschoben.

Im Sommer 2022 wurde die Übernahme des E-Mail-Clients K-9 für Android durch die MZLA Technologies Corporation, Entwicklerin von Thunderbird, bekannt gegeben. Nach der Integration weiterer Funktionen sowie einer Modernisierung des Designs hätte K-9 nach letztem Stand Ende 2023 als Thunderbird für Android veröffentlicht werden sollen.

Mittlerweile ist klar, dass daraus nichts werden wird. Einen konkreten Termin hatte MZLA vorher schon keinen genannt und nennt auch jetzt keinen. Im Gegenteil hat MZLA in einer aktuellen Ankündigung noch einmal bekräftigt, dass man keine Eile habe und Thunderbird für Android dann veröffentlicht wird, sobald alle Funktionen implementiert sind, die das Team gerne implementiert sehen möchte, bevor die App Thunderbird genannt wird.

Im Übrigen soll es auch nach Veröffentlichung von Thunderbird auch K-9 erst einmal weiterhin geben. Diese App würde dann weiterhin das aktuelle Branding anstelle der Thunderbird-Marke nutzen, aber funktional komplett identisch sein.

Der Beitrag Thunderbird für Android erscheint 2024 erschien zuerst auf soeren-hentzschel.at.

Um Verbindung mittels SSH aufzubauen bzw. solche entgegenzunehmen, wird ein SSH-Schlüssel benötigt. Für den OpenSSH-Server finden sich diese Schlüssel im Verzeichnis /etc/ssh/. Um die Schlüssel für den Server neu zu generieren, müssen die alten Schlüssel gelöscht werden:

rm /etc/ssh/ssh_host_*

Anschließend wird der OpenSSH-Server neu konfiguriert, damit neue Schlüssel erzeugt werden:

dpkg-reconfigure openssh-server

Nachdem dies geschehen ist, muss im letzten Schritt der SSH-Server neu gestartet werden:

systemctl restart ssh

Damit sind die Schlüssel ausgetauscht. Bei einem erneuten Verbindungsversuch, wird ein entsprechender Client deshalb eine entsprechende Warnmeldung ausgeben, welche dann bestätigt werden muss.

Das Jahr 2023 neigt sich langsam dem Ende zu. In diesem Monat for 25 Jahren wurde das IPv6-Protokoll in RFC 2460 beschrieben, bevor es 2017 in RFC 8200 als Internet-Standard von der Internet Engineering Task Force (IETF) veröffentlicht wurde.

Seit immerhin sechs Jahren ist dieses IP-Protokoll also schon standardisiert. Da sollte man doch meinen, dass man im Jahr 2023 problemlos ein vernetztes System betreiben kann, welches nur mit einer IPv6-Adresse mit dem Internet verbunden ist. Leider ist dem nicht so.

In den folgenden kurzen Abschnitten schreibe ich mir meinen Frust von der Seele und dokumentiere, was heute alles mit IPv6 noch nicht geht. Falls ihr weitere Fälle ergänzen möchtet, nutzt gerne die Kommentare, um eurem IPv6-Frust Luft zu machen.

Red Hat Satellite 6.14

Bei der Planung einer Red Hat Satellite 6.14 Installation bin ich über folgenden Satz in der Dokumentation gestolpert:

You can install Satellite and Capsules in IPv6-only systems, dual-stack installation is not supported.

URL: https://access.redhat.com/documentation/en-us/red_hat_satellite/6.14/html/installing_satellite_server_in_a_connected_network_environment/preparing-environment-for-installation-in-ipv6-network_satellite

Das ist schade. Betreibt man Server in IPv4- und IPv6-Netzwerken und möchte eine vollständig unterstützte Lösung, muss man aktuell zwei Satellite installieren.

Ich wollte jedoch einen Satellite in einer reinen IPv6-Umgebung installieren, daher sollte mich diese Anmerkung nicht weiter stören. Da störten mich folgende Stellen im gleichen Kapitel der Dokumentation schon mehr:

You must deploy an external IPv4 HTTP proxy server. This is required because Red Hat Content Delivery Network distributes content only over IPv4 networks, therefore you must use this proxy to pull content into the Satellite on your IPv6 network.

You must configure Satellite to use this IPv4 HTTP proxy server as the default proxy. For more information, see Adding a Default HTTP Proxy to Satellite.

URL: https://access.redhat.com/documentation/en-us/red_hat_satellite/6.14/html/installing_satellite_server_in_a_connected_network_environment/preparing-environment-for-installation-in-ipv6-network_satellite#requirements-for-installation-in-an-ipv6-network_satellite

Zuerst wollte ich dies nicht glauben, habe einen Fehler in der Dokumentation vermutet. Es ist 2023 und Content Delivery Network (CDN) von Red Hat unterstützt kein IPv6? Das kann doch nicht sein! Kann es doch:

Der zweite Link in obiger Liste führt ausschließlich IPv4-Adressen auf. Einzelne Kommentare lassen darauf schließen, dass es jedoch durchaus Interesse an IPv6-Konnektivität gibt. Also installiere ich erstmal einen Proxy-Server mit Dual-Stack, damit ich Hosts aus einem reinen IPv6-Netzwerk via subscription-manager register beim Red Hat Subscription Management (RHSM) registrieren kann.

subscription-manager cli command does not support IPv6 proxy

Nachzulesen in:

Die gute Nachricht, es sind gefixte Versionen für RHEL 9 und RHEL 8 in Aussicht. Auf einen Fix für RHEL 7 würde ich nicht warten und diese Systeme lieber migrieren oder aktualisieren, ist das Support-Ende doch bereits nah.

Also lege ich mein Vorhaben erstmal beiseite und wende mich anderen Wochenendprojekten zu, die vielleicht mehr Erfolg versprechen.

ansible-galaxy does not work on IPv6 only hosts

Nun guck an, da ist mein Kollege Andreas also schon im Jahr 2022 in den Ansible-Issue #77308 gelaufen. Ihr interessiert euch für den aktuellen Stand dieser Geschichte? Siehe:

So langsam komme ich mir vor wie ein bekannter spanischer Junker, welcher gegen Windmühlen pardon Riesen anritt. Aber es ist ja nicht so, dass mir die Themen ausgehen. Klone ich mir halt ein Repo von Github und trage ein bisschen zu Open Source bei…

IPv6 support for cloning Git repositories #10539

Ich spare mir viele Worte und präsentiere nur folgenden Code-Block:

$ host -t AAAA github.com
github.com has no AAAA record

URL zur Diskussion: https://github.com/orgs/community/discussions/10539

Auch hier kein Anschluss unter dieser Nummer.

Fazit

Ich möchte meine jüngsten Erfahrungen umschreiben mit: „An manchen Tagen hat man kein Glück und an anderen kommt auch noch Pech dazu.“

Für Red Hat möchte ich sagen, ist es ein Priorisierungs-Thema. Wenn der Wunsch nach IPv6 auf Kundenseite hinreichend groß wird, wird man hier handeln. Bei Github wird es ähnlich sein. Ich muss vielleicht nur nochmal 25 Jahre warten.

  • Welche Erfahrungen habt ihr mit IPv6 gemacht?
  • Habt ihr es schon an den Nagel gehängt; oder bleibt ihr hartnäckig und gebt nicht auf?
  • Ich freue mich auf eure schönsten Fehlschläge und Erfolgsmomente.

24. Dezember 2023

Vor wenigen Tagen erschien im Blog von openSUSE ein Beitrag mit den Plänen zur Vollverschlüsselung bei openSUSE Tumbleweed und openSUSE MicroOS. Die Entwicklung geht eindeutig in Richtung von TPM und/oder FIDO.

Hintergrund

Die klassische Vollverschlüsselung unter Linux bedeutet, dass bei der Installation ein LUKS-verschlüsselter LVM angelegt wird, der eine oder mehrere Partitionen enthält. GRUB2 kann verschlüsselte LVMs unter bestimmten Bedingungen entsperren. Wenn man andere Bootloader verwendet oder GRUB nicht vertraut, sollte man zusätzlich eine unverschlüsselte Bootpartition anlegen. Beim Systemstart erfolgt dann eine Passwortabfrage und meistens wird der Benutzer dann auf Autologin gesetzt, damit es keine doppelte Passwortabfrage gibt. Das ist nicht schlecht und war bis vor ca. 10 Jahren auch systemübergreifend State of the Art.

Das System ist bewährt (und Linux-Anwender sind oft alt, konservativ und halten an bewährten Lösungen fest), aber nicht mehr ganz zeitgemäß. Das fängt damit an, dass LUKS eigentlich nie einem Audit unterzogen wurde, veraltete Konfigurationen unsicher sein können, ein verifiziertes Booten eigentlich nicht vorgesehen ist und LUKS nicht einmal gegen Bruteforce-Angriffe geschützt ist. Das sind alles keine abwegigen Themen, sondern iOS, Android, Windows, macOS – alle diese Systeme haben bereits verschiedene Schutzmaßnahmen implementiert.

Eine häufige Antwort auf all diese Ambitionen ist, dass der normale Nutzer das nicht braucht. Darauf gibt es eigentlich nur zwei Antworten.

  1. Eigentlich braucht der “normale Anwender” auch keine Verschlüsselung. Der stationäre Laptop oder PC ist keiner Bedrohung ausgesetzt. Einbrecher schlachten zu 99 % das System aus und sind nicht an Daten interessiert.
  2. Die Orientierung am vermuteten Bedarf von “normalen Anwendern” bedeutet eine Selbstinfantilisierung von Linux und nimmt das System für alle professionellen Szenarien proaktiv aus dem Rennen. Das freut vor allem Microsoft, die im Business-Umfeld immer noch die Nase vorn haben.

Pläne bei openSUSE

Die Pläne von openSUSE haben zwei Aspekte. Zum einen soll GRUB durch systemd-boot ersetzt werden. GRUB ist überladen und laut openSUSE werden derzeit 200 Patches benötigt, um GRUB für die Nutzer verfügbar zu machen. Eigentlich ist GRUB sowieso völlig überflüssig, da moderne EFI-Systeme einen solchen Bootloader nicht benötigen. Außerdem arbeiten Red Hat und SUSE am sogenannten Unified Kernel, der dann auch wieder Anpassungen benötigt. Systemd-Boot kann damit bereits umgehen. Damit systemd-boot aber mit dem SUSE-spezifischen Setup aus Btrfs und Snapper klarkommt, sind einige Anpassungen notwendig.

Für den weiteren Ablauf möchte man eine Lösung adaptieren, die ich hier schon beschrieben habe. Kernel und initrd sollen im ESP abgelegt werden und die Freischaltung soll über TPM2 oder FIDO2 (mit optionaler PIN) auf Basis von systemd-cryptsetup erfolgen. Ziel ist es, dem Fernziel einer vollständig verifizierten Bootkette näher zu kommen.

Ausblick

Kurzfristig ist es gut, dass openSUSE auf GRUB verzichten und stattdessen aktiv systemd-boot anbieten will. Das dürfte vielen Anwendern das Leben erleichtern.

Mittel- bis langfristig sind die Ambitionen aus dem systemd-Umfeld, von Red Hat und nun auch SUSE zu begrüßen, Komponenten wie TPM oder FIDO2 in die Linux-Verschlüsselung zu integrieren und einen verifizierten Systemstart als Ziel anzustreben. Canonical hat die gleichen Ambitionen, setzt aber auf eine andere Implementierung.

Jenseits der großen Enterprise-Distributionen und ihrer Community-Varianten lässt sich z.B. auch mit Arch Linux in dieser Hinsicht viel erreichen, da vor allem Red Hat und SUSE ihre Änderungen upstream einbringen. Nur mit Debian scheint noch nichts zu gehen, da initramfs nichts davon unterstützt. Aber das passt auch irgendwie in das Gesamtbild, das Debian zur Zeit abgibt.

Der Artikel Pläne von openSUSE für Vollverschlüsselung erschien zuerst auf Curius

Mit Common Voice stellt Mozilla den weltweit größten öffentlichen Datensatz menschlicher Stimmen bereit – kostenlos und für jeden nutzbar. Mozilla hat Version 16.0 seines Datensatzes veröffentlicht.

Der Markt für Spracherkennung wird von den ganz großen Namen kommerzieller Anbieter dominiert: Amazon, Apple, Google, Microsoft. Darum hat Mozilla im Jahr 2017 das Projekt Common Voice gestartet. Mit Common Voice bietet Mozilla eine kostenlose Alternative an, zu der jeder beitragen kann und die jedem zur Verfügung steht. Damit möchte Mozilla Innovation und Wettbewerb in der Sprachtechnologie auf Basis von Maschinenlernen fördern.

Mit dem vor kurzem veröffentlichten Common Voice Corpus 16.0 wächst der deutschsprachige Datensatz von 1.388 auf 1.403 Stunden an. Wer bereits den Common Voice Corpus 15.0 besitzt, kann wie immer auch nur ein sogenanntes Delta Segment mit den Unterschieden zur Vorversion herunterladen. Für Deutsch würde das den Download von 32,8 GB auf 307 MB reduzieren.

Insgesamt deckt Mozilla Common Voice mit der neuen Version jetzt 120 Sprachen mit insgesamt 30.329 aufgenommenen Stunden ab, was Mozilla Common Voice zum vielfältigsten mehrsprachigen Sprachkorpus der Welt macht.

Zum Download der Mozilla Common Voice Datensätze

Der Beitrag Mozilla veröffentlicht Common Voice Corpus 16.0 erschien zuerst auf soeren-hentzschel.at.

Da ich meine Notizen nicht direkt in LibreOffice schreibe und ich gerne Hashtags nutze und ich diese etwas anders formatieren muss, habe ich nach einer Möglichkeit gesucht, wie ich in LibreOffice diese suchen und markieren kann, so dass ich sie mit einer Formatvorlage versehen kann. Aber alles der Reihe nach.

Ich schreibe meine Texte normalerweise in Markdown. Weil das extrem schnell, mit jedem Editor und auf jedem Gerät dieser Erde, auf dem Texte eingeben werden können funktioniert. Markdown ist im Prinzip nur Text. Wer mehr darüber wissen will, findet hier in der Wikipedia schon mal einen guten Einstieg.

Kurzer Ablauf in einzelnen Schritten

  1. Ich schreibe meinen Text in Obsidian (Markdown Suite) und versehe ihn mit Hashtags wie z.B. #english #deutsch #himmel und #hölle
  2. Dann exportiere ich den Text mit “Export to” nach OpenOffice. Wobei OpenOffice hier für das Dateiformat ODT (Open Document Text) steht. Ich benutze aber kein OpenOffice, sondern das modernere LibreOffice
  3. In LibreOffice definiere ich eine neue Zeichenvorlage für meine Hashtags, damit alle Hashtags das gleiche Aussehen haben
  4. Dann öffne ich im LibreOffice Menü “Bearbeiten” den Dialog “Suchen und Ersetzen” (Strg+Alt+F)
  5. Dort gebe ich im Suchen Feld \#[:alpha:]+ ein (siehe Screenshot unten)
  6. klicke auf “Reguläre Ausdrücke”
  7. klicke dann auf “Alle suchen”
  8. Jetzt werden alle Hashtags markiert, ohne dass Leerzeichen oder andere Wörter dazwischen mitmarkiert werden.
  9. Ich schließe den Suchen und Ersetzen Dialog und doppelklicke auf die Hashtag Zeichenvorlage
![](/wp-content/uploads/sites/2/2023/12/e798cbd1bf765457a14b6e904e9aaf37_MD5.jpeg)
Suchen und Ersetzen Dialog von LibreOffice

#### RegEx erklärt

Eine kurze Erklärung was der Reguläre Ausdruck genau macht. Dafür zerlege ich ihn in die Einzelteile

\#[:alpha:]+
  • \# definiert das Zeichen # . Das Kreuz ist bei den RegEx normalerweise ein Befehl, so dass ich dem Programm sagen muss, dass es nicht der Befehl ist, den ich hier angebe, sondern nur das Zeichen. Dafür muss ich einen Backslash \ , ein sogenanntes ESCAPE Zeichen vorweg stellen. Mehr weiter unten in den Quellen.
  • [:alpha:] heißt, dass nur alphanumerische Zeichen a-Z und 0-9 vorkommen dürfen
  • + so oft wie sie vorkommen

Ausgeschrieben heißt das

Suche nach einem Wort, das mit einem # anfängt und dann nur noch alphanumerische Zeichen hat und zwar egal wie viele. Und nichts anderes! Folgt danach ein Komma oder ein Leerzeichen oder ein Zeilenumbruch oder ein Tab oder irgendein anderes Zeichen, das nicht in [:alpha:] vor kommt, ist die Suche beendet. Dadurch dass ich im Dialog “Alle suchen” angeklickt habe, wird diese Suche auf den gesamten Text angewandt.

Quellen