DAY BY DAY
(EN google-translate)
(PL google-translate)
Entwicklung fehlertoleranter Software für eingebettete Echtzeitsysteme, Wintersemester 2019/20
|
Do 10.10.2019, 12:30-15:45
|
|
|
81_FTSD/01_Fehlertoleranz
81_FTSD/05_Fehlertoleranz
|
78_Processing
|
93_Android_Proc
|
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
|
Do 24.10.2019, 12:30-15:45
TESTS.zip -- Im unterricht entstandene Programme.
|
67_Echtzeitsysteme/01_Einfuehrung
|
OOP Begriffe (C++)
Erzeugen von Objekten: Der Konstruktor (C++)
Java Basics
Processing - Getting started
Einfache Beispiele
Einführung BlueJ
Bild 0-1: Libraries (.jar-Files) in BlueJ einbinden.
Bild 0-2: Jar-File aus BlueJ-Projekt exportieren.
Bild 0-3: Exportiertes Projekt starten.
Library für Processing unter BlueJ entwickelt.
Eigene Libraries für Processing entwickeln.
UML-Klassendiagramm
|
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
Bild 0-4: Programmstruktur vom Projekt "Schnittstelle" in BlueJ visualisiert.
|
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:
|
|
Android Processing VR
94_VSI/04_Shapes3D -- Texturen
|
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:
|
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
|
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:
Do 21.11.2019, 12:30-15:45
|
sprachsynth.zip -- Musterlösungen zu der Übung von letzter Woche in Vorlesung entstanden.
Wichtige Themen dabei:
|
Wie kann man bei kleinen Software-Projekten vorgehen?
|
Neu einzuführen: Exceptions in Java
81_FTSD/07_Processing/01_Exceptions
Weitere Fault-Toerant-Pattern:
|
Do 28.11.2019, 12:30-15:45 RAUM IWZ221
Neue Fault tolerant Pattern:
|
|
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
|
Do 12.12.2019, 12:30-15:45
Fragen-Beantwortung:
|
|
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()