Giter VIP home page Giter VIP logo

skillproject-fr-14's Introduction

Tasche packen

Der Alexa Skill „Tasche packen“ soll dem Nutzer jeder Zeit helfen können seine Tasche für den Tag des Aufrufs zu packen, damit man nichts vergisst.

Alexa soll dabei anhand des Stundenplans von dem Nutzer wissen, was dieser zu den am Tag anstehenden Fächer mitnehmen soll. Der Nutzer kann jederzeit die Utensilien für jedes Fach individuell anpassen. Außerdem hat er die Möglichkeit bei jedem Aufruf anzugeben welche Fächer er an diesem Tag nicht besuchen möchte. Des Weiteren gibt es die Möglichkeit für den User während des laufenden Skills weitere Funktionen aufzurufen wie Beispielsweise „Hilfe“ und „Stopp“, dies ist ein wichtiger Zusatz zur einfachen Bedienung des Programms.

Damit der User nicht ins kalte Wasser geschmissen und er sich ohne weitere Information über das Wetter aus dem Haus bewegt, gibt es in diesem Skill „Tasche packen“ eine weitere kleine Zusatzinformation. Alexa soll in Abhängigkeit von den aktuellen Wetterverhältnissen des Tages den Nutzer auf das Mitnehmen von Schirm, Sonnenbrille oder ähnlichen Dingen hinweisen.

Alexa API

Setup

Um einen Alexa-Skill aufzusetzen muss man zunächst eine AWS-Lambda Funktion erstellen. In diese wird der Java-Code in Form einer jar-Datei eingefügt, die man zuvor mit Maven gebaut hat. Außerdem benötigt man einen Account in der Amazon Developer Console. Dort erstellt man ebenfalls eine Funktion und verknüpft sie über den Menüpunkt 'Endpoints' mit AWS.

Aufbau der Dialoge

Jede Aktion wird über einen Intent aufgerufen. Bei welcher Spracheingabe dieser aufgerufen werden soll, lässt sich in der Developer Console konfigurieren. Um Werte, die eingegeben werden können, einzuschränken, gibt es sogenannte Slots, die man auch in der Developer Console hinterlegen kann. Im Code gibt es für jeden Intent einen zugehörigen IntentHandler. Dieser wird aufgerufen, wenn die passende Eingabe (evtl. mit Slot) angegeben wird.

Handler

Folgende Handler sind im Skill 'Tasche packen' vorhanden:

  • PackInBagStreamHandler: Dieser Handler wird bei Aufruf des Skills aufgerufen und erzeugt alle weiteren Handler.
  • LaunchRequestHandler: Dieser Handler wird direkt nach dem Aufruf des Skills gestartet und heißt den User willkommen.
  • WelcomeIntentHandler: Dieser Handler folgt auf den LaunchRequestHandler und fragt den User, ob er alle Fächer besuchen will.
  • AidIntentHandler: Dieser Handler bietet eine Hilfe-Funktion, bei der alle möglichen Funktionen aufgezählt werden.
  • GetSubjectToChangeIntentHandler: Hier kann man einen Gegenstand zu einem Fach hinzufügen oder entfernen.
  • AddOrRemoveItemIntentHandler: Dieser Handler gibt eine Rückmeldung über das erfolgreiche Hinzufügen/Entfernen eines Gegenstandes.
  • GoodbyeIntentHandler: Dieser Handler beendet den Skill.

Datenbankanbindung

Setup

Um die Datenbank benutzen zu können muss in der jeweiligen Lambda-Funktion zunächst die Dynamo-DB ausgewählt werden. Damit die Datenbank auch alle Berechtigungen hat müssen der lambda_basic_execution Rolle noch weitere Berechtigungen hinzugefügt werden. Daraufhin wird eine Tabelle mit wie im LaunchRequest spezifiziertem Namen und Primärschlüssel "id" erstellt. Damit die Datenbank befüllt wird muss der LaunchRequest mindestens einmal auf der Konsole oder im AWS ausgeführt werden.

Funktionsprinzip

Die Datenbank wird bei der ersten Verwendung automatisch mit default-Werten befüllt. Dabei wird jedem Fach eine Liste von Gegenständen in der Datenbank-Map zugeordnet. Bei folgenden Skill-Aufrufen werden die während der letzten Session gespeicherten Werte aber nicht überschrieben, da abgeprüft wird, ob die Datenbank leer ist. Damit bleiben geänderte Werte auch über mehrere Aufrufe hinweg persistent gespeichert.

Änderungsmöglichkeiten

Im Skill selbst kann über zwei Handler hinweg ein Fach und ein hinzuzufügender oder ein zu entfernender Gegenstand festgelegt werden. Falls der Gegenstand bereits dem Fach zugeordnet ist, wird er aus der Liste entfernt, andernfalls hinzugefügt. Die möglichen Gegenstände werden dabei durch die in der Konsole spezifizierten Slots beschränkt, da andere Eingaben schwierig zu erkennen sind.

ZPA-Anbindung

Setup

Die Klasse Day hat schon den automatischen Login in das ZPA System implementiert. Damit auch wirklich der persönliche Stundenplan aus dem Netz geladen werden kann, müssen nur noch die Login Daten im Sourcecode der Day-Klasse in eine Map eingetragen werden. Die Stelle für die Login Daten ist mit Kommentaren hervorgehoben.

Funktionsprinzip

Zuerst wird ein Token zur Authentifizierung von dem ZPA abgefragt. Anschließend wird für den ZPA-Login ein HTTP-POST request an das ZPA gesendet. Wichtig ist dabei, dass in ein Cookie-Header mit dem Value der Login-Daten und des Token hinterlegt sind. Sobald man eingeloggt ist, kann man den Stundenplan in Form eines JSON-Files abfragen und sich wieder ausloggen. Aus dem JSON-File werden dann die Vorlesungen und Praktika gefiltert, die am Tag der Abfrage tatsächlich stattfinden und nicht ausfallen.

Zusatzinfo

Im Fall, dass das ZPA-System nicht online ist, oder der Stundenplan aus irgendeinem anderen Grund nicht abgefragt werden konnte, wird ein alternativer Vorlesungsplan ausgegeben.

skillproject-fr-14's People

Contributors

ngaeng avatar chrysotomus avatar kkaiser12 avatar sfrank13 avatar gsocher avatar

Stargazers

 avatar  avatar  avatar

Watchers

James Cloos avatar  avatar  avatar

skillproject-fr-14's Issues

Einpackliste Wetter

User Story: Einpackliste Wetter
Als User möchte ich wissen, was ich aufgrund des Wetters zusätzlich einpacken soll, wie z.B. einen Regenschirm. Der Skill soll mir hierzu Vorschläge machen.

Akzeptanzkriterien

  • Vorschläge sollen zu Wetter passen

Begrüßung

Name Tasche packen
Kurzbeschreibung  
Akteure User
Auslöser  
Vorbedingungen  
Eingehende Informationen  
Ergebnis(se)  
Nachbedingungen  
Ablauf  
Offene Punkte  
Änderungshistorie  
Sonstiges, Anmerkungen  

Day-(ehem. Calendar)Klasse für die ZPA Schnittstelle

Hey Leute, speziell geht diese Frage an die Leute, die mit meiner Klasse Calendar arbeiten.
Ich wollte fragen, ob ich die meine Klasse Calendar jetzt in "Day" umbennen kann, da das ja von der Thematik her (sich täglich den Stundenplan zu holen) wesentlich mehr Sinn macht. Ich würde bei der Gelegenheit auch die Methode 'getTodayLectures' auch in 'getLectures' umbennen.

Übungsblatt 2 - Aufgabe 3

Falls der Reviewer dieser Aufgabe weiß wie man den Block oben links in der Ecke (mit dem Systemnamen) besser beschriftet (nicht nur mit dem Textoverlay) wär das glaub ich ganz gut

Probleme mit Workspace.xml

Ich habe Probleme damit, meine Dateien auf Github zu pushen. Nachdem ich geaddet und commited habe, habe ich Probleme mit dem Workspace.xml file in der .idea. Es ist mir nicht mehr möglich etwas auf GitHub zu pushen. Ich habe leider elegante Lösung gefunden und würde vorschlagen, dass wir uns mal treffen und uns das Problem zusammen ansehen, da ja scheinbar mehrere dieses Problem haben.. Ich habe sicherheitshalber die Kommandozeilenantwort unten eingefügt, als ich mein Projekt pushen auf Github pushen wollte.

From https://github.com/sweIhm-ws2018-19/skillproject-fr-14
 * branch            develop    -> FETCH_HEAD
Auto-merging tasche_packen/.idea/workspace.xml
CONFLICT (content): Merge conflict in tasche_packen/.idea/workspace.xml
Automatic merge failed; fix conflicts and then commit the result. 

Übungsblatt 2: Aufgabe 9

aufgabenblatt2_aufgabe9

Bitte nochmal einen genauen Blick auf diese Lösung werfen. Ich bin mir nicht sicher, ob das so richtig gelöst ist. Ich denke, dass die Reihenfolge der Druckprozesse zwar irrelevant ist, das dürfte also passen.

Developer Console null error

Ich weiß nicht, ob einer von Euch schon mal das Problem hatte, aber ich bin mir unsicher, was den Fehler verursachen könnte.
Die Ausgabe hat ganz normal funktioniert, aber nachdem ich nochmal etwas hinzugefügt und neu gebuilded habe ging nichts mehr. Auch nach Rückgängigmachen der Addition hat sich nichts getan. Kristinas Skill funktioniert für mich ebenfalls nicht mehr.

image

Muster Anwendungsfallbeschreibung

Name Tasche packen
Kurzbeschreibung
Akteure User
Auslöser
Vorbedingungen
Eingehende Informationen
Ergebnis(se)
Nachbedingungen
Ablauf
Offene Punkte
Änderungshistorie
Sonstiges, Anmerkungen

Verabschiedung

User Story: Verabschiedung
Als Nutzer möchte ich, dass Alexa sich von mir verabschiedet.

Akzeptanzkriterien

  • Alexa verabschiedet sich mit unterschiedlichen Wendungen.

Github Pages und Readme

Hey Leute,
wir müssen noch das README.md fertig machen. Ich hab da jetzt schon mal was über die Handler, und wie das Ganze mit Alexa funktioniert, geschrieben. Ihr müsstet dann noch was zur Datenbank bzw. zum ZPA schreiben.

GithubPages hab ich vor den Ferien auch schon mal erstellt. Ihr müsst da beim Code in den Ordner 'docs' reingehen, bis jetzt gibt es nur eine Seite, die heißt index.md

Das muss da noch alles rein:

  • Systemidee und Skizze des Product Backlog
  • Fachklassenmodell
  • eine Ihrer User Stories und ihre Umsetzung (wählen Sie hier ein "Highlight" aus)
  • Zusammenfassung der gesammelten Erfahrungen Praktikum Software Engineering I

Hat jemand zumindest einen Teil von einem Fachklassenmodell? Ich denke mal, das wird wahrscheinlich die meiste Arbeit. Wir müssen uns dann außerdem noch überlegen, welche UserStory wir vorstellen.

Einpackliste Uni

User Story: Einpackliste Uni
Als User will ich wissen, was ich heute für die Uni in meine Tasche packen soll. Dabei soll der Fall berücksichtigt werden, dass ich ein Fach an diesem Tag nicht besuchen werde.

Akzeptanzkriterien

  • Zuordnung stimmt
  • Weglassen von einzelnen Fächern möglich

Übungsblatt 2: Aufgabe 7

aufgabenblatt2_aufgabe7

Ich denke zwar, dass das so passen müsste. Wäre allerdings super, wenn da nochmal jemand einen Blick drüber werfen kann. Danke im Voraus!

ZPA-Stundenplanabfrage

Name ZPA-Stundenplan-Abfrage
Kurzbeschreibung Der Funktion soll automatisch das ZPA-System nach dem Wochenplan fragen, um die heutigen Vorlesungen und Praktika herauszufinden.
Akteure User
Auslöser Der User möchte erinnert werden, was er heute einpacken soll.
Vorbedingungen ZPA-Accountdaten müssen in einer Datenbank hinterlegt sein
Eingehende Informationen ZPA-Accountdaten
Ergebnis(se) Vorlesungen und Praktika die an diesem Tag tatsächlich stattfinden, werden ausgegeben
Nachbedingungen Der User wird aus dem ZPA wieder ausgeloggt
Ablauf 1. Der User möchte wissen was er einpacken soll Wenn der User fragt, was er heute einpacken soll, wird das ZPA-System nach dem Wochenplan gefragt. Nach erfolgreichem Login gibt das ZPA-System den Wochenplan zurück. Aus diesem werden dann die Vorlesungen und Praktika des heutigen Tages gefiltert und zurückgegeben
Offene Punkte ----
Änderungshistorie Erstellt am 30.11.2018
Sonstiges, Anmerkungen ----

User Story: ZPA-Stundenplan-Abfrage
Als User möchte ich, dass mein Stundenplan automatisch aus dem ZPA abgefragt wird, damit ich nur an die wirklich gebrauchten Unterlagen erinnert werde.

Akzeptanzkriterien
Wenn die ZPA-Server online sind, soll die Liste der heutigen Vorlesungen und Praktika ausgegeben werden.

Gegenstände für den Skill

Hier eine kleine Liste von Gegenständen die man zu jedem Fach brachen könnte.

Operation Research

  • Skript
  • Block
  • Kugelschreiber
  • Bleistift
  • bunte Stifte
  • Geodreieck
  • Taschenrechner

Differentialrechnung in Rn und Differentialgleichungen

  • Block
  • Taschenrechner
  • Kugelschreiber
  • Bleistift

Numerische Mathematik

  • Laptop
  • Maus
  • Stifte
  • Block

Software Engineering

  • Laptop
  • Maus
  • Block
  • Stifte
  • Diagramm-Tafel
  • evtl. Alexa

Netzwerke

  • Laptop
  • Maus
  • Ladekabel
  • Block
  • Stifte

Wahrscheinlichkeitsrechnung und Statisik

  • Block
  • bunte Stifte
  • Kugelschreiber

Datenbanksysteme

  • Block
  • bunte Stifte
  • Laptop
  • Kugelschreiber

Algorithmen und Datenstrukturen

  • Laptop
  • Block
  • Kugelschreiber
  • Ladekabel

Fachklassenmodell

Hey Leute,
dieses Fachklassenmodell ist noch nicht vollständig. Damit jeder einen groben Plan hat, was man im Fachklassenmodell braucht, beschreibe ich das kurz im ersten Absatz. Jeder der das schon weiß, kann den ersten Absatz überspringen.

In einem Fachklassenmodell müssen die wichtigsten fachlichen Gegenstände des zu entwickelnden Systems repräsentiert und ihre Zusammenhänge modelliert werden. Dafür muss man den Assoziationen eine Benennung (und eine Richtung im Namen) geben. Wenn diese mal feststehen, kann man unser Programmkonzept möglichst detailliert aufbereiten. Sobald das Grundgerüst mit Klassen und Assoziationen steht, müssen noch Kardinalitäten ergänzt werden. Wer genauere Infos möchte, findet diese auf Seite 78 in Österreichs Buch - und ein Beispielmodell auf Seite 79.

Fragen die ich habe und Probleme, auf die ich gestoßen bin:

  1. Auf den ersten Blick dürfte man direkt feststellen, dass die Kardinalitäten fehlen. Ich habe leider wirklich Probleme, diese zuzuordnen. Ich denke es kommt auch irgendwie darauf an, aus welcher Perspektive man dieses Diagramm betrachtet. Ist der User eine Person und immer ein und das Selbe? Oder ist der User ein Element einer Gruppe und dementsprechend kann dieser mehrmals/einmalig in einer Kardinalität auftreten.
  2. Mir ist keine Benennung für die Assoziation zum 'STOPP'-Skill eingefallen.
  3. Müsste der Stopp-Skill mit allen anderen Skills, verbunden sein, weil er diese ja stoppen kann? (So würde ich dann auch die Assoziation nennen: 'stoppt ->')
  4. Gibt es eine Möglichkeit, den User noch bestimmen zu lassen, welchen Account vom ZPA System ihm gehört? Soll ich vielleicht noch eine Zwischenklassen namens Accounts erstellen? Dann verbinde ich Kalender/Stundenplan (holt von->) mit Account. Dieser wird dann mit mit ZPA verbunden (gehört zu->)
  5. Soll dieses Diagramm womöglich weniger ausgebaut sein (Zum Beispiel Wetter wegnehmen), da wir das nicht alles im Sprint 0 oder Sprint 1 umsetzen werden?

Weitere Feinheiten:

  1. Ich bin mir nicht sicher, ob die Benennung der Assoziationen nicht schöner lauten könnte. Ich bin für Vorschläge offen.
  2. Eigentlich müsste am Ende des Namens der jeweiligen Assoziation eine dicke ausgemalte Pfeilspitze sein. Ich habe dafür allerdings kein Symbol gefunden und deswegen einen leichten gewöhnlichen Pfeil gemacht.
  3. Passt der Name der Klasse 'Wetterstation'?

fachklassenmodell

Testen mit Mockito

Da ich in diesem Sprint ansonsten relativ wenig Arbeit habe, hab ich mir jetzt mal angeschaut, wie bei der Gruppe mit 100% Testabedeckung das Testen funktioniert. Die nutzen eine Library namens Mockito, mit der man Objekte simulieren kann, die außerhalb des eigentlichen Javacodes erzeugt werden, also z.B. den Input, den Alexa bekommt. Ich hab auch schon mal ein kleines Beispiel gemacht (LaunchRequestHandlerTest) , das könnt ihr euch ja mal anschauen und dann sagen, ob ihr das gerne nutzen würdet oder nicht. Ich finde es ziemlich gut, aber ich glaube, man muss sich schon erst etwas einarbeiten.

Ich weiß nicht genau, ob ihr die library über git bekommt, ansonsten könnt ihr sie hier downloaden:
https://bintray.com/mockito/maven/mockito-development/2.23.9?versionPath=%2Fmockito%2Fmaven%2Fmockito-development%2F2.23.9#files/org%2Fmockito%2Fmockito-core%2F2.23.9

(Bei Files unter dem Pfad /org/mockito/mockito-core/2.23.9 die Datei mockito-core-2.23.9.jar auswählen.)

Fächer-Gegenstandszuordnung

User Story: Fächer-Gegenstandszuordnung
Als User möchte ich Fächern in meinem Stundenplan Gegenstände zuordnen, die ich für das jeweilige Fach benötige, um später abfragen zu können, was ich benötige.

Akzeptanzkriterien

  • Zuordnung wird persistent gespeichert
  • Es wird erkannt, wenn ein Fach nicht in meinem Stundenplan vorhanden ist.

Übungsblatt 2: Aufgabe 1

Bitte einmal überprüfen ob es möglich ist bzw. richtig ist, wenn man bei dem "Blitz einstellen" die Funktionen "ein,aus,auto" so an gibt. Denn das Blitz einstellen enthält ja diese Funktionen.

Sonarqube

Derzeit bekommen wir bei travis-CI beim Build immer folgenden Fehler:

Project was never analyzed. A regular analysis is required before a branch analysis

Ich habe jetzt erstmal das yml-File zurückgesetzt, der Build in travis funktioniert auch. Ich könnte mir vorstellen, dass das Problem daran hängt, dass wir noch alles im develop-Branch haben. Ich würde vorschlagen, dass wir das erstmal so lassen und erst nächste Woche alles mit dem master-Branch mergen. Falls einem von Euch eine Möglichkeit einfällt das anderweitig zu fixen können wir das natürlich sofort machen.

Begrüßung

User-Story: Begrüßung
Als Nutzer will ich wissen, welche Funktionen ich innerhalb des Skills aufrufen kann. Der Skill soll mir die Optionen aufzählen.

Akzeptanzkriterien

  • Begrüßung vorhanden
  • mögliche Funktionen werden aufgezählt (Liste ausgeben, neue Fach-Gegenstandszuordnung)

Hilfe-Funktion

Name Hilfe (UC 6)
Kurzbeschreibung  Diese Funktion kann aufgerufen werden, wenn der User nicht weiß, wie ein bestimmter Use Case aufgerufen wird. Er zählt alle Fälle mit dem zugeordneten Kommando auf.
Akteure User
Auslöser  Der User sagt "Alexa, starte Hilfe"
Vorbedingungen  keine
Eingehende Informationen  keine
Ergebnis(se)  Der User weiß, wie er den erforderlichen Use Case aufruft. Er wird zu den eigentlichen Use Cases weitergeleitet oder der Skill wird abgebrochen
Nachbedingungen  keine
Ablauf Alexa informiert den User darüber, wie er die verschiedenen Use Cases aufrufen kann. Dazu sagt sie Folgendes: "Du kannst Dir Deine Liste an mitzunehmenden Gegenständen für den heutigen Tag ausgeben lassen. Außerdem kannst Du angeben welche Fächer Du heute nicht besuchen willst. Ich passe dann deine Liste darauf an. Falls Du zu einem Fach jetzt andere Sachen mitnehmen willst kannst Du das nach Alexas erster Anfrage mit dem Befehl "Gegenstand hinzufügen" tun. Willst Du jetzt Deine Tasche packen?" Wenn der User "Ja" antwortet, kann er anschließend den Skill nutzen. Ansonsten wird der Skill beendet und Alexa wünscht einen schönen Tag.
Offene Punkte  keine
Änderungshistorie  geändert am 11.11.2018 von Kristina Kaiser
Sonstiges, Anmerkungen /

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.