Optional.ofNullable / Optional.map – Mehrstufig hierarchische NOT NULL Abfrage. Anstatt Abfrage auf != NULL

Schritt 1: Erstelle ein Optional auf dem Object auf das du null-wert-sicher zugreifen möchtest:

Optional isOptionallyNull = Optional.ofNullable(instOfClassANotShureIfNull);

Schritt 2: Greife auf Felder (und Child-Felder) zu Obwohl die Instanz selbst (oder ihre Children) ja null sein könnten: Map:

ClassC unterUnterObject = isOptionallyNull .map(ClassA::getSubObjB).map(ClassB::getSubC).orElseGet(ClassC::new)

Wie oben demonstriert können über mehrere Stufen aggregierte Sub-Objekte so abgefragt werden, obwohl man nicht weiss ob Vater- oder Zwischenobjekte NULL sein könnten.

Filtern von Stream-Objekten und Verarbeitung mit dem gefundenen Objekt (–> ifPresent)

if (v1 != null && issuerMap.containsKey(v1)) {
    phcCr.setIssuer(issuerMap.get(v1));
}

… kann dasselbe erreicht werden mit:

Optional.ofNullable(v1).filter(value -> issuerMap.containsKey(value))
.ifPresent(value -> phcCr.setIssuer(issuerMap.get(value)));

Windows PowerShell – Einführung

Basierend auf: Tutorial zur Skripterstellung mit Windows PowerShell für Einsteiger

Powershell / Powershell ISE

PowerShell ISE beinhaltet mehr Hilfen (z.B. Auto-Vervollständigung, Vorschläte) für den Entwickler als die reine Powershell.

Interessante Scripts

Directory listing mit Filte rund Kolonnenselektion


PS P:\STMP> dir | where {$_.name -like "*.xml"} | select -Property lastWriteTime,FullName

LastWriteTime      FullName           
-------------      --------           
18-Feb-21 12:19:09 P:\RMS\logback.xml

Jenkins: Environment Varable via Groovy Script setzen

In einem Jenkins Job unter dem ‚Kapitel‘ ‚Build Environment‘ kann via die Option ‚Inject environment variables to the build process‘ optional mittels ‚Evaluated Groovy script“ > ‚Groovy Script‘ ein eben solches angegeben werden.
Dazu ist aber wahrscheinlich das EnvInject Plugin notwendig!

import hudson.model.* //Importieren der Jenkins libraries
def build = Thread.currentThread().executable //Den build in dem wir laufen holen
def userCause = build.getCause(hudson.model.Cause$UserIdCause) 
//<--Jenkins nach dem user fragen
def userName = userCause?.userId ?: 'Jenkins'
['BUILD_USER': userName] //Die user variable im Environment bekannt machen.

Ein etwas ausführlicheres und komplexeres aber verständliches Beispiel ist hier documentiert.
Auch lesenswert: Jenkins: Builds mit Groovy-Scripts aufpeppen

Windows Settings

Windows Settings von Kommando-Zeile aus anpassen (interaktiv):
>msconfig

Dann: ‚System Properties‘ > ‚Launch‘

Kubernetes auf Azure Cloud (AWS)

 official documentation

BegriffErklärung
KubernetesDocker-Kontainer-Orchestration-Tool
Kubernates Aufbau 1:
Kubernates Cluster
Kubernates Master
Kubernates Nodes
Kubernates Pods
Cluster: A group of nodes.
Master: Controls the Cluster. API for management.
Nodes: (Virtual) machines in a cluster. Node can host multiple pods.
Pods: Logically related containers. Has one IP Address. Brought up and down by Master during scaling. Pods are replicated to multiple nodes for scaling reasons.
Kubernetes ServiceThe interface to reach a Pod (an application). Pods are ephemeral. That is one reason why addressing Pods is not the right way. Instead: Services.
VolumesDisk systems that are external from the nodes.
Kubernates Aubau 2:
A) Control Plane (Master System)
A1: kube-apiserver
A2: etcd
A3: kube-controller-manager
A4: kube-scheduler
A5: cloud-controller-manager

B) Nodes
B1: kubelet
B2: k-proxy
B3: pod
–> Udacity: 4. Kubernetes Components
Kubernetes Components
Kubernetes API
AWS Auflaugfende KostenAWS Billing Dashboard
https://aws.amazon.com/pricing/
AWS IAM Services
IAM Group
IAM Role
IAM Policy

IAM Dashboard
Identity & Access Services

12. Exercise – IAM
13. AWS – Create a custom IAM Role
IAM policy simulator
Interfaces to AWS:
– Web Interface
– Command Line Tool (CLI)
8. AWS CLI
 9. AWS – Install and Configure CLI v2
 10. AWS – Create S3 Bucket – Web con
11. AWS – Create S3 Bucket – CLI

Benutze Git Bash für das CLI!

AWS instructions to install/update AWS CLI

Configuration basics
Configuration and credential file settings
Environment variables to configure the AWS CLI
S3: Amazons Storage Cloud Service.
S3 dashboard
10. AWS – Create S3 Bucket – Web co
11. AWS – Create S3 Bucket – CLI
EKS – Elastic Kubernetes Service  14. EKS: Kubernetes on AWS
 15. Exercise – Creating an EKS Cluster – W
16. Installing eksctl
 17. Installing kubectl
 18. Creating an EKS Cluster – CLI
 19. EKS Cluster authentication
 20. Exercise – Deploy a Flask Applica

AWS – Amazon Cloud

Netzwerk Kommandos (Network Commands)

Referenzen:
https://kompendium.infotip.de/netzwerkbefehle-der-windows-kommandozeile.html

Bemerkung:
Ich habe für’s Ausprobieren Git Bash benutzt. (Allenfalls funktionieren nicht alle Kommandos auf DOS)

ipconfig (ifconfig) – Netz-Config des Local Hosts anzeigen

netstat – Anzeigen der aktiven Verbindungen

nslookup – Name Server lookup – DomainName zu IP-Addresse auflösen

$ nslookup  a95-100-54-129.deploy.static.akamaitechnologies.com
Nicht autorisierende Antwort:
Server:  fritz.box
Address:  fd00::cece:1eff:fe34:979b

Name:    a95-100-54-129.deploy.static.akamaitechnologies.com
Address:  95.100.54.129


Lenovo W540@ThinkPad-HPS MINGW64 ~
$ nslookup 95.100.54.129
Server:  fritz.box
Address:  fd00::cece:1eff:fe34:979b

Name:    a95-100-54-129.deploy.static.akamaitechnologies.com
Address:  95.100.54.129


Lenovo W540@ThinkPad-HPS MINGW64 ~

In diesem Beispiel funktioniert der reverse lookup. Jedoch: Scheint so, dass reverse lookup oft blockiert wird. Z.B.:

$ nslookup netzone.ch
Nicht autorisierende Antwort:
Server:  fritz.box
Address:  fd00::cece:1eff:fe34:979b

Name:    netzone.ch
Address:  212.243.197.27


Lenovo W540@ThinkPad-HPS MINGW64 ~
$ nslookup 212.243.197.27
*** 212.243.197.27 wurde von fritz.box nicht gefunden: Non-existent domain.
Server:  fritz.box
Address:  fd00::cece:1eff:fe34:979b


Lenovo W540@ThinkPad-HPS MINGW64 ~

tracert – Verbindungspfad auflisten (linux: traceroute)

curl – ‚Seiten‘ aus dem Internet laden

Mit Curl können z.B. Files von Web-Sites geladen werden. Curl beschränkt sich aber eigentlich nicht nur auf HTTP.

–> https://www.geeksforgeeks.org/curl-command-in-linux-with-examples/

wget – File download tool (nur Linux)

Docker Containers

References:

Dockerfile reference
docker build: command options and examples
docker run: command options and examples

Ablauf (Schnellversion)

docker pull postgres:latestDocker image ‚postgres:latest‘ aus dem DockerHub holen

oder: Selbst erstellen:
docker build -t test .Docker image erstellen gemäss dem File Dockerfile, welches sich im current Directory befindet
docker image lsDocker Images auflisten (die Docker kennt)
docker run — name myContainer7 – p 80:8080 testDocker Image (als Container instantieren) laufen lassen
docker psLaufende Container abfragen (–> ID auslesen)
docker ps -aInstantierte Container abfragen (–> ID auslesen)
docker stop <containerId>Container stoppen (bleibt instantiert)
docker container rm <containerId>Container löschen
docker image rm <imageId>Image löschen (aus Docker löschen)
docker image helpHilfefunktion für Docker Images aufrufen.

Begriffe

Docker File: –> Ein File (Name wahrscheinlich immer ‚Dockerfile‚) welches innerhalb des SW Roots liegt und die die Erstellung des Docker Images definiert.

Docker Image –> Code, der falls instanziert, zu einem Docker Container wird.

DockerHub –> Repository für Docker Images.

Docker Registry

Einen Container beziehen und laufen lassen

Ein Docker Image aus dem DockerHub holen. (Im Beispiel ist es eine PostgresSQL DB als Docker image.)

docker pull postgres:latest

Kontrolle ob das Image nun lokal verfügbar ist:

$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE

postgres            latest    317a302c7480   9 days ago     374MB

Das Image laufen lassen:

docker run --name psql -e POSTGRES_PASSWORD=password! -p 5433:5432 -d postgres:latest

Parameter:

-name : Sollte eigentlich der Name des Containers sein
-e : Environment. Hier werden dem Containers Environment-Parameter mitgegeben.
-p : <outerPort>:<InnerPort> bezeichnet die den Port, der von aussen angesprochen werden kann und den Port der damit innerhalb des Containers angesprochen wird.
-d : Das Docker-Image, das gestartet wird.

Die DB benutzen:

$ psql -U postgres -p 5433
Passwort für Benutzer postgres:
psql (13.3, Server 14.0 (Debian 14.0-1.pgdg110+1))


postgres=# \l
 postgres  | postgres   | UTF8      | en_US.utf8   | en_US.utf8 |
 template0 | postgres   | UTF8      | en_US.utf8   | en_US.utf8 | =c/postgres          +
           |            |           |              |            | postgres=CTc/postgres
 template1 | postgres   | UTF8      | en_US.utf8   | en_US.utf8 | =c/postgres          +
           |            |           |              |            | postgres=CTc/postgres


postgres=#

Ein Docker Image erstellen und ausführen

Unser Beispiel stellt einen Simplen Python/Flask Webserver als Docker-Image zur Verfügung.
1. Der Simple Python/Flask Webserver:

from flask import Flask
APP = Flask(__name__)


@APP.route('/')
def hello_world():
    return 'Hello, World from Flask!\n'


if __name__ == '__main__':
    APP.run(host='0.0.0.0', port=8080, debug=True)

Das Dockerfile darf keine File-Extension haben und liegt typischerweise im Root-Directory des SW-Projekts. (Hier im selben directory wie das Python file.)

FROM python:3.7.2-slim

COPY . /app
WORKDIR /app

RUN pip install --upgrade pip
RUN pip install flask


ENTRYPOINT ["python", "app.py"]

Die einzelnen Zeilen bedeuten:

FROM python:3.7.2-slimDieses Dockerfile erbt Eigenschaften vom python:3.7.2-slim image.
COPY . /appKopier content des current directory ins app directory
WORKDIR /appDefiniere ‚/app‘ als das work directory
RUN pip install –upgrade pipFühre ‚pip install –upgrade pip‘ aus (ich nehme mal an, dass dies auf dem Build-Server läuft und nicht auf dem Runtime server.)
ENTRYPOINT [„python“, „app.py“]Wird das Docker-Image (der Docker-Container) gestartet soll ‚python‘ mit parameter ‚app.py‘ aufgerufen werden.

Kompilieren des Dockerfiles zum Dockerimage

docker build -t test .

-t test : Das Image soll den Titel ‚test‘ erhalten
‚.‘ : Sucht nach ‚Dockerfile‘ im current directory.

Kontrolle ob das Image erstellt wurde

docker image ls

Das Image laufen lassen

docker run --name myContainer  -p 80:8080 test

Der Container wird den namen ‚myContainer‘ tragen und unter dem Port 80 in der Aussenwelt ansprechbar sein.

docker psLaufende Docker Images abfragen

Kontrolle ob das Flask Webserver Image läuft:

curl http://127.0.0.1:80/

Oder im Browser: http://127.0.0.1:80/

Docker-Container/Image aufräumen

docker psLaufende Containers auflisten (z.B. Id)
docker ps -aIn Docker existierende Container auflisten.
docker stop <containerId>
docker container rm <containerId>Einen Container von Docker entfernen.
docker image lsImages listen (die Docker kennt)
docker image rm <imageId>Image entfernen (aus der Liste der Images, die Docker kennt)

Flask Application Programming Setup (mit PostgresSQL)

Was muss gemacht werden, um eine Flask Beispiel-Applikation im eingenen Workspace zum Laufen zu kriegen?

PostgesSQL DB: Sind die Entitäten vorhanden

Starten der DB: pg_ctl -D „C:\Program Files\PostgreSQL\13\data“ start

In die DB einloggen: psql <db_namen> <user_namen>, z.B. psql todoDB postgres
Dann innerhalb PSQL Shell:
\l : Um DBs zu listen
\dt: Um Tabellen zu listen
\? : Um andere Kommanos kennen zu lernen

Die Flask App zum Laufen kriegen

Im Windows Dos Prompt:

set FLASK_APP=<relativer_pfad_zum_app.py_file>

set FLASK_DEBUG=true damit der server dann automatisch die Codeänderungen rein lädt (life Editing)

flask run

Libraries würde man mit dem PIP (Package Manager laden).

PL/SQL Problem ‚PLS-00103: Encountered the symbol‘ bei DDL statements

Problem:

DDL-Statements können ’nackt‘ nicht im PL/SQL ausgeführt werden.

Lösung:

DDL-Statements in execute immediate ‚….‘ einpacken.

–> http://www.dba-oracle.com/t_using_ddl_create_index_table_plsql.htm

WordPress: Inhaltsverzeichnis in Beiträgen einfügen


Table of Contents Plus von Michael Tran