Unterabschnitte von Home
Web Apps
Unterabschnitte von WebApps
Dart-i
(ToDo!) — Hier gehts zur Dokumentation ->
Mini-Office
(ToDo!) — Hier gehts zur Dokumentation ->
Chapter X
Some Chapter title
Lorem Ipsum.
Unterabschnitte von Musik
Klingeltöne
Klingeltöne IPhone (noch verschieben)
audacity -> .m4a -> rename .m4r max-länge 30s wenn auch als Hinweiston File auf iphon kopieren - (Das File ist, nach kopieren, nicht sichtbar in browser)
Kapitel 1
Essen & Trinken
Unterabschnitte von Essen - Trinken
Gin Fizz
ZUTATEN
- 5cl Gin
- 3cl frischer Zitronensaft
- 2cl Zuckersirup
- ca.10cl Soda
- Eiswürfel
ZUBEREITUNG
- Alles bis auf Soda in den Shaker geben und 12.5 Sekunden shaken ;-)
- in Longdrinkglas geben und mit Soda auffüllen.
Pulledpork
Einkaufsliste
Material | Für 4-6 Personen |
---|---|
Fleisch vom Hals oder Schulter - hoher Fettgehalt und gleichmässig marmoriert | 2.5 kg |
Gemüsebullion (doppelt konzentriert) | 150 ml |
Rub (6 Esslöffel Kräutermischung + 2 Esslöffel Brauner Zucker) | 8 Esslöfel |
Annanas oder Apfelsaft oder … | 250 ml |
Barbecuesauce | |
Brötchen | 10 |
Schritt für Schritt
Aufwand
30 Minuten
Dauer
36 Stunden
Kapitel 2
Versions Controll Systeme
Unterabschnitte von VCS
Anbieter
Atlassian
…
Git-Repositories
Unterabschnitte von Git-Repositories
Basics
Init
git init
Zustand abfragen
git status
add to stage
-
git add -A
-
git add -u
remove from
git rm --cached <file/pattern>
Remove pycache
git rm --cached -r **pycache**/
commiten
git commit -m 'update node-red'
Remote Server
git remote add origin git@github.com:user/repo.git
RemoteRepo aktualisieren pushen zum Remot-Repo
-
ssh-keygen -t rsa -C "your_email@example.com"
-
cat ~/.ssh/id_rsa.pub | pbcopy
-
git push
-
git push --force --set-upstream origin master
vom RemoteRepo ziehen
-
git pull
-
git pull --recurse-submodules
git log
git log --all --graph --decorate --oneline
git log --all --graph --decorate
hard reset
git fetch origin master
git reset --hard origin/master
Backup aller repositories ziehen
USER=**USER**;
curl --user \${USER} 'https://api.bitbucket.org/2.0/repositories/**TEAM**?pagelen=100' | grep -o '"git@[^ ,]\+' | xargs -L1 git clone
Quellen
Scripts for ...
Git pull force
#/bin/sh
# Fetch the newest code
git fetch
# Delete all files which are being added,
# so there are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
echo "Deleting untracked file $file..."
rm -vf "$file"
done
# Checkout all files which have been locally modified
for file in `git diff HEAD..origin/master --name-status | awk '/^M/ {print $2}'`
do
echo "Checking out modified file $file..."
git checkout $file
done
# Finally merge all the changes (you could use merge here as well)
git pull
Quellen
Kapitel 3
Virtualisierung
Beginne mit dem einrichten einer virtuellen Umgebung. Das klingt zunächst … In wenigen Minuten eingerichtet … grosse Vorteile … Für Private Kostenlos …
Minimal anforderung Hardware:
- MacMini (ESXi Host)
- RaspberryPi (Terminal)
- Tastatur + Maus
- Monitor
- Netzkabel Cat5e
- USB-Disk für Backup’s (Kapazität: doppelt so viel wie HD im MacMini)
Optional:
- NAS
- 2-3 USB-Disks
Unterabschnitte von ESXi
Host einrichten
NAS mount from the config file.
´´´esxcfg-nas -r´´´
noch ein ort….
VBox:
mac:
-
diskutil list
-
diskutil unmountDisk /dev/disk2
-
ls -al /dev/disk2
-
sudo chown :staff /dev/disk2
-
VBoxManage internalcommands createrawvmdk -filename /Users/[Username]/Documents/usbdrive.vmdk -rawdisk /dev/disk2
-
diskutil unmountDisk /dev/disk2
-
Nun startet Ihr VirtualBox und erstellt eine neue Virtuelle Maschine. Wenn Ihr zu dem Punkt kommt, wo Ihr eine Festplatte erzeugen oder eine vorhandene Festplatte auswählen sollt, könnt Ihr dort eure erstellte .vmdk auswählen.
MacOs
Notizen:
sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool NO
sudo /Library/Application\ Support/VMware\ Tools/vmware-resolutionSet 2560 1600
ToDo: container für ocrmypdf https://medium.com/@thucnc/convert-a-scanned-pdf-to-text-with-linux-command-line-using-ocrmypdf-1a2e8d50277f
Unterabschnitte von Containering
Weiterführende
Unterabschnitte von Docker
Installation
Ubuntu-Server 20.4
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo usermod -aG docker ${USER}
su - ${USER}
id -nG
Quellen
- docker inst auf ubuntu 20.04 -> https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-de
Basics
docker commands
docker ps -a
docker stop
docker images
docker rmi
docker version
docker info
docker run –rm
docker exec –it
docker start
docker rm
docker-compose
docker-compose up -d
container update
Version in docker-compose erhöhen image: portainer/portainer:1.23.2
docker-compose up -d
Quellen:
https://entwickler.de/online/windowsdeveloper/docker-grundlagen-dotnet-container-579859289.html
Netzwerk Docker
host
Netzanschluss des Containers wie direkt am “switch”. … Bezieht aber keinen DHCP-Lease von externem DHCP-Server ohne DHCP-Relay
bridge
none
macvlan
debian
sudo ip link set eno1 promisc on
Bridge mode
docker network create -d macvlan \
--subnet=192.168.xxx.y/24 \
--gateway=192.168.xxx.y \
-o parent=eno1 macvlan_x
802.1q trunk bridge mode
docker network create -d macvlan \
--subnet=192.168.xxx.0/24 \
--gateway=192.168.xxx.1 \
-o parent=eno1.123 macvlan_xxx
ipvlan
docker network create -d ipvlan \
--subnet=192.168.xxx.0/24 \
--gateway=192.168.xxx.1 \
-o ipvlan_mode=l2 ipvlanxxx
overlay
offene Ports auflisten
debian
sudo netstat -tulpn | grep LISTEN
Quellen
Restic
Speedtest CLI
moutten/speedtest-cli
docker run --rm moutten/speedtest-cli
docker run --rm moutten/speedtest-cli --help
docker run --rm moutten/speedtest-cli --list
Chapter X
Some Chapter title
Lorem Ipsum.
Einrichten und Starten
config File erstellen
## traefik.yml
# Docker configuration backend
providers:
docker:
defaultRule: "Host(`{{ trimPrefix `/` .Name }}.master.k8s`)"
# API and dashboard configuration
api:
insecure: true
container starten
docker run -d --name traefik -p 8080:8080 -p 80:80 \
-v /data/traefik_data/traefik.yml:/etc/traefik/traefik.yml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik:v2.0
Quellen:
Chapter X
Some Chapter title
Lorem Ipsum.
…
Kapitel 4
Ansible
Werkzeug zur Orchestrierung
Unterabschnitte von Ansible
Auszeichnungssprachen
Nützliche Tools
Online Konverter
-
Data Format Converter yaml <-> json <-> toml <-> xml
Quelle: https://toolkit.site/format.html
Offline Konverter
-
remarshal
remarshal menues.toml --of yaml
Installation
Installation
MacOs
… …
sudo pip3 install --upgrade pip
sudo pip3 install ansible
ansible --version
ToDo:
Elasticsearch
Kibana
Grafana
ptrg
esp32/esp8266
Unterabschnitte von Monitoring
Checkmk
Zabbix
Zabbix auf Raspberry?
container
https://www.zabbix.com/documentation/current/manual/installation/containers
Fehler.Behebungen:
Fehler - in Msql - Docker
2020-09-27T05:58:55.367060Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: ‘8.0.21’ socket: ‘/var/run/mysqld/mysqld.sock’ port: 3306 MySQL Community Server - GPL. mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted …
Behebung (docker-compose):
unter zB database mysql: security_opt: - seccomp:unconfined
Kapitel 5
Computer - Netzwerk
ToDo
RemoteDesktop:
nmap:
- nmap -PE -sn -oG - 192.168.xxx.1/24
- nmap -sP -oG - 192.168.xxx.1/24
- nmap -sS -F 192.168.xxx.1/24
- nmap -sV -Pn -p0- –reason –stats-every 60s 192.168.xxx.1/24
- https://www.elektronik-kompendium.de/sites/net/2104261.htm
- https://www.nomachine.com/
Unterabschnitte von Netzwerk
Exports
Chapter X
Protokolle
Unterabschnitte von Exports
ssh
ssh-schlüssel tauschen:
#### wenn noch kein ssh-key:
ssh-keygen
#### dann:
cat ~/.ssh/id_rsa.pub | ssh pi@office "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
pub key copy in zwischenablage:
ssh-keygen
pbcopy < ~/.ssh/id_rsa.pub
oder
xclip < ~/.ssh/id_rsa.pub
oder
cat ~/.ssh/id_rsa.pub
nfs
sudo apt update && sudo apt install nfs-kernel-server -y
sudo apt update && sudo apt install nfs-common -y
snippet | Bemerkung |
---|---|
showmount -e nas | Freigaben abfragen |
sudo mkdir ~/mnt/nas_homes_nfs | |
sudo mount -t nfs -o vers=4 nas:/homes /nas_homes_nfs/ | bei Version3 = uid muss passen oder mappen |
mount | grep nfs | |
mount -t nfs -o uid=1000,gid=1000,tcp,rw :/path/to/export /mnt/freenasMnt | |
Quellen
DNS sinkhole
Pi-Hole
Eigene DNS-Einträge
Datei /etc/dnsmasq.d/50-custom-dns-names.conf
erstellen.
Hosteeinträge erstellen (Wildcard .xyz. wie bei server02 im beispiel)
address=/server01.lan/192.168.xxx.11
address=/.server02.lan/192.168.yyy.11
Quellen
InternetSpeed
Chapter X
Raspberry Pi
Unterabschnitte von Raspberry Pi
Videokonferenz
So einfach wie möglich
Motivation
2020-04-06: Das Virus COVID-19 hat sich über die ganze Welt verbreitet. Die 2 einzigen Mittel der Menschheit sich vor dem Virus zu schützen, Hygiene und soziale Distanz/Isolation.
Besonders der Kontakt zu den liebsten in Pflege- und Altersheimen ist oft schwierig. Video-Konferenzen helfen diese schwierigen Zeiten erträglicher zu machen. Soziale Kontakte zu Familie, Freunden und Interessengruppen können aus sicherrer Distanz gepflegt werden.
Um dieses “Fenster nach Aussen” auch für Menschen mit NULL Computer- oder Smartphone-Kenntnissen zugänglich zu machen, muss allerdings etwas sehr einfach zu bedienendes her. Zumal selbst Kurze Schulungen aktuell nicht möglich sind und das Pflegepersonal nicht weiter belastet werden soll!
Die Bedienung soll sich also dabei, im Idealfall auf das Ein- und Ausschalten beschränkt.
Eine mögliche Lösung kann mit einem Laptop realisiert werden. Idealerweise verfügt dieser über eine eingebaute WebCam, Microfon, Lautsprechern und Wifi. Besonders wenn ein nichtmehr benutztes Gerät vorhanden ist, eine sehr Kostengünstige Lösung. An dem von mir verwendetetn Rechner ist zum Beispiel die Tastatur defekt. Aber macht ja nichts, wird eh nicht mehr benötigt wenn der Rechner fertig Eingerichtet ist.
Los gehts.
Installation
Betriebssystem installieren
(Debian mit Xfce4)
Das Betriebssystem soll eine graphische Oberfläche haben und dabei möglichst schlank sein, schnell starten und schnell herunterfahren. Ich habe mich für Debian mit Xfce4 entschieden. (Download) Die installation ist (hier) beschriebn. VideoCam, Mikrofon und Lautsprecher werden in der regel Automatisch erkannt und Eingerichtet.
Software installieren
(Web-Browser und 2 Helfer um die Maus automatisch zu steuern)
System Aktualisieren mit:
su -
apt update
apt upgrade
WebBrowser und Software für die Maussteuerung installieren mit:
su -
apt install chromium
apt install unclutter
apt install xdotool
Mehr brauchen wir nicht.
Konfiguration
kiosk-user erstellen
su -
adduser kiosk
Autologin
Filename: /etc/lightdm/lightdm.conf
...
autologin-user = kiosk
...
Autostarts definieren
Mauszeiger nach 1 sekunde verschwinden lassen
Filename: /home/kiosk/.config/autostart/mouseoff/.desktop
[Desktop Entry]
Type=Application
Name=chromium
Comment=mauszeigeroff
Exec=unclutter -idle 1
OnlyShowIn=XFCE;
Terminal=false
Hidden=true
Name[de_CH]=mouseoff.desktop
ToDo? -> https://wiki.ubuntuusers.de/unclutter/
Jitsi Meet mit chromium starten
Filename: /home/kiosk/.config/autostart/chromium.desktop
[Desktop Entry]
Type=Application
Name=chromium
Comment=chromium Kiosk
TryExec=xfce4-clipman
Exec=chromium --kiosk --password-store=basic https://meet.jit.si/.....(hier meeting angeben)
OnlyShowIn=XFCE;
Terminal=false
Hidden=false
Name[de_CH]=chromium.desktop
Automatische Mausklicks
(Falls ein Maus-Klick für den Benutzer zu anspruchvoll und mehr möglich ist … habe leider noch keine zuverlässigere Lösung gefunden)
Filename: /home/kiosk/.config/autostart/mousemove.desktop
[Desktop Entry]
Type=Application
Name=mousemove
Comment=mauszeigerverschieben
Exec=xdotool mousemove 850 750
OnlyShowIn=XFCE;
Terminal=false
Hidden=false
Filename: /home/kiosk/.config/autostart/mousemove.desktop
[Desktop Entry]
Type=Application
Name=mouseleftclick
Comment=mauszeigerverschieben
Exec=xdotool click --repeat 10 --delay 10000 1
OnlyShowIn=XFCE;
Terminal=false
Hidden=false
Herunterfahren über PowerButton
Über Menue
Anwendungen -> Einstellungen -> Energieverwaltung -> Allgemein -> Knöpfe, BeiBetätigung der Ein/Austaste = Herunterfahren.
Quellen:
- https://peter.sh/experiments/chromium-command-line-switches/
- https://www.webnots.com/useful-chrome-url-commands/
- https://sourceforge.net/projects/unclutter/
macOS
open -a "Google Chrome" --args --kiosk "https://meet.jit.si/pasch.ch"
Raspbian
Protokolldateien
sudo journalctl -b
Service
systemctl status networking
sudo systemctl restart homebridge; sudo journalctl -fau homebridge
User und Gruppen
id -u
id -g
Unterabschnitte von Raspbian
Datenträger
Datenträger auflisten
lsblk -o NAME,VENDOR,MODEL,LABEL,SIZE,STATE,FSTYPE,MOUNTPOINT,UUID
Beispiele für dauerhaftes einhängen (/etc/fstab)
tmpfs /var/log tmpfs size=25M,noatime 0 0
UUID=e084f291-7471-44dd-bea1-16a9b712e6a8 /home/pi/data/pull-from ext4 auto,nofail,sync,users,rw 0 0
LABEL=restic-repo /home/pi/data/restic-repos ext4 auto,nofail,sync,users,rw 0 0
LABEL=restic-cache /home/pi/data/restic-cache ext4 auto,nofail,sync,users,rw 0 0
Quellen
Nodejs
node -v
nodejs -v
npm -v
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt install nodejs -y
Chapter X
SmartHome
https://buanet.de/2019/05/iobroker-unter-docker-auf-der-synology-diskstation-v3/
docker run -d -p 8889:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /share/CACHEDEV1_DATA/Container/my_data/portainer_data:/data portainer/portainer
docker run -d -p 8088:8081 --name iobroker --restart always -v /share/CACHEDEV1_DATA/Container/my_data/iobroker_data:/opt/iobroker buanet/iobroker:latest
stoppt Recreate Pull latest Image
Unterabschnitte von SmartHome
MQTT
Vom Publisher erhält der Broker Nachrichten und liefert sie an die subskribierende Clients aus.
Topics
Am Anfang und Ende eines Topics kein Level Separator ‘/’
Beispiel: haus/zimmer/sensor
Wildcards
+ -> Single-Level : haus/+/sensor
# -> Multi-Level : haus/zimmer/#
haus/#
oder alles #
Quality of Service
QoS 0
fire and forget
QoS 1
Wenn Nachricht zwingend beim Empfänger ankommen muss und Duplikate keinen Rolle spielen.
QoS 2
Wenn Nachricht zwingend beim Empfänger genau 1 mal ankommen muss.
Publish
Topics-Werte an Broker senden, mit Angabe von QoS-Level
Retain flag
Immer die letzte Nachricht zu einem Topic speichern und neuen Subscribierenden sofort zusenden.
Subscribe / Unsubscribe
Topics-Werte von Broker erhalten, mit Angabe von QoS-Level
Unsubscribe
Bezug von Topics-Werten beenden
Quellen:
https://opus.hs-offenburg.de/frontdoor/deliver/index/docId/2771/file/THESIS_MARIO_SALLAT.pdf
MQTT.fx
Zigbee
ConBee2
Installation
Raspbian
- Quelle: https://phoscon.de/de/conbee2/install
- Kurzfassung:
sudo gpasswd -a $USER dialout
wget -O - http://phoscon.de/apt/deconz.pub.key | sudo apt-key add -
sudo sh -c "echo 'deb http://phoscon.de/apt/deconz $(lsb_release -cs) main' > /etc/apt/sources.list.d/deconz.list"
sudo apt update
sudo apt install deconz
Der deCONZ.sevice kann bei Bedarf auch ohne Upnp support (Port:1900 Upnp) gestartet werden. Zum Beispiel weil Port 1900 schon belegt ist. Aktive Verbindungen können mit sudo netstat -unlp abgefragt werden.
sudo netstat -unlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 70656 0 0.0.0.0:1900 0.0.0.0:* 1364/perl
udp 0 0 0.0.0.0:1900 0.0.0.0:* 1364/perl
...
Konfiguration bearbeiten: nano /lib/systemd/system/deconz.service and add –upnp=0
User=1000
ExecStart=/usr/bin/deCONZ -platform minimal --http-port=80 --upnp=0
Restart=on-failure
StartLimitInterval=60
...
Service automatisch starten:
systemctl enable deconz.service
Esp32_8266
Lorem Ipsum.
Fhem
Backup auf Samba-Share
- Netzfreigabe in Filesystem einhängen Edit /etc/fstab
//192.168.y.x/archiv/_ITConfigBackups/fhem/media/usb /media/usb cifs user=xxx,password=xxx,uid=fhem,gid=pi,x-systemd.automount 0 0
- Manuell mount
- Test mount nach reboot
Unterabschnitte von Fhem
Fhem als Dockercontainer betreiben
docker-compose.yml
...
fhemTUI:
image: fhem/fhem:latest
restart: always
volumes:
- ./fhemTUI/data/:/opt/fhem/
ports:
- "8083:8083"
networks:
- fhem-network
environment:
FHEM_UID: 6061
FHEM_GID: 6061
TIMEOUT: 10
RESTART: 1
TELNETPORT: 7072
TZ: Europe/Zurich
# CONFIGTYPE: configDB
...
Quellen:
https://hub.docker.com/r/fhem/fhem/tags?page=1&ordering=last_updated
Homebrige
Installation auf Raspberry Pi (rasbian-jessie)
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt update; sudo apt upgrade
nodejs --version
python --version
g++ --version
sudo apt-get install python g++ libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm homebridge
sudo npm install -g homebridge-fhem
sudo npm -g outdated
sudo npm -g update homebridge
sudo npm -g update homebridge-fhem
sudo useradd -m -c "Homebridge Service" -s /bin/bash -G audio,bluetooth,dialout,gpio,systemd-journal,video homebridge
sudo visudo -f /etc/sudoers.d/homebridge
homebridge ALL=(root) SETENV:NOPASSWD: /usr/local/bin/npm, /bin/systemctl restart homebridge, /usr/local/bin/node
sudo chmod 640 /etc/sudoers.d/homebridge
sudo mkdir -p /var/homebridge
sudo nano /var/homebridge/config.json
evtl. “username”: “CC:22:3D:E3:CE:30”, auf “username”: “CC:22:3D:E3:CE:31”
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"platforms": [
{
"platform": "FHEM",
"name": "FHEM",
"server": "127.0.0.1",
"port": "8083",
"filter": "room=Homekit"
}
],
"accessories": []
}
sudo chown -R homebridge:homebridge /var/homebridge
sudo nano /etc/systemd/system/homebridge.service
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
[Service]
Type=simple
User=homebridge
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
sudo nano /etc/default/homebridge
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-I -U /var/homebridge
# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*
sudo systemctl daemon-reload
sudo systemctl enable homebridge
Test deamon start/restart
sudo systemctl restart homebridge; sudo journalctl -fau homebridge
Mapping
Beispiel Dummyschalter ja/nein > on/off
attr <device> siriName <name>
attr <device> genericDeviceType switch
attr <device> homebridgeMapping On=ja=state,valueOff=nein,valueOn=ja,cmdOff=nein,cmdOn=ja
Config ui
Baustelle ab hier
https://github.com/oznu/homebridge-config-ui-x
sudo npm install -g --unsafe-perm homebridge-config-ui-x
Quellen:
Chapter X
Some Chapter title
install MacOS
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install pyenv pyenv-virtualenv
brew install zlib sqlite
cd ~/
echo 'eval "$(pyenv init -)"' >> .zshrc
pyenv install -l
pyenv install 3.8.2
Visual Studio Code die Python-Erweiterung installiert
Shift + cmd + P -> Python: Select Interpreter
Manualls
Quellen
https://opensource.com/article/19/6/python-virtual-environments-mac
https://bodo-schoenfeld.de/eine-virtuelle-umgebung-fuer-python-erstellen/
https://akrabat.com/creating-virtual-environments-with-pyenv/
todo
https://github.com/OpenReplyDE/bbbackup
https://www.data-science-architect.de/selektieren-von-daten-in-dataframes/
Inst
Ubuntu
Unterabschnitte von Python
OCR
OCR nachträglich …
-
ocrmypdf
- brew install ocrmypdf
- brew install tesseract-lang
- ocrmypdf aus python-script als subprocess starten - Wichitg
- ocrmypdf -l eng+fra+deu Bilingual-English-French.pdf Bilingual-English-French.pdf
- watchdog
- ocrmypdf –image-dpi 300 -l deu+fra 2001.12.jpg 2001.pdf
- callback https://people.csail.mit.edu/hubert/pyaudio/docs/
-
https://python-watchdog.readthedocs.io/en/v0.10.2/installation.html#installing-from-pypi-using-pip
dockerfile
Understand image layering
docker-compose.yml
jupyter:
container_name: jupyter
image: jupyter/scipy-notebook:latest
restart: always
volumes:
- ./jupyter_data/work/:/home/jovyan/work/
ports:
- 10000:8888
environment:
- JUPYTER_ENABLE_LAB=yes
- TZ=Europe/Zurich
Unterabschnitte von JupyterLab
Docker
dockerfile
Understand image layering
docker-compose.yml
jupyter:
container_name: jupyter
image: jupyter/scipy-notebook:latest
restart: always
volumes:
- ./jupyter_data/work/:/home/jovyan/work/
ports:
- 10000:8888
environment:
- JUPYTER_ENABLE_LAB=yes
- TZ=Europe/Zurich
Basics
- Tuple = (“John”, “Peter”, “Vicky”)
- dictionary = {“name”: “John”, “country”: “Norway”}
- list = [“apple”, “banana”, “cherry”]
- set = {“apple”, “banana”, “cherry”}
- array = numpy …
Bildbearbeitung mit Pillow
Thumb’s erstellen
from PIL import Image
import glob, os, sys
size = 128, 128
folder = os.path.dirname(__file__)
os.chdir(folder)
print(os.getcwd())
# l = [f for f in os.listdir(folder) if f.endswith('.jpg')]
for infile in os.listdir(folder):
try:
im = Image.open(infile)
file, ext = os.path.splitext(infile)
print(infile)
im.thumbnail(size, Image.ANTIALIAS)
im.save(file + "-thumb.jpg", "JPEG")
except:
print("Unexpected error: " , sys.exc_info()[0])
Quellen
Chapter X
Some Chapter title
http://liwenyip.github.io/6-degrees-of-nooj/?from=Li-Wen%20Yip&to=Nooj
Unterabschnitte von Powershell
Powershell - Tools
Flusssteuerung ode so … X
fluss
Unterabschnitte von Fluss
If
Quelle: https://adamtheautomator.com/powershell-if-else/
if ($percentFree -gt $Warning) {
$Status = 'Normal'
}
elseif ($percentFree -gt $Critical) {
$Status = 'Warning'
}
elseif ($percentFree -le $Critical) {
$Status = 'Critical'
}
Add-Type -AssemblyName System.Windows.Forms
function Click-MouseButton
{
$signature=@'
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@
$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
}
for ($i=1; $i -le 10; $i++) {
#$Pos = [System.Windows.Forms.Cursor]::Position
$x = 940
$y = 780
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)
Start-Sleep -Seconds 10
Click-MouseButton
}
autoit: sleep(3000) MouseMove(100,100) sleep(5000) For $i = 3 To 1 Step -1 sleep(2000) MouseClick(“left”, 650, 520, 1) Next MouseMove(10,10)
Beispiele:
# Define thresholds in percentage
$Critical = 20
$Warning = 70
# Get all Fixed Disk information
$diskObj = Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object { $_.DriveType -eq 3 }
# Initialize an empty array that will hold the final results
$finalReport = @()
# Iterate each disk information
$diskObj.foreach(
{
# Calculate the free space percentage
$percentFree = [int](($_.FreeSpace / $_.Size) * 100)
# Determine the "Status"
if ($percentFree -gt $Warning) {
$Status = 'Normal'
}
elseif ($percentFree -gt $Critical) {
$Status = 'Warning'
}
elseif ($percentFree -le $Critical) {
$Status = 'Critical'
}
# Compose the properties of the object to add to the report
$tempObj = [ordered]@{
'Drive Letter' = $_.DeviceID
'Drive Name' = $_.VolumeName
'Total Space (GB)' = [int]($_.Size / 1gb)
'Free Space (GB)' = [int]($_.FreeSpace / 1gb)
'Free Space (%)' = "{0}{1}" -f [int]$percentFree, '%'
'Status' = $Status
}
# Add the object to the final report
$finalReport += New-Object psobject -property $tempObj
}
)
return $finalReport
$SendEmail = $true
$From = ""
$To = ""
$CCEnabled = $true
$CC = ""
$BCCEnabled = $true
$BCC = ""
$abortFlag = 0
if ($SendEmail) {
if (!$From) {
Write-Host "[From] is missing" -ForegroundColor Red
$abortFlag = 1
}
if (!$To) {
Write-Host "[To] is missing" -ForegroundColor Red
$abortFlag = 1
}
if ($CCEnabled) {
if (!$CC) {
Write-Host "[CC] is missing" -ForegroundColor Red
$abortFlag = 1
}
}
if ($BCCEnabled) {
if (!$BCC) {
Write-Host "[BCC] is missing" -ForegroundColor Red
$abortFlag = 1
}
}
if ($abortFlag -eq 1) {
Write-Host "The abort flag has been tripped. Exit script." -ForegroundColor Red
break
}
else {
Write-Host "Your email will be sent from this address $From" -ForegroundColor Green
Write-Host "And will be sent to the following people:" -ForegroundColor Green
Write-Host "To: $To" -ForegroundColor Green
if ($CCEnabled -and $CC) {
Write-Host "CC: $CC" -ForegroundColor Green
}
if ($BCCEnabled -and $BCC) {
Write-Host "BCC: $BCC" -ForegroundColor Green
}
}
}
Chapter X
Some Chapter title
Chapter X
Some Chapter title
Chapter X
Some Chapter title
Unterabschnitte von Datentypen
Array
$array = @()
$array = 2..5
$arrayList = New-Object -TypeName "System.Collections.ArrayList"
$arrayList = [System.Collections.ArrayList]@()
$arrayList.GetType()
$arrayList.IsFixedSize
# Adden:
# Bei fester Grösse (langsam!)
$array += 6
# Bei variabler Grösse (schnell)
$arrayList.Add("guggus")
# Referenzieren:
# erstes:
$array[0]
# letztes:
$array[-1]
# von bis:
$array[0..3]
Hashtable
$hashtable = [ordered]@{'erster key' = "erster - value"; key = "2. Wert"}
$hashtable.Keys
$hashtable.Values
- GIMP
- DigiKam
Unterabschnitte von Foto
DigiKam
-
esxi - ubuntu-desktop installieren:
-
sudo apt install open-vm-tools
-
user erstellen
-
id user
-
sudo usermod -u xyz name
-
sudo groupmog -g xyz name
-
sudo chown -hR name:name /home/name
-
download digikam appimage
-
app nach /home/user/Digikam/* verschieben
-
file ausführbar machen
sudo apt install cifs-utils
sudo mount -t cifs -o user=xyz,uid=xyzz //nas.par/homes/name/bilder /home/name/nas
next:
- mount fstab
Unterabschnitte von Holz
Holzkanu - Leistenbau
Bauzeit
April 2004 bis August 2004
Werkzeuge
- Ziehklinge gerade
- Ziehklinge geschweifft
- Handhobel
- Bandschleiffmaschine
- Leistensäge / Stichsäge
- Wasserkocher
- Kunststoffrohr
- …
Materialliste
Hölzer (Europäische Hölzer verwenden!)
Rumpf
- Fichte
Hartholzelemente
- Esche
- Eiche
Leim/Kunstharz
Glasfasermatte
Diverses
- Sicherheits-Gurte
Bau
Bild | Beschreibung |
---|---|
Liz. Bauplan erwerben | |
Zeichnen - CAD | |
|
Verleimen der Steven - Die Eschenleisten werden vorher gedämpfen, gebogen und getrocknet. |
|
Form auf Bock |
Quellen
- Ted Moores - Canoecraft
Unterabschnitte von Holzkanu - Leistenbau
Bildergalerie
Arbeitsschritte
Alle Bilder zum Kanubau
Gallery erstellt mit -> photoswipe
Chapter X
Some Chapter title
Lorem Ipsum.