Freitag, 9. Oktober 2020

Linux - Statische Kopie einer Webseite anlegen mit wget

Bereits in anderen Artikeln habe ich auf die Verwendungsmöglichkeiten von wget hingewiesen. Siehe z.B. Rund um Linux - Einige nützliche Befehle für die Shell II (Download mit wget und seq), Webservice Abfrage per Konsole mit wget und Erreichbarkeit von Webseiten oder Servern mit wget überpfüfen inkl. E-Mail Versand. Mit wget lassen sich sehr gut statische Kopien von Websites erstellen.


Ein einfaches wget [url] ist leider nicht ausreichend, da u.a. verschiedene Ressourcen pauschal nicht mitgeladen werden. 

Damit dies vollumfänglich funktioniert, sind die folgenden Parameter notwendig (siehe auch http://www.gnu.org/software/wget/manual/wget.html):

wget -p -nh -H -k -E -w 1 -r -l 1 [URL]

Siehe auch c't 21/2020 S. 154 Praxis Websites kopieren.

‘-p’ => ‘--page-requisites’
This option causes Wget to download all the files that are necessary to properly display a given HTML page. This includes such things as inlined images, sounds, and referenced stylesheets.

‘-nH’ => ‘--no-host-directories’
Disable generation of host-prefixed directories. By default, invoking Wget with ‘-r http://fly.srk.fer.hr/’ will create a structure of directories beginning with fly.srk.fer.hr/. This option disables such behavior.

‘-H’ => ‘--span-hosts’
Enable spanning across hosts when doing recursive retrieving (see Spanning Hosts).

‘-k’ => ‘--convert-links’
After the download is complete, convert the links in the document to make them suitable for local viewing

‘-E’ => ‘--adjust-extension’

If a file of type ‘application/xhtml+xml’ or ‘text/html’ is downloaded and the URL does not end with the regexp ‘\.[Hh][Tt][Mm][Ll]?’, this option will cause the suffix ‘.html’ to be appended to the local filename.

‘-w seconds’ => ‘--wait=seconds’
Wait the specified number of seconds between the retrievals. Use of this option is recommended, as it lightens the server load by making the requests less frequent.

‘-r’ => ‘--recursive’
Turn on recursive retrieving. See Recursive Download, for more details. The default maximum depth is 5.

‘-l depth’ => ‘--level=depth’
Specify recursion maximum depth level depth (see Recursive Download).


Allgemein nützliche Informationen zu wget finden sich auch hier: Frequently Asked Questions About GNU Wget.

Donnerstag, 24. September 2020

Linux - Anzeigen des TIMESTAMP in der history mit Hilfe von HISTTIMEFORMAT

Ruft man die history (Verlauf über die Befehlszeile) auf, werden normalerweise die Befehle mit #ID und der Befehl selber angezeigt. Es kann aber vorteilhaft sein, den Zeitstempel zusammen mit dem Befehl anzuzeigen.


Umgebungsvariable HISTTIMEFORMAT

HISTTIMEFORMAT in der ~/.bashrc mit dem folgenden Inhalt setzen:

HISTTIMEFORMAT="%F %T "

Hinweis: Der Zeitstempel kann nicht rückwirkend gesetzt, er wirkt sich nur auf die neu hinzugefügten Befehle aus!

 

Sonntag, 13. September 2020

Linux - PDF Dokumente zusammenfügen / Merge PDF files

Mit Hilfe von poppler-utils ist es möglich per Kommandozeile PDF  Dokumente in andere Formate umzuwandeln zu manipulieren oder auch zusammenfügen.

Installation (wenn Paket noch nicht vorhanden):
sudo apt-get install poppler-utils

Mit dem Befehl pdfunite ist das das Zusammenfügen von PDF Dateien per Kommandozeile ein Kinderspiel:
pdfunite Datei1.pdf Datei2.pdf AusgabeDatei.pdf

Weitere nützliche Tools:

  • pdftotext - Entnahme von Text
  • pdftoppm - Umwandlung von PDF nach PPM/PNG/JPEG
  • pdfimages - Entnahme von Bildern

Detailierte Infos zur Verwendung unter https://wiki.ubuntuusers.de/poppler-utils/.

Hinweis: Auch unter Windows ist eine Verwendung zum Beispiel mit Hilfe des Windows-Subsystem für Linux (WSL) möglich.

Freitag, 11. September 2020

Windows-Subsystem für Linux (WSL) - Installation

Mit Hilfe des Windows-Subsystem für Linux (WSL) können die enthaltenen Anwendungen des Ubuntu Images nativ unter Windows ausgeführt werden.

Damit eine Installation erfolgen kann, muss zuvor das optionale Feature „Windows-Subsystem für Linux“ aktiviert werden. 

Dies geht am schnellsten über den folgenden PowerShell (als Administrator ausführen) Befehl:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Alternativ geht dies auch per GUI:

Start Menu öffnen und nach "OptionalFeatures" suchen:

"Windows Subsystem für Linux" auswählen => "OK" klicken

Danach muss der PC neugestartet werden!


Anschließend können per Microsoft Store die folgenden Versionen installiert werden.

Hierfür kann man einfach nach "Ubuntu" suchen oder die nachfolgenden Links aufrufen:

Ubuntu 16.04 LTS: https://www.microsoft.com/de-de/p/ubuntu-1604/9pjn388hp8c9
Ubuntu 18.04 LTS: https://www.microsoft.com/de-de/p/ubuntu-1804/9n9tngvndl3q
Ubuntu 20.04 LTS: https://www.microsoft.com/de-de/p/ubuntu-2004/9n6svws3rx71

Weitere Informationen gibt es im Ubuntu Wiki: https://wiki.ubuntu.com/WSL


Montag, 7. September 2020

Linux - Netzwerkverbindung bzw. Erreichbarkeit von Ports testen

Mit der Hilfe von netcat lassen sich TCP/UDP Verbindungen bzw. Erreichbarkeit von Ports unter Linux testen.

Netcat ist in der Regel bereits vorinstalliert, kann ansonsten per netcat-openbsd installiert werden.

Netcat hat zwei Modi

  • Server: nc -l lokalport (nc -l 1234)

Netcat lauscht auf dem angegebenen Port für unbegrenzte Zeit auf eine eingehende Verbindung. 

  • nc 127.0.0.1 1234

Wurde eine Verbindung aufgebaut und wieder geschlossen wurde, beendet sich Netcat.

  • Client: nc zielserver zielport (nc -vz 192.168.1.110 80)

Mit der IP-Adresse 192.168.1.110 und dem Port 80 soll sich Netcat verbinden. In dem Client-Modus muss auf dem Zielrechner und -port schon eine Server-Anwendung warten, andernfalls beendet sich Netcat mit einem Fehler.


Hinweis: Funktioniert natürlich nur, solange keine Firewall zwischen den jeweiligen Netzwerken der Systeme die Verbindungen blockiert!

Wichtige Parameter:

  • -v  => aktiviert ausführlichere Ausgaben
  • -z  => nc scannt nur nach lauschenden ("listening") Diensten (Portscan)
  • -l  => nc wartet auf eingehende Verbindungen ("listen")

Auch ein simpler Dateitransfer ist möglich, siehe https://de.wikipedia.org/wiki/Netcat#Einfaches_Dateikopieren.

Auch ein einfacher Portscan ist mit netcat möglich:

nc -zv localhost 20-23

Siehe auch Liste der standardisierten Ports https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports.

  • 22 - TCP/UDP => Secure Shell (SSH) wird für verschlüsselte Fernwartung und Dateiübertragung genutzt (scp, sftp) sowie für getunnelte Portweiterleitun. 

 

Samstag, 29. August 2020

DSGVO - Was sind personenbezogene Daten?

Personenbezogenen Daten sind alle Informationen, die sich auf eine identifizierte oder identifizierbare Person beziehen.

Beispiele für personenbezogene Daten:

Bankdaten

  • Kreditkarte, Kontonummer, Einkommen, Kontostände

Physische Merkmale

  • Geschlecht, Haut-, Harr-, Augenfarbe, Statur, Kleidergröße

Kenn-Nummern

  • Identifikationsnummer, Personalausweisnummer, Sozialversicherungsnummer

Besitzmerkmale

  • Fahrzeug-, Immobilieneigentum, Grundbucheintrag

Onlinedaten

  • Standortdaten, IP-Adresse, E-Mail-Adresse, Cookie-Kennung

Gesundheits-Informationen

  • Genetische Daten, Krankendaten

Werturteile

  • Schul- und Arbeitszeugnisse

Allgemeine Personendaten

  • Name, Alter, Geburtsdatum, Anschrift, Familienstand

 

Siehe auch Bundesdatenschutzgesetz (BDSG) § 46 Abs. 1 https://www.gesetze-im-internet.de/bdsg_2018/__46.html .

Montag, 24. August 2020

Fritz!Box - Anrufe per Python mit TR-064 und fritzconnection

Mit Hilfe von fritzconnection lassen sich Anrufe per TR-064 initiieren als auch beenden. Siehe auch https://avm.de/service/schnittstellen bzw. "AVM TR-064 – First Steps". Mit wenigen Zeilen Python-Quellcode kann man so z.B. auf Ereignisse bei einem Raspberry Pi reagieren.


Vorbereitung: Ein FRITZ!Box-Benutzerkonto erstellen

Siehe auch https://service.avm.de/help/de/FRITZ-Box-7590/018/hilfe_system_user_konzept.


Installation von fritzconnection (unter Python3)

Hinweis: Die hier gezeigte Lösung funktioniert nur mit Python3!
 
Package installer for Python (pip), wenn noch nicht vorhanden:
sudo apt-get install python3-pip

Damit die Python .whl files installiert werden können, müssen folgenden Packete vorhanden sein:
sudo apt-get install libxml2-dev libxslt-dev python-dev
Error: Please make sure the libxml2 and libxslt development packages are installed.

Installation von fritzconnection package via pip
sudo pip3 install fritzconnection
Hinweis: Da die Python .whl files (wheels) installiert werden müssen, dauert die Installation ca. 5-10min.

Script 

#!/usr/bin/python
from time import sleep
from fritzconnection import FritzConnection

fc = FritzConnection(
        address='192.168.1.1',
        user="ring",
        password="123456",
        )

print(fc)  # print router model informations
#fc.reconnect()  # get a new external ip from the provider

# call_action takes two required arguments: the service- and the action-name
# https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voip-avm.pdf
fc.call_action("X_VoIP1","X_AVM-DE_DialNumber",
                arguments={"NewX_AVM-DE_PhoneNumber ": "**9"})
# **9 (Rundruf) Alle angeschlossenen Telefone klingeln
sleep(5)
# Disconnect the dialling process.
fc.call_action("X_VoIP1","X_AVM-DE_DialHangup")


Fehler die auftreten können:

fritzconnection.core.exceptions.FritzActionFailedError: UPnPError:
errorCode: 501
errorDescription: Action Failed


=> Bei der FRITZ!Box muss unter 'Telefonie/Telefonbuch/Wählhilfe' der Punkt 'Wählhilfe verwenden' ausgewählt werden. ErrorCode 501 erscheint beim Fehlen der Wählhilfe. 

fritzconnection.core.exceptions.FritzSecurityError: UPnPError:
errorCode: 606
errorDescription: Action Not Authorized

=> Der Benutzer der FRITZ!Box hat nicht die notwendigen Rechte einen Anruf zu tätigen.



Sonntag, 16. August 2020

Fritz!Box - VoIP telefonieren per PC

Vor kurzem habe ich mir ein Logitech H820e Headset gekauft, um auch während der "Skype Meetings" im Homeoffice eine gewisse Bewegungsfreiheit zu haben. Da ich das Headset auch privaten nutzen will, möchte ich eine meiner VoIP Rufnummern mit dem Headset koppeln, wenn ich am PC sitze.


Voice Over IP als internes Gerät an der Fritz!Box aktivieren

Bei einer AVM FRITZ! Box 7590 muss man unter "Telefonie" => "Telefoniegeräte" den Button "Neues Gerät einrichten" anklicken.

Anschließend wählt man "Telefon" einrichten aus und klickt auf „Weiter“.

Als Telefon muss jetzt "LAN/WLAN (IP-Telefon)" ausgewählt werden und für das Telefon ein Benutzername und Passwort vergeben werden. Hinweis: Das Passwort wird später für die VoIP Software zur Anmeldung benötigt.


 

VoIP Software installieren und konfigurieren

Als kompakte und kostenlose Software verwende ich PhonerLite

Dabei kommen jetzt die folgenden Einstellungen zum Einsatz und schon kann es mit der Internettelefonie am PC losgehen.

  • Registrar/Domain: IP-Adresse/Alias der FritzBox!
  • Benutzername/Passwort: Welche bei der o.g. Einrichtung vergeben wurden.
 


Donnerstag, 13. August 2020

Raspberry Pi-hole - DNS Service, FTL is not running

Sollte es nach der Einrichtung von Pi-hole zu den folgenden Problemen kommen, kann ein kurzer "checkout" vom "master Branch" helfen.

Meldungen:

  • DNS service is not running
  • DNS resolution is not available
  • FTL is not running

Die aktuelle Version von Pi-hole mit dem folgenden Befehl installieren, anschließend werden auch die einzelnen Dienste (lighttpd, FTL service und DNS service) wieder gestartet:

pihole checkout master

Please note that changing branches severely alters your Pi-hole subsystems
Features that work on the master branch, may not on a development branch
This feature is NOT supported unless a Pi-hole developer explicitly asks!
Have you read and understood this? [y/N] y


Kommt es hierbei zu keiner Fehlermeldung, sollte Pi-hole wieder einwandfrei funktionieren!

 

Sonntag, 9. August 2020

Raspberry Pi-hole - Installation

Die Installation von Pi-Hole ist sehr schnell realisiert, wenn man die Ersteinrichtung des Raspberry Pi bereits durchgeführt hat.


Ersteinrichtung durführen


Hinweis: Der WLAN Zugang sollte nicht eingerichtet werden, da der Pi direkt per LAN-Kabel den Router verbunden wird!

Pi-hole - Installation

Ist man mit dem Raspberry Pi per SSH verbunden muss man nur den folgenden Befehl ausführen und die Pi-HoleInstallation wird automatisch gestartet.



Anschließend dem Installationsassistenten folgen und die folgenden Punkte auswählen:


Siehe auch: https://de.wikipedia.org/wiki/Quad9 inkl. Verschlüsselte Namensauflösung im Internet (#DNS over TLS) https://de.wikipedia.org/wiki/Domain_Name_System_Security_Extensions.




Hinweis: Die IP-Adresse habe ich in meinem Fall auf 192.168.1.111 eingestellt. Siehe auch Raspberry Pi - WLAN Konfiguration inkl. reconnect und statische IP "jessie".





Hinweis: Sollten andere Nutzer im Haushalt nicht damit einverstanden sein, muss der "privacy mode" angepasst werden.


Die Installation von Pi-Hole ist jetzt abgeschlossen!

Das generierte Passwort zum Login für das Web-Interface kann auf Wunsch mit dem folgenden Befehl angepasst werden:
pihole -a -p

Anschließend sollte der Pi neugestartet werden:
sudo reboot

Das Web-Iinterface ist unter http://pi.hole/admin oder http://192.168.1.111/admin zu erreichen. Hier lassen sich dann z.B. weitere Einstellungen für die "Whitelist" vornehmen, falls Webseiten einen "Adblocker" erkennen.


Pi-Hole als DNS-Server einrichten

Damit Pi-Hole als "Adblocker" arbeiten kann, muss jetzt bei jedem Client im Netzwerk die IP-Adresse des Pi´s als DNS Server eingetragen werden.
 
Update: Die Einstellungen für AVM FRITZ! Boxen funktioniert nicht korrekt (siehe Anleitung unten)! Aus Sicherheitsgründen unterdrückt die FRITZ!Box DNS-Antworten, die auf IP-Adressen im eigenen Heimnetz verweisen. Siehe auch https://en.wikipedia.org/wiki/DNS_rebinding.

Alternative: DNS-Server des Pi-Hole per DHCP bekannt machen

Folgende Einstellungen müssen bei der Fritz! Box vorgenommen werden:
  • "Heimnetz" => "Netzwerk" => "Netzwerkeinstellungen" => "IPv4-Konfiguration".
  • Jetzt unter "Lokaler DNS-Server" die IP-Adresse des Pi-Hole eintragen.
Jetzt sollten auf der Pi-Hole Weboberfläche "non-FQDN-Anfragen" erlaubt werden, damit im lokalen Netzwerk die Hostnamen der Fritz!Box weiterhin über den DNS-Namen erreichbar sind!


Die bessere Lösung ist aber den DNS-Server im Router (in meinem Fall eine FRITZ!Box 7590) anzupassen. Wie dies funktioniert, sieht man in den nachfolgenden Screenshots.





Hinweis: Es muss immer auch ein Backup DNS Server eingegeben werden. Falls der Pi mal einen defekt hat, kann man dennoch weitersurfen. In meinem Fall habe ich den von Cloudflare (1.1.1.1) verwendet.

Unter Settings => DNS (http://192.168.1.111/admin/settings.php?tab=dns) trägst man zuletzt noch die IP Adresse des Pi’s unter "Upstream DNS Server" ein:


Fazit: Weit über 50% von meinem Traffic ist jetzt werbefrei :-)




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.


Freitag, 26. Juni 2020

Palm m515 Handheld - Unter Windows 10 betreiben

Der Palm M515 gehörte im Jahr 2002 zu der PDA High-End-Serie. Er hat 16 MB Speicher, 4 MB Flash-ROM, 16-Bit-Farbdisplay mit 160 x 160 Pixeln Auflösung und eine Infrarot- sowie SD-Card-Schnittstelle. Als Software zum Datenabgleich kommt Palm Desktop 4.0.1 zum Einsatz und ist nur mit einer USB-Docking-Station möglich.


Was wird benötigt?

  • Gebrauchter Palm M515 bei ebay (kleinanzeigen) zwischen 10-20 EUR. Hinweis: Bitte darauf achten, dass auch eine funktionierende Docking Station (Hotsync) mit dabei ist.
  • Ggf. ein neuer Akku (850mAh, 3.7V).
  • SD-Karte (max. 1GB) bei ebay (kleinanzeigen) ab 1 EUR verfügbar.
  • Logitech TypeAway Keyboard bei ebay (kleinanzeigen) ab 1 EUR verfügbar.

Warum einen Palm im jahr 2020 verwenden?

  • Kleine Mitschriften und Notizen sind unterwegs komplett ohne Internetverbdinung möglich und wandern somit auch nicht in irgendeine Cloud (Datenschutz).
  • Einsatz als ultra kleine Schreibmaschine möglich in Verbindung mit dem Logitech TypeAway Keyboard und Anwendung CardTXT (https://freeware.palmclub.nl/c1/108-cardtxt.html). Die Dateien werden auf der SD-Karte (max. 1GB) im txt-Format abgespeichert und können am PC direkt weiter verarbeitet werden (SD-Karte aus dem Palm entnehmen und in den PC stecken).
  • Mit einem neuem Akku, hat der Palm eine sehr lange Akkulaufzeit im Standby (ca. 3-4 Wochen). 
 

Installation unter Windows 10


Software installieren

  • Quick Install im Palm Desktop aufrufen
  • Die zu installierenden Dateien (.prc) hinzufügen und anschließend den "Hotsync" durchführen

Installation Logitech TypeAway-Tastatur

Zuerst benötigt man einen Treiber, welcher per "Hotsync" direkt auf dem Palm installiert werden muss. Siehe dazu auch https://download01.logitech.com/web/ftp/pub/pdf/keyboards/typeaway.pdf .

 
Achtung: Der mitgelieferte Treiber funktioniert nur auf Palm OS 4. Es gibt aber auch einen Beta-Treiber für OS5, welcher auch mit dem Tungsten T funktioniert. Siehe ftp://ftp.logitech.com/pub/techsupport/keyboards/pda/ .