Ein Daemon (ausgesprochen wie „dä-mon“, nicht wie das englische „demon“) ist ein Hintergrundprozess, der auf einem Computersystem läuft – meist ohne direkte Benutzerinteraktion.
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.
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.
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.
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) 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.
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:
Python (teilweise, re
-Modul ähnelt PCRE)
JavaScript (mit leichten Abweichungen)
grep-Varianten wie pcregrep
Texteditoren wie VS Code, Sublime Text etc.
✅ 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).
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.
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.
Ein Guard ist wie ein Türsteher: Er lässt nur das durch, was erlaubt ist – und alles andere wird frühzeitig beendet.
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.
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
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)!")
}
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.
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.
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.
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.
Eine Single Page Application (SPA) ist eine Webanwendung, die vollständig innerhalb einer einzigen HTML-Seite läuft. Statt bei jeder Benutzerinteraktion eine neue Seite vom Server zu laden, werden Inhalte dynamisch über JavaScript aktualisiert. Dies führt zu einer schnellen, flüssigen Benutzererfahrung, ähnlich wie bei nativen Apps.
✅ Schnelle Ladezeiten nach dem ersten Aufruf
✅ Bessere Benutzererfahrung (keine Seiten-Neuladungen)
✅ Offline-Funktionalität durch Service Worker möglich
❌ Erster Ladevorgang kann langsam sein (größerer JavaScript-Bundle)
❌ SEO-Probleme (da Inhalte oft erst per JavaScript geladen werden)
❌ Komplexere Implementierung, insbesondere bei Sicherheit und Routing
Typische Frameworks für SPAs sind React, Angular und Vue.js.
CSS Media Queries sind eine Technik in CSS, mit der sich das Layout einer Webseite an verschiedene Bildschirmgrößen, Auflösungen und Gerätetypen anpassen lässt. Sie sind ein zentraler Bestandteil des Responsive Web Designs.
@media (Bedingung) {
/* CSS-Regeln, die nur unter dieser Bedingung gelten */
}
1. Anpassung an verschiedene Bildschirmbreiten:
/* Für Bildschirme mit maximal 600px Breite (z. B. Smartphones) */
@media (max-width: 600px) {
body {
background-color: lightblue;
}
}
2. Unterscheidung zwischen Hoch- und Querformat:
@media (orientation: landscape) {
body {
background-color: lightgreen;
}
}
3. Spezielle Stile für Druckausgabe:
@media print {
body {
font-size: 12pt;
color: black;
background: none;
}
}
✅ Mobile-First-Design: Webseiten für kleine Displays optimieren und dann für größere Bildschirme erweitern.
✅ Dark Mode: Stile je nach Nutzerpräferenz anpassen (prefers-color-scheme
).
✅ Retina-Displays: Hochauflösende Bilder oder spezielle Stile für Displays mit hoher Pixeldichte (min-resolution: 2dppx
).
Responsive Design ist eine Technik im Webdesign, bei der sich eine Website automatisch an verschiedene Bildschirmgrößen und Geräte anpasst. Dadurch bleibt die Benutzerfreundlichkeit sowohl auf großen Desktop-Monitoren als auch auf Tablets und Smartphones erhalten, ohne dass separate Versionen der Website erforderlich sind.
Responsive Design wird durch folgende Techniken umgesetzt:
1. Flexible Layouts
2. Media Queries (CSS)
@media (max-width: 768px) {
body {
background-color: lightgray;
}
}
→ Dieser Code ändert die Hintergrundfarbe für Bildschirme kleiner als 768px.
3. Flexible Bilder und Medien
img {
max-width: 100%;
height: auto;
}
4. Mobile-First Ansatz
✅ Bessere Nutzererfahrung auf allen Geräten
✅ SEO-Vorteile, da Google mobilfreundliche Seiten bevorzugt
✅ Keine doppelte Wartung für Desktop- und Mobile-Versionen
✅ Höhere Conversion-Rate, weil Nutzer die Seite einfacher bedienen können
Responsive Design ist heute Standard im modernen Webdesign, da es eine optimale Darstellung und Bedienbarkeit auf allen Geräten ermöglicht.
Ein Bearer Token ist eine Art von Zugriffstoken, das zur Authentifizierung und Autorisierung in Webanwendungen und APIs verwendet wird. Der Begriff "Bearer" bedeutet „Inhaber“, was bedeutet, dass jeder, der dieses Token besitzt, Zugriff auf die geschützten Ressourcen hat – ohne zusätzliche Überprüfung.
Authorization: Bearer <token>
.GET /geschuetzte-daten HTTP/1.1
Host: api.example.com
Authorization: Bearer abcdef123456
💡 Tipp: Um die Sicherheit zu erhöhen, kann man Token mit kurzen Laufzeiten verwenden und sie nur über HTTPS übertragen.
Das Model ist die Daten- und Logikschicht in der MVC-Architektur. Es verwaltet die Daten der Anwendung und stellt sicher, dass sie korrekt gespeichert, abgerufen und verarbeitet werden.
✅ Datenverwaltung: Speichert und verwaltet Daten, z. B. in einer Datenbank.
✅ Geschäftslogik: Enthält Regeln und Berechnungen (z. B. Rabattberechnung für Bestellungen).
✅ Datenvalidierung: Überprüft, ob Eingaben korrekt sind (z. B. ob eine E-Mail-Adresse gültig ist).
✅ Kommunikation mit der Datenbank: Führt CRUD-Operationen aus (Create, Read, Update, Delete).
class BlogPost extends Model {
protected $fillable = ['title', 'content']; // Erlaubte Felder für Massenverarbeitung
// Beziehung: Ein Blogpost gehört zu einem Benutzer
public function user() {
return $this->belongsTo(User::class);
}
}
🔹 fillable
: Bestimmt, welche Felder gespeichert werden dürfen.
🔹 belongsTo(User::class)
: Zeigt an, dass jeder Blogpost zu einem Benutzer gehört.
✔ Das Model verwaltet alle Daten und Geschäftslogik der Anwendung.
✔ Es sorgt für eine klare Trennung von Daten und Darstellung.
✔ Änderungen an der Datenstruktur müssen nur im Model erfolgen, nicht in der gesamten Anwendung.
Ein Controller ist eine zentrale Komponente im Model-View-Controller (MVC)-Architekturmuster. Er fungiert als Vermittler zwischen der Benutzeroberfläche (View) und der Geschäftslogik bzw. den Daten (Model).
Empfangen von Benutzereingaben
Verarbeiten der Anfrage
Kommunikation mit dem Model
Aktualisieren der View
Angenommen, ein Benutzer möchte einen neuen Blogbeitrag erstellen:
class BlogController extends Controller {
public function store(Request $request) {
// Validierung der Benutzereingabe
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
// Neues Blog-Post-Model erstellen und speichern
BlogPost::create([
'title' => $request->input('title'),
'content' => $request->input('content'),
]);
// Weiterleitung zur Blog-Übersicht
return redirect()->route('blog.index')->with('success', 'Post erstellt!');
}
}
✔ Ein Controller steuert den Ablauf einer Anwendung und trennt Geschäftslogik von der Präsentation.
✔ Er ermöglicht eine saubere Code-Struktur, da jede Komponente (Model, View, Controller) eine klare Aufgabe hat.
✔ In modernen Frameworks wie Laravel, Django oder ASP.NET gibt es oft vorgefertigte Routing-Mechanismen, die automatisch Anfragen den richtigen Controllern zuordnen.