1. Lehrplan

2. 2023-09-19

2.1. Ideenfindung zur Projektauswahl

  • Folgende Bereiche sind sehr gut geeignet, um ggf. einen Wettbewerb zu gewinnen:

    • Umwelt

    • Lernen / Schule

    • Selbsthilfe / Hilfe für andere Personen / Communities

    • Sport

    • Hilfe für beeinträchtigte Personen

  • Mögliche Projekte

    • Winnies Baby App

    • Schludermanns Franklyn

    • Fröllers kuratierte News-Aggregator mit Themenwahl

    • Eco-Points:

      • OBD-Sensordaten auslesen (ELM327)

      • ev. GPS-Position erfassen

      • Die Fahrprofile auf Umweltfreundlichkeit beurteilen

      • Es werden Eco-Points ermittelt → als Game miteinander vergleichen

      • ev. Plattform mit (anonymisierten) Eco-Points Ranking

      • Car Play Anbindung → iOS, Android

    • Nuris Mülltrennungsapp

      • EAN-Codes von Produkten einlesen und anschließend ausgeben, wohin die Verpackung entsorgt werden muss

      • Problem: Man braucht eine EAN-Code-Produktdatenbank. Die sind meist kostenpflichtig.

      • Es ist zu überprüfen, ob aufgrund einer solchen Datenbank festgestellt werden kann, welches Verpackungsmaterial verwendet wurde

2.2. Github-Übung - commit/push/branch/merge/rebase

protokolliert durch Winnie Ilming

2.2.1. Neues repo erstellen

create repo

2.2.2. Repo in der shell mit ssh klonen

Falls das wegen des fehlenden public keys nicht geht, einen neuen rsa key mit:

ssh-keygen -t rsa

erstellen.

Nur mit Return bestätigen, keinen eigenen file-name, keine Passphrase, usw eingeben.

output
Generating public/private rsa key pair.
Enter file in which to save the key (/home/userxy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/userxy/.ssh/id_rsa
Your public key has been saved in /home/userxy/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:7pIJz3zvkd9J2d0nXh1dUEcb3Z+vQsmDtZ8buV6HNWLI parallels@ubuntu-linux-22-04-desktop
The key's randomart image is:
+---[RSA 3072]----+
|              .o=|
|        .      oo|
|                =|
|            ...+=|
|        S    +O+o|
|    .  .  ..oE**=|
|     = o. .  o+*O|
|      B..  o +=+o|
|       o.oo . =o.|
+----[SHA256]-----+
  • im Browser auf github.com rechts oben mit rechter Maustaste auf Icon klicken

  • Settings

  • SSH und GPG keys

  • New SSH key

    • Titel eintragen: zB my-ssh-key

    • Mit copy-paste den Inhalt des public-keys (id_rsa.pub) in das Textfeld einfügen

add key
add new ssh key

2.2.3. Benutzerdaten zu git hinzufügen

git config --global user.name [username]

die primary Email in github durch settings > emails herausfinden und in

git config --global user.email [email]

einsetzen

2.2.4. Java Projekt erstellen

In dem geklonten projekt ein neues maven projekt erstellen

create project

als group die umgekehrte Firmendomäne eingeben, in diesem Fall at.htlleonding (Leider sind keine Bindestriche erlaubt).

2.2.5. Eine Änderung im Projekt durchführen

  • Eine neue README File erstellen und dann das Projekt committen mit der message "Initial commit"

  • Das repo pushen

  • Einen Partner in sein Projekt einladen

  • mit intellij die pom.xml als projekt öffnen

  • nachdem der Partner jetzt einen commit gepusht hat, kann man mit git pull das lokale repository updaten

2.2.6. Git Befehle (merge conflicts)

bei merge conflicts mit rebase lösen

git pull --rebase

oder mit merge

git pull --no-rebase

falls noch nicht committed wurde, kann durch

git stash

die momentane Arbeit in einem eigenen Bereich verborgen werden um sie nach dem erfolgreichen Pull mit

git stash pop

wieder in die Codebasis zu integrieren.

2.2.7. Feature Branches

einen branch erstellen mit

git branch [branchname]

oder erstellen und gleich wechseln

git checkout -b [branchname]

einen Branch wechseln

git switch [branchname]

Bei Arbeiten auf einem feature branch immer wieder mit

git (merge/rebase) main

den aktuellen stand des main branches auf den feature branch bringen

Wenn das Feature fertig gebaut wurde, muss der Branch wieder mit dem main branch gemerged werden. Dies kann durch manuelles mergen oder durch einen pull request stattfinden.

3. 2023-09-26

3.1. Wiederholung Vorgehensmodelle

3.2. gh-actions

folder for gh actions
  • jobs sind eine eigene Maschine

  • jeder Job kann mehrere Steps ausführen

  • jeder Step kann gh-sctions ausführen oder shell-Kommandos

name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: [push]
jobs:
  demo:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v4
      - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
          pwd
      - run: echo "🍏 This job's status is ${{ job.status }}."

3.2.1. Setup Java

- uses: actions/setup-java@v3
  with:
    distribution: 'temurin' # See 'Supported distributions' for available options
    java-version: '17'
- run: java --version

3.2.2. Hausübung

  • im Mikroprojekt eine gh-actions-pipeline erstellen, die eine Java Applikation baut und startet und "Hello World" ausgibt.

4. 2023-10-03

Autor: Al Desoky

4.1. Automatisierung des Java-Build-Prozesses mit GitHub Actions

4.1.1. Ein Maven-Build-Prozess ausführen

name: Build with Maven
       run: |
         mvn -B -DskipTests clean package
       working-directory: backend
  • Dieser Codeabschnitt führt den Maven-Befehl aus, um ein Java-Projekt im Verzeichnis "backend" zu kompilieren und ein ausführbares Paket zu erstellen. Dabei werden Tests übersprungen (-DskipTests), und der Befehl wird im Batch-Modus (-B) ausgeführt, ohne Benutzereingaben zu erwarten.

4.1.2. Maven cachen

uses: actions/setup-java@v3
   with:
     distribution: 'temurin'
     cache: 'maven'
     java-version: '17'
  • Hier haben wir die Maven-Abhängigkeiten gecached, um die Build-Zeit zu verkürzen und die Netzwerkbelastung zu reduzieren.

4.1.3. Den Inhalt des "target"-Verzeichnisses im "backend" auflisten

name: list Folder Content
       run: |
       ls -l target
       working-directory: backend
  • Dieser Codeabschnitt listet den Inhalt des "target"-Verzeichnisses auf, um zu überprüfen, ob das ausführbare Paket erstellt wurde.

5. 2023-10-10

5.1. Struktur eines Projektverzeichnisses

dirtree

5.2. Projektteams

Team Members

Winnies Baby App

  • Ilming Winnie

  • Gruber Moritz

  • Sonnleitner Lukas

  • Berg Bajtik

Schludermann Franklyn

  • Schludermann Julian

  • Aichinger Tobias

  • Cvijic Luka

  • Schnalzenberger Arwed

Fröllers kuratierte News-Aggregator mit Themenwahl

  • Fröller Felix

  • Lehner David

  • Nikolaus Alexander

  • Cao Anton

Eco-Points

  • Nestle Linus

  • Salkovic Armin

  • Daxlinger Oliver

  • Al Desoky Abdullah

  • Mali Laurent

Nuris Mülltrennungsapp

  • Nurceski Said

  • Balazs Balint

  • Seifried Erik

  • Breinesberger Markus

5.3. Scrum

scrum overview

5.4. MVP - Minimum Viable Produkt

das mvp in scrum min 900x

5.5. Time boxing

Timeboxing is a time management technique used in Scrum and Agile project management, where specific tasks are allocated fixed and realistic deadlines. This ensures efficient use of time to complete them within the defined periods, ranging from minutes to weeks or months based on task complexity. Timeboxing: Definition, Benefits, and How It Works

6. 2023-10-17

6.1. Aufgabenstellung

  • Quarkus packagen zu jar-File → mit script

  • mit docker push in das github package pushen

7. 2023-11-07

7.1. GitHub Action

7.1.1. Jobs vs. Steps

Der Unterschied zwischen Jobs und Steps ist, dass Jobs gleichzeitig ablaufen und Steps hintereinander.

7.1.2. GitHub Runner

In der Cloud läuft eine virtuelle Maschine mit dem angegebenen Betriebssystem.

Das OS für den Runner kann wie folgt angegeben werden:

runs-on: ${{OS}}

Beispielsweise kann man ubuntu-latest verwenden.

7.1.3. Checkout

- uses: actions/checkout@v6

Dieser Befehlt kopiert alle Dateien/Ordner aus dem weiter oben angegebenen Branch des Repositorys in die virtuelle Maschine auf der die Action ausgeführt wird.

7.2. Bash source

Der source-Command liest und führt Befehle aus der Datei aus, die als Argument in der aktuellen Shell-Umgebung angegeben ist. Es ist nützlich, um Funktionen, Variablen und Konfigurationsdateien in Shell-Skripte zu laden.

7.2.1. Syntax

source filename [arguments]

7.2.2. Der Unterschied zwischen ./ und source

  • ./script führt das Skript als ausführbare Datei aus und startet eine neue Shell, um es auszuführen.

  • source script liest und führt Befehle aus der Datei script in der aktuellen Shell-Umgebung aus.

7.3. Globbing

**/*.adoc ist ein sogenannter "Globbing-Ausdruck", der verwendet wird, um alle Dateien mit der Erweiterung ".adoc" in beliebigen Unterverzeichnissen eines Verzeichnisses zu erfassen. Das "**" repräsentiert "null oder mehr Verzeichnisse", und "*.adoc" steht für alle Dateinamen, die mit irgendetwas beginnen und mit ".adoc" enden.

7.4. Semantic Commit Messages

bump …​ increase version of library, …​

8. 2023-11-28

 = 4bhif - SEW - 1.Leistungsfeststellung
 :icons: font
 :experimental:
 ifndef::imagesdir[:imagesdir: images]
 ifdef::env-github[]
 :tip-caption: :bulb:
 :note-caption: :information_source:
 :important-caption: :heavy_exclamation_mark:
 :caution-caption: :fire:
 :warning-caption: :warning:
 endif::[]

9. 2023-12-19

9.1. Test-Driven-Development

9.2. Anforderungen an Tests

9.2.1. Tests müssen reproduzierbar und unabhängig sein

  • Setup und TearDown Methoden

9.2.2. Abdeckungsgrad

9.3. Reactive Extensions

10. 2024-02-13

rollierendes logging
leoenergy demo data server

10.1. Kubernetes

10.1.1. Lokale k8s

  • Minikube

  • kind

  • k3s

10.1.2. Geschichte der Containerisierung

  • Docker hat eine Revolution in der Softwareentwicklung

  • Ein Docker - Container hat folgende Vorteile

    • Man ist unabhängig von der Umgebung

    • Man kann zB mehrere Versionen einer DB parallel laufen lassen.

  • Orchestrierung - mehrere Docker-Container werden koordiniert

    • docker-compose

11. 2024-02-04

11.1. Manuelles Deployment zu Minikube

./mvnw clean package
l target
cp src/main/docker/Dockerfile target
l target
docker build --tag ghcr.io/htl-leonding/backend:latest ./target
docker image ls
docker image prune
docker image ls
docker login ghcr.io
docker push ghcr.io/htl-leonding/backend:latest
minikube status
minikube delete
minikube start
minikube dashboard
kubectl apply -f ./k8s/postgres.yaml
kubectl apply -f appsrv.yaml
kubectl apply -f ./k8s/appsrv.yaml
./mvnw clean package
cp src/main/docker/Dockerfile target
docker build --tag ghcr.io/htl-leonding/backend:latest ./target
docker image ls
docker push ghcr.io/htl-leonding/backend:latest
kubectl rollout restart deployment appsrv
./mvnw clean package
cp src/main/docker/Dockerfile target
docker build --tag ghcr.io/htl-leonding/backend:latest ./target
docker push ghcr.io/htl-leonding/backend:latest
kubectl rollout restart deployment appsrv
kubectl port-forward appsrv-67464f9c4d-sr4cx 8080:8080
kubectl port-forward appsrv-5684cc66c8-n6tcg 8080:8080
kubectl port-forward appsrv-67464f9c4d-sr4cx 8080:8080
brew update && brew upgrade && brew upgrade --cask
cd
cd .kube
l
cat config
ll
l
minikube stop
cat config
cat ~/.zsh_history

12. 2024-02-05

12.1. Dashboards

  • Die Indikatoren und Kennzahlen in Dashboards sollen nicht nur den aktuellen Wert anzeigen, sondern dem Betrachter eine Orientierung bieten. Folgende Fragen werden beantwortet:

    • Ist der Wert "gut" oder "schlecht"?

    • Alternativ: Hat sich der Wert zur Vor-Periode verändert?

    • Kann durch "Traffic Lighting" informativ dargestellt werden.

      traffic lighting
  • Definition:

    • Indikator: Ist ein einzelner Wert (gemessen, gewogen, gezählt) zB Kosten, Umsatz, Kündigungsrate

    • Kennzahl: Wird aus Indikatoren und anderen Kennzahlen berechnet zB ROI

12.2. Kiosk-Systeme

  • interaktiv

  • nicht-interaktiv

12.3. Hosting von Projekten

  • Oracle VM

  • VM vom Sysadmin

  • LeoCloud

12.4. Deployment in die LeoCloud

13. 2024-03-11

14. 2024-04-02 Testen

tests in projekten
v modell
klassisch vs agil
grobentwurf
regressionstests
testplan
test02