Samstag, 28. Oktober 2023

Datenbank - Warum Transaktionen?

In meinem Beitrag Überblick über Datenbankmanagementsysteme (DBMS) habe ich PostgreSQL im Zusammenhang mit dem Transaktionsverfahren erwähnt. Ich werde kurz erklären, für was Transaktionen im Datenbankumfeld hilfreich sind.


Transaktionen helfen dabei dass Änderungen vollständig und dauerhaft in der Datenbank gespeichert werden. Dies nennt man auch ACID-Kriterien.

Am Besten lässt sich dies mit einem Beispiel aus dem Bankensektor beschreiben "Es soll eine Überweisung von einem Konto auf ein anderes durchgeführt werden":

  1. Es wird der Kontostand des einen Kontos um 100 Euro vermindert und soll durch das Programm  später auf dem anderen Konto erhöht werden.
  2. Es kommt zu einem Fehler und der Server stürzt genau während dieser Aktion ab.
  3. In diesem Fall muss der komplette Vorgang zurück abgewickelt werden, damit keine fehlerhaften Daten in der Datenbank verbleiben.

Die einzelnen Punkte in dem Programm müssen eine TRANSACTION gehüllt werden. Gibt es am Ende  keine Probleme führt man zum Ende den COMMIT Befehl aus. Somit wird sichergestellt, dass immer nur alles oder nichts geändert. Bei Problemen kommt es zu einem ROLLBACK.


Datenbank - Überblick über Datenbankmanagementsysteme (DBMS)

Nach einem Datenbank Artikel zum Thema Universally Unique Identifier (UUID) als Primärschlüssel verwenden, möchte ich in diesem Beitrag einen kurzen Überblick über Datenbankmanagementsysteme (DBMS) geben.


Einen guten Überblick bekommt man durch die Webseite db-engines.com, sie stellt Bestenlisten bereit und berechnet die Popularität von Datenbanken anhand von Suchergebnissen.


Die Oracle-Datenbank, MySQL und Microsofts SQL Server sind die Top 3 der relationalen Datenbanken und sind die erste Wahl für viele Anwendungen.

Möchte man schnell einen ersten Prototypen entwickeln (ohne Administration einer Entwicklungsinstanz mit einer Datenbank hochzufahren), bietet sich zu SQLite an. Eine Bibliothek, die ein DBMS imitiert, aber keinen Serverdienst hochfährt. Die Daten liegen hier in in einer lokal gespeicherten Datei. Siehe auch mein Beitrag SQLite - Import CSV File - existing or new table.

PostgreSQL ist auch eine relationale Datenbank, unterstützt zum Beispiel das Transaktionsverfahren und den Datentyp JSON. Die Daten werden im JSON-Format abgelegt und sind durchsuch- und manipulierbar (ohne reguläre Ausdrücke verwenden zu müssen). Auch bieten die Funkionen LISTEN und NOTIFY eine Event-Driven-Architecture.

Beim Thema NoSQL (schemalose dokumentengestützte Datenbanken) kommt oft MongoDB zum Einsatz. Für ein Objekt was gespeichert werden soll muss somit keine Tabelle mit Spalten und Datentypen angelegt werden. Gleiche oder ähnliche Datenobjekte speichert man hier in einer Collection.

Elasticsearch verwendet man, wenn man große Datenmengen mit viel Text durchsuchbar speichern möchte z.B. für eine Suchmaschine.


Sonntag, 22. Oktober 2023

(Retro) Spielekonsolen - Reperatur-, Demontage- und Installationsanleitungen

In zwei Beiträgen hatte ich beschrieben, wie man den Nintendo Gameboy Classic zerlegt, reinigt und eine Hintergrundbeleuchtung nachrüstet und wie man den internen Lautsprecher wechselt.


Mittlerweile bietet iFixit Demontage- und Installationsanleitungen für die meisten Spielekonsolen seit 1986 an:


Die Firma WOLFSOFT GmbH bietet verschiedene Umbauten und Reparaturen von Retro Hardware an:


Montag, 16. Oktober 2023

REST Webservice - Mittels Postman HTTP-APIs testen

HTTP-Schnittstellen (z.B. REST oder SOAP) werden in fast allen modernen Webanwendungen verwendet. So ist es möglich über eine API Datensätze zu erstellen (PUT), zu lesen (GET), zu ändern oder zu löschen (siehe auch HTTP Request Methods). Fehler in der API sollten mittels Tests (Unittests) schnell gefunden werden, da Fehlfunktion fatale Auswirkungen haben können. Zusätzlich bieten sich aber auch Integrationstests mit Hilfe von Postman an. Auf diese Funktion gehe ich kurz in diesem Artikel ein. Nur so kann sichergestellt werden, das eine Software wie erwartet funktioniert.


Mit Hilfe von Postman kann man die APIs bequem testen und gleichzeitig Funktionen für automatische Tests verwenden.

Der Download von Postman erfolgt unter https://www.postman.com .

Es muss natürlich eine öffentliche REST-API zur Verfügung stehen, ich verwende hier als Beispiel https://www.predic8.de/rest-beispiel.htm, ein Projekt der predic8 GmbH an .

Hilfreich ist zudem die Postman-Dokumentation https://learning.postman.com/docs/introduction/overview/ .

Postman-Collection anlegen

GET https://api.predic8.de/shop/v2/products

Testen kann man jetzt den Request mit einem Klick auf "Send", jetzt wird eine Liste von  Produkten angezeigt.

GET https://api.predic8.de/shop/v2/products/13 => Einzelnes Produkt
GET https://api.predic8.de/shop/v2/vendors/3 => Einzelner Hersteller
GET https://api.predic8.de/shop/v2/orders/4 => Eine Bestellung
POST https://api.predic8.de/shop/products/ => Anlegen eines Produkt

Beispiel Response

{
    "meta": {
        "count": 19,
        "start": 1,
        "limit": 10,
        "next_link": "/shop/v2/products?start=11&limit=10"
    },
    "products": [
        {
            "id": 19,
            "name": "Grapes2,",
            "self_link": "/shop/v2/products/19"
        },
        {
            "id": 18,
            "name": "Grapes1,",
            "self_link": "/shop/v2/products/18"
        },
...
    ]
}

Mit Postman wurde die jeweiligen Endpunkte der API aufgerufen und es gab auch eine Antwort (Response) vom Server, aber ist dies jetzt auch die Antwort welche man erwartet hat?

Integrationstests mit Postman

Beim Aufruf von GET products wird ein Test hinterlegt (Prüfung Statuscode = 200).

  • Tab "Tests" anklicken
  • JavaScript Code hinzufügen (Postman zeigt im rechten Bereich bereits einige Vorschläge an)


pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

Diese Methode lässt sich einfach erweitern unnd mann den HTTP Status inkl. der zurückgegebenen Daten mit den zu erwarteten Werten abgleichen. 

Auch lassen sich Tests der einzelnen Endpunkte umsetzen und so eine "Reise" eines User nachbauen. Der folgende Test nimmt die ID des Response-Body eines neu angelegten products und schreibt diese in die Variable productId.

const body = JSON.parse(responseBody); pm.collectionVariables.set("productId", body.id);

In den nachfolgenden Requests, kann man diese Variable jetzt mit doppelt geschweiften Klammern verwenden /products/{{productId}} .


Quelle: https://stackoverflow.com/a/58325002

Samstag, 14. Oktober 2023

Windows - Screenrecorder / Bildschirmvideos aufnehmen

Für die einfache Aufnahme von Bildschirmvideos (Screenrecording) gibt es Open-Source- und  Freeware-Programme (wie z.B. CamStudio). Oft ist aber eine Bildschirmaufnahme mit Standardtools und Bordmitteln möglich, welche ich in diesem Beitrag kurz beschreibe. Zum Bearbeiten, siehe auch Windows 11 - Videos bearbeiten / Video Editor.


Windows (ab Version 10) Xbox Game Bar

Das Hilfsprogramm lässt sich einfach mit "Windows-Taste+G)" aufrufen. Es macht Screenshots und zeichnet Videos auf. Über eine Kontrollleiste lässt sich die Aufzeichnung stoppen, die MP4-Datei liegt im Videoverzeichnis des jeweiligen Benutzers.

  • Windows+Alt+Drucken => erstellt einen Screenshot
  • Windows+Alt+R => startet oder beendet die Aufnahme
  • Windows+ Alt+M => Mikrofoneingang aufnehmen

 

Windows 11 Snipping Tool

Mann kann zwischen Screenshot und Video wechseln, danach kann man einen Rahmen aufziehen und als MP4-Datei ablegen. Ton kann nicht mit aufgezeichnet werden! 


VLC Media Player

Auch hier kann das Monitorbild aufgenommen werden, diese Funktion lässt sich im "Medien-Menü" auswählen.

  • Dialog => "Konvertieren/Speichern"
  • "Aufnahmegerät öffnen" => "Aufnahmequelle" => "Desktop"
  • Bildwiederholrate für die Aufnahme" auf "30 f/s" hochsetzen

Nach Klick auf "Konvertieren/Speichern" öffnet sich einen Dialog zum Speichern. Anschließend nur noch die "Start" anklicken.