bj304315_Seminararbeit_Script 1

Werbung
Seminararbeit
vorgelegt von:
Barbara Jochims
Matrikel Nr.: 841723
Thema:
Erstellung eines Anwendermoduls zum
Projekt CW-Plot-Service
Fachhochschule Aachen
Fachbereich 9 – Medizintechnik und Technomathematik
Studiengang: Scientific Programming
Betreuer:
Prof. Dr.-Ing. Jörg Höttges
Günter Ermer
Aachen, 08. November 2012
Einleitung
Barbara Jochims
Inhaltsverzeichnis
1
2
Einleitung ......................................................................................................................................... 4
1.1
Motivation ............................................................................................................................... 4
1.2
Ziel ........................................................................................................................................... 4
1.3
Aufbau und Inhalt der Arbeit .................................................................................................. 4
Grundlagen ...................................................................................................................................... 6
2.1
2.1.1
Anwendermodul / Eingabemodul ................................................................................... 6
2.1.2
Tiff-Engine / pdf2tiff ........................................................................................................ 6
2.1.3
Datenübertragungsmodul / send2plotter ....................................................................... 6
2.2
Programmiersprachen ............................................................................................................. 7
2.2.1
Python ............................................................................................................................. 7
2.2.2
JavaScript ......................................................................................................................... 7
2.3
Auszeichnungssprache und Gestaltungsvorlage .................................................................... 8
2.3.1
HTML ............................................................................................................................... 8
2.3.2
CSS ................................................................................................................................... 9
2.4
Bibliotheken............................................................................................................................. 9
2.4.1
Web.py ............................................................................................................................ 9
2.4.2
PsycoPG ......................................................................................................................... 10
2.5
Datenbanken ......................................................................................................................... 10
2.5.1
Allgemeines ................................................................................................................... 10
2.5.2
Relationale Algebra ....................................................................................................... 11
2.5.3
SQL ................................................................................................................................. 11
2.5.4
PostgreSQL .................................................................................................................... 12
2.6
3
Projekt CW-Plot-Service .......................................................................................................... 6
Entwurfsmuster – Model-View-Controller ............................................................................ 12
2.6.1
Model ............................................................................................................................ 13
2.6.2
View ............................................................................................................................... 13
2.6.3
Controller....................................................................................................................... 13
Datenbankkonzeption ................................................................................................................... 14
2
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Einleitung
4
Barbara Jochims
Anwenderoberfläche für den Benutzer......................................................................................... 17
4.1
Allgemeiner Aufbau ............................................................................................................... 17
4.2
Model .................................................................................................................................... 17
4.2.1
4.3
DBHandler ..................................................................................................................... 17
Views ..................................................................................................................................... 18
4.3.1
Upload-View .................................................................................................................. 18
4.3.2
Status-View.................................................................................................................... 19
4.4
Controller............................................................................................................................... 21
4.4.1
Login-Controller ............................................................................................................. 21
4.4.2
Upload-Controller .......................................................................................................... 21
4.4.3
Status-Controller ........................................................................................................... 24
5
Anwenderoberfläche für den Administrator................................................................................. 25
6
Fazit und Ausblick .......................................................................................................................... 26
7
Anhang........................................................................................................................................... 28
8
7.1
Literaturverzeichnis ............................................................................................................... 28
7.2
Abbildungsverzeichnis ........................................................................................................... 29
7.3
Tabellenverzeichnis ............................................................................................................... 29
Eidesstattliche Erklärung ............................................................................................................... 30
3
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Einleitung
Barbara Jochims
1 Einleitung
1.1 Motivation
In den Fachbereichen Architektur und Bauingenieurwesen der Fachhochschule Aachen werden
täglich große Mengen an Plot-Aufträgen angenommen. Dies ist eine starke Belastung des IT-Services
und auch für die Studierenden.
Für das Personal des IT-Services heißt das: hoher Zeitaufwand für die Prüfung der Plotdateien auf
richtige Größe, auf Namenskonvention und letztendlich das Abschicken der Dateien an den Plotter,
was momentan über den sogenannten „Plot-Client“ abläuft. Dieser regelt die Übertragung der
Dateien zum Plotter. Dazu kommen die Wartungsarbeiten, wie zum Beispiel Austausch der
verschiedenen Papierrollen und Farbpatronen. Auch die Studierenden müssen Ihre Arbeit an den ITService anpassen, da nur festgelegte Plot-Zeiten - viermal am Tag - zur Verfügung stehen. Dies trifft
bei den Studierenden auf wenig Verständnis, insbesondere, wenn sie unter Zeitdruck wegen einer
baldigen Abgabe stehen. Hinzu kommt, dass der Plotter bei großen PDF- oder PLT-Dateien eine
Bearbeitungszeit von bis zu 15 Minuten benötigt. Diese Bearbeitungszeit kommt zustande, da der
Plotter die Dateien intern auf rastert und die Dateien papiersparend ausrichtet.
1.2 Ziel
Ziel dieses Projektes ist es, den Studierenden einen Service anzubieten, der den Weg vom Zeitpunkt
der erstellten Plotdatei bis hin zur Ausgabe der Plotdateien am Plotter automatisiert. Wichtig ist,
dass es sowohl für den Studierenden, als auch für den IT-Service eine Entlastung bedeutet. Zudem
soll den Studierenden mehr Flexibilität gegeben werden, in dem es ihnen ermöglicht wird, zu jeder
Zeit Plotdateien abzugeben. Die Anwendung soll stabil laufen, sodass der IT-Service nur noch in
Ausnahmefällen eingreifen muss. Der langen Rechenzeit für die Bearbeitung der Dateien im Plotter
soll vorgebeugt werden, indem die angenommenen Dateien zu einer Tiff-Datei konvertiert werden,
bevor sie zum Plotter geschickt werden, da Tiff-Dateien ohne wesentliche Rechenverzögerung
geplottet werden.
Zur Realisierung ist eine Webapplikation mit Upload-Möglichkeit und Statusüberprüfung der Dateien
beabsichtigt. Eine automatische Konvertierung der Dateien sowie eine automatisch hergestellte
Verbindung zum Plotter über FTP sind vorgesehen. Der bisher benutzte Plot-Client soll auf lange Sicht
abgeschaltet werden.
1.3 Aufbau und Inhalt der Arbeit
In der nachfolgenden Arbeit werde ich zunächst den gesamten Aufbau des Projekts „CW-PlotService“ näher erläutern und anschließend die von mir eingesetzten Technologien und Werkzeuge
erklären und ihren Einsatz in meiner Arbeit verdeutlichen.
4
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Einleitung
Barbara Jochims
Darauf folgen eine Erklärung zum verwendeten Datenbankkonzept, sowie eine ausführliche
Darstellung der Anwenderoberfläche. Zuletzt werde ich ein Fazit ziehen und eine Idee für
Weiterentwicklungsmöglichkeiten geben.
5
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
Barbara Jochims
2 Grundlagen
2.1 Projekt CW-Plot-Service
Das Projekt „CW-Plot-Service“ ist in drei Module aufgeteilt, dem Anwendermodul, dem TiffUmwandlungsmodul und dem Datenübertragungsmodul. Diese werden in den Folgekapiteln näher
erläutert. Hauptaugenmerk wird im weiteren Verlauf der Seminararbeit auf dem Anwendermodul
liegen. Das Projekt wurde in drei unabhängigen Modulen implementiert, damit es möglich ist eine
Änderung vorzunehmen, ohne alles zu beeinflussen. Wird zum Beispiel das Projekt erweitert, können
einfach neue Module hinzugefügt werden, ohne die Bestehenden zu ändern. Als Schnittstelle haben
die einzelnen Module eine Datenbank. Somit sind die Module voneinander unabhängig und könnten
auch ausgetauscht werden.
2.1.1
Anwendermodul / Eingabemodul
Das Anwendermodul besteht aus einer Webapplikation, die dem Studierenden zur Verfügung steht,
um PDF1-Dateien zum Plotten hochzuladen. Außerdem können sie den Status ihrer Dateien einsehen
und auftretende Fehler sehen. Auch bekommen sie eine Zeitangabe, wann ihre Datei an den Plotter
geschickt wurde. Dieses Webinterface ist von allen Studierenden und Mitarbeitern der Fachbereiche
1 und 2 nutzbar.
2.1.2
Tiff-Engine / pdf2tiff
Zunächst überprüft dieses Modul die Eigenschaften der hochgeladenen Datei:
•
•
•
•
Lässt die Datei sich öffnen?
Handelt es sich um eine gültige PDF-Datei?
Welche Größe hat die Zeichnung?
Entspricht die Größe den zulässigen DIN-Formaten?
Anschließend werden die Dateien zu einer Tiff2-Datei konvertiert. Der Plotter kann auch PDF-Dateien
entgegen nehmen, jedoch ist es an dieser Stelle möglich den Plotter zeitlich zu entlasten. Des
Weiteren bietet das Drehen der Dateien - passend zur Rollenbreite - eine Zeitersparnis, da auch dies
ansonsten intern im Plotter vorgenommen werden muss. Die Konvertierung der PDF-Datei zu einer
Tiff-Datei findet auf einer Ghostscript-Engine statt. Eine Engine ist ein eigenständiger Teil eines
Computerprogramms, welches für komplexe Berechnung zuständig ist.3
2.1.3
Datenübertragungsmodul / send2plotter
Ist die Umwandlung in eine Tiff-Datei erfolgreich abgeschlossen, wird die Datei über eine FTP4Verbindung an den Plotter gesendet. Zunächst muss allerdings sichergestellt sein, dass der Plotter
erreichbar ist.
1
Portable Document Format
Tagged Image File Format – Dateiformat zur Speicherung von Bilddaten
3
http://de.wikipedia.org/wiki/Engine
4
File Transfer Protocol – Netzwerkprotokoll zur Übertragung von Dateien
2
6
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
Barbara Jochims
In diesem Modul wird außerdem ein Algorithmus angewandt, um eine Warteschlange richtig
abzuarbeiten. Dem Studierenden soll gewährleistet werden, dass zum Beispiel drei direkt
nacheinander hochgeladene Dateien auch hintereinander am Plotter ausgegeben werden, ohne Plots
anderer Studierenden dazwischen zu haben, falls diese gleichzeitig Dateien hochgeladen haben.
2.2 Programmiersprachen
2.2.1
Python
Die objektorientierte Programmiersprache Python wurde Anfang der 1990er Jahre am Centrum voor
Wiskunde en Informatica (CWI) in Amsterdam von Guido van Rossum entwickelt.5 Python war
„ursprünglich für das verteilte Betriebssystem Amoeba gedacht“5. Die aktuellste Version ist Python
3.3.0. Sie ist am 29. September 2012 erschienen. Der Vorgänger Python 2.7 erschien im Jahr 2010.6
Mit Python ist es sowohl möglich, objektorientiert zu arbeiten, als auch funktional. Aufgrund der
Eigenschaften, objektorientiert und dynamisch, wird Python oft zu den Skriptsprachen gezählt.
Jedoch ist Python eine interpretierte Programmiersprache. Python verfügt „ähnlich wie Java oder C#
über einen Compiler“5. Plattformunabhängigkeit ist ein weiterer Vorteil den Python bietet. Ähnlich
wie bei Java werden auch von Python alle häufigen Betriebssysteme von Windows, Linux und Mac OS
X unterstützt.5
Das Ziel von Python ist es, eine übersichtliche und einfach strukturierte Syntax zu bieten. Hier zeigt
sich auch deutlich ein Unterschied zu anderen höheren Programmiersprachen. Python verwendet
keine Klammern und Sonderzeichen zur Abgrenzung von Blöcken, sondern Einrückungen und
Umbrüche. Dadurch wird der Code klar, übersichtlich und somit einfach lesbar. Wie bei
Skriptsprachen üblich werden dynamische Datentypen verwendet. Datentypen sind „an das Objekt
(den Wert) gebunden und nicht an eine Variable“6.
2.2.2
JavaScript
JavaScript ist eine clientseitige Skriptsprache, die von Brendach Eich entwickelt und am 18.
September 1995 von Netscape veröffentlicht wurde. Bis zum 4. Dezember 1995 hieß JavaScript
LiveScript. Erst zu diesem Zeitpunkt wurde sie nach Weiterentwicklungen in Kooperation mit Sun
Microsystems umbenannt in JavaScript.7
Clientseitig bedeutet, dass diese Anwendung nicht auf einem Server läuft, sondern vom Browser des
Users durchgeführt wird. Jedoch taucht eine Clientanwendung hauptsächlich in Kombination mit
einer Serveranwendung auf. Eine Clientanwendung ist somit meistens in eine Client/Serverkommunikation eingebunden. 8
Skriptsprachen sind kleine, überschaubare Programme, die eine automatische Speicherverwaltung
und dynamische Typisierung als Eigenschaften vorweisen.
5
http://openbook.galileocomputing.de/python/
http://de.wikipedia.org/wiki/Python_(Programmiersprache)
7
http://de.wikipedia.org/wiki/JavaScript
8
http://de.wikipedia.org/wiki/Client
6
7
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
Barbara Jochims
JavaScript wird eingesetzt, um Inhalte von Webseiten dynamisch zu erstellen. Die Darstellung der
Daten wird geändert jedoch nicht der Inhalt dieser Daten. JavaScript bietet den Vorteil, dass einzelne
Seiten der Webseite nachgeladen werden können, ohne sie komplett neu zu laden. 9
Wie sich aus dem Namen ‚JavaScript‘ schon erkennen lässt, gibt es eine Verbindung zur
objektorientierten Programmiersprache Java. Auch JavaScript ist eine objektorientierte
Programmiersprache jedoch ist sie klassenlos. Die Syntax ist aber ähnlich mit der von Java und auch
mit der von C. JavaScript wird von mehreren Programmiersprachen beeinflusst. Dazu zählen im
wesentlichen Self, C, Scheme, Perl, Python und Java.10
Um mehr Sicherheit bieten zu können, wird JavaScript „im Browser in einer sogenannten Sandbox
ausgeführt“11. Es ist gewährleistet, dass ein Zugriff auf das Dateisystem des Rechners unmöglich ist.
Nur die Objekte des Browsers sind für den Zugriff freigegeben.11
Die eigentliche Aufgabe von JavaScript besteht darin HTML-Dokumente zu ergänzen und zu
verbessern. Dies gelingt über die dynamische Manipulation der DOM12-Hierarchie. JavaScript bietet
die Möglichkeit, „Elemente auszulesen, zu verändern oder sogar neu anzulegen“13. Farbige Effekte
oder Feature, wie zum Beispiel das Umsortieren einer Tabelle, sind durch das Zusammenspiel von
HTML und JavaScript möglich ohne die Seite neu zu laden. JavaScript bietet eine Möglichkeit
Webseiten benutzerfreundlicher und dynamischer zu gestalten. Zudem werden viele zusätzliche
Bibliotheken angeboten, die ein effektiveres und einfacheres Arbeiten mit JavaScript ermöglichen.
2.3 Auszeichnungssprache und Gestaltungsvorlage
2.3.1
HTML
HTML ist die Abkürzung für Hypertext Markup Language. Mit Hilfe von HTML können Dokumente,
Bilder und Hyperlinks strukturiert werden. HTML ist keine Programmiersprache, sondern eine
Hypertext- Beschreibungs-/Auszeichnungssprache. HTML zählt als Grundlage des World Wide Web.
Die Seiten des World Wide Web werden über HTML dargestellt. Farbe, Größe, Schriftart,
Überschriften, Tabellen – alles kann über HTML angepasst und strukturiert werden.14
Das Definieren von Hyperlinks (Verweisen) ist eine der wichtigsten Eigenschaft von HTML. Dadurch
ist eine Kommunikation zwischen räumlich getrennten Rechner möglich, da diese über das World
Wide Web per Hyperlink erreichbar sind. 15
HTML existiert in verschiedenen Versionen, die mit fortlaufender Nummer gekennzeichnet sind. Die
aktuellste Version ist HTML5.
Ein HTML-Dokument setzt sich aus drei Bereichen zusammen:
9
http://www.rz.rwth-aachen.de/aw/cms/rz/Zielgruppen/rz_auszubildende/veranstaltungen/informatik/
Wahlpflichtkurse/~qwj/skriptprogrammierung_php_mysql_/?lang=de, Art. Wintersemester 2011/12
10
http://de.wikipedia.org/wiki/JavaScript
11
http://www.scriptnews.de/js-sicherheit-das-sandbox-prinzip.htm
12
Document Object Model
13
http://www.strassenprogrammierer.de/dom-volle-kontrolle-mit-javascript_tipp_393.html
14
http://de.wikipedia.org/wiki/Hypertext_Markup_Language
15
http://de.selfhtml.org/intro/technologien/html.htm
8
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
•
•
•
Barbara Jochims
Dokumententypdeklaration: „gibt die verwendete Dokumenttypdefinition an“16
HTML-Kopf (HEAD): „technische und dokumentarische Informationen“16
HTML-Körper (BODY): „Informationen, die im Anzeigebereich des Browsers zu sehen sind“16
Abbildung 1: Grundstruktur einer Webseite
2.3.2
16
CSS
Die Cascading Style Sheets sind eine Gestaltungsvorlage. Sie ermöglichen das Gestalten
verschiedener Teile einer HTML-Datei, aufgrund ihres Elementnamens. Mit CSS können Stylesheets
(Stilvorlagen) erstellt werden, die einen bestimmten Teil einer HTML-Datei oder die gesamte Datei
beeinflussen. So ist es zum Beispiel möglich, Positionen von Bildern über Stylesheets zu regeln.
Seit 1993 gibt es Stylesheets für das Web. Die erste funktionsfähige CSS-Version (CSS 1.0) wurde im
Jahr 1996 veröffentlicht.17 CSS wird immer weiterentwickelt, aktuell ist Version CSS 3.0.
17
Abbildung 2: Der Aufbau von CSS-Regeln
2.4 Bibliotheken
2.4.1
Web.py
Web.py ist ein speziell für Python entwickeltes Webframework, um die Arbeit mit Webinterfaces
einfacher zu handhaben. Entwickelt wurde es von Aaron
Swartz. 18
Mit Hilfe von Web.py kann eine URL-Struktur aufgebaut
werden. Diese kann wie folgt aussehen: Es ist ein regulärer
Ausdruck gegeben, dem die URL entsprechen muss, und ein
Klassenname, an welche die Anfrage geschickt wird. In
diesem Beispiel wird also die URL ‚/login‘ mit der Klasse
Abbildung 3: URL-Struktur
16
http://de.wikipedia.org/wiki/Hypertext_Markup_Language#HTML-Struktur
http://de.wikipedia.org/wiki/Cascading_Style_Sheets
18
http://webpy.org/
17
9
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
Barbara Jochims
‚login‘ bearbeitet.
Die Klassen können zwei Funktionen besitzen. Zum einen eine Funktion ‚GET‘, die aufgerufen wird,
wenn Werte vom Client zum Server über die URL übermittelt werden, oder eine Funktion ‚POST‘, die
benötigt wird, wenn zum Beispiel Daten aus einem Formular über POST zum Server übertragen
wurden.
Web.py bietet eine Möglichkeit innerhalb von HTML-Dokumenten (in web.py Templates genannt)
Python-Code zu schreiben. Die von web.py angebotene ‚templating-Sprache‘ ist einfach umzusetzen,
indem vor jeder Zeile des Python-Code ‚$‘ steht. 19
2.4.2
PsycoPG
Die Python-Bibliothek PsycoPG bietet eine Schnittstelle zwischen SQL-Anfragen und der PostgreSQLDatenbank. PsycoPG beinhaltet alle wichtigen Features von ‚Python Database API‘, wie zum Beipsiel
Connection Objekte und Cursor Objekte. Ihren Einsatz werde ich im weiteren Verlauf näher
erläutern. Psycopg2 ist die aktuellste und hier verwendete Version.20
2.5 Datenbanken
2.5.1
Allgemeines
Ohne ein Datenbanksystem auszukommen, ist heutzutage fast undenkbar. Datenbanken bieten den
Vorteil, Daten effizient, sicher und dauerhaft zu speichern.
Ein Datenbanksystem besteht aus der eigentlichen Datenbank, in der Informationen gespeichert sind
und
verwaltet
werden
können,
und
einem
Datenbankmanagementsystem.
Ein
Datenbankmanagementsystem bietet die Möglichkeit, Daten zu manipulieren, abzufragen und zu
verwalten. 21
21
Abbildung 4: Aufbau eines Datenbanksystems
Ein Datenbankmanagementsystem kann das Auftreten von folgenden schweren Problemen
verhindern:
19
http://webpy.org/
http://www.initd.org/psycopg/
21
http://de.wikipedia.org/wiki/Datenbank
20
10
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
•
•
•
•
•
•
2.5.2
Barbara Jochims
Redundanz und Inkonsistenz
Beschränkte Zugriffsmöglichkeiten
Probleme des Mehrnutzerbetriebs
Verlust von Daten
Integritätsverletzung
Sicherheitsprobleme22
Relationale Algebra
Die Daten aus einer Datenbank werden meist „mengenorientiert“23 verarbeitet. Das heißt, die Daten,
die je nachdem auch aus unterschiedlichen Relationen24 stammen, werden verknüpft und
verarbeitet. Um diese Informationen aus der Datenbank herauszufiltern, stehen mathematische
Funktionen zur Verfügung, von denen ich im Folgenden kurz die fünf wichtigsten Grundfunktionen
vorstellen werde.
•
•
•
•
•
2.5.3
Selektion: Es werden die Tupel25 ausgegeben, die eine bestimmte Bedingung erfüllen.
Projektion: Es wird die Auswahl an Spalten einer Tabelle ausgegeben.
Vereinigung: Zwei Relationen mit gleichen Attributnamen werden ausgegeben.
Mengendifferenz: Die Menge der Tupel, die nur in einer der beiden Relationen vorkommt.
Kartesisches Produkt: Alle möglichen Paare von Tupeln beider Relationen.26
SQL
SQL ist die Abkürzung für ‚Structured Query Language’ und ist eine Datenbanksprache, die in den
1970er Jahren entwickelt wurde. Eine Datenbanksprache dient zur Kommunikation zwischen dem
Nutzer und dem verwendeten Datenbankmanagementsystem. SQL wird von fast allen bekannten
Datenbankmanagementsystemen voll unterstützt.
Die im vorherigen Kapitel erläuterten Grundfunktionen lassen sich in die Datenbanksprache SQL
übersetzen. So ist es möglich, die gewünschten Daten aus der Datenbank über das
Datenbankmanagementsystem mit Hilfe einer SQL-Abfrage auszulesen.
Eine einfache SQL-Abfrage kann wie folgt aussehen:
SELECT * FROM [Tabellenname]
WHERE [Bedingung, die erfüllt werden soll];
SQL ermöglicht jedoch nicht nur die Ausgabe von geforderten Daten, sondern auch das Aktualisieren
oder das Hinzufügen von neuen Datensätzen.
22
„Datenbanksysteme“ von A.Kemper/A.Eikler, 6. Auflage, Oldenbourg Verlag München Wien, 2006, S.17 ff
„Datenbanksysteme“ von A.Kemper/A.Eikler, 6. Auflage, Oldenbourg Verlag München Wien, 2006, S.69
24
Relationen werden die Tabellen in einer Datenbank genannt
25
Tupel werden die Zeilen einer Tabelle in einer Datenbank genannt
26
„Datenbanksysteme“ von A.Kemper/A.Eikler, 6. Auflage, Oldenbourg Verlag München Wien, 2006, S. 84 ff
23
11
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
2.5.4
Barbara Jochims
PostgreSQL
PostgreSQL ist ein objektrelationales Datenbankmanagementsystem, welches als Open-Source
verwendbar ist. Es wurde 1996 nach vielen Weiterentwicklungen unter dem Namen ‚PostgreSQL‘
veröffentlicht. Die SQL92 und SQL99 Standards werden von PostgreSQL akzeptiert.
Die Inhalte einer Datenbank und die Verbindungen zur Datenbank, aufgebaut vom Client, werden
von einem Serverprozess verwaltet. Ein Client kann, wie schon gesagt, Verbindungen zur Datenbank
herstellen, aber auch Datenbankabfragen erstellen, die vom Serverprozess bearbeitet werden. Man
kann also von einer Client-Server-Struktur sprechen. 27
PostgreSQL ist plattformunabhängig. Es wird auf fast allen Linux- und Unix-Varianten unterstützt und
auch ein Microsoft Windows Installer wird seit Version 8 angeboten. Ein Programm für eine grafische
Oberfläche muss zusätzlich installiert werden, ist aber auch wie zum Beispiel ‚PgAdmin‘ oder
‚phpPgAdmin‘ kostenlos erhältlich. 28
2.6 Entwurfsmuster – Model-View-Controller
Das von mir verwendete Model-View-Controller-Muster ist ein Design-Pattern, was insbesondere bei
Applikationen mit Benutzeroberfläche verwendet wird. In der Programmiersprache Smalltalk wird
das Design-Pattern schon „seit Ende der 1980er Jahre eingesetzt“29. Ziel dieses Design-Patterns ist es,
die Präsentation von Daten und Logik zu trennen.30
Das Konzept gestaltet sich aus drei zentralen Elementen, dem Model, dem View und dem Controller.
Ihre Aufgaben werden in den folgenden Unterkapiteln genauer erläutert. Vorab ist zu sagen, dass die
Informationen verwaltet und verändert werden und der Inhalt dieser Informationen dargestellt wird.
Die Idee des Model-View-Controller-Pattern kann man kurz und knapp folgendermaßen
zusammenfassen: Der Controller steuert Änderungen des Models, das Model teilt allen Views mit,
dass eine Änderung aufgetreten ist.
27
http://www.postgresql.de/
http://de.wikipedia.org/wiki/PostgreSQL
29
„Grundkurs Software-Engineering mit UML“ von Stephan Kleuker, 2. Auflage, Vieweg+Teubner, 2011, S.174
30
http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf
28
12
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Grundlagen
Barbara Jochims
31
Abbildung 5: Nutzung des Model-View-Controller-Pattern
2.6.1
Model
Im Model sind die „eigentlichen Informationen gespeichert“32. Hier befinden sich die Programmlogik
und die Daten. Über das Model werden die Views über Änderungen der Zustandsinformationen
informiert. Berechnungen, die unabhängig von der Anwenderoberfläche sind, werden in dieser
Komponente bearbeitet.33 Ein Model „muss einen Zustand verwalten können[,] darstellbar sein [und]
auf Aufforderungen zu Änderungen reagieren können“34.
2.6.2
View
Die Darstellung des Models wird über die Komponente View realisiert. Views enthalten keine
Programmlogik oder Daten, sie sind ausschließlich für die Darstellung der vom Model bereit
gestellten Daten verantwortlich.34 Der View ist sozusagen der Beobachter des Zustandes, um diesen
bei einer Änderung darzustellen. Es kann mehrere Views geben.
2.6.3
Controller
Der Controller legt das Verhalten der Komponente auf Benutzereingaben fest. Die Werte des Models
können über den Controller geändert werden. Auch hier ist es möglich mehrere Controller zu
haben.32 Der Controller interpretiert die Änderungen im View und gibt diese an das Model weiter. Er
dient sozusagen als Schnitt- und Kommunikationsstelle zwischen View und Model.33
31
http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf
„Grundkurs Software-Engineering mit UML“ von Stephan Kleuker, 2. Auflage, Vieweg+Teubner, 2011, S.174
33
http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf
34
http://openbook.galileocomputing.de/oo/oo_06_moduleundarchitektur_001.htm
32
13
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Datenbankkonzeption
Barbara Jochims
3 Datenbankkonzeption
Mit Hilfe von PostgreSQL wurde eine Datenbank erstellt. In dieser Datenbank wurde ein User
‚plot_admin‘ angelegt, dem das Recht die Datenbank zu löschen entzogen wurde. Dies wurde aus
Sicherheitsgründen gemacht, damit es beim alltäglichen Arbeiten an der Datenbank nicht aus
Versehen passiert, dass zum Beispiel anstelle eines Eintrags oder einer Tabelle in der Datenbank die
gesamte Datenbank gelöscht wird. Sollte jedoch irgendwann der Fall auftreten, dass die gesamte
Datenbank gelöscht werden soll, ist dies natürlich ohne weiteres als Administrator möglich. Als
grafische Oberfläche wird PGAdmin benutzt. Folgendes Datenbankschema mit drei Tabellen wurde
implementiert:
Die Tabelle ‚Config‘ enthält Konfigurationseinträge, die insbesondere für die spätere geplante
Administrationsoberfläche wichtig sind. In dieser Tabelle sind Einträge gespeichert, die zum Beispiel
als Prüfvariable im Vergleich mit anderen Werten genutzt werden oder auch Variablen, die den
Zustand des Plotters beschreiben. Wichtig wird die Konfigurationstabelle, wenn Werte geändert
werden sollen. Soll zum Beispiel nur noch eine mechanische Dateigröße von 500 MB statt 1 GB
erlaubt sein, muss dies nicht im gesamten Code geändert werden, sondern nur einmalig in der
Datenbank. Im Code werden diese Prüfwerte an den entsprechenden Stellen aus der Datenbank
mittels einer einfachen SQL-Abfrage ermittelt. Somit ist es mit Hilfe der Konfigurationstabelle
möglich zu jeder Zeit Werte zu ändern, ohne den Code anpassen zu müssen. Tritt ein technisches
Problem beim Plotter auf, kann der Wert ‚plotqueuestopped‘ in der Datenbank geändert bzw. das
Problem behoben werden und der Plotter kann wieder starten.
Tabelle 1: 'Config'
SPALTENAME
DATENTYP
KOMMENTAR
maxsize
numeric
Prüfwert für die maximale mechanische Größe in Bytes
tolerancesize
integer
Toleranz für die DIN-Größen des PDFs in mm
maxemptyspace
integer
maximale Leerfläche, die ein PDF haben darf
currentjobid
integer
fortlaufende Jobid
plotqueuestopped
boolean
False=Plotter nimmt Aufträge an, True=Plotter nimmt keine
Aufträge an
plotteravailable
boolean
False=Plotter nicht erreichbar, True=Plotter erreichbar
maxplotsinqueue
integer
maximale Anzahl an Plots, die sich in der Warteschlange befinden
dürfen
timeout
integer
Zeit in Sekunden, die ab jedem Upload läuft bis zum Absenden
der Datei an den Plotter
maxplottries
integer
maximale Anzahl an Versuchen, die ein Plot erfolglos versucht an
14
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Datenbankkonzeption
Barbara Jochims
den Plotter zu senden
totalplots
integer
Gesamtanzahl aller Plots
In der Tabelle ‚Users‘ sind alle wichtigen Angaben zum User gespeichert. Die eigentliche
Authentifizierung findet auf einem externen LDAP35-Server statt, auf dem zentral Daten aller
Mitarbeiter und Studierenden der Fachhochschule Aachen verwaltet werden. In der Tabelle ‚Users‘
werden nur für dieses Projekt wichtige Daten gespeichert. Zum einen bestehen diese Daten aus
Angaben zum User - welchem Fachbereich gehört dieser an, welche Matrikelnummer hat er (falls
Student), welchen Status hat er (Mitarbeiter oder Student) – zum anderen aus Informationen, die für
den reibungslosen Plot-Service wichtig sind. Letztere Angaben werde ich erläutern, wenn diese im
Upload-Algorithmus benötigt werden.
Tabelle 2: 'Users'
SPALTENAME
DATENTYP
KOMMENTAR
loginname
text (PRIMARY KEY)
Loginname des Users
countplots
Integer
zählt die Anzahl der Plots des Users
maxplots
double precision
Plotanzahl in A0-Einheiten, die dem User zur Verfügung
stehen
locked
Boolean
False=User ist gesperrt, True=User ist nicht gesperrt
faculty
Integer
Fachbereich des Users
status
Text
s=Student, e=employee (Mitarbeiter)
matrnr
Text
Matrikelnummer, falls der User ein Student ist
Die Tabelle ‚File‘ ist Hauptbestandteil der Datenbank. Hierbei handelt es sich um eine der wichtigsten
Tabellen, da sie alle Informationen rund um die Datei beinhaltet. Zudem sind hier auch Flags
gespeichert, die insbesondere für die Kommunikation zwischen dem pdf2tiff-Modul und dem
send2plotter-Modul wichtig sind.
Tabelle 3: 'File'
SPALTENAME
DATENTYP
KOMMENTAR
name
Text
Originalname der Datei
fileid
text (PRIMARY KEY)
geänderter Name der Datei
path
Text
Dateipfad
35
Lightweight Directory Access Protocol
15
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Datenbankkonzeption
Barbara Jochims
loginname
Text (FOREIGN KEY)
Loginname des Users
statusmessage
Text
Status der Datei
filelocktiff
Boolean
Dateisperre für die Tiffumwandlung
errorlocktiff
Boolean
False=kein Fehler bei der Tiffumwandlung, True=Fehler bei
der Tiffumwandlung
donetiff
Boolean
False=Umwandlung noch nicht fertig, True=Umwandlung
fertig
jobid
Integer
Kennzeichnung für Plots eines Users, die gleichzeitig an den
Plotter geschickt werden
upload
double precision
Zeitpunkt des Dateiuploads in Sekunden seit dem 1.1.1970
doneplotmodule double precision
Zeitangabe des Sendens an den Plotter in Sekunden seit dem
1.1.1970
errorplot
Datei konnte x-mal nicht gesendet werden
Integer
Den genaueren Einsatz der einzelnen Spalten werde ich im weiteren Verlauf meiner Arbeit näher
erläutern, falls diese in meinem Modul in Anspruch genommen werden.
Die zu plottende Datei hat in der Datenbank Einträge, die die Unabhängigkeit der Module
gewährleisten. Hat eine Datei das erste Modul erfolgreich abgeschlossen, sprich die Datei wurde
erfolgreich hochgeladen, wird in der Datenbank die Datei mit ihren zusätzlichen Informationen
(Uploadzeit, neuer Name, originaler Name, Loginname, Pfad) eingetragen. Anhand dieses neuen
Datenbankeintrags erkennt das pdf2tiff-Modul, dass eine weitere Datei zur Umwandlung bereit ist.
Das send2plotter-Modul überprüft nun in der Datenbank die Spalte ‚donetiff‘. Ist die Konvertierung
der Datei abgeschlossen (donetiff=true) werden vom send2plotter-Modul noch weitere Flags
überprüft, wie zum Beispiel, ob bei der Umwandlung ein Fehler aufgetreten ist oder ob noch mehr
Dateien zu diesem Job gehören. Hat auch das letzte Modul seine Arbeit vollendet, wird das in der
Datenbank markiert, damit das Anwendermodul eine Information an den Studierenden weiterleiten
kann.
An diesem kleinen Durchlauf des Projekt CW-Plot-Service erkennt man, dass die Datenbank der Drehund Angelpunkt des gesamten Konzepts darstellt.
Zusammenfassend kann man sagen, dass die Datenbank die einzige Kommunikationsschnittstelle
zwischen den einzelnen Modulen ist. Es wird auch hier deutlich, dass es möglich ist, einzelne Module
ohne Probleme auszutauschen. Die Datenbank bietet eine sichere und stabile Schnittstelle zwischen
den Modulen.
16
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
4 Anwenderoberfläche für den Benutzer
4.1 Allgemeiner Aufbau
Aufbauend auf das im Kapitel Grundlagen beschriebene Framework web.py wird in einer Hauptdatei
– ‚settings.py‘ – die URL-Struktur angelegt. Aus dieser Hauptdatei lassen sich alle weiteren Skripte
ausführen. Die zur URL-Struktur gehörenden Klassen bestehen aus einer GET- und einer POSTMethode, die ein Zusammenspiel zwischen Internetseite und Server realisieren. Wird vom Benutzer
eine URL aufgerufen, wird diese in der URL-Struktur gesucht und es wird auf die Klasse verwiesen.
Auch wird in ‚settings.py‘ mit Hilfe der „render-function“ angegeben, in welchem Verzeichnis web.py
nach meinen Templates suchen muss. Der „Renderer“ ist zudem für die Interpretation der Templates
zuständig. Templates sind HTML-Vorlagen, in denen Python-Code im Klartext geschrieben werden
kann.
Meine Verzeichnisstruktur basiert auf einem in den Grundlagen beschriebenen Model-ViewController-Modell. Im Controller befinden sich mehrere in Python geschriebene Controller, die für
unterschiedliche Teile der Oberfläche zuständig sind. Das Model enthält die Datenbankanbindung
mit den zugehörigen, notwendigen Datenbankabfragen und bietet somit eine Schnittstelle zwischen
View und Controller. View setzt sich aus unterschiedlichen Views zusammen, die auf den
Informationen aus der Datenbank beruhen.
Zusätzlich zum Model-View-Controller-Modell bietet meine Verzeichnisstruktur einen statischen Teil
‚static‘ in dem sich Fotos, CSS-Dateien und JavaScript-Dateien befinden, die von den
unterschiedlichen Views in Anspruch genommen werden.
Die Anwenderoberfläche bietet dem Studierenden drei mögliche Seiten. Zum einen die Seite
‚Upload‘, auf der es dem Studierenden möglich ist, seine zu plottende PDF-Datei hochzuladen. Die
von ihm hochgeladenen Dateien kann er auf der ‚Statusseite‘ einsehen. Hier sind auch die möglichen
auftretenden Fehler zu sehen. Das erfolgreiche Abschicken an den Plotter wird dem Studierenden
über diese Seite mitgeteilt. Hilfe bei der Benutzung des Plot-Services wird dem Studierenden
angeboten, wenn er die ‚Hilfeseite‘ aufruft. Diese ist sowohl vor dem Login zu erreichen, um
gegebenenfalls Hilfe zum Login zu erhalten, als auch, wenn der User bereits angemeldet ist, um
weitere auftauchende Fragen zu beantworten. Die gesamte Anwenderoberfläche ist in Englisch, da
die Fachhochschule Aachen nicht nur viele internationale Studierende hat, sondern in Zukunft ganze
englische Studiengänge anbieten wird. Die Seite soll für jedermann gut verständlich sein. Die
Hilfeseite, auf der sich ein PDF zum Öffnen und auch zum Speichern befindet, bietet dieses PDF
sowohl deutsch-, als auch englischsprachig an.
4.2 Model
4.2.1
DBHandler
Die Klasse DBHandler repräsentiert das Model5.. Über die Bibliothek PyscoPG ist es möglich, eine
Verbindung zur Datenbank herzustellen. Ein Connection Objekt wird erstellt, über das eine
Verbindung zum Datenbankserver mittels der Funktion psycopg2.connect(host, name, user,
17
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
password) hergestellt wird. Für das Handling der Datenbankabfragen ist der ‚cursor‘ zuständig. Dieser
wird beim Erzeugen einer Instanz der Klasse Connection von dieser erzeugt. Der Cursor bietet die
Funktion cursor.execute([SQL-STATEMENT]), über die mittels Python-Code eine Datenbankabfrage
an den Datenbankserver gestellt wird. Die Rückgabewerte werden über die Funktion cursor.fetchall()
als Liste zurückgegeben. Setzt der Rückgabewert sich aus Informationen von mehreren Spalten aus
der Datenbank zusammen, so werden diese durch eine von mir implementierte Methode als
Dictionary zurückgegeben. Das Dictionary hat dann folgende Form: [SPALTE1, SPALTE2, SPALTE3].
Der Vorteil einer Liste oder eines Dictionarys als Rückgabewert ist eine einfache Handhabung im
Controller zur Verarbeitung der Daten. Die Liste oder das Dictionary können mittels einer foreachSchleife durchlaufen werden.
Auch können neue Daten in die Datenbank eingespeist oder vorhandene Daten aktualisiert werden.
Hierfür sind die SQL-Statements INSERT und UPDATE zuständig.
Die Klasse DBHandler ist also die Kommunikationsschnittstelle zwischen Datenbank und PythonCode. Durch die Bibliothek PsycoPG wird eine einfache und komfortable Schnittstelle ermöglich.
4.3 Views
Die Weboberfläche hat zwei grundlegende Ansichten. Zum einen eine Ansicht, um Dateien
hochzuladen, und eine weitere, auf der die Studierenden den Status ihrer Dateien einsehen können.
In den folgenden Unterkapiteln werde ich diese beiden Ansichten erläutern.
4.3.1
Upload-View
Der Upload-View hat folgenden Aufbau:
Abbildung 6: Upload-View
Im Upload-View kann der Studierende sehen, wie viele A0-Einheiten ihm für dieses Semester noch
zur Verfügung stehen (siehe 2). Diese Anzeige verringert sich bei jeder neuen und erfolgreich
hochgeladenen Datei, um die jeweilige Anzahl von A0-Einheiten (A0=1; A1=0,5; A2=0,25; A3=0,125).
Die Mitarbeiter haben standardmäßig 999,0 A0-Einheiten frei. Bei ihnen ändert sich die Anzeige
nicht, da für sie keine Begrenzung festgelegt ist.
18
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
Nachdem eine Datei hochgeladen wurde, erscheint ein Timer (siehe 1), der von einer festgelegten
Minutenzahl herunterzählt. Alle Dateien, die in dieser Zeit hochgeladen werden, gehören zu einem
Job und werden erst dann bearbeitet, wenn der Timer abgelaufen ist. Währenddessen können
weitere Dateien hochgeladen werden und bei jedem neuen Upload beginnt der Timer erneut, ab der
festgelegt Minutenzahl herunterzuzählen. Die Funktion des Timers wurde in JavaScript
implementiert.
Über den Browse-Button (siehe 3) kann der User die Datei, die er hochladen will, von seinem PC
auswählen. Der Name der ausgewählten Datei wird unterhalb des Browse-Buttons angezeigt. Ist
noch keine Datei ausgewählt, so erschient ‚No file selected‘.
Das Betätigen des Upload-Button (siehe 4) beginnt den Upload der ausgewählten Datei. Nun werden
zahlreiche Überprüfungen im Upload-Controller vorgenommen, die ich später erläutern werde. Sollte
ein Fehler auftreten, wird dieser dem User mitgeteilt. Eine Fehlermitteilung sieht mit der
entsprechenden Fehlernachricht wie folgt aus:
Abbildung 7: mögliche Fehlermeldung
Hilfedokumente sind über den Link in der rechten oberen Ecke zu erreichen. Dort sind auch der
Wechsel zur Statusseite und ein Logout möglich (siehe 5). Alle hier aufgeführten Seiten sind mit
einem Verweis mittels HTML hinterlegt.
4.3.2
Status-View
Die Statusansicht bietet dem User eine Möglichkeit, alle von ihm hochgeladenen Dateien zu sehen.
Diese werden in einer Tabelle aufgelistet, die standardmäßig absteigend nach der Upload-Zeit
sortiert ist.
19
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
Abbildung 8: Status-View
Um die Tabelle nach Belieben zu sortieren kann man die Pfeile verwenden (siehe 1). Hierüber kann
bestimmt werden, ob die Tabelle nach dem Dateinamen, der Upload-Zeit, dem Status oder der
Fertigstellungszeit auf- oder absteigend sortiert werden soll.
Sollte ein Fehler während der Umwandlung in eine Tiff-Datei auftreten, so wird dem User dies in der
Statusspalte kenntlich gemacht. Die unformatierte Information, die die Ghostscript-Enginge liefert,
wird in einem neuen Fenster angezeigt, wenn der Info-Button in der Spalte ‚conversion info‘ betätigt
wird (siehe 3). Diese Meldung der Ghostscript-Engine kann bei einer fehlerfreien Datei wie folgt
aussehen:
Abbildung 9: Ghostscript-Engine-Meldung
Die Navigation zurück zur Upload-Seite oder zur Hilfe befindet sich, wie auf der Upload-Seite auch,
oben in der rechten Ecke (siehe 2). Auch hier ist ein Logout möglich. Die Navigationsleiste ist über
HTML mit Verweisen zu den entsprechenden Ansichten hinterlegt.
Eine automatische Aktualisierung der Statusansicht alle zehn Sekunden bietet den Vorteil, dass
Änderungen schnell erkannt werden.
20
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
4.4 Controller
4.4.1
Login-Controller
Die Verbindung zum LDAP-Server, die im Login-Controller hergestellt wird, wurde nicht von mir
implementiert. Jedoch habe ich im Login-Controller eine für den weiteren Verlauf wichtige
Überprüfung eingebaut, weswegen ich diese kurz erläutern werde.
Über eine Verbindung zum LDAP-Server werden die Userdaten des sich anmeldenden Users in unsere
Datenbank eingespeist. Zugelassen für einen Upload sind nur Studierende und Mitarbeiter der
Fachbereiche Architektur und Bauingenieurwesen. Deswegen enthält die Datenbanktabelle ‚Users‘
Informationen, ob ein Student berechtigt ist einen Upload durchzuführen oder nicht. User die nicht
zum Fachbereich 1 oder Fachbereich 2 gehören (‚faculty‘=1 oder ‚faculty‘=2 in der Datenbanktabelle
‚Users‘) werden für den Upload gesperrt. In diesem Fall wird in der Datenbank die Spalte ‚locked‘ auf
‚true‘ gesetzt.
Das Webinterface für den Upload ist unter der URL www.plotservice.fh-aachen.de
Studierenden und Mitarbeiter der FH Aachen aus dem Netz der FH Aachen zu erreichen.
4.4.2
für die
Upload-Controller
Die im Login-Controller gesetzte Spalte ‚locked‘ in der Datenbanktabelle ‚Users‘ wird bei jedem
Upload überprüft. Ist der angemeldete Studierende gesperrt, so ist ein Upload einer Datei nicht
möglich. Jedoch ist trotzdem für ihn die Seite des Plotservice zu erreichen, falls die Seite Interesse
weckt und andere Fachbereiche dem Service beitreten wollen. Diese Spalte ‚locked‘ wird auch in
einem weiteren Fall auf ‚true‘ gesetzt. Fällt ein Student negativ auf, da er unnötig viele Dateien
plottet, so ist es möglich ihn für den Upload zu sperren. Durch die Automatisierung des Plotservices
ist eine Kontrolle der einzelnen Dateien nicht gewährleistet. Einige Studierende werden dies
willkommen heißen und je nach dem auch halb fertige Dateien plotten, um zu sehen, wie diese
aussehen. Um zu viele Plots eines Studierenden zu vermeiden, gibt es zum einen die Möglichkeit
Studierende zu sperren, aber auch eine vorbeugende Lösung - ein A0-Einheiten-Zähler - die im
weiteren Verlauf erklärt wird. Ist ein Student für das Hochladen von Dateien gesperrt, so wird der
Upload nicht durchgeführt und der Controller gibt eine Fehlermeldung zurück, die dem Studierenden
angezeigt wird.
Den Usern werden Vorgaben gemacht, welche Art von Datei zulässig ist. Im Upload-Controller
werden Überprüfungen gemacht, ob diese Vorgaben eingehalten wurden. Zunächst wird überprüft,
ob es sich bei der hochgeladenen Datei um ein PDF handelt. Hierzu wird die Bibliothek ‚pyPDF‘
benutzt. Dies wird im Anwendermodul nur grob vollzogen, indem die Dateiendung überprüft wird.
Hat die Datei keine PDF-Endung, so wird dem User eine Fehlermeldung übermittelt, die diesen darauf
hinweist.
Weiter wird die Datei darauf überprüft, ob sie mehr als eine Seite umfasst. Hierzu wird die Datei
geöffnet. Ein Plotten von Dateien mehrerer Seiten ist theoretisch möglich, jedoch werden solche
Dateien nur in Ausnahmesituation angenommen. Deswegen werden in meinem Modul mehrseitige
Dateien sofort aussortiert. Ergibt sich beim Öffnen der Datei ein Fehler, ist das ein Zeichen dafür,
dass sie nicht vollständig ist und somit mehrere Seiten enthält. Hierbei würde also eine
21
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
Konvertierung zum Tiff nicht erfolgreich durchgeführt werden können. Deswegen wird auch dieser
Fall dem User als kein erfolgreicher Upload, aufgrund eines PDF-Fehlers, gemeldet.
Alle eingehenden Dateien müssen einer Namenskonvention entsprechen. Diese ist wichtig, da die
Abrechnung aller Plots von der sozialen Einrichtung ‚Sozialwerk Bauhütte‘36 durchgeführt wird, und
somit muss eindeutig nachvollziehbar sein, welcher Studierende, von welchem Fachbereich wie viel
geplottet hat. Die wichtigste Information ist der Fachbereich, damit deutlich ist, bei welchem
Fachbereich der Plot abgerechnet werden muss. Die Angabe der Größe der Datei muss auch im
Namen enthalten sein. Somit ergibt sich „FBx_matrikelnummer_Ax_xxx“ – Fachbereich,
Matrikelnummer, DIN-Größe der Datei, laufende Nummer pro Student - als eindeutiger Name einer
Datei. Da auch Mitarbeiter die Möglichkeit haben Plots zu erstellen, wird bei ihren Dateien die
Matrikelnummer durch ihren Mitarbeiternamen ersetzt. Hier tritt folgendes Problem auf. Enthält der
Name eines Mitarbeiters andere Zeichen als a-z, A-Z und 0-9, so müssen diese Zeichen durch ein
anderes Zeichen ersetzt werden, da Sonderzeichen zu Problemen beim Plotter führen. Es kann
geschehen, dass diese Datei einen Absturz des Plotters verursacht. Um dies zu umgehen, werden alle
Sonderzeichen in Mitarbeiternamen durch einen Unterstrich ersetzt, da uns bei diesem Zeichen
bekannt ist, dass es dem Plotter keine Probleme bereitet. Jedoch folgt aus dieser Änderung ein
weiteres mögliches Problem. Gibt es zum Beispiel einen Mitarbeiter mit dem Loginnamen „P.Jansen“
und einen weiteren Mitarbeiter mit dem Loginnamen „P-Jansen“, so werden beide Namen geändert
in „P_Jansen“. Somit ist keine Eindeutigkeit des Namens der Datei mehr gewährleistet. Würden beide
Mitarbeiter aus Fachbereich 1 ihre zweite Plotdatei der Größe A0 hochladen, so würde bei beiden
die Datei umbenannt in „FB1_P_Jansen_A0_002“. Um diese mögliche Doppelung der Dateinamen zu
vermeiden, wird die Namenskonvention der Plotdateien erweitert. Angefügt wird eine sechsstellige
Nummer, die die Gesamtanzahl aller Plots darstellt.
Um die Namenskonvention vollständig zu haben, muss die Papiergröße der hochgeladenen Datei
ermittelt werden. Mittels der Bibliothek ‚pyPDF‘ wird das Maß der Höhe und das Maß der Breite
ermittelt. Aufbauend auf diese Werte ermittle ich die Papiergröße. Die Papiergröße muss den DINFormaten A0, A1, A2 oder A3 entsprechen. Zurzeit ist es noch nicht möglich, Sondermaße über den
neuen Plot Service ausplotten zu lassen. Vorgesehen ist auch dies, jedoch erst in einer erweiterten
Version. Es sind also nur DIN-Formate für das Webinterface zugelassen. Nach unten darf sowohl die
Breite als auch die Höhe der Datei um eine vorgegebene Toleranz abweichen. Diese Toleranz
entnehme ich bei der Überprüfung der Datenbank. Über eine entsprechende Methode im DBHandler
lese ich aus der Tabelle ‚config‘ den Wert ‚tolerance‘ aus. Zur Zeit hat ‚tolernace‘ einen Wert von
zehn Millimetern. Auch nach oben darf die Papiergröße sowohl bei Höhe, als auch bei Breite um
einen bestimmten Wert abweichen. Dieser Wert ist momentan noch nicht in der Datenbank
enthalten, da dies eine Änderung war, die erst etwas später vorgenommen wurde. Ein Eintrag des
Wertes in die Datenbank ist für die Zukunft vorgesehen, um mögliche Änderungen direkt dort
vornehmen zu können. Die Toleranz nach oben liegt bei nur 0,15 Millimetern. Diese Toleranz ist nicht
besonders groß, da dies nur notwendig ist, weil in manchen Programmen PDFs standardmäßig ca.
1/10 Millimeter größer als DIN-Format erstellt werden. Die Höhe und auch die Breite der Datei muss
also letztendlich zwischen DIN-Format-‚tolerance‘ und DIN-Format+0,15 liegen. Ist dies nicht der Fall,
so bekommt der User eine Fehlermeldung, bei der er auf die falschen Größen hingewiesen wird. Ihm
werden seine Größen angezeigt, damit er erkennen kann, wo genau sein Fehler liegt.
36
http://www.sw-bh.fh-aachen.de/
22
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
Wie schon im ersten Absatz des Upload-Controllers erwähnt, muss eine vorbeugende Maßnahme
ergriffen werden, um den Missbrauch des Systems zu unterbinden. Die User müssen in der Menge
ihrer Plotdateien eingeschränkt werden. Hierzu wird ein A0-Einheiten-Zähler eingerichtet. Jedem
Studierenden stehen pro Semester 20 A0-Einheiten zur Verfügung. Die A0-Einheiten der Mitarbeiter
sind nicht beschränkt. Plottet ein Studierender eine A1-Datei, so wird ihm eine halbe A0-Einheit von
den vorhandenen abgezogen. Dementsprechend bei einer A2-Datei 0,25 A0-Einheiten und bei einer
A3-Datei 0,125 A0-Einheiten abgezogen. Hat ein Studierender nicht mehr genügend A0-Einheiten,
um seine gewünschte Datei zu plotten, so wird ihm dies über eine Fehlermeldung mitgeteilt. Sollte
der Fall auftreten, dass einzelne Studierende mit ihren gegeben A0-Einheiten nicht auskommen, so
ist es auch möglich den Zähler in der Datenbank zu erhöhen.
Eine letzte Überprüfung, die an der Datei vorgenommen wird, betrifft die mechanische Größe der
Datei. Neben der Papiergröße ist es auch nötig dies zu überprüfen, da eine zu große Datei, sowohl
den Speicher zu sehr belastet, aber auch den Plotter zum Absturz bringen kann. In einer Datei, die
eine Größe von über 512 MB hat, muss irgendwo ein Fehler liegen; denn eine einfache Plotdatei,
auch der Größe A0, kann normalerweise keine mechanische Größe von mehr als 512 MB annehmen.
Zur Zeit ist es so, dass die Datei nach dem Upload auf ihre Größe überprüft wird, da dies vor einem
Upload nicht möglich ist. Überschreitet die Datei die Prüfgröße ‚maxsize‘ aus der ‚config‘-Tabelle in
der Datenbank, so wird diese wieder gelöscht. Die Prüfgröße wird hier aus der Datenbank
entnommen, um flexibel zu sein. Sollte es in Zukunft auch möglich sein, Dateien mit einer Größe von
1 GB zum Upload zuzulassen, so muss nur der entsprechende Eintrag in der Datenbank geändert
werden.
Zusätzlich zu den Überprüfungen wird auch ein Algorithmus implementiert, um die einzelnen
hochgeladenen Dateien in Jobs einzuteilen. Lädt ein User fünf Dateien hintereinander hoch, so soll
gewährleistet sein, dass er seine fünf Dateien auch nacheinander am Plotter in Empfang nehmen
kann, ohne eingeschobene Dateien von anderen Usern, die gleichzeitig hochgeladen haben. Hierzu
wird beim Upload eine sogenannte JobID vergeben. In der Datenbanktabelle ‚config‘ ist ein Eintrag
‚timeout‘ der eine Zeit angibt, in welchem Zeitfenster Dateien zu einem Job gehören. Bei jedem
neuen Upload einer Datei wird überprüft, ob der Upload der letzten Datei länger, als die in ‚timeout‘
angegebene Zeit her ist. Ist dies der Fall, so wird dieser Datei eine neue JobID zugeordnet. Liegen
zwischen dem letzten und dem aktuellen Upload weniger als diese angegebene Zeit, so wird dieselbe
JobID, wie bei der letzten Datei vergeben. Wird eine neue JobID benötigt, so kann diese aus der
‚config‘-Tabelle mittels der dafür im DBHandler implementierten Datenbankabfrage geholt werden.
Hier ist unter ‚currentjobid‘ die aktuelle JobID gespeichert. Anschließend wird diese auch über eine
Methode aus dem DBHandler aktualisiert, das heißt, der Wert wird um eins erhöht.
Wichtig ist noch der Pfad zum Verzeichnis, in dem die PDF-Dateien zum Weiterverarbeiten
gespeichert werden. Dieser Cache unterteilt sich in Unterverzeichnisse von A-Z. Die Unterteilung
dient insbesondere für eine einfachere Zugriffmöglichkeit von den nächsten Modulen. Es wird
vorgebeugt, dass ein Verzeichnis so sehr gefüllt ist, das eine enorme Zeitverzögerung beim Zugriff auf
die Dateien eintritt. Die Entscheidung, welche Datei in welchem Unterverzeichnis abgespeichert wird,
wird zufällig getroffen. Über eine implementierte Methode wird ein Zufallsbuchstabe zwischen A und
Z ermittelt, welcher somit das Unterverzeichnis im Cache angibt.
Um die Namenskonvention immer einzuhalten, ist es notwendig, nach jedem Upload eines
Studierenden seine laufende Nummer ‚countplots‘ in der Datenbanktabelle ‚Users‘ um eins zu
23
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Benutzer
Barbara Jochims
erhöhen. Hierzu ist wiederum eine Methode ‚incrementCountPlots‘ im DBHandeler vorhanden, die
ein UPDATE in der Datenbank durchführt.
Abschließend müssen alle Informationen zur Datei in die Datenbank eingetragen werden. Der
DBHandler stellt eine von mir implementierte Methode newFile() bereit. Eingetragen in die
Datenbank wird somit der Loginname des Studierenden, der originale Dateiname, der neue, nach der
Namenskonvention erstellte Dateiname, der Pfad mit Zufallsverzeichnis, eine Zeitangabe des Uploads
und die zugehörige JobID. Die Zeitangabe wird mit Hilfe der von Python bereitgestellten Bibliothek
‚time‘ erstellt. Die Funktion time.time() berechnet die aktuelle Zeit in Sekunden seit dem 1.1.1970.
Der Wert wird in Sekunden in die Datenbank eingetragen.
Sollte bei einer der vielen Überprüfungen ein Fehler auftreten, so wird die Datei nicht in die
Datenbank eingetragen und auch nicht im Cache gespeichert. Der Student wird über die Upload-View
über alle bei ihm aufgetretenen Fehler informiert.
4.4.3
Status-Controller
Die Hauptaufgabe im Status-Controller ist das Aufarbeiten der Daten aus der Datenbank. Mittels der
Funktion getAllFiles() aus dem DBHandler, werden alle Dateien mit benötigten Informationen zum
angemeldeten Studierenden ermittelt. Der originale Dateiname, die Upload-Zeit, die Statusmeldung,
die bei auftretenden Fehlern von der Tiff-Engine gefüllt wird, der Fertigstellungszeitpunkt der Datei
und die Meldung der Ghostscript-Engine zählen zu den Informationen, die getAllFiles() zurückliefert.
Die Informationen sollen dem Studierenden in einer Tabelle angezeigt werden. Mit Hilfe von
Templates werden die aus der Datenbank ausgelesenen Informationen in ein HTML-Dokument,
welches die Struktur für eine Tabelle enthält, eingefügt. Um die Tabelle übersichtlich zu gestalten,
wird jede zweite Zeile grau hinterlegt.
Um die Upload-Zeit und die Fertigstellungszeit der Datei zu formatieren wird die Funktion ‚ctime‘ von
der Bibliothek ‚time‘ verwendet. Diese Funktion ermöglicht das Umrechnen der in der Datenbank
gespeicherten Sekunden seit dem 1.1.1970 in ein lesbares Datumformat in folgender Reihenfolge:
Wochentag - Monat - Tag - Jahr - Uhrzeit.
Standardmäßig wird die Tabelle nach der absteigenden Upload-Zeit sortiert. Der Benutzer hat jedoch
die Möglichkeit, diese Sortierung über den View zu ändern. Informationen, über die Spalte, nach der
sortiert werden soll, werden über eine GET-Variable vom View übermittelt. Wenn Änderungen im
View vorgenommen werden, wird der URL ‚?sort=xxx‘ angehängt. ‚xxx‘ kann die Upload-Zeit, der
Dateiname, die Statusnachricht oder die Zeitangabe der Sendung sowohl auf- und absteigend sein.
Über die von web.py bereit gestellte Funktion web.input kann der Wert der Variable ‚sort‘ abgefragt
werden. Um die Daten sortiert aus der Datenbank zu erhalten, wird der Datenbankabfrage
getAllFiles() ein weiterer Parameter übergeben, der den Wert der Variable ‚sort‘ enthält und einen
weiteren Parameter für aufsteigend oder absteigend (ASC oder DESC), der sich auch aus der Variable
‚sort‘ ableiten lässt.
24
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anwenderoberfläche für den Administrator
Barbara Jochims
5 Anwenderoberfläche für den Administrator
Die Administratoroberfläche bietet eine Ansicht, die den gleichen Aufbau der Statusseite der
Benutzer hat. Die Statusseite des Administrators unterscheidet sich in zwei wesentlichen Punkten
von der Benutzerstatusseite. Der erste Unterschied besteht in der Spalte mit dem Dateinamen. Für
den Administrator wird der technische Dateiname angezeigt, damit er direkt einen Überblick über,
Fachbereich, Matrikelnummer und die Größe der Datei hat. Der zweite Unterschied liegt in der
Auswahl der angezeigten Dateien; für den Administrator ist eine Übersicht über die Dateien aller
User notwendig.
Zusätzlich zur Statusseite der Dateien gibt es eine Seite, die nur eine einzige, aber die bisher
wichtigste Funktion hat.
Abbildung 10: Administratoroberfläche
Der Button, der auf dieser Seite zu sehen ist bietet die Möglichkeit die Warteschlange zum Plotter zu
starten und zu stoppen. Dieser Button ist notwendig, falls Wartungen durchgeführt werden müssen.
Somit besteht die Möglichkeit das automatische Senden an den Plotter zu stoppen. Im AdminController wird beim Betätigen des Buttons der Wert ‚plotqueuestopped‘ in der Datenbanktabelle
‚Config‘ geändert. Steht der Wert auf ‚true‘, so ist die Übertragung der Dateien im send2plotterModul gestoppt. Da der Plotter nachts aus ist, ist dies sinnvoll, um eine ständige
Verbindungsüberprüfung im send2plotter-Modul zu vermeiden.
25
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Fazit und Ausblick
Barbara Jochims
6 Fazit und Ausblick
Abschließend kann ich sagen, dass das Hauptziel - eine Entlastung des IT-Services - erreicht wurde.
Das Projekt CW-Plot-Service wird von den Studierenden sehr interessiert und dankend angenommen,
da auch sie eine Entlastung darin sehen. Sie haben weniger Aufwand und müssen sich nicht an feste
Termine halten. Zurzeit ist die erste Version so weit verbreitet, dass ca. die Hälfte der Studierenden
diesen Service nutzen. Die Upload-Möglichkeit wurde effektiv und benutzerfreundlich umgesetzt. Mit
Hilfe von Python und der Bibliothek web.py ist es gelungen, eine strukturierte URL-Struktur
aufzubauen, die insbesondere das Einarbeiten in den Code für neue Mitarbeiter einfacher gestaltet.
Dank des Model-View-Controller-Prinzips ist eine übersichtliche Struktur geschaffen worden.
Besonders gut gelungen ist die Modularisierung des Projekts. Die einzelnen Module sind unabhängig
voneinander und können nach Belieben ausgetauscht oder überarbeitet werden. Das Design ist noch
nicht optimal, da von mir mehr Augenmerk auf die internen Berechnungen und Überprüfungen
gelegt wurde. Ein reibungsloser Upload von Dateien wurde ermöglicht mit einem schlichten, aber
benutzerfreundlichem Webdesign. Seitens der Studierenden gab es wenig Verständnisfragen zur
Handhabung der Webseite, was die Annahme eines benutzerfreundlichen Webdesigns bestätigt. Die
Statusseite ist übersichtlich und effektiv gestaltet.
Die Idee, eine Datenbank als zentrale Schnittstelle zu nutzen, hat sich bewährt, auch wenn viele
Gespräche zwischen den Programmierern der einzelnen Module notwendig waren, um eine
Datenbank mit geeigneten Datensätzen aufzustellen. Zwischendurch mussten immer wieder
Änderungen vorgenommen werden, da weitere Flags benötigt wurden. In meinem Teil war ich
ziemlich unabhängig von den verschiedenen Flags, da es sich bei dem Anwendermodul sozusagen
nur um die Schnittstelle zum Studierenden handelt.
Schlussendlich denke ich, dass ich die von mir gesetzten Ziele und die vorgegebenen Anforderungen
an das Projekt speziell an das Anwendermodul erreicht und effizient umgesetzt habe.
Das Projekt CW-Plot-Service bietet viele Weitentwicklungsmöglichkeiten. Um das System für den
Studierenden noch effektiver zu machen, wäre ein Upload von mehreren Dateien gleichzeitig sehr
hilfreich. Zudem ist die Möglichkeit, Dateien nach dem Upload noch zu löschen, sehr von Vorteil, da
man dann auch „Testdateien“ hochladen könnte. Ist ein Student sich zum Beispiel mit den
geforderten Eigenschaften bei seiner Datei nicht sicher, kann er die angefangene oder auch die
fertige Datei einmal hochladen, um zu überprüfen, ob das System sie so entgegen nehmen würde.
Sollen nun noch weitere Änderungen vorgenommen werden, könnte es entweder möglich sein, die
Datei ganz zu löschen oder einfach zu blockieren, sodass sie nicht unfertig geplottet wird. Auch wäre
das Anzeigen der hochgeladenen PDF-Datei ein nettes Feature. Hier könnte der Student auch Fehler
schnell erkennen und diese beheben, ohne einen unnötigen Plot zu vergeben. Ebenfalls könnte man
das System so erweitern, dass beim Upload der Datei schon die Papiersorte ausgewählt werden
kann. Bisher können nur Standardplots (normales Papier) über das System angenommen werden.
Ausnahmen, wie zum Beispiel schweres Papier oder besonders gute Qualität des Plots, müssen
gesondert beim Personal des IT-Services beantragt werden. Die Annahme von Sondermaßen sollte
auch ermöglicht werden, damit der IT-Service auch von diesen Sonderfällen entlastet wird.
Eine Weiterentwicklungsmöglichkeit, die dem IT-Service einen weiteren Vorteil und eine Entlastung
bietet, ist eine erweiterte Administrationsoberfläche. Hier könnte es den Administratoren möglich
26
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Fazit und Ausblick
Barbara Jochims
sein, Angaben umzustellen oder überhaupt Angaben zu machen, zum Beispiel den A0-EinheitenZähler neu einstellen oder sämtliche Einträge in der Datenbanktabelle ‚Config‘ ändern. Zudem soll es
möglich sein, die einzelnen Module auszustellen, um Wartungsarbeiten durchführen zu können. Das
Priorisieren von Jobs wäre ein weiteres Feature was sehr hilfreich wäre, um zum Beispiel einzelne
Jobs in der Warteschlange zu verschieben. Die Sperrung von einzelnen Usern sollte auch über die
Administratoroberfläche möglich sein.
Ein weiteres Modul was eingefügt werden kann bzw. werden sollte ist ein ‚Putzmodul‘. Die Dateien
im Cache müssen zu irgendeinem Zeitpunkt gelöscht werden, um den Speicher nicht zu überlasten.
Letztendlich ist natürlich die Designverbesserung eine weitere Weiterentwicklungsmöglichkeit.
Bisher wurde das Design sehr schlicht gewählt, um es übersichtlich zu halten. Die eine oder andere
Verbesserung, um eine intuitivere Benutzung gewährleisten zu können, ist empfehlenswert.
27
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anhang
Barbara Jochims
7 Anhang
7.1 Literaturverzeichnis
Datenbanksysteme [Buch] / Verf. Alfons Kemper André Eikler. - München : Oldenbourg
Wissenschaftsverlag, 2006.
Galileo Computing, Artikel: Module und Architektur [Online]. - 2006. - 04. Oktober 2012. http://openbook.galileocomputing.de/oo/oo_06_moduleundarchitektur_001.htm.
GalileoComputing,
Artikel:
Python
[Online]. http://openbook.galileocomputing.de/python/.
2008. -
04.
Oktober
2012. -
Grundkurs Software-Engineering mit UML [Buch] / Verf. Kleuker Stephan. - Wiesbaden : Vieweg +
Teubner Verlag, 2011.
PostgreSQL [Online]. - 08. Oktober 2012. - http://www.postgresql.de/.
PsycoPG [Online]. - 2010. - 05. Oktober 2012. - http://www.initd.org/psycopg/.
RZ RWTH-Aachen, Veranstaltungen, Skriptprogrammierung, Artikel: Wintersemester 2011/12
[Online]. 14.
Februar
2012. 05.
Oktober
2012. http://www.rz.rwthaachen.de/aw/cms/rz/Zielgruppen/rz_auszubildende/veranstaltungen/informatik/
Wahlpflichtkurse/~qwj/skriptprogrammierung_php_mysql_/?lang=de.
SelfHTML [Online]. - 2007. - 05. Oktober 2012. - http://de.selfhtml.org/intro/technologien/html.htm.
Skriptnews: JavaScript-Sandbox Prinzip [Online]. - 05. Oktober 2012. - http://www.scriptnews.de/jssicherheit-das-sandbox-prinzip.htm.
Straßenprogrammierer:
JavaScript
[Online]. 1999. 05.
Oktober
http://www.strassenprogrammierer.de/dom-volle-kontrolle-mit-javascript_tipp_393.html.
2012. -
Universität Hannover: Model-View-Controller [Online] / Verf. Singer Leif. - 04. Oktober 2012. http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf.
Web.py [Online] / Verf. Swartz Aaron. - 02. Oktober 2012. - http://webpy.org/.
Wikipedia Artikel: Python [Online]. - 05. Oktober
http://de.wikipedia.org/wiki/Python_(Programmiersprache).
Wikipedia, Aritekl Engine [Online]. http://de.wikipedia.org/wiki/Engine.
26.
September
2012. 2012. -
06.
Oktober
2012. -
15.
Oktober
2012. -
Wikipedia, Artikel: Cascading Style Sheets [Online]. - 04. Oktober 2012. - 05. Oktober 2012. http://de.wikipedia.org/wiki/Cascading_Style_Sheets.
Wikipedia, Artikel: Client [Online]. http://de.wikipedia.org/wiki/Client.
28.
September
2012. -
05.
Oktober
2012. -
Wikipedia, Artikel: Datenbanken [Online]. - 25. September 2012. - 08. Oktober 2012. http://de.wikipedia.org/wiki/Datenbank.
28
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Anhang
Barbara Jochims
Wikipedia, Artikel: Hypertext Markup Language [Online]. - 23. September 2012. - 08. Oktober
2012. - http://de.wikipedia.org/wiki/Hypertext_Markup_Language.
Wikipedia, Artikel: JavaScript [Online]. http://de.wikipedia.org/wiki/JavaScript.
23.
Septemer
2012. -
05.
Oktober
2012. -
Wikipedia, Artikel: PostgreSQL [Online]. - 24. September 2012. - 08. Oktober 2012. http://de.wikipedia.org/wiki/PostgreSQL.
7.2 Abbildungsverzeichnis
Abbildung 1: Grundstruktur einer Webseite ........................................................................................... 9
Abbildung 2: Der Aufbau von CSS-Regeln ............................................................................................... 9
Abbildung 3: URL-Struktur....................................................................................................................... 9
Abbildung 4: Aufbau eines Datenbanksystems ..................................................................................... 10
Abbildung 5: Nutzung des Model-View-Controller-Pattern .................................................................. 13
Abbildung 6: Upload-View..................................................................................................................... 18
Abbildung 7: mögliche Fehlermeldung ................................................................................................. 19
Abbildung 8: Status-View ...................................................................................................................... 20
Abbildung 9: Ghostscript-Engine-Meldung ........................................................................................... 20
Abbildung 10: Administratoroberfläche................................................................................................ 25
7.3 Tabellenverzeichnis
Tabelle 1: 'Config' .................................................................................................................................. 14
Tabelle 2: 'Users' ................................................................................................................................... 15
Tabelle 3: 'File' ....................................................................................................................................... 15
29
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Eidesstattliche Erklärung
Barbara Jochims
8 Eidesstattliche Erklärung
Hiermit versichere ich, dass ich die Seminararbeit mit dem Thema „Erstellung eines
Anwendermoduls zum Projekt CW-Plot-Service der Fachhochschule Aachen, Fachbereiche 1 und 2“
selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe,
alle Ausführungen, die anderen Schriften wörtlich oder sinngemäß entnommen wurde, kenntlich
gemacht sind und die Arbeit in gleicher oder ähnlicher Fassung noch nicht Bestandteil einer Studienoder Prüfungsleistung war.
Name: Barbara Jochims
Aachen, den 08. November 2012
(Barbara Jochims)
30
Erstellung eines Anwendermoduls zum Projekt CW-Plot-Service
Herunterladen