// Snippet

Linux: Backup-Tools

Um Backups unter Linux zu erstellen, kann man z.B. Borg Backup oder restic einsetzen:

Beide Tools setzen auf einen ähnlichen Ansatz. Das Backup wird unter anderem inkrementell und verschlüsselt erstellt. Ich setze Borg Backup mit einer Storage Box von Hetzner ein. Der größte Unterschied ist, dass Borg Backup nur über SSH das Backup auf einem anderen Server speichern kann. Bei restic kann das Backup auch in Amazon S3, Google Cloud Storage oder Microsoft Azure gespeichert werden.

Der folgende Artikel gibt einen guten Start in die Einrichtung von Borg Backup: Server-Backups mit Borg: So sichere ich meine Server

// Snippet

ncdu - Große Ordner und Dateien finden

Wenn die Festplatte voll ist, dann hat dies einen negativen Einfluss auf das System. Vieles wird nicht mehr wie gewohnt funktionieren. Mit ncdu lässt sich über das Terminal herausfinden, wo die Ursachen liegen.

Das Tool kann klassisch über apt install ncdu oder brew install ncdu installiert werden.

Mit sudo ncdu / wird die komplette Festplatte eingelesen und man bekommt anschließend eine Übersicht über die größten Ordner und Dateien.

Ein Beispiel für die Ausgabe von ncdu:

ncdu 1.12 ~ Use the arrow keys to navigate, press ? for help
--- / ----------------------------------------------------------
   43.3 GiB [##########] /docker
   23.7 GiB [#####     ] /var
    2.2 GiB [          ] /cache
    1.9 GiB [          ] /home
    1.3 GiB [          ] /usr
  867.3 MiB [          ] /lib
  704.5 MiB [          ] /root
  142.5 MiB [          ] /boot
   38.4 MiB [          ] /tmp
   15.7 MiB [          ] /bin
   15.2 MiB [          ] /sbin
    6.3 MiB [          ] /etc
    2.6 MiB [          ] /run
   16.0 KiB [          ] /opt
   16.0 KiB [          ] /mnt
e  16.0 KiB [          ] /lost+found
    8.0 KiB [          ] /media
    8.0 KiB [          ] /snap
    4.0 KiB [          ] /lib64
e   4.0 KiB [          ] /srv
.   0.0   B [          ] /proc
    0.0   B [          ] /sys
 Total disk usage:  74.1 GiB  Apparent size:  74.0 GiB  Items: 1829938
// Link

Dashboard mit Laravel und Echtzeit-Funktionalität

Wenn man Echtzeit-Funktionalität in einer Web-Anwendung nutzen möchte, gibt es mir zwei bekannte Wege. Die erste Option ist, dass man in regelmäßigen Abständen den aktuellen Status vom Server lädt. Die Alternative, und vermutlich auch der elegantere Weg, ist die Nutzung von Websockets. Mit Websockets kann der Server neue Daten an den Browser schicken. Websockets bedeuten aber auch eine zusätzliche Schicht an Komplexität.

Der Artikel zeigt gut, dass man nicht vergessen sollte die Anwendung einfach zu halten.

Building a realtime dashboard powered by Laravel, Livewire and Tailwind (2020 edition)
// Snippet

Docker: Größe von Log-Dateien limitieren

Docker nimmt mit den Containern und Images gut Speicherplatz in Anspruch. Aber auch die Logs der Container können sehr groß werden. Wenn du mal wissen willst wie viel Speicher die Logs benötigen, kannst du dies mit diesem Befehl herausfinden:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

Wenn der aktuelle Benutzer nicht die ausreichenden Berechtigungen hat, ist eventuell ein sudo vor dem ls notwendig.

Da ich nur die aktuellen Logs brauche, müssen die nicht sehr lange aufbewahrt werden. In die Datei /etc/docker/daemon.json muss folgendes ergänzt werden:

{
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "10m",
   "max-file": "3"
  }
}

Die Container müssen alle neugestartet werden, damit die Einstellung übernommen wird.

Quellen:
// Snippet

PHP: Inline static caching

Wird eine PHP-Methode mehrfach aufgerufen, lässt sich der Inhalt einer Variable zwischenspeichern.

class Post extends Model
{
    public function commentCount()
    {
        static $cache;

        return $cache ?: $cache = $this->comments()->count();
    }
}
Quelle:
// Link

gitmoji - Emojis in Commit-Nachricht für eine bessere Übersicht

Arbeitet man in unterschiedlichen Projekten mit unterschiedlichen Entwicklern, dann unterscheiden sich z.B. auch die Anforderungen an das Codestyling oder die Art des Aufbaus einer Commit-Nachricht. Gibt es ein Issue, dann stelle ich die Issue-Nummer vor die Commit-Nachricht. Mit gitmoji kann man aber noch einen Schritt weitergehen und Emojis verwenden. Das hat nicht nur den Zweck, dass die Nachrichten vielleicht cooler/moderner aussehen, sondern man hat nun die Möglichkeit anhand des Emojis zu sehen was für Codeänderungen in dem Commit enthalten sind. Das Ganze funktioniert natürlich nur, wenn alle Entwickler die gleichen Emojis für die Zuordnung verwenden. Das Projekt gitmoji gibt eine Übersicht über die zu verwendenden Emojis. Die Beschreibung des Projektes fasst es sehr gut zusammen:

Using emojis on commit messages provides an easy way of identifying the purpose or intention of a commit with only looking at the emojis used. As there are a lot of different emojis I found the need of creating a guide that can help to use emojis easier.

Die Schreibweise mit dem Doppelpunkt wird von GitHub und GitLab interpretiert und in der Weboberfläche werden die Emojis dargestellt. Fehlt eigentlich nur noch, dass Git Tower auch die Emojis interpretiert.

Wenn du Git über das Terminal bedienst, dann solltest du dir gitmoji-cli anschauen. Damit lassen sich die passenden Emojis zu dem Commit im Terminal auswählen.

gitmoji
// Link

Grid Garden - Ein Spiel, um CSS Grid zu lernen

CSS Grid ist mir ein Begriff, jedoch hatte ich bisher noch keinen Kontakt mit der neuen Technik. Mit der neuen Technik lassen sich komplexe Layouts erstellen ohne ein externes Framework zu verwenden. Die meisten aktuellen Browser unterstützen schon CSS Grid. Aus meiner Sicht ist die Technik noch etwas neu, um sie produktiv einzusetzen. Aber man kann sich jetzt schon damit beschäftigen.

CSS Garden bieten einen guten und spielerischen Einstieg in CSS Grid.

CSS Grid Garden
// Link

JavaScript 30 - Kostenloser Onlinekurs zum Thema Vanilla JavaScript

Bisher habe ich in jedem Projekt jQuery eingebunden, wenn JavaScript nötig war. jQuery vereinfach den Umgang mit JavaScript. Wenn man sich mal genauer mit Vanilla JavaScript beschäftigt, merkt man schnell, dass jQuery oft gar nicht nötig ist. Vanilla JavaScript bezeichnet das reine JavaScript ohne die Nutzung von Bibliotheken wie z.B. jQuery.

Vieles was man mit jQuery löst, lässt sich auch mit reinem JavaScript lösen. Meistens entstehen kaum mehr Zeilen Code im Vergleich zur Lösung mit jQuery. Der Vorteil von Vanilla JavaScript ist, dass man sich das Laden von jQuery sparen kann, da vermutlich nie alle Funktionen von jQuery benötigt werden und somit immer zusätzlich geladen werden.

Der kostenlose Onlinekurs zeigt anhand schöner Beispiele, wie man ohne jQuery oder andere JavaScript-Bibliothek auskommt. In 30 Videos bekommt man gezeigt, wie man nur mit JavaScript Aufgaben löst. Neben dem Videos erhält man einen Projektordner, in dem alle Aufgaben enthalten sind. Beim Schauen der Videos lässt sich das Gezeigte direkt umsetzen.

Die ersten Videos und Aufgaben haben mir sehr gut gefallen und man bekommt sehr schön gezeigt wie man Vanilla JavaScript schreibt. Dabei wird auch auf das neue JavaScript ES6 eingegangen.

Zum Onlinekurs JavaScript 30
// Link

fnm - Fast Node Manager

Wenn man mehrerer Node.js-Version nutzt, dann benötigt man ein Tool, das die Verwaltung übernimmt. nvm ist der wohl bekannteste Node Version Manager. Leider ist nvm sehr langsam und beeinflusst somit das Starten einer neuen Shell sehr stark.

Eine Alternative ist fnm, der sich auch um die Verwaltung von mehreren Node.js-Versionen kümmert. fnm beeinflusst das Starten einer neuen Shell jedoch nicht so stark. Ein weiterer Vorteil ist, dass fnm direkt mit der fish shell genutzt werden kann.

fnm
Vermutlich verwendest du einen veralteten Browser. Da diese Website auf moderne Technik setzt, benötigst du einen aktuellen Browser, um diese Website richtig darzustellen.