bg_image
header

Daemon

Ein Daemon (ausgesprochen wie „dä-mon“, nicht wie das englische „demon“) ist ein Hintergrundprozess, der auf einem Computersystem läuft – meist ohne direkte Benutzerinteraktion.

Merkmale eines Daemons:

  • Startet automatisch beim Hochfahren des Systems.

  • Läuft dauerhaft im Hintergrund.

  • Erledigt Aufgaben, ohne dass der Benutzer direkt mit ihm arbeitet.

  • Hört auf Anforderungen von anderen Programmen oder Netzwerken.

Beispiele:

  • cron-Daemon: Führt zeitgesteuerte Aufgaben aus (z. B. tägliche Backups).

  • sshd: Behandelt SSH-Verbindungen von außen.

  • httpd oder nginx: Webserver-Dienste.

  • cupsd: Druckaufträge verwalten.

Technischer Hintergrund:

  • In Unix/Linux endet ein Daemon-Prozessname oft mit „d“ (z. B. httpd, systemd).

  • Ein Daemon wird oft beim Systemstart durch Init-Systeme wie systemd oder init gestartet.

Ursprung des Begriffs:

Der Begriff stammt aus der griechischen Mythologie, wo „Daimon“ eine Art Geist oder übernatürliches Wesen war, das im Hintergrund wirkte – passend zur Funktion im Betriebssystem.


Perl Compatible Regular Expressions - PCRE

Perl Compatible Regular Expressions (PCRE) sind eine Implementierung von regulären Ausdrücken, die sich an der Syntax und Funktionalität der Programmiersprache Perl orientiert. Sie bieten eine sehr mächtige, flexible und erweiterte Syntax, die über einfache reguläre Ausdrücke hinausgeht.

Warum „Perl Compatible“?

Perl war eine der ersten Sprachen, die besonders leistungsstarke reguläre Ausdrücke eingeführt hat. Die PCRE-Bibliothek wurde entwickelt, um diese Funktionen auch in anderen Programmiersprachen und Tools verfügbar zu machen – zum Beispiel in:

  • PHP

  • Python (teilweise, re-Modul ähnelt PCRE)

  • JavaScript (mit leichten Abweichungen)

  • grep-Varianten wie pcregrep

  • Texteditoren wie VS Code, Sublime Text etc.


Wichtige Features von PCRE:

Lookahead & Lookbehind:

  • (?=...) – positive Lookahead

  • (?!...) – negative Lookahead

  • (?<=...) – positive Lookbehind

  • (?<!...) – negative Lookbehind

Nicht-gierige Quantifizierer:

  • *?, +?, ??, {m,n}?

Benannte Gruppen:

  • (?P<name>...) oder (?<name>...)

Unicode-Support:

  • \p{L} für Unicode-Buchstaben usw.

Assertions und Grenzen:

  • \b, \B, \A, \Z, \z

Modifikatoren:

  • (?i) für case-insensitive

  • (?m) für multiline usw.

(?<=\buser\s)\w+

Dieser Ausdruck findet Wörter, die nach "user " stehen (Lookbehind).


Fazit:

PCRE sind die "Deluxe-Version" regulärer Ausdrücke – sie sind leistungsfähig, weit verbreitet und flexibel. Wenn du in einem Tool oder einer Sprache arbeitest, die „PCRE unterstützt“, kannst du dich auf die mächtige Perl-ähnliche Syntax freuen.


Link Juice

„Link Juice“ ist ein Begriff aus der Suchmaschinenoptimierung (SEO) und bezeichnet den Wert oder die Kraft, die ein Hyperlink von einer Webseite auf eine andere überträgt. Diese „Kraft“ beeinflusst, wie gut eine Seite in den Suchmaschinenergebnissen (vor allem bei Google) rankt.

Einfach erklärt:

Wenn eine Webseite A auf Webseite B verlinkt, gibt sie etwas von ihrem „Ruf“ oder ihrer Autorität weiter – das ist der „Link Juice“. Je vertrauenswürdiger und themenrelevanter Seite A ist, desto mehr Link Juice wird übertragen.


Wichtige Faktoren, die Link Juice beeinflussen:

  • Autorität der verlinkenden Seite (z. B. eine große Nachrichtenseite vs. ein kleines Blog)

  • Anzahl der ausgehenden Links: Je mehr Links auf einer Seite sind, desto weniger „Juice“ bekommt jeder einzelne.

  • Follow vs. Nofollow: Nur „dofollow“-Links übertragen Link Juice; „nofollow“-Links (z. B. mit rel="nofollow") tun das in der Regel nicht.

  • Platzierung des Links: Ein Link im Haupttext ist stärker als einer in der Fußzeile oder Seitenleiste.

  • Relevanz: Ein Link von einer thematisch passenden Seite zählt mehr.


Beispiel:

Ein Backlink von Wikipedia auf deine Website gibt dir enorm viel Link Juice – Google wertet das als Zeichen von Vertrauenswürdigkeit. Ein Link von einer unbekannten oder spammy Seite dagegen bringt wenig bis gar nichts oder kann sogar schaden.

 


Levenshtein Distanz

Die Levenshtein-Distanz ist ein Maß für den Unterschied zwischen zwei Zeichenketten (Strings). Sie gibt an, wie viele einzelne Bearbeitungsschritte (Operationen) notwendig sind, um eine Zeichenkette in eine andere zu überführen. Dabei sind die folgenden Operationen erlaubt:

  1. Einfügen eines Zeichens

  2. Löschen eines Zeichens

  3. Ersetzen eines Zeichens durch ein anderes

Beispiel:

Die Levenshtein-Distanz zwischen den Wörtern "Haus" und "Maus" ist 1, weil nur ein Buchstabe (H → M) geändert werden muss.

Anwendung:

Die Levenshtein-Distanz wird in vielen Bereichen verwendet, z. B.:

  • Rechtschreibprüfung (Vorschlag ähnlicher Wörter)

  • DNA-Sequenzvergleiche

  • Plagiaterkennung

  • Fuzzy-Suche in Datenbanken oder Suchmaschinen

Formel (rekursiv, vereinfacht):

Für zwei Strings a und b, mit Längen i und j:

lev(a, b) = min(
  lev(a-1, b) + 1,        // löschen
  lev(a, b-1) + 1,        // einfügen
  lev(a-1, b-1) + cost    // ersetzen (cost = 0, wenn Zeichen gleich; sonst 1)
)

Es gibt auch effizientere dynamische Programmieralgorithmen, um diese Distanz zu berechnen.


Happy Path

Der "Happy Path" (auch "Happy Flow" genannt) bezeichnet in der Softwareentwicklung oder im Testing den idealen Ablauf eines Prozesses oder Programms, bei dem alles wie geplant funktioniert, keine Fehler auftreten und alle Eingaben gültig sind.

Beispiel:

Wenn du z. B. ein Online-Formular zur Registrierung entwickelst, sieht der Happy Path so aus:

  1. Der Benutzer gibt alle Daten korrekt ein (z. B. gültige E-Mail, sicheres Passwort).

  2. Er klickt auf „Registrieren“.

  3. Das System erstellt erfolgreich einen Account.

  4. Der Benutzer wird zur Willkommensseite weitergeleitet.

➡️ Keine Validierungsfehler, keine Serverprobleme, kein unerwartetes Verhalten.


Wozu dient der Happy Path?

  • Erstes Testziel: Beim Entwickeln oder Testen schaut man sich oft zuerst den Happy Path an, um sicherzugehen, dass das Grundgerüst funktioniert.

  • Basis für Use Cases: In der Dokumentation von Anforderungen oder Prozessen ist der Happy Path oft der zentrale Anwendungsfall, bevor man Sonderfälle beschreibt.

  • Abgrenzung zu Edge Cases / Error Paths: Alles, was vom Happy Path abweicht (z. B. leeres Passwortfeld, Serverfehler), gehört zu den „unhappy paths“ oder „alternate flows“.

 


Guard

In der Softwareentwicklung bezeichnet ein Guard (auch Guard Clause oder Guard Statement) eine Art von Schutzmechanismus innerhalb einer Funktion oder Methode, der sicherstellt, dass bestimmte Bedingungen erfüllt sind, bevor der restliche Code ausgeführt wird.

Einfach erklärt:

Ein Guard ist wie ein Türsteher: Er lässt nur das durch, was erlaubt ist – und alles andere wird frühzeitig beendet.

Typisches Beispiel (in Python):

def divide(a, b):
    if b == 0:
        return "Division durch null nicht erlaubt"  # Guard Clause
    return a / b

In diesem Beispiel schützt der Guard davor, dass eine Division durch null passiert.


Vorteile von Guards:

  • Frühes Beenden bei ungültigen Zuständen

  • Verbesserte Lesbarkeit durch weniger verschachtelte if-else-Strukturen

  • Saubererer Codefluss, da der "Happy Path" (also der normale Ablauf) nicht durch viele Sonderfälle unterbrochen wird


Beispiele in anderen Sprachen:

JavaScript:

function login(user) {
  if (!user) return; // Guard
  // Weiter mit Login-Logik
}

Swift (hat sogar ein eigenes Schlüsselwort guard):

func greet(person: String?) {
  guard let name = person else {
    print("Kein Name übergeben")
    return
  }
  print("Hallo, \(name)!")
}

Fully Qualified Domain Name - FQDN

Der Fully Qualified Domain Name (FQDN) ist der vollständige und eindeutige Name eines Computers oder Hosts im Internet oder in einem lokalen Netzwerk. Er besteht aus mehreren Teilen, die eine hierarchische Struktur widerspiegeln.

Aufbau eines FQDN

Ein FQDN setzt sich aus drei Hauptbestandteilen zusammen:

  1. Hostname – Der spezifische Name eines Computers oder Dienstes (z. B. www).

  2. Domainname – Der Name der übergeordneten Domain (z. B. example).

  3. Top-Level-Domain (TLD) – Die oberste Ebene der Domainstruktur (z. B. .com).

Beispiel eines FQDN:
👉 www.example.com.

  • www → Hostname

  • example → Domainname

  • .com → Top-Level-Domain

  • Der abschließende Punkt (.) ist optional und steht für die Root-Domain des DNS-Systems.

Warum ist der FQDN wichtig?

Eindeutigkeit: Jeder FQDN ist weltweit einzigartig und verweist auf eine bestimmte Ressource im Internet.
DNS-Auflösung: Er wird von DNS-Servern genutzt, um IP-Adressen für Webseiten und Server zu finden.
SSL-Zertifikate: Ein FQDN wird oft in SSL/TLS-Zertifikaten verwendet, um sichere Verbindungen zu gewährleisten.
E-Mail-Zustellung: Mailserver verwenden FQDNs, um Mails an die richtigen Hosts zu senden.

Unterschied zwischen FQDN und einfacher Domain

  • FQDN: mail.google.com (vollständig spezifiziert)

  • Einfache Domain: google.com (kann mehrere Hosts enthalten, z. B. www, mail, ftp)

Zusammengefasst ist der FQDN die vollständige Adresse eines Geräts oder Dienstes im Internet, während eine einfache Domain eine allgemeine Adresse ist.


Early Exit

Ein Early Exit bezeichnet in der Programmierung eine Technik, bei der eine Funktion oder ein Algorithmus vorzeitig beendet wird, sobald eine bestimmte Bedingung erfüllt ist. Das Ziel ist meist eine effizientere oder lesbarere Code-Struktur.

Beispiel in einer Funktion:

function getDiscount($age) {
    if ($age < 18) {
        return 10; // 10% Rabatt für Minderjährige
    }
    if ($age > 65) {
        return 15; // 15% Rabatt für Senioren
    }
    return 0; // Kein Rabatt für andere Altersgruppen
}

Hier sorgt der Early Exit dafür, dass die Funktion direkt einen Wert zurückgibt, sobald eine Bedingung zutrifft. Das verhindert überflüssige else-Blöcke und macht den Code übersichtlicher.

Vergleich mit einer verschachtelten Variante:

function getDiscount($age) {
    $discount = 0;
    if ($age < 18) {
        $discount = 10;
    } else {
        if ($age > 65) {
            $discount = 15;
        }
    }
    return $discount;
}

Hier wird die Logik unnötig verschachtelt, was die Lesbarkeit verschlechtert.

Weitere Anwendungsfälle:

  • Fehlertests am Anfang einer Funktion (return oder throw bei ungültigen Eingaben)

  • Schleifen schneller abbrechen, wenn das gewünschte Ergebnis gefunden wurde (break oder return)

Ein Early Exit verbessert also Lesbarkeit, Wartbarkeit und Performance eines Codes.


Vite

Vite ist ein modernes Build-Tool und Entwicklungsserver für Webanwendungen, das von Evan You, dem Schöpfer von Vue.js, entwickelt wurde. Es ist darauf ausgelegt, die Entwicklungs- und Build-Prozesse schneller und effizienter zu gestalten. Der Name "Vite" stammt vom französischen Wort für "schnell" und spiegelt das Hauptziel der Software wider: eine blitzschnelle Entwicklungsumgebung.

Die Hauptmerkmale von Vite sind:

  1. Schneller Entwicklungsserver: Vite nutzt die modernen ES-Module (ESM) und bietet durch diese Technik einen ultraschnellen Entwicklungsserver. Es wird nur das neueste Modul geladen, was die Initialisierung deutlich schneller macht als traditionelle Bundler.

  2. Hot Module Replacement (HMR): Der HMR funktioniert extrem schnell, indem er nur die geänderten Module aktualisiert, ohne die gesamte Anwendung neu zu laden.

  3. Modernes Build-System: Vite verwendet Rollup unter der Haube, um die endgültige Produktion zu bundeln, was optimierte und effizientere Builds ermöglicht.

  4. Zero-Konfiguration: Vite ist sehr benutzerfreundlich und erfordert keine umfangreiche Konfiguration. Es funktioniert sofort mit der Standard-Konfiguration, wobei es viele gängige Web-Technologien out-of-the-box unterstützt (z. B. Vue.js, React, TypeScript, CSS-Preprozessoren usw.).

  5. Optimierte Produktion: Für die Produktion wird Rollup verwendet, das für seine effizienten und optimierten Bundles bekannt ist.

Vite richtet sich hauptsächlich an moderne Web-Anwendungen und ist besonders beliebt bei Entwicklern, die mit Frameworks wie Vue, React oder Svelte arbeiten.

 


Partial Mock

Ein Partial Mock (teilweises Mocking) ist eine Technik beim Testen von Software, bei der nur ein Teil eines Objekts durch ein Mock ersetzt wird, während der Rest der echten Implementierung erhalten bleibt. Dies ist besonders nützlich, wenn du nur bestimmte Methoden eines Objekts stubben oder mocken möchtest, während andere Methoden normal ausgeführt werden.

Wann wird ein Partial Mock verwendet?

  • Wenn du eine Klasse testen möchtest, aber bestimmte Methoden von ihr isolieren musst.

  • Wenn einige Methoden schwer zu testen sind (z. B. weil sie externe Abhängigkeiten haben), aber andere weiterhin mit ihrer echten Logik arbeiten sollen.

  • Wenn du nur einige Methoden stubben möchtest, um den Testablauf zu steuern.

Beispiel in PHP mit PHPUnit

Angenommen, du hast eine Klasse Calculator, aber möchtest die Methode multiply() mocken, während add() normal funktioniert.

class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }

    public function multiply($a, $b) {
        return $a * $b;
    }
}

// PHPUnit Test mit Partial Mock
class CalculatorTest extends \PHPUnit\Framework\TestCase {
    public function testPartialMock() {
        // Partial Mock von Calculator
        $calculator = $this->getMockBuilder(Calculator::class)
                           ->onlyMethods(['multiply']) // Nur diese Methode mocken
                           ->getMock();

        // Definiere Verhalten für multiply()
        $calculator->method('multiply')->willReturn(10);

        // Teste echte Methode add()
        $this->assertEquals(5, $calculator->add(2, 3));

        // Teste gemockte Methode multiply()
        $this->assertEquals(10, $calculator->multiply(2, 3));
    }
}

Hier bleibt add() unverändert und arbeitet mit der echten Implementierung, während multiply() immer 10 zurückgibt.

Fazit

Partial Mocks sind nützlich, wenn du Teile einer Klasse isolieren möchtest, ohne sie vollständig zu ersetzen. Sie helfen, Tests stabiler und effizienter zu machen, indem nur bestimmte Methoden gemockt werden.


Zufalls-Technologie

Syntactically Awesome Stylesheets - Sass


sass.png