2019-03-26T16:04:36.670567469
PT3H26M43S
93
LibreOffice/6.2.3.2$Linux_X86_64 LibreOffice_project/20$Build-2

# Pflichtenheft

2019-05-02T13:12:23.524684391
1.1.1
0
0
49108
22677
true
false
view2
32905
75895
0
0
49107
22675
0
1
false
100
false
false
false
false
false
false
false
false
true
true
true
0
true
false
true
false
true
false
false
true
false
false
192011
false
false
true
true
false
false
true
true
true
true
true
false
false
true
false
false
1
0
0
false
true
false
false
false
false
false
false
false
true
false
high-resolution
true
true
true
false
true
false
true
false
false
false
false
true
false
false
true
false
true
4254429
true
false
false
true
false
false
false
true
false
false
false
false
false
false
false
AAEAAAAQAQAABAAARkZUTWxEV6oAAyoMAAAAHEdERUYE8wkPAAMptAAAAFZPUy8yUL7s9wAA [encoded data, 303281 characters] AAAAAQAAAAEAAAAAAAAAAQAAAADXh1FAAAAAAMBkEbcAAAAA1Fj0sg==
AAEAAAARAQAABAAQR0RFRoPydSYABzQoAAAFEEdQT1OnXngWAAc5OAABIJ5HU1VCNVXTdgAI [encoded data, 812199 characters] AAAAAQAIAAEABgxyAAEAAQATAAEAAAABAAgAAQAGC1AAAQABAUEAAA==
AAEAAAARAQAABAAQR0RFRoPydSYAB4EMAAAFEEdQT1OGQmKLAAeGHAABH0hHU1VCNVXTdgAI [encoded data, 840552 characters]
AAEAAAARAQAABAAQR0RFRvVN2ToAB9xYAAAE9kdQT1Mjah5qAAfhUAABKJBHU1VCzwZh5wAJ [encoded data, 878638 characters] CIcIhAiFAAEABgBJB9QH1QfWB9cH2AABAAAAAQAIAAEABgmAAAEAAQFB
AAEAAAARAQAABAAQR0RFRvVN2ToACBcEAAAE9kdQT1NBz2RdAAgb/AABKFRHU1VCzwZh5wAJ [encoded data, 900588 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAotwAAACtEdQT1PKV4glAAKOJAAAGypHU1VCP1wkyQAC [encoded data, 309352 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAqA0AAACtEdQT1PdcpZ2AAKi6AAAG2ZHU1VC7cbXcgAC [encoded data, 320108 characters] A8YAAgAEA1cDaAAAA3UDdwASA5kDmQAVA8UDxQAW
T1RUTwAMAIAAAwBAQ0ZGILmRse4AAFtAAAFfMUdERUZO81E/AAG6dAAAAIBHUE9TNEuxaAAB [encoded data, 183833 characters]
T1RUTwAMAIAAAwBAQ0ZGIKQZSBEAAFtMAAFr/EdERUZO81E/AAHHSAAAAIBHUE9TAsnA9QAB [encoded data, 188652 characters]
AAEAAAATAQAABAAwRkZUTVocIkYAAlM8AAAAHEdERUYC0AAkAAJCoAAAAChHUE9TCN31fwAC [encoded data, 222859 characters] zD2izwAAAAC/G2HwAAAAAM7DHYY=
AAEAAAATAQAABAAwRkZUTVocImoAAj6gAAAAHEdERUYCzwAkAAIt+AAAAChHUE9THRsXeAAC [encoded data, 215117 characters] Ag0CDgISApYAAAABAAAAAMw9os8AAAAAvxth8AAAAADOwx2q
AAEAAAATAQAABAAwRkZUTVobFScAAjZoAAAAHEdERUYC1QAkAAImJAAAAChHUE9T0/tBYAAC [encoded data, 212036 characters] AgwCDQIOAhICnAAAAAEAAAAAzD2izwAAAAC/G2HwAAAAAM7CEGc=
AAEAAAATAQAABAAwRkZUTVobFVQAAlQ4AAAAHEdERUYC1AAkAAJDpAAAAChHUE9TrCXAFwAC [encoded data, 223254 characters] EJQ=
AAEAAAATAQAABAAwRkZUTVocIkYAAlM8AAAAHEdERUYC0AAkAAJCoAAAAChHUE9TCN31fwAC [encoded data, 222859 characters] zD2izwAAAAC/G2HwAAAAAM7DHYY=
AAEAAAATAQAABAAwRkZUTVocImoAAj6gAAAAHEdERUYCzwAkAAIt+AAAAChHUE9THRsXeAAC [encoded data, 215117 characters] Ag0CDgISApYAAAABAAAAAMw9os8AAAAAvxth8AAAAADOwx2q
AAEAAAATAQAABAAwRkZUTVobFScAAjZoAAAAHEdERUYC1QAkAAImJAAAAChHUE9T0/tBYAAC [encoded data, 212036 characters] AgwCDQIOAhICnAAAAAEAAAAAzD2izwAAAAC/G2HwAAAAAM7CEGc=
AAEAAAATAQAABAAwRkZUTVobFVQAAlQ4AAAAHEdERUYC1AAkAAJDpAAAAChHUE9TrCXAFwAC [encoded data, 223254 characters] EJQ=
AAEAAAAUAQAABABARkZUTXPB9PAAAAFMAAAAHEdERUaUz47mAAABaAAAApRHUE9TVoDENQAA [encoded data, 1107497 characters]
AAEAAAATAQAABAAwRkZUTXPB9PAAAAE8AAAAHEdERUaNwIfxAAABWAAAAjhHUE9T1BxgqAAA [encoded data, 1032293 characters] KysrKysrKysrKx0A
AAEAAAARAQAABAAQR0RFRuFh5UEAAotwAAACtEdQT1PKV4glAAKOJAAAGypHU1VCP1wkyQAC [encoded data, 309352 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAqA0AAACtEdQT1PdcpZ2AAKi6AAAG2ZHU1VC7cbXcgAC [encoded data, 320108 characters] A8YAAgAEA1cDaAAAA3UDdwASA5kDmQAVA8UDxQAW
.
.

TextureSync

# Pflichtenheft

⸬ Version 1.1.1 Seite 12/12

# Pflichtenheft

TextureSync

Version

1.1.1

Datum

22.03.19

Autor

Lukas Fürderer, Jannik Seiler

Projektmitglieder

Hendrik Schutter,

Lukas Fürderer,

Robin Willmann,

Jannik Seiler

Inhaltsverzeichnis

Inhaltsverzeichnis

1 Einleitung3

1.1 Musskriterien3

1.2 Wunschkriterien5

1.3 Abgrenzungskriterien5

2 Produktumgebung6

2.1 Architektur6

2.2 Server6

2.3 Client6

3 Technologien6

3.1 Server6

3.2 Client7

4 Gegenmaßnahmen für Risiken8

4.1 Gegenmaßnahmen für Produktrisiken8

4.2 Gegenmaßnahmen für Produktrisiken8

5 Mockups9

5.1 Erster Start9

5.2 Hauptfenster10

5.3 Dialog11

5.4 Textur importieren12

6 Changelog13

Einleitung

TextureSync ist eine Client-Server Applikation zur Verwaltung und Verteilung von 3D-Texturen in einem Unternehmensnetzwerk.

Ein 3D-Designer soll hierbei so wenig Aufwand wie möglich mit der Organisation und Verteilung seiner Texturen haben. TextureSync übernimmt die zentrale Speicherung und macht erstellte Werke allen teilnehmenden Mitarbeitern des Unternehmens zugänglich.

Musskriterien
MK#1 Texturensammlung

Der Server kann mindestens 1000 Texturen (Grafikdateien) speichern. Jeder verbundene Client kann Grafiken hinzufügen und die Sammlung durchsuchen.

MK#2 Bildformate

TextureSync kann mindestens die Bildformate JPEG und PNG korrekt verwalten und darstellen.

MK#3 Metadaten

Beim Importieren von Texturen erfasst TextureSync automatsich die Auflösung der Textur und das aktuelle Datum als Einpflegedatum. Der Nutzer kann den Texturen bei Bedarf Tags hinzufügen und den eindeutigen Namen editieren. Wenn der Name nicht den geforderten Vorgaben entspricht wird eine Fehlermeldung mit den geforderten Vorgaben ausgegeben.

MK#4 Tags

Tags sind Zeichenketten, mit denen Texturen in bestimmte Gruppen eingeteilt werden können.

Als Tags sind maximal 32 Zeichen und mindestens 1 Zeichen aus Buchstaben, Zahlen, Bindestrichen, Unterstrichen und Umlauten erlaubt. Die Groß- und Kleinschreibung (auch der Umlaute) wird nicht berücksichtigt.

Jeder Textur können beliebig viele Tags zugewiesen werden und umgekehrt kann ein Tag beliebig vielen Texturen zugewiesen werden.

Die Zuordnung der gesammelten Texturen zu ihren Tags lässt sich jederzeit von beliebigen Nutzern wieder ändern durch Hinzufügen und Löschen von Tags bei den betreffenden Texturen.

MK#5 Filter

Der Nutzer kann die am Client angezeigten Texturen nach verschiedenen Kriterien filtern. Mögliche Kriterien sind:

Das Vorhandensein von Tags

Das nicht-Vorhandensein von Tags

Mindestauflösung

Maximalauflösung

Stichworte, die im Namen der Textur vorhanden sind

Beliebige Kombinationen dieser Kriterien sind möglich, um nur die Texturen anzuzeigen, die alle eingestellten Kriterien erfüllen.

Als Auflösung wird die Breite bzw. Höhe der Textur in Pixeln gezählt. Sollte eine Textur nicht quadratisch sein, zählt das quadratische Mittel aus Breite und Höhe.

Alle gefundenen Ergebnisse werden jeweils mit einer 2D-Vorschau aufgelistet.

MK#6 Synchronisation

Hat ein Nutzer eine Textur erfolgreich zur Sammlung hinzugefügt oder Tags zu einer Textur hinzugefügt bzw. entfernt, ist diese geänderte Textur sowie deren Metadaten für alle anderen Nutzer sichtbar.

MK#7 Import

Jede gewünschte Textur lässt sich aus lokalen Dateisystem importieren und mit Metadaten der Sammlung hinzuzufügen.

MK#8 Export

Jede gewünschte Textur lässt sich aus der Sammlung exportieren und im lokalen Dateisystem des Clients an einem beliebigen Ort abspeichern.

MK#9 Atomarer Upload

Eine neue Textur wird erst dann in die Sammlung übernommen, wenn der Upload auf den Server vollständig und erfolgreich war. Sollte ein Upload durch einen Netzwerkausfall abbrechen, wird keine defekte Textur in die Sammlung aufgenommen.

MK#10 3D-Ansicht

Der Nutzer könnte bei Auswahl einer Textur eine 3D-Vorschau angezeigt bekommen um eine räumliche Vorstellung davon zu erhalten.

Wunschkriterien
WK#1 Einfache Installation

Wünschenswert wäre, sowohl Client als auch Server, jeweils über eine einzelnes Shell-Skript installieren zu können. Dieses würde auch die Inbetriebnahme des Server übernehmen. Alternativ könnte dies auch von einem debian Paket erledigt werden.

WK#2 Update durch die Paketverwaltung

TextureSync könnte als Paket in apt installiert werden, sodass es beim üblichen Systemupdate von Ubuntu ebenfalls aktualisiert wird.

WK#3 Backup

Von der Texturensammlung lässt sich im laufenden Betrieb ein konsistentes Backup erstellen, indem man ein bestimmtes, im Handbuch angegebenes Verzeichnis mit einem einfachen Kopierprogramm auf das Backuplaufwerk kopiert.

Zur Wiederherstellung des Backups reicht es aus, den Server zu stoppen, das Verzeichnis aus dem Backup zurück zu spielen und den Server erneut zu starten.

WK#4 Automatische Konfiguration des Clients

Der Client findet automatisch den Server innerhalb von 30 Sekunden, ohne dass eine IP-Adresse von Hand eingeben werden muss. Änderungen der Server IP-Adresse werden automatisch erkannt.

WK#5 W3D Ansicht als Standard Ansicht

Der Nutzer könnte ohne Auswahl einer Textur alle gefunden Texturen als 3D-Vorschau angezeigt bekommen um eine räumliche Vorstellung davon zu erhalten..

Abgrenzungskriterien
Texturen erstellen oder bearbeiten

TextureSync ist keine Bildbearbeitung. Um Texturen zu ändern, müssen diese exportiert, mit einem dafür vorgesehenen Programm bearbeitet und schließlich neu importiert werden.

Produktumgebung
Architektur

TextureSync ist eine Client-Server Applikation. Ein Client reicht zur Verwendung nicht aus.

Um TextureSync lokal zu verwenden, muss ein lokaler Server installiert werden, auf den der Client anschließend zugreifen kann.

Server

Der Server lässt sich auf einem Ubuntu Server 18.04 mit Internetzugang installieren, sofern ein root-Zugriff vorhanden ist.

Client

Der Client lässt sich auf einem Ubuntu 18.04 System mit Internetzugang und root-Zugriff installieren.

Technologien
Server

Die Server-Software wird in der Programmiersprache Rust entwickelt.

Rust wurde von Mozilla Research erschaffen, um gängige Fehler der Softwareentwicklung bereits vor der Ausführung zu erkennen und zu verhindern. Rust's Typsystem bietet hervorragende Unterstützung für sicherere und fehlerfreie Nebenläufigkeit, wie es beim Handhaben von mehreren gleichzeitigen Verbindungen notwendig sein wird. Auch die effiziente Abarbeitung und das Ökosystem, welches viele wichtige Bibliotheken für den Servereinsatz bietet, sprechen für Rust. Hinzu kommt noch die einfache Portierung auf andere Betriebssysteme und die Tatsache, dass Rust, als native Sprache, keine nennenswerten Laufzeit-Abhängigkeiten hat und somit die Installation der TextureSync-Servers-Software vereinfacht wird.

Um das Verarbeiten des Netzwerkprotokoll zu erleichtern wird serde_json (Version 1.0) für (De-)Serialisierung von JSON verwendet.

Für das serverseitige Erstellen von Preview-Bildern wird die Bibliothek image (Version 0.21) verwendet.

Client

Die Client-Software wird mit der Programmiersprache Kotlin entwickelt. Grund hierfür ist, dass diese für die Java-Virtual-Machine übersetzt werden kann und so auf mehreren Plattformen lauffähig ist. Als Framework für das User Interface wird TornadoFx verwendet. Hiermit lassen sich viele moderne UI-Elemente realisieren.

Gegenmaßnahmen für Risiken
Gegenmaßnahmen für Produktrisiken

PjR#1

Puffer einplanen, Worst-Case beachten.

PjR#2

Frühzeitig Prototyp bauen, testen. Anforderungen analysieren.

PjR#3

Puffer einplanen.

PjR#4

Frühzeitig Proof-of-Concept/Prototypen erstellen. Alternativen:

Server erstellt Preview

Wechsel des UI-Frameworks.

Nur 2D-Preview

PjR#5

Aktuelle Versionen verwenden, freie Frameworks und Tools

PjR#6

Tests bei Planung definieren, während Implementieren testen

Gegenmaßnahmen für Produktrisiken

PdR#1

Möglichkeiten zum Backup schaffen; Server-Dateistruktur einfach halten.

PdR#2

Server: Nach solchen Daten beim Start scannen.

Client: Cache leeren beim Start oder beim Beenden.

PdR#3

Edge-Cases testen. Server sendet Nachricht, um zu zeigen, dass die Transaktion erfolgreich war.

PdR#4

Schon ausgewählte Texturen könnten lokal gecached werden.

PdR#5

Auflösung verringern, Animationen deaktivieren, nur 2D Previews

PdR#6

Bestätigung für löschen erforderlich.

Backup kann wieder eingespielt werden

PdR#7

Atomarer Upload, Möglichkeit Metadaten zu ändern.

PdR#8

Bestätigungs-Nachricht nach Upload an Client, nach Erfolg. User Interface informiert Nutzer über den Erfolg.

Mockups
Erster Start

iVBORw0KGgoAAAANSUhEUgAAAvAAAAGQCAYAAADIulS9AAAgAElEQVR4nOzdd3gVddrG8ScF [encoded data, 25440 characters] Das Startfenster besteht aus einem Spinner, der während des Verbindens aktiv ist und einer Textbox, in welche sich manuell die Server-IP eingeben lässt.

Hauptfenster

iVBORw0KGgoAAAANSUhEUgAABIUAAAKbCAYAAABrQDp8AAAgAElEQVR4nOydeVgV973/xy3u [encoded data, 105600 characters] QmCC Das Hauptfenster besteht aus einer Pane für die Anzeige der Texturen und einer Detailansicht. Die Detailansicht beinhaltet eine 3D-Preview, eine ChipView zur Darstellung der Tags, sowie die zur Textur gehörenden Metadaten. Über die ChipView lassen sich Tags bearbeiten und hinzufügen. Der Button rechts unten öffnet das Textur importieren Fenster.

Dialog

iVBORw0KGgoAAAANSUhEUgAABIUAAAKbCAYAAABrQDp8AAAgAElEQVR4nOzde5hbVb3w8bQF [encoded data, 84160 characters] TkSuQmCC Texturen lassen sich über einen Button löschen wenn diese ausgewählte ist. Über eine Doppelbestätigung wird verhindert das eine Textur versehentlich gelöscht wird.

Textur importieren

iVBORw0KGgoAAAANSUhEUgAAAvAAAAGQCAYAAADIulS9AAAgAElEQVR4nOzdeVhV1eI+8MWM [encoded data, 36400 characters] SUVORK5CYII= Texturen lassen sich über eine eigenes Fenster hinzufügen. Diese besteht aus einer Textbox für den Pfad, welcher sich auch durch einen Filechooser festlegen lässt, einer Textbox für die Eingabe des Namens sowie einer ChipView für die Eingabe von Tags.

Changelog

Version

Änderung

1.0.1

Typo

1.1.0

Nummerierung der Kriterien; MK#9 von Wunsch- nach Musskriterium

1.1.1

Import als Kriterium hinzuzufügen; Beschreibung Delete-View