kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




DAY BY DAY

(EN google-translate)

(PL google-translate)

Entwicklung fehlertoleranter Software für eingebettete Echtzeitsysteme, Wintersemester 2019/20

  • An den einzelnen Kursterminen behandelte Themen

Do 10.10.2019, 12:30-15:45

  • Übersicht zu den im Kurs behandelten Themen:
  1. Pattern für fehlertolerante Software
  2. Android-Programmierung mit Processing
  3. Projekt: Fehlertoleranter Entwurf und Umsetzung eines Sprachsynthesizers, der durch Kopfbewegungen gesteuert wird.
  • Übersicht darüber, was "fehlertolerante Software" bedeutet und welche Entwurfsmuster es hier gibt.
81_FTSD/01_Fehlertoleranz
81_FTSD/05_Fehlertoleranz
  • Erste Schritte mit Processing
78_Processing
  • Erste Schritte mit Android-Processing
93_Android_Proc
  • Weitere Kapitel zu Android-Processing:
Wir arbeiten nicht mit Android Studio: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/01_Getting_Started
Bedeutung von Activities: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/05_Activities
ADB-Werkzeug: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/08_ADB_Apps
Processing: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/06_Processing
Übung zu Android Processing
  • Analysieren Sie das Accelerometer-Beispiel der KETAI-Library (Erklärung im Kurs)
  • Schreiben Sie eine App, die die Hintergrundfarbe einer App abhängig von den Beschleunigungsdaten einstellt.

Do 24.10.2019, 12:30-15:45

TESTS.zip -- Im unterricht entstandene Programme.
  • Einführung in Java und Echtzeitprogrammierung
67_Echtzeitsysteme/01_Einfuehrung
  • Basics Java Programmierung: Klassen, Objektattribute, Objektmethoden.
  • Kompilieren in der Konsole
  • Vergleich Processing / Java von scratch
  • Einführung in BlueJ
  • UML Klassendiagramm
OOP Begriffe (C++)
Erzeugen von Objekten: Der Konstruktor (C++)
Java Basics
Processing - Getting started
Einfache Beispiele
Einführung BlueJ
Libraries (.jar-Files) in BlueJ einbinden.

Bild 0-1: Libraries (.jar-Files) in BlueJ einbinden.

Jar-File aus BlueJ-Projekt exportieren.

Bild 0-2: Jar-File aus BlueJ-Projekt exportieren.

Exportiertes Projekt starten.

Bild 0-3: Exportiertes Projekt starten.

Library für Processing unter BlueJ entwickelt.
Eigene Libraries für Processing entwickeln.
UML-Klassendiagramm
  • Threadding mit Java
  • Binäre Semaphore mit Java
Threads -- Theorie
Verzweigen und wieder zusammenführen
Threads synchronisieren.
java-Threads Teil 1
Java-Threads Teil 2
Beispiel mit "Scheduled Executor Service".
Semaphore mit Java
Thread1.zip -- Threads mit Vererbung
Thread2_interface.zip -- Threads mit Schnittstelle Runnable
Schnittstelle.zip -- Wie man selber eine Schnittstelle schreibt
Programmstruktur vom Projekt

Bild 0-4: Programmstruktur vom Projekt "Schnittstelle" in BlueJ visualisiert.

  • Nötigenfalls Fortsetzung der Java-Themen von Dienstag
  • MUSTERLÖSUNG:
Klassenstruktur für Musterlösung zur Programmierung einer

Bild 0-5: Klassenstruktur für Musterlösung zur Programmierung einer

Objektorientierte Implementierung einer binären Semaphore als BlueJ-Projekt.
public class Main
{
    Thread t1,t2;
    Ausgabe aus_1;
    Ausgabe aus_2;
    public Main()
    {
    }
    
    public void initialisieren()
    {
        Sema sema = new Sema();
        aus_1= new Ausgabe("ABCD",500,sema);
        aus_2 = new Ausgabe("123",500,sema);
        t1 = new Thread(aus_1);
        t2 = new Thread(aus_2);
         t1.start();
         t2.start();
    }
    public static void main()
    {
        // tragen Sie hier den Code ein
        Main main = new Main();
        main.initialisieren();
    }
}

Code 0-1: Main.java

public class Ausgabe implements Runnable 
{
    private String ausgabe = "Tschüss";
    private long pausenlaenge;
    private Sema sema;
    public Ausgabe(String text, long pausenlaenge, Sema sema)
    {
        // Instanzvariable initialisieren
        this.pausenlaenge = pausenlaenge;
        //this.ausgabe = text;
        ausgabe = text;
        this.sema = sema;
    }

    public void run()
    {
      while(true)
      {
        if(sema.warte())
        {
          for (int i =0;i<ausgabe.length();i++)
          {
              System.out.print(ausgabe.charAt(i));
              if(i==ausgabe.length()-1)
                 sema.signal();
              try
              {
                  Thread.sleep(pausenlaenge);
              }
              catch(Exception e)               
              {
                  System.out.println("Pommes");
              }
          
          }
          //sema.signal();
        }  
      }
    }
}

Code 0-2: Ausgabe.java

public class Sema
{
    private boolean zustand;
    public Sema()
    {
         zustand = true;
    }
    public synchronized boolean warte() //wait im Text
    {
         if(zustand==true) // if device available
         {
             zustand = false;
             return true; //it worked, you have access to device 
         }
         else
         {
             return false; //it did not work
         }
    }    
    public synchronized boolean signal()
    {
         if(zustand==false) 
         {
              zustand = true;
              return true; //it worked to return the device
         }
         else
         {
              return false; 
         }
         
    }
}

Code 0-3: Sema.java

Do 07.11.2019, 12:30-15:45

Android-Processing-VR

In der letzten LV wurden die Grundbegriffe zu OOP und einige wichtige Konzepte mit Java eingeführt. Nun sollen Beispiele zu Android-Processing-VR durchgenommen werden. Hier tauchen die besprochenen Konzepte wieder auf (Klassen, Objekte, Attribute, Methoden, Vererbung, Interfaces, Packages, Threads, usw.) und sollten nun leichter verstehbar sein.

Für das angestrebte Projekt ist Visualisierung kein primäres Element. Jedoch wird das Headtracking von Android-VR sinnvollerweise genutzt und die Visualisierung ist ein hilfreiches Feature mindestens während des Entwicklungsprozesses und wahrscheinlich auch später und stellt ein Beispiel für "Maximise human participation" dar.

Im weiteren Verlauf wird als weitere Grundfertigkeit noch die Umsetzung von TTS (Text to Speech) ergänzt und natürlich die "Pattern for fault tolerant software" vertieft.

Heute aber konzentrieren wir uns zunächst ausschließlich auf Android-Processing-VR, wobei Sie sich das Meiste durch praktische Übungen erschließen sollen.


Bitte fragen Sie nach, wenn Sie bestimmte Programmstrukturen nicht verstehen.


Teil 1: Testen und verstehen kleiner Beispiele:
  • Analysieren und testen Sie die folgenden Beispiele:
Tutorial zu Android VR auf processing.org: https://android.processing.org/tutorials/vr_intro/index.html
  • Analysieren und testen Sie vr002_richtungen:
Android Processing VR
94_VSI/04_Shapes3D -- Texturen
  • Versuchen Sie die Beispiele ein wenig zu variieren (in einer Kopie des Original-Sketches), um die verwendeten Elemente besser zu verstehen.
  • Im Anschluß: gemeinsame Besprechung.
Teil 2: Remote-Access zum Head-Tracking

Das nachfolgende Beispiel besteht aus einem PC-Sketch (vr4_PC) und einem Android-VR-Sketch (vr2_OSC). Sind beide beim gleichen Router angemeldet und ist bei dem Android-Sketch die IP des PCs/Laptops richtig eingetragen, so wird die 4x4 Matrix, die die Kopfbewegung repräsentiert vom Android-Device an den PC via WiFi gesendet und dort benutzt, um die gleiche Szene in der gleichen Perspektive wie bei der VR-Briulle darzustellen.

vr2_OSC.zip -- Android-Part sendet per OSC die eyeMatrix
vr4_PC.zip -- Komplett synchronisierte Darstellung über "applyMatrix(...)", der die invertierte/transponierte eyeMatrix übergeben wird, außerdem Spiegelung der Koordinatenachsen mit scale(...) (Android-Part bleibt wie gehabt!)

Bringen Sie diese Anwendung bei sich zum laufen, indem Sie den bereit gestellten Router verwenden. Versuchen Sie dann folgende Aufgabe zu lösen:

  • Schreiben Sie ein Programm, bei dem Farbwechsel der sechs in der Szene befindlichen Bälle auftreten, wenn man den jeweiligen Ball länger ansieht.
  • Sorgen Sie dafür, dass nicht nur die Blickrichtung, sondern auch dieser Farbwechsel in der am PC reproduzierten Szene zu sehen ist.

Do 14.11.2019, 12:30-15:45

Teil 1: Wiederholung / Nähere Erläuterung / Diskussion von Teilen der Design Pattern für Fehler toleranten Softwareentwurf

  • Maximize human participation
  • Minimize human interaction
  • Recovery Block

Teil 2: Test / Analyse / Modifikation von Beispielen zu TTS (Text to speech)

Siehe Beispiel und Übung hier:

94_VSI/03_TTS

HINWEIS: Voraussetzung für das Funktionieren des Beispiels ist, dass TTS auf dem Smartphone aktiviert und das deutsche TTS-Sprachpaket heruntergeladen und installiert wurde, siehe z.B. hier:

Anleitung zu TTS.

Do 21.11.2019, 12:30-15:45

  • Musterlösungen zu der Übung von letzter Woche.
sprachsynth.zip -- Musterlösungen zu der Übung von letzter Woche in Vorlesung entstanden.

Wichtige Themen dabei:

  • Umgang mit ArrayList
  • Methoden der Klasse String
  • Modularisierung durch Verwendung von Klassen
  • Zusammenfassen zusammengehöriger Elemente / Wiederverwendbarkeit

Wie kann man bei kleinen Software-Projekten vorgehen?

  • Recherche
  • Kleine Funktionstest
  • Funktionsmuster
  • Modularisierung
  • Weiterentwicklung
  • Tests und Optimierung

Neu einzuführen: Exceptions in Java

81_FTSD/07_Processing/01_Exceptions

Weitere Fault-Toerant-Pattern:

  • Units of Mitigation
  • Correcting Audits
  • Redundancy

Do 28.11.2019, 12:30-15:45 RAUM IWZ221

Neue Fault tolerant Pattern:

  • Maintenance Interface
  • Someone in Charge
  • Escalation
  • Gemeinsame Entwicklung eines Templates zur Verwaltung mehrerer Frames mittels eines Interfaces
  • Aufteilung in Projektgruppen
  • Übung innerhalb der Projektgruppe:
Modul001.zip -- Arbeiten mit verschiedenen Modulen, die über eine Variable MODE aktiviert und deaktiviert werden.
Übung

Teil 1: Entwickeln Sie eine kleine App mit zwei Frames: Das Startframe dient dazu zu testen, ob ein Benutzer dazu in der Lage ist die Maus zu benutzen. Das zweite Frame stellt eine Diashow dar.

Teil 2: Sammeln Sie erste Ideen für einen Sprachsynthesizer, bei dem der Bildschirm des Smartphones nicht mit benutzt werden muß. Welche besonderen Herausforderungen gibt es hier? Läßt sich die bisherige Version auch ohne Bildschirm sinnvoll benutzen?

Do 05.12.2019, 12:30-15:45

Übung (Vorentwicklungen zur Projektaufgabe, ist innnerhalb der Projektgruppen zu lösen)

Teil 1: Entwickeln Sie eine kleine App mit zwei Frames: Das Startframe dient dazu zu testen, ob ein Benutzer dazu in der Lage ist den Kopf in verschiedene Richtungen zu bewegen. Das zweite Frame stellt eine Diashow dar, die durch Kopfnicken und -drehen gesteuert wird.

Projektbeschreibung

  • Das Projekt ist in Zweiergruppen zu bearbeiten
  • Es soll mit Hilfe von Android-Processing-VR eine Android-App entwickelt werden, die es erlaubt über Kopfbewegungen Sprachsynthese durchzuführen.
  • Durch Kopfdrehungen sollen Buchstaben des Alphabets ausgewählt und gesammelt werden.
  • Durch eine besondere Kopfbewegung, werden die bisher gesammelten Buchstaben als Wort ausgesprochen.
  • Das Smartphone wird in ähnlicher Weise wie bei der VR-Brille mit dem Kopf verbunden, jedoch ohne die Augen zu verdecken.
  • Der Bildschirm des Smartphones soll im Arbeitsmodus nicht benötigt werden.
  • Es sollen mindestens drei der im Unterricht besprochenen Fault-Tolerant-Software-Pattern verwendet werden.
  • Die fertige App soll in einer Abschlußpräsentation vorgeführt und erklärt werden.
  • In der Abschluß-Präsentation sollte deutlich dargestellt werden (theoretisch und praktisch), wie die Fault-Tolerant-Software-Pattern zum Einsatz kommen.
  • Im Betrieb muß ein Smartphone genügen. Zum Testen, Prüfen, Warten, usw. können weitere Geräte mit einbezogen werden, wie: PC, zweites Smartphoe, Router, usw.
  • Auch die Transparenz, Modularität, Sicherheit und Wiederverwendbarkeit der Programmstruktur wird benotet.
  • Das Android-Processing-VR-Projekt UND eine einseitige Übersicht zu den wichtigsten Features der App (EINE A4-Seite) sollen unter Angabe der Autoren und deren Matrikelnummern noch vor der Abschlußpräsentation an den Dozenten gemailt werden. Betreff: FAULT TOLERANT SOFTWARE Name1 Name2
  • Die Abschlußpräsentation findet am letzten Vorlesungstermin statt: 23.01.2020, Dauer: nicht länger als 10 Minuten pro Gruppe.

Do 12.12.2019, 12:30-15:45

Fragen-Beantwortung:

  • KETAI versus Android-VR
  • pushMatrix / popMatrix:
  • ... pushMatrix() merkt die aktuellen Verdrehungen und Verschiebungen des Intertialkoordinatensystems.
  • translate / rotateX Y Z verändern die Verdrehungen und Verschiebungen des Intertialkoordinatensystems.
  • ... popMatrix() stellt den zuletzt mit popMatrix() gespeicherten Zustand wieder her.
PushMatrix.zip -- vier Kreise an bestimmten Koordinaten darstellen -- OHNE pushMatrix
PushMatrix2.zip -- vier Kreise an bestimmten Koordinaten darstellen -- MIT translate() geht schief, da Transformationen sich aufsummieren.
PushMatrix3_pushpop.zip -- Korrektur über pushMatrix() und popMatrix()