Die Bedeutung von Berechtigungsformaten in Unix. Zahlenformat (Octal-Format) vs. Buchstabenformat

In der Welt der Unix-basierten Betriebssysteme sind Berechtigungen von Dateien und Ordnern ein grundlegendes Konzept. Diese Berechtigungen sind in verschiedenen Formaten dargestellt, darunter das Zahlenformat wie "0755" und das Buchstabenformat wie "rw-r--r--". In diesem Artikel werde ich die Unterschiede zwischen diesen beiden Formaten erläutern und wie sie sich auf die Zugriffsrechte von Dateien und Ordnern auswirken.

Zahlenformat:

Das Zahlenformat, auch als Octal-Format bekannt, wird häufig verwendet, um Berechtigungen in Unix-Systemen festzulegen. Die Zahl "0755" besteht aus drei Oktalzahlen, die jeweils die Berechtigungen für den Eigentümer, die Gruppe und andere Benutzer darstellen.

  • Die erste Ziffer (0) ist ein Platzhalter und bedeutet, dass keine besonderen Berechtigungen gesetzt sind.
  • Die zweite Ziffer (7) repräsentiert die Berechtigungen des Eigentümers und steht für Lese-, Schreib- und Ausführungsrechte.
  • Die dritte Ziffer (5) steht für die Berechtigungen der Gruppe und bedeutet Lese- und Ausführungsrechte, aber keine Schreibrechte.
  • Die vierte Ziffer (5) repräsentiert die Berechtigungen für andere Benutzer, die ebenfalls Lese- und Ausführungsrechte, aber keine Schreibrechte haben.
    Insgesamt bedeutet "0755", dass der Eigentümer volle Kontrolle über die Datei oder den Ordner hat, die Gruppe und andere Benutzer jedoch nur Lese- und Ausführungsrechte besitzen.

    Um Ordnerberechtigungen im Zahlenformat anzuzeigen, nutze ich den Befehl:
stat -c "%a" /pfad/zum/ordner

Buchstabenformat:

Das Buchstabenformat wird mit "ls -l" oder "ll" ausgegeben, wenn du Dateien oder Ordner in einem Unix-Terminal auflistest. Hier ist eine Übersetzung des Formats "rw-r--r--":

  • Die ersten beiden Buchstaben "rw" stehen für die Berechtigungen des Eigentümers und bedeuten Lese- und Schreibrechte.
  • Die nächsten drei Buchstaben "r--" repräsentieren die Berechtigungen der Gruppe und bedeuten nur Leserechte.
  • Die letzten drei Buchstaben "r--" stehen für die Berechtigungen für andere Benutzer, die ebenfalls nur Leserechte haben.
    Im Buchstabenformat bedeutet "rw-r--r--", dass der Eigentümer Lese- und Schreibrechte hat, während die Gruppe und andere Benutzer nur Leserechte haben.

    Um Ordnerberechtigungen im Buchstabenformat anzuzeigen, nutze ich den Befehl:
ll  /pfad/zum/ordner

Unterschiede zwischen den Formaten:

Der Hauptunterschied zwischen den beiden Formaten besteht darin, wie die Berechtigungen dargestellt werden. Das Zahlenformat bietet eine kompakte Darstellung und ermöglicht es, Berechtigungen auf einen Blick zu erkennen, während das Buchstabenformat eine detailliertere, aber längere Darstellung bietet.
Die Wahl zwischen den beiden Formaten hängt von deinen persönlichen Vorlieben und Anforderungen ab. Beide ermöglichen die genaue Steuerung der Datei- und Ordnerzugriffsrechte in Unix-Systemen.

Hier gibt's einen super Beitrag auf Englisch

Test Driven Development (TDD) nach Robert C. Martin

Test Driven Development (TDD) ist eine Softwareentwicklungsmethode, bei der der Entwicklungsprozess auf das Schreiben von Tests vor der Implementierung des eigentlichen Codes ausgerichtet ist. Es folgt einem einfachen Zyklus, der aus drei Hauptphasen besteht. In diesem Blog-Artikel möchte ich die drei Stages des Test Driven Development (TDD) nach Robert C. Martin, auch bekannt als Uncle Bob, näher erläutern: die rote Kappe, die grüne Kappe und die blaue Kappe.
(Die Analogie der farbigen Kappen hilft Entwicklern, den TDD-Prozess besser zu verstehen und die verschiedenen Phasen zu visualisieren. Es betont die Idee, dass TDD ein iterativer Prozess ist, bei dem Tests und Codeentwicklung eng miteinander verflochten sind, um hochwertige Software zu erstellen. So beschreibt Robert C. Martin den Prozess des TDD. )

  • Rote Kappe (Red Phase): In dieser Phase wird zuerst ein Testfall geschrieben, der die erwartete Funktionalität des zu entwickelnden Codes beschreibt. Der Test wird absichtlich so geschrieben, dass er fehlschlägt, da der Code noch nicht implementiert wurde.
  • Grüne Kappe (Green Phase): Hier wird der eigentliche Code entwickelt, um den Testfall zum Bestehen zu bringen. Das Hauptziel besteht darin, nur den minimalen Code zu schreiben, um den Test erfolgreich zu machen, ohne zusätzliche Funktionalität hinzuzufügen.
  • Blaue Kappe (Blue Phase): In dieser Phase erfolgt das Refactoring des Codes, um sicherzustellen, dass er sauber, wartbar und effizient ist. Es wird kein neuer Funktionscode hinzugefügt, sondern der vorhandene Code wird verbessert.

Dieser Zyklus wird immer wieder wiederholt: Test schreiben, Test bestehen lassen und Code refaktorisieren. Durch diese iterative Vorgehensweise wird sichergestellt, dass der Code immer gut getestet ist und Änderungen oder Erweiterungen am Code keine unerwünschten Nebenwirkungen haben.

TDD hilft Entwicklern, qualitativ hochwertigen Code zu schreiben, da es die Testabdeckung sicherstellt und frühzeitig Probleme erkennt. Es fördert auch das Design von Software, da Entwickler die Anforderungen in kleine, testbare Teile aufteilen müssen. TDD ist ein wichtiger Bestandteil von agilen Entwicklungsmethoden und hat sich als effektive Methode zur Verbesserung der Codequalität und der Entwicklungsproduktivität erwiesen.

1. "Rote Kappe": Test schreiben

Die erste Phase, die "rote Kappe", ist der Ausgangspunkt. Hier schreibe ich den Test, bevor ich irgendeinen Code schreibe. Dieser Test sollte fehlschlagen, da der zugehörige Code noch nicht existiert. Das Beispiel in PHP sieht so aus:

public function testAddition()
{
    $calculator = new Calculator();
    $result = $calculator->add(2, 3);
    $this->assertEquals(5, $result);
}

2. "Grüne Kappe": Code schreiben

Nachdem der Test in der roten Kappe fehlgeschlagen ist, schreibe ich den minimalen Code, um den Test zum Bestehen zu bringen. Dabei ist das Ziel, den Test in der "grünen Kappe" erfolgreich durchzuführen:

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

3. "Blaue Kappe": Refactoring

In der letzten Phase, der "blauen Kappe", nehme ich mir Zeit, um den Code zu optimieren und zu verbessern, ohne die Funktionalität zu ändern. Refactoring ist entscheidend, um sauberen und wartbaren Code zu erhalten:

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

Tipps für effektives TDD:

  • Starte immer mit einem klaren Ziel für deinen Test.
  • Schreibe den einfachsten Testfall zuerst.
  • Erweitere den Code nur, um den aktuellen Testfall zu bestehen.
  • Refactoring sollte regelmäßig erfolgen, um die Codequalität zu erhöhen.
  • Verwende ein Tool wie PHPUnit, um deine Tests automatisch auszuführen.

Die Kunst des Clean Code: Warum sauberer Code in der Softwareentwicklung unverzichtbar ist

Clean Code ist von Robert Cecil Martin definiert und revolutioniert die Art und Weise, wie wir programmieren. Es geht darum, Code verständlich, effizient und leicht wartbar zu gestalten. Hier sind einige Tipps in PHP, um Clean Code zu schreiben.
Natürlich, Flexibilität ist wichtig, besonders wenn sich die Anforderungen ändern, daher sind diese Regel eher als Richtlinien zu verstehen, als wie in Stein gemeißelte Gebote. Es ist jedoch eine gute Praxis, bei jedem Schritt des Programmierens sorgfältig über jede Zeile Code nachzudenken, nicht nur bei neuen Projekten. Dies gewährleistet Konsistenz und Qualität in deinem Code.

Warum ist Clean Code wichtig?

Sauberen Code zu schreiben, ist entscheidend, weil er:

  • Die Lesbarkeit verbessert: Anderen Entwicklern und dir selbst fällt es leichter, den Code zu verstehen und zu warten.
  • Fehler leichter identifizieren lässt: Fehler sind schneller gefunden und behoben, da der Code logischer strukturiert ist.
  • Die Zusammenarbeit erleichtert: Wenn du in einem Team arbeitest, wird sauberer Code zu einer gemeinsamen Sprache, die alle verstehen können.
  • Die Skalierbarkeit erhöht: Es wird einfacher, neue Funktionen hinzuzufügen, ohne den gesamten Code zu überarbeiten.

Zusammenfassung des Buches

Allgemeine Regeln

  • Folge den Standardkonventionen.
  • Einfachheit ist besser. Reduziere die Komplexität so weit wie möglich.
  • Pflege die Boy-Scout-Regel. Verlasse den Ort sauberer als du ihn vorgefunden hast.
  • Finde immer die Wurzelursache. Suche immer nach der Wurzelursache eines Problems.

Designregeln

  • Halte konfigurierbare Daten auf hohen Ebenen (config Dateien).
  • Bevorzuge Polymorphismus gegenüber if/else oder switch/case.
  • Trenne den Mehrfaden-Code.
  • Vermeide übermäßige Konfigurierbarkeit.
  • Verwende Dependency Injection.
  • Befolge das Gesetz von Demeter. Eine Klasse sollte nur ihre direkten Abhängigkeiten kennen.

Tipps zur Verständlichkeit

  • Sei konsistent. Wenn du etwas auf eine bestimmte Weise machst, tue alle ähnlichen Dinge auf die gleiche Weise.
  • Verwende erklärende Variablen.
  • Kapsle Randbedingungen ein. Randbedingungen sind schwer nachzuverfolgen. Platziere die Verarbeitung für sie an einer Stelle.
  • Bevorzuge dedizierte Wertobjekte gegenüber primitiven Typen.
  • Vermeide logische Abhängigkeiten. Schreibe keine Methoden, die je nach etwas anderem in derselben Klasse korrekt funktionieren.

Namensregeln

  • Wähle beschreibende und eindeutige Namen.
  • Mache sinnvolle Unterscheidungen.
  • Verwende aussprechbare Namen.
  • Verwende durchsuchbare Namen.
  • Ersetze magische Zahlen durch benannte Konstanten.
  • Vermeide Codierungen. Hänge keine Präfixe oder Typinformationen an.

Regeln für Funktionen

  • Klein.
  • Machen genau eine Sache.
  • Verwende aussagekräftige Namen.
  • Bevorzuge weniger Argumente.
  • Habe keine Seiteneffekte.
  • Verwende keine Flaggenargumente. Teile die Methode in mehrere unabhängige Methoden auf, die vom Client ohne Flagge aufgerufen werden können.

Regeln für Kommentare

  • Versuche immer, dich im Code zu erklären.
  • Sei nicht redundant.
  • Füge keine offensichtlichen Störungen hinzu.
  • Verwende keine schließenden Kommentare in Klammern.
  • Kommentiere keinen Code aus. Entferne ihn einfach.
  • Verwende Kommentare zur Erläuterung der Absicht.
  • Verwende Kommentare zur Klarstellung des Codes.
  • Verwende Kommentare zur Warnung vor Konsequenzen.

Struktur des Quellcodes

  • Trenne Konzepte vertikal.
  • Zusammenhängender Code sollte vertikal dicht erscheinen.
  • Deklariere Variablen in der Nähe ihrer Verwendung.
  • Abhängige Funktionen sollten nah beieinander liegen.
  • Ähnliche Funktionen sollten nah beieinander liegen.
  • Platziere Funktionen in absteigender Richtung.
  • Halte Zeilen kurz.
  • Verwende keine horizontale Ausrichtung.
  • Verwende Leerzeichen, um zusammengehörige Dinge zu verknüpfen und schwach zusammenhängende zu trennen.
  • Breche die Einrückung nicht.

Objekte und Datenstrukturen

  • Verberge die interne Struktur.
  • Bevorzuge Datenstrukturen.
  • Vermeide hybride Strukturen (halb Objekt und halb Daten).
  • Sollte klein sein.
  • Mache eine Sache.
  • Kleine Anzahl von Instanzvariablen.
  • Die Basisklasse sollte nichts über ihre Ableitungen wissen.
  • Besser viele Funktionen als Code in eine Funktion übergeben, um ein Verhalten auszuwählen.
  • Bevorzuge nicht-statische Methoden gegenüber statischen Methoden.

Tests

  • Ein Assert pro Test.
  • Lesbar.
  • Schnell (tests sollten extrem schnell sein, dann entwickelt man lieber).
  • Unabhängig.
  • Wiederholbar.

Codegerüche

  • Starrheit. Die Software ist schwer zu ändern. Eine kleine Änderung verursacht eine Kaskade von nachfolgenden Änderungen.
  • Zerbrechlichkeit. Die Software bricht an vielen Stellen aufgrund einer einzelnen Änderung.
  • Immobilität. Teile des Codes können aufgrund von Risiken und hohem Aufwand nicht in anderen Projekten wiederverwendet werden.
  • Unnötige Komplexität.
  • Unnötige Wiederholung.
  • Undurchsichtigkeit. Der Code ist schwer zu verstehen.

Alle Funktionen, Methoden, Variablen, Ordner und Dateinamen sollten so benannt werden, dass der Code selbst wie ein gut verständliches Gedicht wirkt und Kommentare überflüssig werden. Abschließend, erinnere dich immer daran, dass Clean Code nicht nur eine Technik, sondern eine Denkweise ist. Es lohnt sich, in diese Fähigkeiten zu investieren, um zu einem besseren Entwickler zu werden.
Mehr Informationen: WIKIPEDIA

PDF-Erstellung auf Ubuntu: Verbinde deine JPGs spielend leicht

Ich möchte heute zeigen, wie du auf Ubuntu ganz einfach zwei JPG-Dateien zu einem PDF-Dokument zusammenführen kannst. Diese Aufgabe kann nützlich sein, wenn du mehrere Bilder in einer PDF-Datei teilen möchtest.

Schritt 1: Vorbereitung

Zuerst installiere das Programm "ImageMagick", wenn es noch nicht installiert ist. Öffne dein Terminal und gib den folgenden Befehl ein:

sudo apt-get install imagemagick

Schritt 2: Bilder zusammenführen

Nun können wir die beiden JPG-Dateien in ein PDF-Dokument zusammenführen. Verwende dazu den Befehl "convert" gefolgt von den Dateinamen der JPGs und dem gewünschten Namen für das PDF:

convert bild1.jpg bild2.jpg ausgabe.pdf

Das erstellte PDF, hier "ausgabe.pdf", enthält nun beide Bilder.
Schritt 3: Überprüfung

Um sicherzustellen, dass alles geklappt hat, öffne das PDF mit einem PDF-Viewer deiner Wahl.

Fertig! Du hast erfolgreich zwei JPG-Dateien zu einem PDF auf Ubuntu konvertiert.

Nützliche Tipps:

  • Wenn du mehr als zwei Bilder zusammenführen möchtest, füge einfach ihre Dateinamen in den "convert"-Befehl ein.
  • Wenn du alle Dokumente eines bestimmten Types zusammenführen willst:
convert *.jpg merged.pdf
  • Um die Reihenfolge der Bilder im PDF zu ändern, ändere die Reihenfolge der Dateinamen im "convert"-Befehl.
  • Du kannst auch die Größe und Qualität des resultierenden PDFs anpassen:
    Bildqualität (DPI): Du kannst die Bildqualität in DPI (Dots Per Inch) festlegen, um die Auflösung des PDFs anzupassen. Standardmäßig wird oft 72 DPI verwendet, aber du kannst eine höhere Auflösung für qualitativ bessere Ausdrucke wählen, z.B. 300 DPI.
convert -density 300 bild1.jpg bild2.jpg ausgabe.pdf

Kompression: Du kannst die Bildkompression festlegen, um die Dateigröße des PDFs zu reduzieren. Hierfür stehen verschiedene Kompressionsmethoden zur Verfügung, z.B. JPEG-Kompression.

convert -compress jpeg -quality 90 bild1.jpg bild2.jpg ausgabe.pdf

In diesem Beispiel wird die JPEG-Kompression mit einer Qualität von 90 verwendet.

Seitengröße: Du kannst auch die Größe der PDF-Seiten anpassen. Standardmäßig wird die Größe der JPG-Dateien verwendet, aber du kannst eine benutzerdefinierte Seitengröße festlegen.

convert -page A4 bild1.jpg bild2.jpg ausgabe.pdf

Hier wird die A4-Seitengröße für das PDF verwendet.

Qualitätsstufen: Wenn du die Qualität der Bilder in der PDF-Datei weiter anpassen möchtest, kannst du die Qualität für jedes einzelne Bild separat festlegen.

convert -quality 80% bild1.jpg -quality 90% bild2.jpg ausgabe.pdf

Dies setzt die Qualität für das erste Bild auf 80% und für das zweite Bild auf 90%.

Experimentiere mit diesen Optionen, um die gewünschte Größe und Qualität für dein PDF-Dokument zu erreichen. Je nach deinen Anforderungen und Vorlieben kannst du die Parameter anpassen.



Achtung, solltest du folgende Fehlermeldung sehen:

convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288.

Lies dir diese Lösungen durch: Fehlerbehebung | stackoverflow
Für mich war es diese Lösung: Fehlerbehebung | stackoverflow | Lösche Zeilen in der Datei /etc/ImageMagick-6/policy.xml

Webcam-Einrichtung unter Ubuntu: Guvcview im Handumdrehen

Wenn du deine Webcam unter Ubuntu nutzen möchtest, ist Guvcview eine großartige Wahl. Mit Guvcview kannst du deine Webcam schnell und einfach einrichten, um Videoaufnahmen und Videogespräche zu genießen. In diesem Blogbeitrag zeige ich dir Schritt für Schritt, wie du Guvcview unter Ubuntu installierst und konfigurierst.

  • Guvcview installieren

Um Guvcview zu installieren, öffne dein Terminal und gib den folgenden Befehl ein:

sudo apt-get install guvcview

Gib dein Passwort ein, wenn du dazu aufgefordert wirst, und bestätige die Installation.

  • Guvcview starten

Starte Guvcview, indem du einfach "guvcview" in deinem Terminal eingibst und die Eingabetaste drückst.

  • Webcam konfigurieren

Sobald Guvcview gestartet ist, kannst du deine Webcam auswählen und die Einstellungen nach deinen Wünschen anpassen. Du kannst die Auflösung, Bildfrequenz und vieles mehr festlegen.

  • Videoaufnahmen und Videogespräche genießen

Jetzt bist du bereit, deine Webcam unter Ubuntu mit Guvcview zu nutzen. Du kannst Videoaufnahmen starten oder an Videogesprächen teilnehmen, ohne weitere Konfigurationen vornehmen zu müssen.