/dev/rdisk vs. /dev/disk unter macOS

Unter macOS werden Festplatten, SD-Karten und ähnliches im Dateisystem unter /dev/ als Gerätedateien eingebunden. Für eine SD-Karte könnte nun beispielhaft das Gerät /dev/disk2 vorhanden sein. Das Gerät ist ebenfalls über /dev/rdisk2 ansprechbar. Obwohl beide Gerätedateien das gleiche physikalische Gerät ansprechen, unterscheiden sie sich. So könnte ein Image mittels dd auf das Gerät geschrieben werden:

dd bs=1m if=filename.img of=/dev/rdisk2

Der Prozess ist nach relativ kurzer Zeit abgeschlossen. Wird die Operation nun mit dem Gerät /dev/disk2 durchgeführt:

dd bs=1m if=filename.img of=/dev/disk2

so verlängert sich die Dauer der Operation um ein Vielfaches. Hintergrund hierfür ist die technische Anbindung der jeweiligen Gerätedateien. Die Datei /dev/rdisk2/ ist näher an dem physikalischen Gerät, so das Änderungen direkt durchgeführt werden. Aus Sicht von Programmen, welche nicht im Kontext des Kernels laufen, ist der Zugriff auf /dev/disk gepuffert. Wird auf diese Gerätedatei geschrieben, so wird der Datenstrom in 4 KiB große Blocke heruntergebrochen, im Puffer gespeichert und erst dann (oder später) geschrieben bzw. gelesen. Wird hingegen /dev/rdisk2 genutzt, so wird der Datenstrom relativ direkt auf das Gerät geschrieben. Dies wirkt sich positiv auf die Geschwindigkeit aus und ist z.B. beim Schreiben von Images auf einen Datenträger von Vorteil.

Probleme mit NativeScript und Xcode

NativeScript ist ein Framework für die Entwicklung von plattformübergreifenden Apps. Um aus dem NativeScript-Quellcode eine lauffähige iOS-App zu generieren, muss unter anderem Xcode installiert sein. Dabei kann es im Zusammenhang mit NativeScript und xcodebuild zu folgender Fehlermeldung kommen:

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

Gelöst werden kann dieses Problem auf dem Terminal mit dem Befehl:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

Anschließend sollte bei der Ausführung des Befehls:

xcodebuild -version

folgende Ausgabe zu sehen sein:

Xcode 10.2
Build version 10E125

Damit ist das Problem gelöst und mit der Entwicklung mittels NativeScript kann fortgefahren werden.

Nginx unter macOS mittels Homebrew installieren und nutzen

Nginx wird für gewöhnlich unter Linux genutzt. Für Entwicklungszwecke kann es interessant sein Nginx unter macOS zu betreiben. Zur Installation von Nginx wird Homebrew benötigt. Homebrew ist ein Paketmanager für macOS, mit welchem viele Open-Source-Projekte unter macOS installiert werden können. Ist Homebrew installiert kann Nginx auf dem Terminal mittels:

brew install nginx

installiert werden. Standardmäßig läuft Nginx bei der Installation über Homebrew auf dem Port 8080. Hintergrund ist das der Webserver somit ohne root-Rechte bzw. ohne sudo genutzt werden kann. Wird der Port auf 80 oder generell auf einen Port kleiner 1024 gestellt, werden wieder entsprechende administrative Rechte benötigt. Soll der verwendete Port geändert werden, muss die Konfigurationsdatei angepasst werden:

nano /usr/local/etc/nginx/nginx.conf

In dieser findet sich folgender Block:

server {
  listen       8080;
  server_name  localhost;

Dort kann anschließend der Port geändert werden. Neben dem Port kann dort die Default-Location geändert werden. Dazu wird der server-Block bzw. dessen Unterblock, der location-Block angepasst:

location / {
  root /Users/seeseekey/Web;
  autoindex on;

Die root-Direktive gibt den Pfad an, welcher über den Webserver ausgeliefert wird. Die Option autoindex sorgt für das entsprechende Directory-Listing, was für Entwicklungszwecke nützlich sein kann. Gestartet und gestoppt werden kann der Service mittels:

brew services start nginx

bzw.

brew services stop nginx

Natürlich kann dies mittels restart in einem Rutsch erledigt werden:

brew services restart nginx

Anschließend kann Nginx mit der veränderten Konfiguration genutzt werden.

Standard-Editor für Git setzen

Wenn das Versionsverwaltungsystem Git im Terminal bzw. auf der Konsole genutzt wird, so wird unter anderem im Falle des Befehls:

git commit

ein Editor geöffnet (in diesem Fall, zur Eingabe der Commit-Nachricht). Der betreffende Editor wird durch die Git-Konfiguration bestimmt. Innerhalb der Konfiguration definiert der Parameter core.editor den zu nutzenden Editor. Um einen Editor zu setzen, z.B. nano muss folgender Befehl genutzt werden:

git config --global core.editor "nano"

Damit wird der Editor nano in der globalen Git-Konfiguration hinterlegt und fortan als Standard-Editor für Git im Terminal genutzt.

Git-Branch ohne History erstellen

Eine wichtige Eigenschaft moderner Versionskontrollsysteme ist die Möglichkeit Branches zu erstellen. Ein neu erstellter Branch stellt aus Anwendersicht eine Kopie des Quellbranches da. Manchmal soll allerdings ein Branch erstellt werden, welcher nicht von der Versionsgeschichte eines Quellbranches beeinflusst ist. Unter Git kann ein solcher Branch mit dem Befehl:

git checkout --orphan branchName

erstellt werden. Dadurch wird ein Branch ohne Elternteil erstellt. Dies wiederum führt dazu das der Branch keinerlei Versionsgeschichte verfügt und unabhängig von anderen Branches des gleichen Repository existiert.