<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rabu3082</id>
	<title>Medien Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rabu3082"/>
	<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/Special:Contributions/Rabu3082"/>
	<updated>2026-06-11T19:17:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_B.&amp;diff=64986</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_B.&amp;diff=64986"/>
		<updated>2014-03-18T21:31:10Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Kurs stand im Zeichen von serverseitigen Technologien zur Kommunikation zwischen ebenjenem Server und dessen Clients. &lt;br /&gt;
Im Laufe des Moduls wurde das angelernte Wissen stets in kleinen Projekten angewandt. Diese sollen im Folgenden nun vorgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
Nachdem in den ersten Veranstaltungen je nach Wissensstand Grundkenntnisse, Auffrischungen und Vertiefungen in PHP geschaffen wurden, war nun das Ziel, essentielle Funktionalitäten eines E-Mail-Handlers zu implementieren. Dazu gehören etwa valide Eingaben, Rückmeldungen, Logging und Speicherung.&lt;br /&gt;
&lt;br /&gt;
In der persönlichen Aufgabe galt es, ein zeitliches Limit für das Senden von E-Mails zu realisieren: Hat ein Nutzer eine E-Mail erfolgreich abgeschickt, muss eine bestimmte Zeitdauer warten, bis er eine weitere verschicken darf. Die Limitierung kann dabei bspw. adressenspezifisch über Cookies, Sessions oder Datenbankeinträge erfolgen. Auch wenn jedes Verfahren seine Hintertüren hat und mit wenig Wissen umgangen werden kann, sind sie schnell implementiert und für einen ersten Schutz sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Cookies [http://php.net/manual/de/features.cookies.php] ===&lt;br /&gt;
Mit Cookies unterstützt PHP einen Mechanismus, um Informationen beim Client zu speichern und somit etwa wiederkehrende Besucher zu identifizieren. Durch &amp;lt;tt&amp;gt;setcookie()&amp;lt;/tt&amp;gt; kann ein Cookie clientseitig mit einem beliebigen Wert im globalen Array &amp;lt;tt&amp;gt;$_COOKIE&amp;lt;/tt&amp;gt; gespeichert. Eine simple Abfrage von &amp;lt;tt&amp;gt;$_COOKIE&amp;lt;/tt&amp;gt; nach dem Namen des Cookies gibt den Wert wieder aus. So kann man die E-Mail-Adresse mit dem Ablaufdatum speichern und bei Bedarf dem Nutzer angeben, wie lange er noch zu warten hat. Alternativ kann man einem Cookie auch ein Ablaufdatum mitgeben, muss dann allerdings auf die Information zur verbleibenden Zeit verzichten.&lt;br /&gt;
&lt;br /&gt;
=== Sessions [http://www.php.net/manual/de/features.sessions.php] ===&lt;br /&gt;
Sessions bieten in PHP die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen Ihrer Website ähnlich wie Cookies festzuhalten (tatsächlich werden die Informationen standardmäßig in einem Cookie gehalten, kann aber auch über die URL erfolgen). Die Initialisierung erfolgt mit einem Eintrag der gewünschten unter einem Namen in das Array &amp;lt;tt&amp;gt;$_SESSION&amp;lt;/tt&amp;gt;; ebenso geschieht die Abfrage über dieses Array. &lt;br /&gt;
&lt;br /&gt;
=== Datenbankeintrag [http://www.php.net/manual/de/intro.mysql.php] ===&lt;br /&gt;
Mittels PHP ist es ein Leichtes, sich zu einer MySQL-Datenbank zu verbinden (&amp;lt;tt&amp;gt;mysqli_connect()&amp;lt;/tt&amp;gt;) und ab Version 4.1 sogar Prepared Statements zu verarbeiten. Mit SQL-Anfragen wird ein simpler Eintrag der E-Mail-Adresse in eine Tabelle unter Angabe des Ablaufdatums realisiert, welche nun bei erneutem Abschicken überprüft werden kann.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Performance von Plain text, JSON, XML und MySQL unter PHP ==&lt;br /&gt;
Im Rahmen des Aufzeigens von Möglichkeit zur persistenten Speicherung und Laden von Daten unter PHP wurde ein simples Framework implementiert, um die Einlese- sowie anschließende Zugriffsgeschwindigkeit verschiedener Formate zu testen. Angewandt wurde ein Datensatz mit 5.000 Einträgen zu je 10 Feldern. Die folgende Tabelle listet die Durchschnittszeit aus 100 Durchläufen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Format !! Read (s) !! Access (s)&lt;br /&gt;
|- &lt;br /&gt;
| Plain || 0.030051 || 0.004380&lt;br /&gt;
|- &lt;br /&gt;
| XML || 0.067644 || 0.014731&lt;br /&gt;
|-&lt;br /&gt;
| JSON || 0.036181 || 0.005020&lt;br /&gt;
|-&lt;br /&gt;
| MySQL || 0.018481 || 0.007070&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Lesbarkeit und Umsetzbarkeit halber liegt die persönliche Präferenz bei JSON, auch wenn die doppelte Einlesezeit als unter MySQL benötigt wird. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TYPO3 ==&lt;br /&gt;
In einem weiteren Projekt sollte eine simple Webseite mit TYPO3 umgesetzt werden. Ziel war es, die standardmäßige Funktionalität des CMS durch beliebige Extensions zu erweitern, sodass man sich einerseits mit dem System vertraut macht, gleichzeitig aber auf für zukünftige Projekte gerüstet ist. Die folgenden drei Extensions wurden für die persönliche Seite eingesetzt:&lt;br /&gt;
&lt;br /&gt;
=== Lorem Ipsum [http://typo3.org/extensions/repository/view/lorem_ipsum] ===&lt;br /&gt;
Diese Extension ist für Präsentationen und Testläufe eines Layouts geeignet, wenn sich auf der entsprechenden Seite noch keine Texte befinden. Mit einem Klick werden Dummy-Inhalte in die entsprechenden Content-Elemente hinzufügt.&lt;br /&gt;
&lt;br /&gt;
[[File:typo-lorem.png|left|thumb|Extension: Lorem Ipsum]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Perfect Lightbox [http://typo3.org/extensions/repository/view/perfectlightbox] ===&lt;br /&gt;
Durch diese Extension kann das standardmäßige Klick-Vergrößern der Bilder durch eine Lightbox ersetzt werden. Zusätzlich bietet die Lightbox auch die Möglichkeit einer Slideshow. &lt;br /&gt;
&lt;br /&gt;
[[File:typo-lightbox.png|left|thumb|Extension: Perfect Lightbox]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments [http://typo3.org/extensions/repository/view/comments] ===&lt;br /&gt;
Mit dieser Extension können Besucher Kommentare zu einzelnen Seiten oder einem Thema der Webseite hinterlassen. Durch die individuellen Einstellungen können etwa Captchas hinzugefügt werden. &lt;br /&gt;
&lt;br /&gt;
[[File:typo-comments.png|left|thumb|Extension: Comments]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterhin wurde ein Kontaktformular erstellt, mithilfe dessen sich Nutzer mit dem Admin in Verbindung setzen können.&lt;br /&gt;
&lt;br /&gt;
[[File:typo-contact.png|left|thumb|Kontaktformular]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AngularJS - Bücherei ==&lt;br /&gt;
Durch AngularJS kann man komfortabel Single-Page-Anwendungen erstellen, die auf dem Modell-View-Controller-Pattern basieren. Nach einer Einführung in die Grundlagen von AngularJS galt es wieder, diese in einem eigenen Projekt anzuwenden, wobei dieses die Möglichkeit der Eingabe, Manipulation und Entfernen bereithalten sollte, ähnlich einer Datenbank. &lt;br /&gt;
&lt;br /&gt;
Dabei wurde eine digitale Bibliothek implementiert, welche zum einen bereits vorhanden Bücher listet, aber auch eine Wunschliste bietet. Folgende Funktionen stehen dabei zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
* Hinzufügen neuer Bucheinträge: Neben Titel und Autor und einer Cover-URL kann ebenfalls angegeben werden, ob das Buch bereits gelesen wurde und ob es anstelle der Sammlung auf die Wunschliste kommen soll.&lt;br /&gt;
* Bearbeiten vorhandener Bucheinträge&lt;br /&gt;
* Löschen von Bucheinträgen&lt;br /&gt;
* Verschieben eines Bucheintrags von der Wunschliste in die Sammlung&lt;br /&gt;
* Anzeigen einer Detailansicht eines Bucheintrags inklusive Cover&lt;br /&gt;
* Filtern sowohl in der Sammlung als auch in der Wunschliste nach Bucheinträgen durch eine Zeichenkette&lt;br /&gt;
* Sortierung nach Titel, Autor und der Gelesen-Option&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek ist auf der persönlichen Uni-Webseite unter folgendem Link erreichbar: http://webuser.uni-weimar.de/~rabu3082/library&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:lib-overview.png|left|thumb|Übersicht der Bücherei]]&lt;br /&gt;
[[File:lib-cover.png|left|thumb|Modal zum Hinzufügen eines Buchcovers]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Node.js - Foosball ==&lt;br /&gt;
Das umfassendste Projekt gestaltete sich bei der Arbeit mit dem JavaScript-Framework Node.js, welches die Programmierung von serverseitigen Anwendungen ermöglicht. &lt;br /&gt;
&lt;br /&gt;
Nach freier Themenwahl wurde die Entscheidung zugunsten eines Tischfußballspiels gefällt. Wegen der limitierten gestalterischen Fähigkeiten eines Informatikers wurde dabei der Fokus auf die technische Umsetzung gelegt.&lt;br /&gt;
Das Spielkonzept ist schnell erklärt: Ein Spieler eröffnet unter einem eindeutigen Namen eine Partie. Sobald sich ein zweiter Spieler zu ebendieser verbindet, wird die Begegnung gestartet. Die Spieler steuern ihre Griffstangen per Drag &amp;amp; Drop; bei Loslassen wird ein Schuss ausgeführt. Banden, Tore und eine Toranzeige komplettieren das Spiel.&lt;br /&gt;
&lt;br /&gt;
In der ersten Phase wurde das Front-End des Clients umgesetzt, insbesondere die Spielphysik und die genutzten Objekte. Dabei wird die Arbeit durch Node.js erleichtert, indem geforderte Animationen und Objekte komfortabel in ein Canvas-Element gezeichnet werden können. Anschließend wurde die Anwendung für ein serverseitiges Spiel angepasst, indem benötigte Ressourcen über das Framework socket.io kommuniziert werden.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:foosball-menu.png|left|thumb|Hauptmenü]]&lt;br /&gt;
[[File:foosball-howto.png|left|thumb|Anleitung]]&lt;br /&gt;
[[File:foosball-error.png|left|thumb|Fehlernachricht]]&lt;br /&gt;
[[File:foosball-game.png|left|thumb|Laufendes Spiel]]&lt;br /&gt;
[[File:foosball-left.png|left|thumb|Gegner hat Spiel verlassen]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-left.png&amp;diff=64985</id>
		<title>File:Foosball-left.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-left.png&amp;diff=64985"/>
		<updated>2014-03-18T21:27:57Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-game.png&amp;diff=64984</id>
		<title>File:Foosball-game.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-game.png&amp;diff=64984"/>
		<updated>2014-03-18T21:27:47Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-error.png&amp;diff=64983</id>
		<title>File:Foosball-error.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-error.png&amp;diff=64983"/>
		<updated>2014-03-18T21:27:39Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-howto.png&amp;diff=64982</id>
		<title>File:Foosball-howto.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-howto.png&amp;diff=64982"/>
		<updated>2014-03-18T21:27:12Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-menu.png&amp;diff=64981</id>
		<title>File:Foosball-menu.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Foosball-menu.png&amp;diff=64981"/>
		<updated>2014-03-18T21:26:44Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib-cover.png&amp;diff=64980</id>
		<title>File:Lib-cover.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib-cover.png&amp;diff=64980"/>
		<updated>2014-03-18T21:13:01Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib-overview.png&amp;diff=64979</id>
		<title>File:Lib-overview.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib-overview.png&amp;diff=64979"/>
		<updated>2014-03-18T21:12:34Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-contact.png&amp;diff=64978</id>
		<title>File:Typo-contact.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-contact.png&amp;diff=64978"/>
		<updated>2014-03-18T21:11:43Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-lightbox.png&amp;diff=64977</id>
		<title>File:Typo-lightbox.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-lightbox.png&amp;diff=64977"/>
		<updated>2014-03-18T21:11:16Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-comments.png&amp;diff=64976</id>
		<title>File:Typo-comments.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-comments.png&amp;diff=64976"/>
		<updated>2014-03-18T21:10:17Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-lorem.png&amp;diff=64975</id>
		<title>File:Typo-lorem.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Typo-lorem.png&amp;diff=64975"/>
		<updated>2014-03-18T21:09:33Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|c}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_Busse&amp;diff=64517</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen/Matthias Busse</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_Busse&amp;diff=64517"/>
		<updated>2014-02-15T21:20:28Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_B.&amp;diff=64516</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_B.&amp;diff=64516"/>
		<updated>2014-02-15T21:19:55Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Created page with &amp;quot;Baustelle!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Baustelle!&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen&amp;diff=64515</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen&amp;diff=64515"/>
		<updated>2014-02-15T21:19:35Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Dokumentationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dokumentationen==&lt;br /&gt;
&lt;br /&gt;
[[/Max Mustermann/]]&lt;br /&gt;
&lt;br /&gt;
[[/Monika Schwarz/]]&lt;br /&gt;
&lt;br /&gt;
[[/Matthias B./]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_Busse&amp;diff=64514</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen/Matthias Busse</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen/Matthias_Busse&amp;diff=64514"/>
		<updated>2014-02-15T20:45:54Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Created page with &amp;quot;Baustelle!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Baustelle!&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen&amp;diff=64513</id>
		<title>IFD:Server side technologies for web-development WS 13/Dokumentationen</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:Server_side_technologies_for_web-development_WS_13/Dokumentationen&amp;diff=64513"/>
		<updated>2014-02-15T20:44:57Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Dokumentationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dokumentationen==&lt;br /&gt;
&lt;br /&gt;
[[/Max Mustermann/]]&lt;br /&gt;
&lt;br /&gt;
[[/Monika Schwarz/]]&lt;br /&gt;
&lt;br /&gt;
[[/Matthias Busse/]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60806</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60806"/>
		<updated>2013-10-13T09:33:55Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60805</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60805"/>
		<updated>2013-10-13T09:30:23Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60804</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60804"/>
		<updated>2013-10-13T09:29:31Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Challenges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60803</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60803"/>
		<updated>2013-10-13T09:29:21Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60802</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60802"/>
		<updated>2013-10-13T09:29:08Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Challenges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60801</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60801"/>
		<updated>2013-10-13T09:28:57Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Challenges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60800</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60800"/>
		<updated>2013-10-13T09:28:37Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Challenges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60799</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60799"/>
		<updated>2013-10-13T09:28:19Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60798</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60798"/>
		<updated>2013-10-13T09:27:56Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Challenges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60797</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60797"/>
		<updated>2013-10-13T09:27:21Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjusting the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Challenges =&lt;br /&gt;
This project is only considered to be a pilot project, i.e. it is a non-system-wide application that acts on its own. Thereby, the overall feasibility of the different sensors is tested. In consequence, all three sensors offers great opportunities to enhance the iPhone&#039;s behavior. In a future project, they should be combined and be integrated in the system-wide ringtone. Nevertheless, the major challenge is related to privacy issues. Imagine an app that is allowed to record your environment or take a picture automatically...&lt;br /&gt;
&lt;br /&gt;
In order to integrate it&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Acc.png&amp;diff=60786</id>
		<title>File:Acc.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Acc.png&amp;diff=60786"/>
		<updated>2013-10-12T16:21:35Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
Scales in the top - allowed to use&lt;br /&gt;
== Source: ==&lt;br /&gt;
http://www.psdgraphics.com/psd/gold-weight-scales-icon-psd/&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Cam.png&amp;diff=60785</id>
		<title>File:Cam.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Cam.png&amp;diff=60785"/>
		<updated>2013-10-12T16:21:02Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
Lens in the top - allowed to use&lt;br /&gt;
== Source: ==&lt;br /&gt;
http://www.psdgraphics.com/psd-icons/psd-camera-lens-icon/&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib2.png&amp;diff=60784</id>
		<title>File:Lib2.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib2.png&amp;diff=60784"/>
		<updated>2013-10-12T16:20:19Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60783</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60783"/>
		<updated>2013-10-12T16:19:13Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjust the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib2.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib.png&amp;diff=60782</id>
		<title>File:Lib.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Lib.png&amp;diff=60782"/>
		<updated>2013-10-12T16:17:40Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Mic.png&amp;diff=60781</id>
		<title>File:Mic.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Mic.png&amp;diff=60781"/>
		<updated>2013-10-12T16:17:17Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Copyright status: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
Microphone in the top - allowed to use&lt;br /&gt;
&lt;br /&gt;
== Source: ==&lt;br /&gt;
http://www.psdgraphics.com/psd-icons/old-microphone-icon-psd/&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Mic.png&amp;diff=60780</id>
		<title>File:Mic.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Mic.png&amp;diff=60780"/>
		<updated>2013-10-12T16:16:35Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
Allowed to use&lt;br /&gt;
== Source: ==&lt;br /&gt;
http://www.psdgraphics.com/psd-icons/old-microphone-icon-psd/&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Launch.png&amp;diff=60779</id>
		<title>File:Launch.png</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=File:Launch.png&amp;diff=60779"/>
		<updated>2013-10-12T16:15:03Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
== Copyright status: ==&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{self|cc-by-sa-3.0}}&lt;br /&gt;
== Source: ==&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60778</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60778"/>
		<updated>2013-10-12T16:13:00Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjust the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60777</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60777"/>
		<updated>2013-10-12T16:12:51Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjust the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60776</id>
		<title>IFD:IOSDevI/Projects/Ringer</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI/Projects/Ringer&amp;diff=60776"/>
		<updated>2013-10-12T16:12:32Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Created page with &amp;quot;= Description =  Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. Th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description =&lt;br /&gt;
&lt;br /&gt;
Ringer is a pilot project trying to enhance the behavior of the iPhone during an incoming call in terms of both the ringtone volume and the kind of vibration. The reader may remember the times of good old barren phones with their different profiles like &#039;Meeting&#039;, &#039;Asleep&#039; or &#039;Garden&#039;. Unfortunately, this feature is not available in the iPhone. There is a mode called &amp;quot;Do not disturb&#039;, which nevertheless only mutes the ringtone at all. An implementation of different profiles, the manually setting of them and thereby, adjust the ringtone volume and vibration mode, is not challenging. Like all modern smartphones, the iPhone offers a wide range of different sensors that can be useful in this regard. With the help of these, the adjustment could be done fully automated in the background. This is what this project tries to achieve. In more detail, the following three sensors are tested for feasibility:&lt;br /&gt;
&lt;br /&gt;
=== Microphone ===&lt;br /&gt;
The surrounding noise in the current environment is recorded right before the ringtone is about to be played. Then, the volume is adjusted automatically. The louder the environment, the more the volume is increased. To test this sensors, just tap on the microphone icon in the first tab to start recording and see the volume slider changing. In order to get a impression of the volume, either play the build-in song or choose one in your music library by tapping the menu button left to the stop button. Deactivate the microphone by tapping the symbol again (this is done automatically if a song is played).&lt;br /&gt;
&lt;br /&gt;
=== Camera ===&lt;br /&gt;
A picture is taken with the front camera right before the vibration is about to be played. This is then analyzed with regard to dark pixels. If the image is considered to be dark, the app acts on the assumption that the iPhone is in a bag and thereby, an intensive vibration is played to make the user aware of the incoming call. In case the picture is bright, the phone probably lies on a desk and the front camera is facing the roof; thus, a short vibration is triggered. As a result, chattering phones on a desk disturbing all people around become obsolete. Take a picture by tapping the lens in the second tab and notice the selected vibration mode. You can get an impression of the corresponding mode by tapping the play button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
Again, this sensor is activated right before the vibration is about to be played. The accelerometer checks the orientation of the iPhone. In case it lies on a desk, the orientation of the z-axis is either nearly -1 or +1 and as a result, a short vibration is played; otherwise, an intensive one. Tap the scales on the third tab to activate the accelerometer and see the axes adjusting to the current orientation. Deactivate the accelerometer by tapping the scales again (this is done automatically if a vibration is played).&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
[[File:launch.png|left|thumb|Launch screen]]&lt;br /&gt;
[[File:mic.png|left|thumb|Microphone for recording surrounding noise]]&lt;br /&gt;
[[File:lib.png|left|thumb|MediaPicker for choosing song to be played]]&lt;br /&gt;
[[File:cam.png|left|thumb|Camera for checking place (e.g. in a bag)]]&lt;br /&gt;
[[File:acc.png|left|thumb|Accelerometer for checking place (e.g. on a desk)]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI&amp;diff=60775</id>
		<title>IFD:IOSDevI</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:IOSDevI&amp;diff=60775"/>
		<updated>2013-10-12T15:40:29Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Iosdev_newTeaserpic.jpg|right|320px]]&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Programming for iPhone, iPad und iPod Touch&#039;&#039;&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:Category:Fachmodul|Fachmodul]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Lecturer:&#039;&#039; [[Michael Markert]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Credits:&#039;&#039; 6 [[ECTS]], 3 [[SWS]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Date:&#039;&#039; Tuesdays, 13:30 until 16:00 h&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Venue:&#039;&#039; [[Marienstraße 7b]], Room 105&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;First meeting:&#039;&#039; Tuesday, 16.4.2013&lt;br /&gt;
&lt;br /&gt;
  IMPORTANT: This is the first part of a two-term Fachmodul!&lt;br /&gt;
  It is expected that participants attend both courses.&lt;br /&gt;
&lt;br /&gt;
The course from last year can be found here: &lt;br /&gt;
[[IFD:IOSDevI SS12]]&lt;br /&gt;
&lt;br /&gt;
Gerade als die Schlagworte &amp;quot;ubiquitäres Computing&amp;quot; und &amp;quot;Augmented Reality&amp;quot; trotz immer leistungsfähigeren mobilen Endgeräten ihren Glanz zu verlieren scheinen, sind die iOS Geräte und das iPad dabei, diese Begriffe mit neuem Leben zu füllen: Nicht nur in Bedienung und User Interface werden neue Maßstäbe gesetzt, vor allem die auf den Absatz von Applikationen ausgerichtete Konzeption der Gerätefamilie und eine gut durchdachte Entwicklungsumgebung befördert Rekordzahlen an Software-Neuerscheinungen im App Store. 2010 gab es nur ein Tablet: das iPad. Die Absatzzahlen der iPhones haben sich von 2009 zu 2010 verdoppelt und die Berufsaussichten für iOS Entwickler sind im Moment glänzend.&lt;br /&gt;
&lt;br /&gt;
Dieses Fachmodul zollt dieser Entwicklung Anerkennung und gibt Einblick in die Programmierung für iOS 5.x. Die Einführung des Kurses in Objective-C 2.0, die Vorstellung der wichtigsten Frameworks sowie der Entwicklungsumgebung Xcode / Interface Builder sind übrigens in weiten Teilen auch für native OS X Anwendungen gültig.&lt;br /&gt;
&lt;br /&gt;
Im Lauf des Werkmoduls soll eine kleine Applikation umgesetzt werden (Medienkunst, Experiment, Game, Utility…). Verknüpfungen mit Semesterprojekten und das Zusammenfinden in Teams von Programmierern und Designern sind ausdrücklich erwünscht. Ein spezieller Developer Account mit Zertifikat für teilnehmende Studenten ist vorhanden; damit können Anwendungen auch ohne weitere Kosten auf den eigenen Geräten getestet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Fachmodul richtet sich sowohl an Studierende der Medieninformatik als auch der Medienkunst/Mediengestaltung und Gestaltung, die sich mit mobilen Anwendungen für iOS Geräte (iPhones, iPod Touch und iPad Geräten) technisch beschäftigen und künstlerisch auseinandersetzen wollen. Der Kurs stellt die beiden grundsätzlichen Möglichkeiten (Web-Apps und ObjC-Apps) vor. Dabei liegt der Schwerpunkt auf nativen Applikationen, die mit Objective-C programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Themen des Kurses sind:&lt;br /&gt;
* Einführung in Objective-C 2.0 &lt;br /&gt;
* Übersicht Cocoa Touch: iOS 5 Frameworks (UIKit, Foundation…)&lt;br /&gt;
* Einführung in die Entwicklungsumgebung Xcode 4&lt;br /&gt;
* Generelle Programmierkonzepte der objektorientierten Objective-C Sprache und des Cocoa-Touch Frameworks&lt;br /&gt;
* Künstlerische Auseinandersetzung mit dem Medium und Fragen der Interaktion&lt;br /&gt;
&lt;br /&gt;
Als Voraussetzung für dieses Fachmodul ist aufgrund der erhöhten Komplexität (Umgang mit einer höheren objektorientierten Programmiersprache) die Vorkenntnis einer (beliebigen) Programmiersprache erforderlich. &lt;br /&gt;
Außerdem wird für die Entwicklung ein eigener Mac Rechner mit Intel-Prozessor und OS X 10.7 benötigt.&lt;br /&gt;
&lt;br /&gt;
Dieser Kurs wird auf Englisch abgehalten.&lt;br /&gt;
&lt;br /&gt;
== English Description ==&lt;br /&gt;
Just as the buzzwords &amp;quot;Ubiquitous Computing&amp;quot; and &amp;quot;Augmented Reality&amp;quot; are beginning to lose their thrilling denotation, the iPhone and especially the iPad is becoming an exciting platform to set standards - not only regarding the user interface, but also with its application based paradigm and a well-thought development environment. In 2010 there was just one tablet available: the iPad. And the career prospects for iOS developers are certainly very promising.&lt;br /&gt;
&lt;br /&gt;
This module is paying tribute to this progress and is aiming to give an insight into programming concepts for iOS 5 incl. Objective-C 2.0, the related iOS frameworks and the Xcode IDE (which is - by the way - also valid in most parts for application development for the Mac OS X operating system).&lt;br /&gt;
&lt;br /&gt;
At the end of this course, students should have developed a small (!) application (media art, experiment, game, utility...). Combinations with semester projects and teamwork between artists/designers and programmers are very welcome. All participants may access a University&#039;s iPhone Developer Account, that enables us to test applications on devices without further expenses.&lt;br /&gt;
&lt;br /&gt;
The Module is open for Media-Systems, MediaArts &amp;amp; Design and the Design Faculty. Because of the advanced topics, it is required to have knowledge of at least one programming language (the concepts of variables, functions, arrays etc... should be known). To develop for iOS, an Intel-based Mac running Mac OS X 10.7 is required. Unfortunately we have no iOS devices to lend, so if you don&#039;t want to be restricted to the simulator, you should also have a iOS device (iPhone, iPod Touch, iPad).&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
* [[iOS]], [[iPhone]] &amp;amp; [[iPad]] (General, App Showcase)&lt;br /&gt;
* [[iOS Coding Resources and Tools]] - incl. 3rd Party Frameworks, Templates, Open Source Projects &amp;amp; Classes...&lt;br /&gt;
* [[IPhoneDev|iOS Development Setup]] (SDK-Download, App-Signing How-To)&lt;br /&gt;
** [[Application Types]]&lt;br /&gt;
*** Immersive, Productivity, Utility&lt;br /&gt;
*** View-Based, Quartz 2d, OpenGL&lt;br /&gt;
** [[Xcode]]&lt;br /&gt;
** [http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/IB_UserGuide/Introduction/Introduction.html Interface Builder]&lt;br /&gt;
** [[Debugging]]&lt;br /&gt;
* [[Objective-C]] 2.0&lt;br /&gt;
** [http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocDefiningClasses.html ObjC Classes]&lt;br /&gt;
** [[ObjC-Memory Management]] &amp;amp; [[ARC]]&lt;br /&gt;
* [[Cocoa Design Patterns]]&lt;br /&gt;
** [[Messaging]] (Methods, Subclassing, Delegation, Notification...)&lt;br /&gt;
** [[Target-Action-Paradigm]]&lt;br /&gt;
** [[MVC]] (Model / View / Controller)&lt;br /&gt;
** [[KVC]] (Key-Value-Coding)&lt;br /&gt;
* [[Cocoa Touch]] - the iPhoneOS Frameworks&lt;br /&gt;
** [[Foundation Classes]] (NSNumber, NSString, NSArray…)&lt;br /&gt;
** [[UIKit Classes]] (UIApplication, UIView, UIViewController, UITouch ...)&lt;br /&gt;
** ViewControllers: Navigation Controller, TabBar Controller, TableView Controller, ...&lt;br /&gt;
** TableViews&lt;br /&gt;
** ... (see Syllabus for further topics)&lt;br /&gt;
* [http://developer.apple.com/technologies/iphone/whats-new.html#api What&#039;s new in iOS]&lt;br /&gt;
* Einführung in [[Systemtheorie|kybernetische Systemtheorie]] als Interaktionsmodell&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
Below you find a documentation of the Student&#039;s Projects:&lt;br /&gt;
* [[/Projects/Example|Example Project]] (Please duplicate this example link and add your project)&lt;br /&gt;
* [[GMU:CyberSpace/IPuppet|IPuppet]]&lt;br /&gt;
* [[IFD:IOSDevI/Projects/IDontKnow|I Don&#039;t Know]]&lt;br /&gt;
* [[IFD:IOSDevI/Projects/Ringer|Ringer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Projects from the last year can be found at [[IFD:IOSDevI SS12#Projects]]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Access to a Intel-Mac running 10.7.&lt;br /&gt;
** We have one Mac Mini available. Please get in touch with Michael!&lt;br /&gt;
* An iOS Device (iPhone, iPod Touch, iPad) &lt;br /&gt;
** It&#039;s possible to develop without device (Simulator) &lt;br /&gt;
* Previous knowledge of at least one programming language (e.g. C or JAVA)&lt;br /&gt;
&lt;br /&gt;
If you have questions, please send an eMail!&lt;br /&gt;
&lt;br /&gt;
== Registration Procedure ==&lt;br /&gt;
To register for the course, please send an eMail to Michael.Markert (at) uni-weimar.de incuding the following informations:&lt;br /&gt;
* Name&lt;br /&gt;
* program and semester (Studienprogramm und Fachsemester)&lt;br /&gt;
* matriculation number (Matrikelnummer)&lt;br /&gt;
* Angabe der geltenden Prüfungsordnung (eg. PV27 or PV29)&lt;br /&gt;
* Valid email address @uni-weimar.de (no other mailing addresses will be accepted)&lt;br /&gt;
* Do you fulfill the requirements?&lt;br /&gt;
** Do you have access to an Intel Mac running at least Mac OS 10.7&lt;br /&gt;
** Important: Which programming languages do you know and to what extend?&lt;br /&gt;
&lt;br /&gt;
Sollte es mehr als 20 Bewerber geben, entscheidet die Reihenfolge des Eingangs, die gleichzeitige Teilnahme an begleitenden Semesterprojekten der Professur Interface Design und das Fachsemester (evtl. letzte Chance zur Kursbelegung) über die Aufnahme in den Kurs.&lt;br /&gt;
&lt;br /&gt;
== Leistungsnachweis ==&lt;br /&gt;
Regular and active attendance, compilation of all demos, realisation of a small iOS project idea, either as Web-App (HTML/CSS/JavaScript) or (preferred) as native application. Additional ongoing and final documentation in the wiki and short presentation during the course and the [[IFD:Showreel]].&lt;br /&gt;
It may be that the results of some short online-test will be added to the grading.&lt;br /&gt;
&lt;br /&gt;
Grading:&lt;br /&gt;
* Attendance (25%)&lt;br /&gt;
* Documentation (30%)&lt;br /&gt;
* Realisation of the concept (45%)&lt;br /&gt;
** Technical Design (15%)&lt;br /&gt;
** Interaction Design (15%)&lt;br /&gt;
** Visual/Acoustic Design (15%)&lt;br /&gt;
* Wiki-Bonus (10%)&lt;br /&gt;
&lt;br /&gt;
== Zielgruppe ==&lt;br /&gt;
Das Werkmodul richtet sich an Studierende aller Fachrichtungen, die sich mit Anwendungen für iPhones, iPads bzw. iPod Touch Geräten technisch beschäftigen und künstlerisch auseinandersetzen wollen, insbesondere an:&lt;br /&gt;
* Master-Studenten der Medienkunst/Mediengestaltung&lt;br /&gt;
* Master-Studenten der Medieninformatik&lt;br /&gt;
* Master-Studenten des postgradualen Studiengangs Media-Architecture&lt;br /&gt;
* Diplom-Studenten der Gestaltung&lt;br /&gt;
&lt;br /&gt;
== Syllabus ==&lt;br /&gt;
This is a preliminary syllabus, there will be changes according to the needs of the student&#039;s projects&lt;br /&gt;
# &amp;lt;del&amp;gt;09.04.&amp;lt;/del&amp;gt; NO COURSE (due to illness, sorry!)&lt;br /&gt;
# 16.04. Intro, Showcase, Application Types, iOS, Xcode, Interface Builder, Target/Action Demo&lt;br /&gt;
# 23.04. Designing for iOS, Objective-C 2.0, Datatypes&lt;br /&gt;
# 30.04. Objective-C 2.0, Properties, Object Oriented Programming, Classes &amp;amp; Instances, Project Talk&lt;br /&gt;
# 07.05. Foundation Overview, UIKit Overview, UIWebView Demo&lt;br /&gt;
# 14.05. Memory Management &amp;amp; ARC, Object Lifecycle, Xcode in depth, Debugging Demo&lt;br /&gt;
# 21.05. Recap, Quick Test, Project Talk (Attendance absolutely required!)&lt;br /&gt;
# 28.05. MVC, View Controllers, Navigation- &amp;amp; TabBar Controller&lt;br /&gt;
# 04.06. Cocoa Design Patterns I (MVC, Target-Action, DataSources, Delegates, KVC/KVO, Notifications ...)&lt;br /&gt;
# 11.06. Cocoa Design Patterns II (Categories, Singletons, Protocols: ModalViews), Blocks&lt;br /&gt;
# 18.06. TextInput (TextInput Delegation, UIPasteboard &amp;amp; Localisation), UIImagePicker (Photo &amp;amp; Camera Access)&lt;br /&gt;
# 25.06. Timers, Data &amp;amp; Persistance (UserPreferences, Settings, NSCoder &amp;amp; NSKeyedArchiver, SQLite, CoreData), Project Talk&lt;br /&gt;
# 02.07. Shake, Xcode Tipps &amp;amp; Tricks, Project Talk&lt;br /&gt;
# 09.07. TableViews, Project Talk&lt;br /&gt;
# To be continued in iOS Dev II next term: Views, Coordinate Space, ScrollViews, Core Animation, Views &amp;amp; Drawing, Audio, Video, Custom Table Cells, Touch Events, Multi-Touch, Gestures, Location, Maps, CoreMotion &amp;amp; Accelerometer, Undo, Blocks, Multitasking, Quick Overview: Gamekit, Instruments, Unit Testing, what&#039;s new in iOS, Battery Life &amp;amp; Power Management, Performance (Memory Usage, Leaks, Autorelease, Threads vs. Blocks)&amp;lt;br/&amp;gt;Bonjour &amp;amp; Networking&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
# 20.09. Final Deadline (see below)&lt;br /&gt;
&lt;br /&gt;
Hand-in of the results:&lt;br /&gt;
* Brief documentation here in the Wiki with one to three screenshots and short explanation&lt;br /&gt;
* (Maybe) 2-min presentation at the [[IFD:Showreel2012|IFD:Showreel]] &lt;br /&gt;
* and (via E-Mail or Download-Link): compilable, open Xcode project file (please delete the intermediate build folder!), Deadline is the 20.09.2012.&lt;br /&gt;
&lt;br /&gt;
== Literature ==&lt;br /&gt;
Weitere Literatur- und Links finden sich in den jeweiligen Untersektionen.&lt;br /&gt;
&lt;br /&gt;
=== Official ===&lt;br /&gt;
* [http://developer.apple.com/iphone/manage/overview/index.action Bauhaus-iOS @ developer.apple.com]&lt;br /&gt;
* Apple&#039;s User Interface Guidelines for the iPhone Plattform: [http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html User Experience]&lt;br /&gt;
* [http://developer.apple.com/iphone/library/navigation/index.html iOS Reference Library]&lt;br /&gt;
* [http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/000-Introduction/introduction.html iOS Development Guide] - Introduction&lt;br /&gt;
* [http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html iOS Programming Guide]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials &amp;amp; Online-Courses ===&lt;br /&gt;
* &#039;&#039;&#039;[http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.2024353965.02024353968 iTunes U: Stanford Programming iPhone Course]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://developer.apple.com/videos/ Apple Developer Videos]&#039;&#039;&#039; (for registered developers)&lt;br /&gt;
* [http://icodeblog.com/2008/07/26/iphone-programming-tutorial-hello-world/ iCodeBlog iPhone Tutorials]&lt;br /&gt;
* [http://www.idev101.com/ iOS Development 101]&lt;br /&gt;
&lt;br /&gt;
=== Literatur ===&lt;br /&gt;
* &#039;&#039;&#039;O&#039;Reilly: [http://www.headfirstlabs.com/books/hfiphonedev/ Head First iPhone Development], ISBN 978-0-596-80354-4&#039;&#039;&#039;&lt;br /&gt;
* O&#039;Reilly &amp;amp; MAKE: iPhone Open Application Development, ISBN 9780596516642&lt;br /&gt;
* O&#039;Reilly iPhone Game Development: Paul Zirkle &amp;amp; Joe Hogue, ISBN 978-0-596-15985-6&lt;br /&gt;
* Beginning iPhone Development: Dave Mark, Jeff LaMarche, ISBN 978-1430224594&lt;br /&gt;
* iPhone SDK Programming, Advanced Mobile Development: Maher Ali, ISBN 978-0-470-68398-9&lt;br /&gt;
* iPhone Advanced Projects: Apress, ISBN 978-1430224037&lt;br /&gt;
* iPhone Design Award Winning Projects: Apress, ISBN 978-1-4302-7235-9 &amp;amp; eBook ISBN 978-1-4302-7234-2&lt;br /&gt;
* Beginning iPhone SDK Programming with Objective-C, Wei-Meng Lee, ISBN 978-0470500972&lt;br /&gt;
* Pragmatic iPhone 3.0 SDK Development: Bill Dudney &amp;amp; Chris Adamson. ISBN 978-1-93435-625-8&lt;br /&gt;
* Web-Applications: Professional iPhone and iPod Touch Programming - Building Applications for Mobile Safari, ISBN 978-0-470-25155-3&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die hier aufgeführte Literatur ist optional und nicht verbindlich! Beim Privatkauf englischsprachiger Literatur bitte beachten, dass diese nicht der deutschen Buchpreisbindung unterliegt (z.B. Head First iPhone Dev im Januar 2010 bei Thalia 48,-, bei Amazon 27,-)!&lt;br /&gt;
&lt;br /&gt;
Teile der o.g. Literatur werden für die Teilnehmer des Kurses auf [http://elearning.uni-weimar.de Metacoon] digital verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
{{Template:iPhoneDev}}&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60774</id>
		<title>IFD:WebApps/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60774"/>
		<updated>2013-10-12T15:38:30Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60773</id>
		<title>IFD:WebApps/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60773"/>
		<updated>2013-10-12T15:37:48Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Phase III */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:quicklogin.jpg|left|thumb|Quick-Login (oben)]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60772</id>
		<title>IFD:WebApps/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60772"/>
		<updated>2013-10-12T15:37:13Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_contact_notvalid.jpg|left|thumb|ungültiges Kontaktformular (fehlende Information)]]&lt;br /&gt;
[[File:bookle_contact_notvalid2.jpg|left|thumb|ungültiges Kontaktformular (E-Mail-Format)]]&lt;br /&gt;
[[File:bookle_contact_valid.jpg|left|thumb|gültiges Kontaktformular mit Rückmeldung]]&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:quicklogin.jpg|left|thumb|Quick-Login (oben)]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_Busse&amp;diff=60770</id>
		<title>IFD:WebApps/Matthias Busse</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_Busse&amp;diff=60770"/>
		<updated>2013-10-12T15:35:08Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60769</id>
		<title>IFD:WebApps/Matthias B.</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Matthias_B.&amp;diff=60769"/>
		<updated>2013-10-12T15:34:11Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Created page with &amp;quot;{{Template:User|Stulle}}  == (Ursprüngliche) Projektbeschreibung == Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
[[File:bookel contact.jpg|left|thumb|Kontaktseite]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_contact_notvalid.jpg|left|thumb|ungültiges Kontaktformular (fehlende Information)]]&lt;br /&gt;
[[File:bookle_contact_notvalid2.jpg|left|thumb|ungültiges Kontaktformular (E-Mail-Format)]]&lt;br /&gt;
[[File:bookle_contact_valid.jpg|left|thumb|gültiges Kontaktformular mit Rückmeldung]]&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:quicklogin.jpg|left|thumb|Quick-Login (oben)]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/ProjekteWS10&amp;diff=60768</id>
		<title>IFD:WebApps/ProjekteWS10</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/ProjekteWS10&amp;diff=60768"/>
		<updated>2013-10-12T15:34:03Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* /Projekte/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[/Projekte/]] ==&lt;br /&gt;
* [[IFD:WebApps/DanceStage|Anastasiya P.]]&lt;br /&gt;
* [[/SvenSom|Sven S. - Bauhaus-Ersti.de]]&lt;br /&gt;
* [[/Woliegtwas|Sven S. - Projekt2: Wo liegt was?]]&lt;br /&gt;
* [[IFD:WebApps/Carlo E. - Rakete Örschdorf.de|Carlo E. - Rakete Örschdorf.de]]&lt;br /&gt;
* [[IFD:WebApps/Christian H.|Christian H.]]&lt;br /&gt;
* [[IFD:WebApps/Matthias B.|Bookle]]&lt;br /&gt;
* [[IFD:WebApps/Rahn|Henry Rahn und sein Kombinat-Medien]]&lt;br /&gt;
* [[IFD:WebApps/PeterH.-liveforlife.de|Peter H. - liveforlife.de]]&lt;br /&gt;
* [[IFD:WebApps/Ani Jordanowa|Ani Jordanowa - noteCook]]&lt;br /&gt;
* [[IFD:WebApps/Stefanie Hofmann|Stefanie Hofmann - Portfolio]]&lt;br /&gt;
* [[IFD:WebApps/Eva Thinius|Eva Thinius : From Weimar With Love]]&lt;br /&gt;
* [[IFD:WebApps/Julien Simshäuser|Julien Simshäuser - Portfolio Website]]&lt;br /&gt;
* [[IFD:WebApps/Marcus Kossatz|Marcus Kossatz - Das Baumbach-Duo]]&lt;br /&gt;
* [[IFD:WebApps/Felix_Trojan|Felix Trojan - Friend Carpet]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/&amp;diff=60767</id>
		<title>IFD:WebApps/</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/&amp;diff=60767"/>
		<updated>2013-10-12T15:33:27Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/&amp;diff=60766</id>
		<title>IFD:WebApps/</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/&amp;diff=60766"/>
		<updated>2013-10-12T15:33:13Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: moved IFD:WebApps/ to IFD:WebApps/Bookle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IFD:WebApps/Bookle]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Bookle&amp;diff=60765</id>
		<title>IFD:WebApps/Bookle</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Bookle&amp;diff=60765"/>
		<updated>2013-10-12T15:33:13Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: moved IFD:WebApps/ to IFD:WebApps/Bookle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
[[File:bookel contact.jpg|left|thumb|Kontaktseite]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_contact_notvalid.jpg|left|thumb|ungültiges Kontaktformular (fehlende Information)]]&lt;br /&gt;
[[File:bookle_contact_notvalid2.jpg|left|thumb|ungültiges Kontaktformular (E-Mail-Format)]]&lt;br /&gt;
[[File:bookle_contact_valid.jpg|left|thumb|gültiges Kontaktformular mit Rückmeldung]]&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:quicklogin.jpg|left|thumb|Quick-Login (oben)]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Bookle&amp;diff=60764</id>
		<title>IFD:WebApps/Bookle</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/Bookle&amp;diff=60764"/>
		<updated>2013-10-12T15:32:38Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: Created page with &amp;quot;{{Template:User|Stulle}}  == (Ursprüngliche) Projektbeschreibung == Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:User|Stulle}}&lt;br /&gt;
&lt;br /&gt;
== (Ursprüngliche) Projektbeschreibung ==&lt;br /&gt;
Viele kennen diese Situation: Die aktuelle Lektüre ist ausgelesen, eine neue muss her. Entweder man hat das Glück und ein Bekannter hat eine Empfehlung parat, ansonsten wäre da noch der Gang in die Buchhandlung oder Stadtbibliothek. Hier kann man tagelang Klappentexte durchwälzen, aktuelle Mainstream-Bestseller finden oder den Kollegen um die Ecke fragen. Das ist nicht jedermanns Sache und er versucht sein Glück lieber gleich im Netz. Google-Anfragen alá „Was man gelesen haben muss“ oder „Bücher Geheimtipps“ sind da sicherlich keine Seltenheit. Dazu kommen dann die Bewertungssterne von Amazon und die ein oder andere Kundenrezension – schon hat man das nächste Buch in der Mangel. Auch hier ist nicht alles Gold was glänzt und man ist umso enttäuschter, weil das Buch dann noch zu gruselig ist, mehr Romantik hätte drin sein können oder die Seitenzahl einen überwältigt. Manch einer bevorzugt die Ich-Perspektive, ein anderer liest lieber Dinge, die auf einer wahren Begebenheit beruhen und ein Dritter will unbedingt ein Buch mit dessen Verfilmung vergleichen. Für jemanden, der viel unterwegs ist, kommt nur ein Buch im Taschenformat in Frage und Digitalliebhaber greifen sowieso nur zu Titeln, die auch als e-Book erhältlich sind. Dann wären da noch Kriterien wie Zyklen (Zweiteiler, Triologie, …) und Ehrungen/Preise. &lt;br /&gt;
&lt;br /&gt;
Neben den klassischen Einteilungen mit Autor, Genre, Schlagwörtern oder Erscheinungsjahr kann es also eine Vielzahl an Kriterien geben, die man gern für seine nächste Bettlektüre erfüllt haben möchte. Hier soll mein Konzept greifen. Ich will ein Buchempfehlungssystem aufsetzen, das ganz ähnlich wie bekannte Pendants in der Musik (last.fm, musicovery.com, pandora.com) funktionieren soll. Zum Einen soll es in einem kartesischen Koordinatensystem die Möglichkeit geben, die Stimmung des Buches zu bestimmen. Soll es witzig, actionreich, romantisch oder vielleicht eine Mischung sein? Hier stelle ich mir für jedes Buch ein paar Tags vor. Dazu kommen die oben genannten Auswahlkriterien. Ziel ist eine Trefferliste mit empfohlenen Büchern, eventuell mit einer Trefferquote und Kaufoptionen bei Amazon und Co. versehen.&lt;br /&gt;
&lt;br /&gt;
== Geplante Techniken ==&lt;br /&gt;
An &#039;&#039;&#039;HTML&#039;&#039;&#039; und Gestaltung mit &#039;&#039;&#039;CSS&#039;&#039;&#039; führt kein Weg vorbei. Dazu kommt ein Datenbanksystem alá &#039;&#039;&#039;MySQL&#039;&#039;&#039; mit &#039;&#039;&#039;PHP&#039;&#039;&#039; für die einzelnen Bücher. Im Gegensatz zur Auszeichnungssprache ist hier mein Vorwissen gleich 0. Es wird sich zeigen, inwiefern ich mein Vorhaben umsetzen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsphasen ==&lt;br /&gt;
=== Phase I ===&lt;br /&gt;
Da der Name Bookle nicht von irgendwoher kommt und um meinen etwas eingerosteten HTML-Fähigkeiten wieder auf die Sprünge zu helfen, liegt es für mich nahe, ein Webinterface im typischen Google-Design auf die Beine zu stellen. Hier will ich recht nah am Original bleiben, sodass Logo, Schriftart und prinzipieller Seitenaufbau unverkennbar &#039;&#039;&amp;quot;google-like&amp;quot;&#039;&#039; sind. Die Suchseite soll zweigeteilt werden. Als Default sollen nur klassische Suchoptionen wie Titel, Autor, ISBN etc. erscheinen. Mit einem Button soll dann auch die spezifische Suche möglich sein, wo dann Erzählperspektive, Format u.a. zu sehen sind. Dafür will ich ein wenig JavaScript reinbringen, allerdings ohne die Funktionalität der Seite einzuschränken. Soll heißen: Im weiteren Verlauf muss ich dann eine JS-Brücke einbauen, sodass der User gleich auf die für ihn passende Version (mit oder ohne JS) weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:google-desgin1.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:google-desgin2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase II ===&lt;br /&gt;
Dass ich das Google-Design nicht bis zum Ende durchziehen kann (Stichwort: Copyright), war mir schon anfangs bewusst. Daher muss ein Bookle-eigenes Design her. Selbiges soll schlicht und elegant sein, ganz im Gegensatz zu Amazon und Co., wo Farbenfreude und Eyecatcher dominieren. Dafür will ich eher dunklere Farben nehmen und klare Verhältnisse auf der Seite schaffen - alles sauber geordnet und ohne Schnick-Schnack. Des Weiteren ist mir wichtig, dass das Design von hinten bis vorne passt: Farben für Links, Überschriften etc. sollen auch auf Folgeseiten beibehalten werden, genauso wie Schriftgrößen und natürlich die Fonts. Außerdem muss ich mein CSS-File besser ordnen und vielleicht kommentieren, da ich beim Google-Design oft hin- und herscrollen musste.&lt;br /&gt;
&lt;br /&gt;
Zu aller Erst will ich die Navigation und deren Seiten implementieren, sprich ein Home-Bereich mit Suchfunktion, ein kleines Wiki und selbstverständlich auch eine Kontaktseite. Die Resultatseite werde ich bis auf Weiteres nach hinten schieben, da ich dafür noch keinen blassen Schimmer habe.&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
Nach etlichen Designversuchen mit den unterschiedlichsten Hintergründen und Farben konnte ich mich nun endlich festlegen. Bei der Implementierung bin ich immer wieder über die einzelnen Browser-Eigenheiten gestolpert, allen voran IE. Ich entwickle mit Chrome + Firebug + Web Developer, Firefox kommt der Chromedarstellung ein Glück sehr nahe, sodass ich fast ausschließlich für den IE anpassen musste. &lt;br /&gt;
Auch das neue Logo steht nun: Es ist nicht ganz so schlicht wie die Seite an sich, durch die Farben und die beiden &#039;&#039;oo&#039;&#039; als Brille fügt es sich aber meines Erachtens gut in die Seite ein. Auch bin ich von dem sonst eckigen Stil der Seite weggegangen, da das Logo für mich ein Aushängeschild ist und sich guten Gewissens von der Seite abheben kann.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:bookle home.jpg|left|thumb|Startseite]]&lt;br /&gt;
[[File:bookle home2.jpg|left|thumb|mit erweiterter Suchoption]]&lt;br /&gt;
[[File:bookel about.jpg|left|thumb|HowTo]]&lt;br /&gt;
[[File:bookel contact.jpg|left|thumb|Kontaktseite]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase III ===&lt;br /&gt;
&lt;br /&gt;
Nachdem das Design nun mehr oder weniger steht, muss ich mich nun mit dem eigentlichen Aspekt der Website, der Buchdatenbank, widmen. Wie erwähnt gehen meine Kenntnisse hierbei nicht über &#039;&#039;&amp;quot;schon mal gehört&amp;quot;&#039;&#039; hinaus. Daher werde ich mir das Video-Tutorial von Galileo Computing (siehe [[IFD:WebApps/Matthias_Busse#Videotutorials|Quellen]]) zu Gemüte führen und versuchen, das Kontaktformular valide zu machen und mir eine E-Mail schicken lassen. Dafür kommen sowohl reguläre Ausdrücke als auch PHP in Frage. Dazu werde ich &#039;&#039;&#039;XAMPP&#039;&#039;&#039; unter die Lupe nehmen, dass mir die Arbeit mit dem Webserver/MercuryMail und später MySQL abnehmen wird. Für eine komfortable Handhabung müssen bei einer falschen Eingabe die schon getippten Information erhalten bleiben. &lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem will ich in dieser Phase erstmals ein Dummy für die Resultatseite erstellen. Die Umsetzung mit MySQL soll später folgen. Allerdings werde ich versuchen, mit jQuery eine Navigation für die Anzeigeoptionen per Slider ein- bzw- auszublenden.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_contact_notvalid.jpg|left|thumb|ungültiges Kontaktformular (fehlende Information)]]&lt;br /&gt;
[[File:bookle_contact_notvalid2.jpg|left|thumb|ungültiges Kontaktformular (E-Mail-Format)]]&lt;br /&gt;
[[File:bookle_contact_valid.jpg|left|thumb|gültiges Kontaktformular mit Rückmeldung]]&lt;br /&gt;
[[File:bookle_result.jpg|left|thumb|Dummy für Resultatseite (mit fester Navigation)]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code ====&lt;br /&gt;
Hier ein Ausschnitt aus der contact.php, mit dem ich die E-Mail-Adresse validiere:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
if (trim($_POST[&#039;email&#039;]) != &#039;&#039;){&lt;br /&gt;
  $name = &#039;[a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $domain = &#039;[a-zA-Z]((\.|\-)?[a-zA-Z0-9])*&#039;;&lt;br /&gt;
  $tld = &#039;[a-zA-Z]{2,8}&#039;;&lt;br /&gt;
  $regEx = &#039;^(&#039;.$name.&#039;)@(&#039;.$domain.&#039;)\.(&#039;.$tld.&#039;)$&#039;;&lt;br /&gt;
  if(!(ereg($regEx, $_POST[&#039;email&#039;]))) {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  $email = $_POST[&#039;email&#039;];&lt;br /&gt;
  } else {&lt;br /&gt;
    $fehler = $fehler . &#039;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
Die Einarbeitung in jQuery ging gut von der Hand, sodass ich zwei neue Features in die Seite bringen konnte. Zum Einen ist die Navigation nun ein- und wieder ausklappbar, zum Anderen wird jetzt nach dem Klick auf ein Buchcover eine Lightbox mit dem vergrößerten Cover angezeigt. Hierfür habe ich mich für das schlanke [http://www.digitalia.be/software/slimbox2 slimbox2] entschieden.&lt;br /&gt;
Des Weiteren habe ich die Favicons richtig verlinkt, indem ich den festen Präfix für die jeweilige Seite speichere und nur Autor und Titel HTML-konform ranhänge.&lt;br /&gt;
&lt;br /&gt;
[[File:bookle_result_navout.jpg|left|thumb|Die Navigation ausgeklappt...]]&lt;br /&gt;
[[File:bookle_result_navin.jpg|left|thumb|... und wieder eingeklappt]]&lt;br /&gt;
[[File:bookle_result_lightbox.jpg|left|thumb|Lightbox für die Buchcover]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase IV ===&lt;br /&gt;
&lt;br /&gt;
Seit dem letzten Update hat sich einiges getan. Ich konnte viele Punkte der To-Do-Liste abarbeiten, nur kamen während dessen leider auch immer wieder neue Kleinigkeiten hinzu. Die meiste Zeit in dieser Phase beanspruchte nicht das Layout der neuen Seiten, sondern die Implementierung dahinter, die leider wie so oft beim fertigen Produkt so gut wie nicht zu sehen ist. Insbesondere die Einarbeitung in PHP und dessen Anwendung war für mich neu und anspruchsvoll. &lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht über die Veränderungen:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Validierung und Erweiterung des Search- und Add-Formulars&#039;&#039;&#039;&lt;br /&gt;
**Hierbei frage ich mit unzähligen PHP-Klauseln ab, ob alle geforderten Daten fürs Hinzufügen eines Buches auch eingegeben wurden und natürlich auch ob diese den Anforderungen genügen. Dazu gehört eine ISBN im 13er Format, gültige Jahreszahlen, etc. Dazu muss Sprache, Genre, Erscheinungsdatum und einige neue Optionen wie Emotion, Protagonist oder Seitenzahl ausgewählt sein. Für eine Orientierung habe ich die text-inputs schon vorbelegt, damit der Nutzer eine Art Vorlage hat. Bei Selektion des entsprechenden Feldes verschwindet diese Vorlage automatisch und wird auch wieder eingeblendet, wenn der User nichts eingibt.&lt;br /&gt;
**Des Weiteren wird der User nach erfolgreicher Übertragung des Formulars gebeten, ein Cover nach bestimmten Anforderungen (Dateigröße, Bildformat, -größe) hochzuladen. Anschließend wird eine Übersicht erstellt und er kann entweder bestätigen und das Buch abschicken oder seine Daten bearbeiten.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Anpassung der Selects, Radio-Buttons und Checkboxen an das Design&#039;&#039;&#039;&lt;br /&gt;
**Eine recht schwierige Aufgabe, da hier leider CSS allein nicht hilft. Die Browser stellen sich dumm und lassen nur die standardisierten Inputs zu. Also musste zusätzlich JavaScript und Photoshop herhalten. Nach vielem Gefrikel und Rumdoktorn mit JavaScript war ich endlich zufrieden und die Buttons sind keine Eye-Catcher mehr, so wie Michael es zurecht beanstandete. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;My Bookle&#039;&#039;&#039;&lt;br /&gt;
**Als zusätzliches Feature habe ich einen Login für Bookle implementiert. User haben nach einer Registrierung ein eigenes Benutzerkonto mit zahlreichen Möglichkeiten. So können sie Bücher aus der den Suchresultaten auf eine To-Read Liste oder eine Favoritenliste setzen. Hierzu genügen Klicks auf das Herz- bzw. Buchstapelsymbol neben den Buchcovern. Außerdem kann man Suchanfragen speichern, um mit dem Stöbern auch Tage später fortzufahren. Hat man ein Buch in der To-Read- oder Favoritenliste, kann man sie von dort aus Freunden via Facebook oder Twitter zeigen. Auch hierzu reicht ein Klick auf das jeweilige Faviconsymbol. &lt;br /&gt;
**Anhand der gespeicherten Favoriten kann man Bookle erlauben, sich ähnliche Bücher als Empfehlung per Mail schicken zu lassen. Diese Option (und weitere) kann man dann in den Kontoeinstellungen ändern.&lt;br /&gt;
**Außerdem habe ich der To-Read- und Favoritenliste sowie der Seite mit den gespeicherten Suchanfragen ein ein-/ausklappbares How-To spendiert, um die Funktionsweise jedem Nutzer bekannt zu machen.  &lt;br /&gt;
**Für die einfache und schnelle Handhabung habe ich zusätzlich ein Quick Login oben auf jeder Seite platziert, der sich mittles jQuery ausklappen lässt und eine Sofortanmeldung/-abmeldung erlaubt. &lt;br /&gt;
**Wem Bookle gut gefällt, kann unter &amp;quot;Tell A Friend&amp;quot; die Seite per Facebook, Twitter oder per Mail empfehlen. Dazu waren die &amp;quot;Gefällt mir&amp;quot;-Buttons von den beiden Netzwerken sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Nicht-JavaScript-Nutzer-freundlich&#039;&#039;&#039;&lt;br /&gt;
**Hierbei habe ich mir ehrlich gesagt nicht die große Mühe gemacht. Wer JavaScript ausschaltet, hat natürlich trotzdem den vollen Funktionsumfang verdient, nicht jedoch den uneingeschränkten Komfort. Also lasse ich das &amp;quot;Advanced Search&amp;quot;-Menü, den Quick-Login, Accounteinstellungen etc. einfach mit JavaScript ausblenden. Wer es deaktiviert, muss meiner Meinung nach mit voll ausgeklappten Menüs leben können. Solch eine derbe Einschränkung sollte das nicht sein.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;I&#039;m Feeling Lucky-Seite&#039;&#039;&#039;&lt;br /&gt;
**Ein zufälliges Buch aus der Datenbank ausgewählt, ansehnlich präsentiert - fertig ist die I&#039;m Feeling Lucky-Seite.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Bookle Favicon&#039;&#039;&#039;&lt;br /&gt;
**Zu jedem vernünftigen Internetauftritt gehört auch ein eigenes Favicon. Dafür habe ich die Brille im B&#039;&#039;&#039;oo&#039;&#039;&#039;kle-Logo gewählt. Klein, aber fein sollte das gewählte Favicon eines mit Wiedererkennungswert sein.&lt;br /&gt;
&lt;br /&gt;
==== Screenshots ====&lt;br /&gt;
[[File:advadd-failure2.jpg|left|thumb|Ausgeklapptes Formlular mit Fehlermeldung]]&lt;br /&gt;
[[File:upload-failure.jpg|left|thumb|Fehlgeschlagener Cover-Upload]]&lt;br /&gt;
[[File:login.jpg|left|thumb|Login-Bereich]]&lt;br /&gt;
[[File:quicklogin.jpg|left|thumb|Quick-Login (oben)]]&lt;br /&gt;
[[File:reg-why.jpg|left|thumb|Warum bei Bookle registieren?]]&lt;br /&gt;
[[File:mybookle-favored.jpg|left|thumb|My Bookle - Favoritenliste (mit Empfehlung via Facebook &amp;amp; Twitter)]]&lt;br /&gt;
[[File:mybookle-query.jpg|left|thumb|My Bookle - Gespeicherte Suchanfragen]]&lt;br /&gt;
[[File:mybookle-result.jpg|left|thumb|Resultseite im einloggten Zustand (mit Herz-, Buchsymbol)]]&lt;br /&gt;
[[File:lucky.jpg|left|thumb|I&#039;m Feeling Lucky]]&lt;br /&gt;
[[File:bookle-favicon.jpg|left|thumb|Bookle&#039;s Favicon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase V ===&lt;br /&gt;
&lt;br /&gt;
In dieser letzten Entwicklungsphase waren nur noch Kleinigkeiten zu tun. Letzte Tests wurden durchgeführt, der ein oder andere Verlinkungsfehler ausgemerzt und PHP-Optimierungen vorgenommen. Außerdem galt es letzte Browsereigenheiten zu bewältigen. Der IE ist zwar immernoch eine Klasse für sich (man muss wahrscheinlich einsehen, dass man es nicht schafft, alles anzupassen) und auch im Firefox klappt nicht alles wie es soll (Schriftgröße kleiner, Logo warum auch immer leicht verpixelt), aber im Großen und Ganzen passt alles recht gut.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren kommen auf Bookle nun Cookies zum Einsatz, um die Seite noch komfortabler zu gestalten. So bleibt u.a. die &amp;quot;Erweiterte Suche&amp;quot; ausgeklappt, wenn man beim Hinzufügen eines Buches eine Fehlermeldung erhält (durch das Neuladen der Seite war dies anfangs immer eingeklappt).&lt;br /&gt;
&lt;br /&gt;
Außerdem wurde Bookle unter iOS 4.2.1 auf dem iPhone getestet. Hierbei wurde ich positiv überrascht, konnte man doch alle Funktionen einwandfrei nutzen und auch das Layout war tadellos.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Mit Bookle geht mein erster und wahrscheinlich auch letzter Ausflug zu den Gestaltern zu Ende. Das liegt aber sicher nicht an schlechten Erfahrungen oder dergleichen, sondern vielmehr an den unterschiedlichen Studienmodulen. Ganz im Gegenteil, WebApps war ein abwechslungs-, erfahrungs- und lernreiches Projekt. So konnte ich meine Kenntnisse in HTML und CSS auffrischen und vertiefen, neue Aspekte wie PHP kennenlernen sowie schließlich auch meinen gestalterischen Fähigkeiten auf den Zahn fühlen. &lt;br /&gt;
&lt;br /&gt;
Auch wenn Bookle letztendlich einen anderen Weg als geplant eingeschlagen hat, bin ich dem Ergebnis mehr als zufrieden. Es ist keine interaktive Suchmaschine mit bunten Diagrammen und Instantsuche, dafür eine in meinen Augen ansehnliche, durchstrukturierte und vor allem hilfreiche Seite geworden. Nirgends im Web konnte ich eine derartige Suchportal finden, was die Sache auch ein wenig zukunftsträchtig macht. Der Spaß und Ehrgeiz am Projekt ging nie verloren, sodass die Zukunft von Bookle zwar noch nicht geschrieben, aber definitiv offen ist. Es gibt noch einige Dinge zu verbessern. Insbesondere fällt mir hier PHP ein, mit dem ich erstmals in Kontakt trat. Die Skripte sind sicher noch nicht optimiert, geschweige denn spielen sie die Stärken von PHP aus. Und wenn ich dann noch daran denke, dass dies alles nur ein Dummy ist - es gibt noch eine Menge Arbeit. Apropos Dummy: Hierbei ist es in Absprache mit Michael geblieben, der dankenswerterweise mehr Priorität auf Bedienbarkeit, Gestaltung und Features als auf Funktionalität legte. Daher fokussierte ich meine Arbeit mehr auf das Layout und das alle Seiten, die auch bei der späteren, funktionstüchtigen Suchmaschine von Bedeutung sein werden, implementiert sind. &lt;br /&gt;
&lt;br /&gt;
Es war eine teils schweißtreibende, aber stets spannende Arbeit, an der ich immer meinen Spaß hatte und im Endeffekt auch gern mehr Zeit als nötig gesteckt habe. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist diese Beta-Version von Bookle auf [http://www.uni-weimar.de/~rabu3082/bookle/start.php meinem Universitätswebspace]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
=== WWW ===&lt;br /&gt;
* [http://www.selfhtml.org selfhtml.org]&lt;br /&gt;
* [http://www.php.net php.net]&lt;br /&gt;
&lt;br /&gt;
=== Videotutorials ===&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2842?GalileoSession=97076046A41xchYWI6o Galileo Computing - Modernes Webdesign mit CSS]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2238?GalileoSession=97076046A41xchYWI6o Galileo Computing - JavaScript &amp;amp; AJAX]&lt;br /&gt;
* [http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1977?GalileoSession=93574308A411lB93RSI Galileo Computing - PHP 5.3 und MySQL 5.1]&lt;br /&gt;
* [http://www.video2brain.com/de/products-563.htm Video2Brain - jQuery]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/ProjekteWS10&amp;diff=60763</id>
		<title>IFD:WebApps/ProjekteWS10</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=IFD:WebApps/ProjekteWS10&amp;diff=60763"/>
		<updated>2013-10-12T15:32:24Z</updated>

		<summary type="html">&lt;p&gt;Rabu3082: /* /Projekte/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[/Projekte/]] ==&lt;br /&gt;
* [[IFD:WebApps/DanceStage|Anastasiya P.]]&lt;br /&gt;
* [[/SvenSom|Sven S. - Bauhaus-Ersti.de]]&lt;br /&gt;
* [[/Woliegtwas|Sven S. - Projekt2: Wo liegt was?]]&lt;br /&gt;
* [[IFD:WebApps/Carlo E. - Rakete Örschdorf.de|Carlo E. - Rakete Örschdorf.de]]&lt;br /&gt;
* [[IFD:WebApps/Christian H.|Christian H.]]&lt;br /&gt;
* [[IFD:WebApps/|Bookle]]&lt;br /&gt;
* [[IFD:WebApps/Rahn|Henry Rahn und sein Kombinat-Medien]]&lt;br /&gt;
* [[IFD:WebApps/PeterH.-liveforlife.de|Peter H. - liveforlife.de]]&lt;br /&gt;
* [[IFD:WebApps/Ani Jordanowa|Ani Jordanowa - noteCook]]&lt;br /&gt;
* [[IFD:WebApps/Stefanie Hofmann|Stefanie Hofmann - Portfolio]]&lt;br /&gt;
* [[IFD:WebApps/Eva Thinius|Eva Thinius : From Weimar With Love]]&lt;br /&gt;
* [[IFD:WebApps/Julien Simshäuser|Julien Simshäuser - Portfolio Website]]&lt;br /&gt;
* [[IFD:WebApps/Marcus Kossatz|Marcus Kossatz - Das Baumbach-Duo]]&lt;br /&gt;
* [[IFD:WebApps/Felix_Trojan|Felix Trojan - Friend Carpet]]&lt;/div&gt;</summary>
		<author><name>Rabu3082</name></author>
	</entry>
</feed>