Donnerstag, 30. Juli 2020

Windows 10 - OpenSSH und Windows Terminal

OpenSSH wird mittlerweile unter Windows 10 mit der Version 1809 standardmäßig mit installiert. So kann man sich genau wie unter Linux zu jedem Gerät mit aktivierten SSH verbinden oder SSH-Keys direkt unter Windows 10 erstellen.


Verbindung zu einem RaspberryPi aufbauen:
  • ssh pi@192.168.1.110

SSH-Keys erzeugen (wenn eine Anmeldung per Kennwort verboten ist):
  • ssh-keygen
Standardmäßigen wird ein 2048-Bit-RSA-Key erstellt. Weitere Infos auch hier: https://docs.microsoft.com/de-de/windows-server/administration/openssh/openssh_keymanagement

Das neue Windows Terminal kann man mittlerweile vielfältig seinen Wünschen anpassen. Zum Beispiel kann man von der PowerShell aus Windows Terminal mit drei Bereichen (Eingabeaufforderung, PowerShell und Linux) öffnen.


wt -p "Command Prompt" `; split-pane -p "Windows PowerShell" `; split-pane -H wsl.exe


Weitere Infos finden sich hier: https://docs.microsoft.com/de-de/windows/terminal/

Sonntag, 26. Juli 2020

Rund um Linux - Einige nützliche Befehle für die Shell II (Download mit wget und seq)

Nach 7 Jahren ein kurzes Update für meinen Beitrag "Rund um Linux - Einige nützliche Befehle für die Shell I" um die Shell als Downloadhelfer (wie auch hier Download von Video Streams mit ffmpeg und hier Regenradar - Bilder sammeln oder manuell abrufen beschrieben) verwenden zu können.


Der Download von Bildern mit einer Schleife ist relativ einfach möglich. Möchte man z.B. folgende Bilder mit einer bestimmten Nummerierung herunterladen:
Kann man dank seq Zahlen in einem definierten Bereich ausgegeben und mit Hilfe des Parameters -w auch führende Nullen hinzugefügen.

seq -w 3 10
03
04
05
06
07
08
09
10


Daraus ergibt sich der folgende Befehl:
for i in `seq -w 01 05`; do wget https://www.shemel.de/download/images/test_2020-${i}.jpg ; done

Will man die Statusmeldungen von wget unterdrücken, kann man noch den Parameter -q hinzufügen:
for i in `seq -w 01 05`; do wget -q https://www.shemel.de/download/images/test_2020-${i}.jpg ; done


Möchte man Bilder einer kompletten Gallery herunterladen, ist dies auch mit Hilfe von wget möglich.


wget -q -r -np https://www.tafel-hef.de/bilder.php

  • Mit Hilfe des Parameters -r werden rekursiv alle Dateien heruntergeladen, die bei der hinterlegten Adresse verlinkt sind.
  • Mit dem Parameter -np werden nur Dateien die unterhalb des Verzeichnisses liegen heruntergeladen (no-parent). Achtung: In dem oben genannten Beispiel funktioniert dies nicht, da die URL nicht mit "/" endet. So wird die komplette Webseite heruntergeladen (inkl. aller Bilder).

Mit Hilfe von youtube-dl, kann man per Kommandozeile Videos von youtube.com und anderen Video Plattformen herunterladen.


youtube-dl "https://www.youtube.com/watch?v=BvjterYmC98"

Viele Beispiele finden sich hier https://wiki.ubuntuusers.de/youtube-dl/ .

Mittwoch, 22. Juli 2020

Raspberry Pi - GPIO-Pins erweitern mit I2C und MCP23017

Es kann durchaus vorkommen, dass die GPIO-Pins an einem Raspberry Pi nicht ausreichend sind. Dies kann gerade dann passieren, wenn man gleichzeitig viele Schalter, LEDs und Relais verwenden will.


Mit Hilfe des an den I2C-Bus (siehe auch Raspberry Pi - OLED Display (SSD1306) I2C ansteuern und Temperatur auslesen) angeschlossenen GPIO-Extender-Chip MCP23017, lassen sich aus 2 Pins 16 zusätzliche machen.

Eine Ausführliche Anleitung dazu findet man hier: Raspberry Pi GPIOs mittels I2C Port Expander erweitern – Teil 1.

Dienstag, 21. Juli 2020

Agile Softwareentwicklung - GitHub Flow notwendig?

Ist der GitHub Flow bei einem agilen Entwicklungsteam überhaupt noch notwendig?

 

GitHub Flow kurz erklärt


Wird eine neue Funktion in einem Softwareprojekt entwickelt, dann erstellt der Entwickler in der Regel einen "neuen Branch". Ist die Entwicklung der neuen Funktion abgeschlossen, wird ein "Pull Request" erstellt und zusammen mit dem Team besprochen. Mit Hilfe von automatischen Tests (siehe auch Unit-Tets - Was ist automatisches Testen?) wird sichergestellt, dass der neue bzw. angepasste Quellcode auch funktioniert. Anschließend kann der zuvor neu erstellte "Branch" in den "Master-Branch" übernommen werden.

Siehe hierzu auch "Following the GitHub flow":

Quelle: https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/github-flow#following-the-github-flow

Continuous Integration (CI) / Continuous Delivery (CD)


Mit Hilfe der CI/CD-Pipelines, welche in einem agilen Softwareprojekt zwingend erforderlich sind, welche den Prozess des fortlaufenden Zusammenfügens von Komponenten hin zu einer Anwendung garantieren, müssen Änderungen am Quellcode bzw. neue Funktionen nicht mehr bis zum nächsten großen Release gesammelt werden. Auch das "große" gemeinsame Testen und das "Live setzen" zu einem festgelegten Termin ist nicht mehr erforderlich. Siehe auch Softwaretest bei agiler Entwicklung durch Testautomatisierung .

Kleine Anpassungen sollten immer so schnell wie möglich getestet und abgenommen werden, damit diese sofort veröffentlicht werden können. Die sogenannten "Release Branches" sind damit hinfällig.

Wenn jede kleine neue Funktion oder Korrektur von Fehlern (Bugs) nach erfolgreicher Testautomatisierung und Abnahme durch den Fachbereich im Live System zur Verfügung steht, dann werden auch keine "Hotfixes" mehr benötigt (Hotfixes = Feature). Fehlerbehebungen müssen somit nicht in einer "veralteten Version" erfolgen (Forward Fixing und nicht Rolling Back).


Was bleibt zum Schluss übrig?


Die Entwickler arbeiten nur noch mit dem "Master-" und dem "Feature-Branch".



Sonntag, 19. Juli 2020

RAM Speicher - Steckplatz frei?

Ob man seinen PC noch um einen weiteren Riegel Arbeitsspeicher aufrüsten kann, erfährt man mit Hilfe des Task-Manager von Windows 10.


Der Start des Task-Manager erfolgt z.B. über die "Taskleiste" oder mit Hilfe der Tastenkombination "Strg+Umschalt+Esc". Anschließend "Mehr Details" und "Arbeitsspeicher" anklicken.


Freitag, 17. Juli 2020

Hex-Editor - Abbilddatei (Speicheranalyse) mit Windows

Unter Windows kann pauschal jeder User den Speicherinhalt von der von ihm gestarteten Programmen auslesen. Dies kann z.B. Hilfreich sein um Schädlinge oder Programme zu analysieren.


Mit Hilfe des Taskmanagers kann man von jedem Prozess eine aktuelle "Abbilddatei" speichern. Siehe dazu folgende Screenshots.




Damit man die erstellte Datei auslesen kann, benötigt man noch einen Hex-Editor (wie z.B. HxD). Der Editor zeigt jetzt den Speicherinhalt als Hex- und dekodierten Text an.




Samstag, 11. Juli 2020

Reguläre Ausdrücke (RegExp) mit Grep - Beispiele

Reguläre Ausdrücke (regular expression oder RegExp) bzw. Zeichenketten, können als Filterkriterien in Textsuchen verwendet werden. Der Text wird dabei mit dem "Muster" des regulären Ausdrucks abgeglichen. Somit kann man etwas suchen und finden, auch dann wenn man nicht mehr die genaue Schreibweise kennt.


Unter Linux kann man Hilfe von grep Dateien nach bestimmten Textzeichen durchsuchen. Unter Windows wäre die Verwendung mit Hilfe von grepWin (Regular expression search and replace for Windows) oder Select-String möglich.

Eine einfache Suche ist mit dem folgenden Befehl möglich:
  • grep 'hemel' \ ~/*
Der Parameter -E von grep definiert einen Regulären Ausdruck und die runden Klammern als Sonderzeichen. Mit dem Parameter -i ignoriert grep zusätzlich Groß- und Kleinschreibung.
Der | Strich (Pipe) steht für ein logisches "oder", somit wird nach dem "h" nach "hemel" und "hamel" gesucht.
  • grep -E -i 'h(e|a)mel' \ ~/*
Möchte man nach mehreren Zeichen inkl. Umlauten suchen, muss man die Zeichengruppe [] inkl. dem Quantifer + verwenden. Jetzt wird nach einem oder mehreren Zeichen gesucht, die innerhalb der [] vorkommen.
  • grep -E -i 'h[\0-9A-F]+mel' \ ~/*

Weitere Beispiele

  • [he]+ "h", "e", "hh", "hheeh" usw.
  • [0-6]{2,5} zwei bis fünf Ziffern von 0-6 in Folge, z. B. "16" oder "23456", jedoch nicht "7", "0.1" oder "1bca2“
  • h.{0,2}mel beliebiges Zeichen, min 0mal, max 2mal vorkommen, z.B. hemel, haemel, hmel

Wichtige Zeichen

  • . einzelnes Zeichen
  • (..) Gruppe von Elementen
  • ..|.. Oder Verknüpfung
  • ^ findet den Anfang einer Zeile
  • $ findet das Ende einer Zeile

Wichtige Zeichengruppen

  • [eam] ein Zeichen "e", "a" oder "m"
  • [0-9A-F] ein großer beliebiger Buchstabe oder eine beliebige Ziffer
  • [A-Za-z0-9] ein beliebiger Buchstabe oder eine beliebige Ziffer

Vordefinierte Zeichenklassen

  • \d Ziffer [0-9]
  • \D keine Ziffer [^\d] bzw. [^0-9]
  • \w Buchstabe [a-zA-Z_0-9]
  • \W weder Buchstabe noch Zahl noch Unterstrich [^\w]
  • \s whitespace Leerzeichen und Steuerzeichen \f, \n, \r, \t und \v
  • \S kein whitespace

Quantifier

  • ? optional, kommt null- oder einmal vor {0,1}
  • * beliebig oft oder auch keinmalt {0,}
  • +  mindestens einmal oder auch mehrfach {1,}
  • {n} muss exakt n-mal vorkommen {n,n}
  • {n,m} muss mindestens n-mal und darf maximal m-mal vorkommen

Unter debuggex.com kann man die erstellte regular expression testen und verstehen.