December 17, 2008

HCI-Patterns

In meiner Masterarbeit beschäftigte ich mich mit Patterns (dt. Muster) für den Bereich der Human Computer Interaction (HCI), also der Mensch-Computer-Interaktion und möchte in diesem kurzen Beitrag erörtern, was HCI-Patterns charakterisiert und wie sich diese beispielsweise hinsichtlich der Software-Patterns einordnen.

Patterns allgemein

Zunächst muss der Begriff des Pattern im Allgemeinen geklärt werden. So ist ein Pattern als eine Vorlage von Schritten zum Erreichen eines bestimmten Ziels beschrieben [Crowther 1995]. Weiter wurde der Begriff grundlegend durch den Architekten Christopher Alexander, der 253 Patterns im Bereich der städtischen Architektur definierte, geprägt. Alexander [1977] zufolge ist ein Pattern eine dreiteilige Regel, die eine Beziehung zwischen einem bestimmten Kontext, einem Problem und einer Lösung ausdrückt, wobei es sich um ein wiederkehrendes Problem handelt, das mit der entsprechenden Lösung immer behoben werden kann.

Software-Patterns

Die Idee etabliert Lösungswege in Form von Patterns zu beschreiben, fand mit den Design-Patterns der Gang of Four (GoF) Einzug in das Software-Engineering. Allerdings sind diese Patterns lediglich von Sofwareentwicklern zu verstehen, da diese häufig technische Konstrukte umschreiben. Dies steht im Widerspruch zu der ursprünglichen Idee von Alexander [Borchers 2000b, van Welie 2001, 98f], da die Patterns von Alexander das Ziel verfolgen möglichst benutzerfreundliche Lösungen zu beschreiben. Diese können auch von Laien verstanden werden, so dass sie mit den Spezialisten besser kommunizieren können, wobei die Zusammenarbeit zwischen Bauherr und Architekt ein Beispiel darstellt.

Zwar verwenden die Software-Patterns die gleiche Form zur Beschreibung, aber im Unterschied zu den Architektur-Patterns verfolgen sie andere Ziele, wie Wiederverwendbarkeit, Flexibilität und Effizienz eines Systems [van Welie u. a. 2000]. Obwohl die Patterns in der Softwaretechnik nicht dazu dienen, dass der Endbenutzer seine eigene Software-Architektur beschreiben kann, haben sie dennoch ihre Daseinsberechtigung: Sie schaffen ein Vokabular zur Kommunikation zwischen Softwareentwicklern [Borchers 2000a].

HCI-Patterns

Die Patterns im Bereich HCI unterstützen den ursprünglichen Gedanken von Alexander stärker, da diese Probleme des Endbenutzer lösen [Borchers 2000b, van Welie 2001, 98f]. Ein HCI-Pattern kann folgendermaßen definiert werden:
„An HCI design pattern captures the essence of a successful solution to a recurring usability problem in interactive systems.“ [Borchers 2001, S. 179]

Demnach fokussieren sich HCI-Patterns auf wiederkehrende Usability-Probleme, wobei Usability als die „Qualität eines Systems hinsichtlich der leichten Erlernbarkeit, Bedienbarkeit und der Benutzerzufriedenheit“ [Rosson und Carroll 2000, S. 9] dargestellt wird und als Gebrauchstauglichkeit übersetzt werden kann. Deshalb findet sich auch häufig der Begriff des Usability-Patterns [Borchers u. a. 2001, Mahemoff und Johnston 2001, Henninger und Ashokkumar 2005]. Einige Ausführungen konzentrieren sich besonders stark auf die Usability, wonach ein Pattern, das nicht mindestens eine Usability-Eigenschaft aus einer vorgegebenen Menge von Eigenschaften positiv beeinflusst, kein HCI-Pattern ist [van Welie u. a. 2000]. Allerdings existiert keine Einigkeit über die Eigenschaften, so dass exemplarisch die von van Welie u. a. [2000] und Mahemoff und Johnston [1998] aufgelistet sind:
van Welie u. a. [2000] Mahemoff und Johnston [1998]
- Lernfähigkeit - Aufgabeneffizienz (Einfacheit, Effizienz)
- Einprägsamkeit - Wiederverwendung (Konsistenz)
- Geschwindigkeit der Durchführung - Benutzer-Maschine Kommunikation (Rückmeldung)
- Fehlerhäufigkeit - Robustheit
- Zufriedenheit - Flexibilität
- Erledigung der Aufgabe - Verständlichkeit (Einfachheit, Vertrautheit, Visueller Aufbau)

Beispiele für HCI-Patterns

Zum Abschluss sind einige Patterns aus dem Bereich der HCI aufgeführt, so dass der Anwendungsbereich deutlicher erscheinen sollte. Des Weiteren sind zahlreiche Sammlungen angegeben, die HCI-Patterns beschreiben. Diese Liste ist allerdings nicht vollständig und bei der Verwendung sollte der Nutzen eines beschriebenen Patterns immer kritisch hinterfragt werden. Auch wenn ein Pattern in einer der Sammlungen aufgelistet ist, so ist das keine Garantie für die "Korrektheit" der beschriebenen Lösung.
Sammlungen von HCI-Patterns:

Shopping Card
Shopping Card

Literatur


[Borchers 2000a] BORCHERS, Jan: A Pattern Approach to Interaction Design. In: ACM (Hrsg.): Proceedings of the 3rd conference on Designing interactive systems: processes, practices, methods, and techniques, 2000 (Symposium on Designing Interactive Systems.), S. 369–378

[Borchers 2000b] BORCHERS, Jan O.: Interaction Design Patterns: Twelve Theses. In: The CHI 2000 Conference on Human Factors in Computing Systems, ACM, 2000, S. 2–3

[Borchers 2001] BORCHER S, Jan: A Pattern Approach to Interaction Design. John Wiley Sons, 2001. – ISBN 978-0-471-49828-5

[Borchers u. a. 2001] BORCHERS, Jan 0. ; FINCHER, Sally ; GRIFFITHS, Richard N. ; PEMBERTON, Lyn ; SIEMON, Elke: Usability pattern language: Creating a community. In: AI Society 15 (2001), Nr. 4, S. 377–385

[Crowther 1995] CROWTHER, Jonathan (Hrsg.): Oxford Advanced Learner ’s Dictionary of Current English. Bd. 5. Oxford University Press, 1995

[Henninger und Ashokkumar 2005] HENNINGER, Scott ; ASHOKKUMAR, Padmapriya: An Ontology-Based Infrastructure for Usability Design Patterns. In: Semantic Web Enabled Software Engineering (SWESE), 2005, S. 41–45

[Mahemoff und Johnston 2001] MAHEMOFF, Michael ; JOHNSTON, Lorraine J.: Usability Pattern Languages: the ”Language” Aspect. In: HIROSE, M. (Hrsg.): Human-Computer Interaction: Interact ’01. Tokyo, Japan : IOS Press, 2001, S. 350–358

[Rosson und Carroll 2000] ROSSON, Mery B. ; CARROLL, John M.: Usability engineering : scenario-based development of human-computer interaction. Morgan Kaufmann, 2000. – ISBN 1558607129

[van Welie 2001] WELIE, Martijn van: Task-based User Interface Design, Vrije Universiteit Amsterdam, Dissertation, 2001

[van Welie u. a. 2000] WELIE, Martijn van ; VEER, Gerrit C. van der ; ELIENS, Anton: Patterns as Tools for User Interface Design. In: VANDERDONCKT, Jean (Hrsg.) ; FARENC, Christelle (Hrsg.): Tools for Working With Guidelines: Annual Meeting of the Special Interest Group, Springer Verlag, 2000

November 20, 2008

Weitere DDR-Begriffe im Bereich Essen & Trinken

Logo der Konsum Handelskette

Als Rückmeldung auf die Antikapitalistischen Alternativgerichte erhielt ich einige weitere Anregungen:

  • Jägerschnitzel -  meistens das billigste auf der Karte, allerdings war für Nicht-DDR-ler die Überraschung groß als eine gebratene Scheibe Jagdwurst serviert wurde

  • LPG - neben der Bedeutung als Landwirtschaftliche Produktionsgenossenschaft wurde so auch ein Bauernfrühstück bezeichnet

  • Creck - Süßtafel mit Sammelbild (Schokolade war da wirklich kaum drin)

  • AUBI - ein alkoholfreies Bier, eben das AUtofahrerBIer

  • Konsum - genossenschaftlich organisierte Lebensmittelkette, wobei der Begriff in Form des "Dorf-Konsums" auf kleine Geschäfte übertragen wurde; größere Geschäfte wurden dagegen als Kaufhalle bezeichnet, die am ehesten den heutigen Supermärkten entsprechen

September 17, 2008

(English) Generate HTML report of a model transformation tracing model

A short while ago I created a blog entry to get oaw's tracing extension to work. After achieving this I tried to generate a HTML report of my tracing model. Fortunately there is already a Xpand template that does this stuff. But it takes a while for me to get it running, so that I will show you the workflow. It expects to have the org.openarchitectureware.util.stdlib project checked out from the CVS in your workspace, as explained earlier.
<workflow>
<property file="workflow.properties"/>
<component class='oaw.workflow.common.DirectoryCleaner' directories='${targetDir}/tracedoc'/>

<bean >
<platformUri value=".."/>
<registerEcoreFile value="../org.openarchitectureware.util.stdlib/
src/org/openarchitectureware/util/stdlib/trace.ecore" />
<!-- register metamodels referenced by the tracing model -->
<registerGeneratedEPackage value="my.DataPackage" />
</bean>

<component>
<modelFile value="gen/tracing.trace"/>
<outputSlot value="tracemodel"/>
</component>

<component>
<!-- important to get it working -->
<metaModel />
<fileEncoding value="ISO-8859-1"/>
<expand value="org::openarchitectureware::util::stdlib::
tracing::templates::html::root FOR tracemodel"/>
<outlet>
<path value="gen/tracedoc"/>
</outlet>
</component>
</workflow>

Sample oaw Tracing Report
Sample oaw Tracing Report

September 16, 2008

(English) Getting oaw TraceComponent working

For openarchitectureware 4.3 there is a tracing extension available. It allows to create a tracing model of your model2model or model2text transformations. For example you can process this tracing model to generate a HTML, XML, ... documentation of your model transformations.

Unfortunately the extension does not work out of the box for me. I'm using openarchitectureware 4.3.1 from the oaw-development pluginbuilder on a mac. Exactly I use 4.3.1.20080910-1400PRD. After a little time of debugging I found a solution to get it working:

  • check out project org.openarchitectureware.util.stdlib from the oaw CVS

  • switch that projet to branch B_v43 (Team - Switch to Another Branch or Version...)

  • hint: the project must be placed in the workspace where the oaw project is located that will use tracing, because a reference to the trace metamodel (trace.ecore) in the plugin is incorrect (it points to ${workspace}/org.openarchitectureware.util.stdlib/src/org/openarchitectureware/util/stdlib/trace.ecore)


workflow:
<workflow>
<bean class="org.eclipse.mwe.emf.StandaloneSetup" >
<-- important to get the correct workspace path -->
<platformUri value=".."/>
</bean>

<-- XtendComponent and/or Generator -->

<component class="org.openarchitectureware.util.stdlib.TraceComponent">
<traceModelSlot value="tracemodel" />
<traceName value="trace" />
</component>

<component id="traceWriter" class="org.openarchitectureware.emf.XmiWriter">
<inputSlot value="tracemodel"/>
<modelFile value="gen/tracing.trace"/>
</component>
</workflow>

An short example of tracing model2model transformation shows the following snippet:
extension org::openarchitectureware::util::stdlib::tracing;

create Class Class2Table(Class c) :
createTrace(c,this,"m2m") ->
setName(c.name);

August 20, 2008

Antikapitalistische Alternativgerichte

Ketwurst
Ketwurst

Vor einiger Zeit bin ich zufällig auf den Eintrag zu Ketwurst bei Wikipedia gestoßen. Schon damals zeigte sich bei mir eine gewisse Begeisterung für die antikapitalistischen Alternativen in der ehemaligen DDR. Leider konnte ich zu diesem Zeitpunkt mein Interesse daran nicht weiter verfolgen und beließ es dabei. Allerdings flammte die Neugier heute bei der Betrachtung einer Sendung zum Toast-Hawaii erneut auf. Es wurde davon berichtet, dass dies in der DDR als Karlsbader Schnitte verzehrt wurde. Dies führt nun zu diesem etwas anderen Blogbeitrag - eine kleine Reise in die DDR-Küche:

Die Liste zeigt links die sozialistische Bezeichnung und rechts daneben deren Entsprechung im "kapitalistischen Ausland." Bisher sind nur einige Begriffspärchen aufgeführt, aber ich führe diese gerne weiter, sofern ich auf weitere stoße. Der interessierte Leser soll auch bitte die Kommentarfunktion nutzen, um die Liste zu vergrößern ;)
  • Ketwurst = Hot Dog
  • Karlsbader Schnitte = Toast Hawaii
  • Grilletta = Hamburger
  • (Gold)Broiler = Grillhähnchen
  • Krusta = Pizza

July 26, 2008

Überschrift des Related-Post Plugins ändern

Das Related-Post Wordpress Plugin liefert zusätzliche Informationen für einen Beitrag. Allerdings kann der durch das Plugin erzeugte HMTL-Code nur durch eine Änderung am Plugin selber angepasst werden. Allerdings besteht eine weitere Möglichkeit das Rendering anzupassen: Reguläre Ausdrücke. Der folgende Code-Schnipsel zeigt die Veränderung der Überschrift, indem einfach das HTML-Markup darum ausgetauscht wird.
$related = wp_get_related_posts();

$find = '/<h3>(.*)<\/h3>(.*)/i';
$replace = '<h4 class="highlighted">$1</h4>$2';
echo preg_replace($find, $replace, $related);
The related posts plugin of wordpress generates nice additional information for a post. But to customize the generated HTML code you have to change the plugin code. Another solution is using a regular expression. Following this approach it is very easy to customize the header generated by the plugin. Here is the according PHP code snippet.
$related = wp_get_related_posts();

$find = '/<h3>(.*)<\/h3>(.*)/i';
$replace = '<h4 class="highlighted">$1</h4>$2';
echo preg_replace($find, $replace, $related);

It simply extract the header text and wrap it into other HTML tags.

July 25, 2008

Neues Eclipse Release (Ganymede - 3.4)

Ein neue Version der Entwicklungsumgebung Eclipse ist nun verfügbar. Für mich sind immer die Neuerungen / Verbesserungen interessant, um zu entscheiden ob sich ein Wechsel auf die neue Version lohnt. Schließlich ist es zeitaufwendig wieder sämtliche Plugins zu installieren und zudem auch nicht zu wissen, ob die mit dem neuen Release einwandfrei funktionieren.

Alle Neuerungen sind hier nachzulesen. Nachfolgend meine kleine Highlights-Liste:

  • Verbesserter Update-Manager

  • Zuordnung eines neuen Projekt zu einem Working-Set während der Erstellung

  • Tabs mit Klick auf die 3. Maustaste (Scrollrad) schließen - wie vom Firefox gewohnt ;)

  • Import / Export von Ausführungskonfigurationen (Launch)

  • Quick assists - z. B. zum erstellen von Getter / Setter für eine Atrribut ohne Rechtsklick und Navigation in Source Untermenü

  • "Fix Project Setup" quick fix: Versuch der Anwendung Pfadprobleme selber zu lösen

  • Mark Occurrences (Alt+Shift+O): Markierung der Verwendung einer Variablen mit Unterscheidung von lesenden oder schreibenden Zugriff

  • Verwendung von multi-threading beim Compilen

June 23, 2008

Ready-to-run JSF-Cartridge Projekt

Ein Benutzer berichtete mir über Probleme bei der Inbetriebnahme der JSF-Cartridge. Infolgedessen probierte ich es selber einmal aus und stieß ebenfalls auf Schwierigkeiten. Deshalb stelle ich nun ein Eclipse-Projekt bereit, dass alle Einstellungen beeinhaltet und nur noch in den eigenen Eclipse Workspace importiert werden muss.




June 3, 2008

openarchitectureware 4.3

Seitdem ich mich im Rahmen meiner Diplomarbeit intensiv mit openarchitectureware (oaw) 4.1.2 auseinandergesetzt habe, gab es mittlerweile zwei neue Releases. Demzufolge interessieren mich die Neuerungen bzw. Verbesserungen. Einige möchte ich nun hier in komprimierter Form wiedergeben:

  • Konfiguration von Workflows (XVar)

  • XWeave zur aspektorientierten Modellierung

  • Aspektorientiert Programmierung für Xtend (siehe Referenz)

  • Veränderte Einbindung von Advices für Templates in der Generatorkomponente
    <advices value='example::Advices1, example::Advices2'/>


  • neuer Editor zur Bearbeitung von Modellen (Generic Editor), der nur die wesentlichen Eigenschaften übersichtlich darstellt und anpassbar ist (Validierung, Icons & Labels, Vervollständigung)

  • Validierung von Check-Regeln in Standard-EMF-Editoren

  • Erzeugen von Recipe-Checks per Ant

  • Integration der Recipe-Fehler in die Eclipse Entwicklungsumgebung

  • Erweiterungen der textuellen Metamodellierung (Xtext)

  • Speichern von temporären Eigenschaften an einem Objekt
    extension org::openarchitectureware::util::stdlib::elementprops;

    setProp(Object o) :
    o.setProperty('myProp', 123);

    Object getProp(Object o) :
    o.getProperty('myProp');


  • Globale Variablen
    org::openarchitectureware::util::stdlib::globalvar


  • Eindeutige Id eines Elements
    org::openarchitectureware::util::stdlib::uid


  • Tracing von Modell-zu-Text und Modell-zu-Modell Transformationen in einem Tracing-Modell, woraus ein HTML-Report erstellt werden kann

March 29, 2008

Diagramme online erzeugen (Google Charts)

In der letzten Wochen stieß ich auf die Google Chart API, wodurch sich einfach, schnell und ohne zusätzliche Frameworks Diagramme erzeugen lassen. Dies kann mitunter für die eigene Webseite hilfreich sein, um beliebige Daten grafisch zu präsentieren. Die angebotenen Möglichkeiten sind durchaus umfangreich, da die API ebenso von Google Analytics verwendet wird.

Nachfolgend ist ein Beispiel eines durch die API erzeugtes Diagramm dargestellt.
Downloadstatistik-Diagramm mit Google Chart generiert

Die Anfrage dazu sieht folgendermaßen aus:
http://chart.apis.google.com/chart?cht=p3&chd=t:40,12,4,4
&chs=550x150&chl=Diplomarbeit|JSF-Cartridge|BibTeX_Diploma|BibTeX_QM-Part
&chtt=Download Statistics

Zur detaillierteren Beurteilung der Fähigkeiten der API habe ich ein kleines Wordpress Plugin geschrieben, welches in der Wordpress Sitebar eine Statistik der Downloads auf der Webseite darstellt. Das Ergebnis ist in der rechten Spalte zu sehen. Dabei greift das Plugin auf die Daten des Download-Verwaltungsplugins Download Counter zurück.

February 27, 2008

HTML-Newsletter für diverse Mail-Clients

Ein Newsletter im HTML-Format scheint eine gute Möglichkeit zu sein die Corporate Identity (CI) auch auf der Ebene der E-Mail Kommunikation zu wahren. Allerdings entpuppt sich die Darstellung in diversen Mail-Anwendungen als kontraproduktiv, da das Design gar nicht oder falsch dargestellt wird. Folglich erweist sich die konsistente Darstellung der CI in E-Mails als schwierig.

Eine Matrix untertsützter Design-Eigenschaften verscheidener Mail-Clients findet sich hier und stammt von diesem Blogeintrag: A Guide to CSS Support in Email: 2007 Edition.

Nach Betrachtung dieser Feature-Untersuchung scheint ein Tabellen-Layout die einzig universal funktionale Design-Implementierung zu sein. Allerdings ist das ein klarer Rückschritt in punkto Accessibility.

February 15, 2008

Alfresco-Community-Tomcat-2.1 mit MySQL

Das Setup von Alfresco mit MySQL als Datenbankbackend soll dem Alfresco Wiki zufolge die Standard-Einstellung sein. Dies ist auch so in der repository.properties innerhalb des deployten Alfresco festgehalten, nur wird zusammen mit dem Tomcat auch noch eine angepasste Konfiguration deployed, so dass HSQL verwendet wird. Diese angepasste Konfiguration findet sich unter shared/class/alfresco/extension, wobei folgende Dateien für die Verwendung von MySQL angepasst werden müssen:

  • custom-repository.properties

  • custom-hibernate-dialect.properties

January 28, 2008

LaTeX-Editor für MacOS

Vor einiger Zeit schrieb ich bereits einen kleinen Artikel zu LaTeX-Editoren unter Windows. Da ich mittlerweile auf einem Mac arbeite, benötigte ich auch dafür einen geeigneten Editor. Ich habe ihn gefunden: TeXShop

Dieser Editor bietet wirklich das, was die anderen Editoren unter Windows versprachen. Allerdings muss nicht erst konfiguriert oder zusätzliche Software instlliert werden. So funktioniert das Springen an eine Stelle im Zieldokument und ebenso aus diesem zum LaTeX-Dokument (Apfel + Doppelklick).

TeXShop-PDF>TeXTeXShop-TeX>PDF

Für meine Ansprüche ist dieses Tool ideal, so dass es damit sogar richtig Spass macht Dokumente zu erstellen. Ich überlege auch nicht mehr, ob ich eine WYSIWYG-Office Anwendung für kleinere Dokumente benutze oder doch LaTeX.