====== Übersicht HMI Technologien == Dieses Dokument gibt zunächst einen Überblick über die aktuellen Möglichkeiten zur Entwicklung von lokalen, touch-basierten und entfernten, netzwerkbasierten HMIs. Am Ende werden [[hmi_technologien#konkrete Lösungsmöglichkeiten]] für eine Steuerung mit beiden HMI-Typen vorgestellt. ===== Embedded / Mobile Plattformen == Betriebssysteme und Plattformen, die speziell auf embedded- und mobile Endgeräte abgestimmt sind: ^ Name ^ Initiator ^ OS-Kern ^ Besonderheit ^ | [[http://www.ubuntu.com/products/mobile|Ubuntu Mobile/Embedded]] | Canonical Ltd. | Linux | verwendet Hildon für Touch (s.u.), auf Atom-Prozessoren abgestimmt, programmierbar auch in Vala (s.u.) | | Freesamrtphone.org | FSO | Linux | verwendet D-Bus, programmierbar auch in Vala und Python | | [[wpde>Android_(Betriebssystem)|Android]] | Google | Linux | Vollständig in Java programmierbar | | Limo | Motorola | Linux | Linux Mobile Foundation (NEC, Panasonic, Samsung, Vodafone, u.a.) | | webOs | Palm | Linux | GUI verwendet Web Technologie (HTML 5, JavaScript, CSS) | | Maemo | Nokia | Linux | verwendet Hildon für Touch (s.u.) | | Moblin | Intel | Linux | auf Atom-Prozessoren abgestimmt, fingergesteuerter Internetbrowser | | Bada | Samsung | Linux | System ist verschlossen bis auf die API | Maemo und Moblin haben sich kürzlich zu //Meego// vereinigt. ===== Touch Libs == Speziell auf Bedienung per //Finger//-Touch entwickelte Softwarebibliotheken zur Entwicklung //lokaler// GUIs. Diese nutzen die speziellen Möglichkeiten eines Touchscreen voll aus und ermöglichen so z.B. eine gestische Bedienung: * Das aktuelle QT 4.6 unterstützt gestische Bedienung und auch Multitouch, das auch z.B. Zwei-Finger-Zoom ermöglicht. * [[wpde>Hildon]] ist ein Framework, dass für die Bedienung mit dem Finger optimiert ist. Hildon ist Teil von GTK+ und ist u.a. in Vala programmierbar. * FIXME [[wp>Clutter_(toolkit)|Clutter]] für Animationen * FIXME Weitere: [[http://www.fltk.org/shots.php|FLTK]], [[http://www.wxwidgets.org/|wxWidgets]], [[http://elinux.org/EFL|Enlightenment foundation libraries]] (mit Elementary) ===== Touch Browser == Webbrowser bzw. HTML Rendering Engines mit spezieller Unterstützung für Touchscreens ^ Name ^ Engine ^ Verwendet u.a. von ^ | WebKit | WebKit | Palm, Android, Apple's iPhone, Palm, Google Chrome | | Moblin browser | Gecko | Moblin | ===== Remote HMI SDKs == Bibliotheken zur Entwicklung //entfernter// GUIs. Die für den Benutzer optimale remote HMI * erfordert keine Installation auf dem Client * läuft auf jedem Betriebssystem * hat den Komfort einer lokalen Applikation * bietet reichhaltige grafische Elemente * kommt ohne die Installation einer zusätzlichen Runtime aus * Aktualisiert sich von selbst ==== Web-basiert == Rein web-basierte Technik, die direkt im Browser **ohne zusätzliches Plugin** läuft. Der Browser erledigt den programmatischen Teil per Javascript, den deklarativen Teil per XHTML und die Oberflächengestalltung per CSS. Diese Technik ist bekannt unter dem Namen AJAX. Die Bibliotheken liefern eine für alle Browser gleiche API u.a. für GUI-Elemente (Container, Buttons, Slider, Charts, ...). Sie schützen damit den Programmierer vor der Komplexität und Aufwand der Anpassung ihres Programmes vor allem an nicht standardkonforme Browser. ^ Name ^ Sprache ^ Besonderheit ^ | [[wpde>Dojo_Toolkit|Dojo]] | Javacript | | | [[wpde>Google_Web_Toolkit|GWT]] | Java | Java=>Javascript Cross-Compiler, client side processing | | Script.aculo.us | Javacript | | | YUI | Javacript | | | ZK | Java | Java=>Javascript Cross-Compiler, server side processing, benötigt Servlet Container auf Target | | OpenLaszlo | Javascript+XML | Die DHTML Variante hat möglicherweise eingeschränkten Funktionsumfang | Beispiele für rein web-basierte Applikationen: [[http://demos.dojotoolkit.org/demos/|Dojo Demos]], [[http://maps.google.de|Google Maps]] oder [[http://docs.google.com|Google Text und Tabellen]] ==== RIAs == Rich Internet Applications (RIA) / **Runtime auf dem Client erforderlich**: ^ Name ^ Runtime ^ Sprache ^ Besonderheit ^ | [[http://pivot.apache.org/|Apache Pivot]] | JVM | Java | Wahlweise als Applet, [[wpde>Java_Web_Start|Websstart]]- oder klassische Applikation einsetzbar | | JavaFX | JVM | JavaFX Script | proprietär? | | Silverlight | Dotnet | C# | proprietär | | Flash | Flash | ActionScript | proprietär | | OpenLaszlo | Flash | Javascript+XML | | | Curl | Curl RTE | Curl | Verbreitung? | Im Zeitalter von leistungsfähigen und standardisierten Internetbrowsern ist es jedoch fraglich, ob RIA's noch zeitgemäß sind, bzw. ob sie nicht bald obsolet werden. ==== Gecko basiert == FIXME Anwendung von [[wpde>XUL]] evtl. in Kombination mit [[wpde>Mozilla_Prism]] ===== Enhancements / Besonderheiten == ==== Java == Alles was eine Java-API besitzt (Android, Apache Pivot, GWT) kann auch in [[wpde>Groovy]] programmiert werden. Groovy bringt die typischen Vorteile einer Scriptsprache (kompakt, einfach, elegant) auf die Java Plattform. In Groovy geschriebene Programme sind wesentlich **kompakter und einfacher** zu lesen/schreiben als herkömmlicher Java- oder Csharp-Code Alles was clientseitig auf die JVM (Apache Pivot, JavaFX) aufsetzt erfordert **keine zusätzliche Installation beim Kunden**, da die JAVA Runtime meist schon vorhanden ist. ==== Vala / GTK == Alles was auf GTK aufsetzt (z.B. Hildon) kann (neben anderem) auch in [[wpde>Vala_(Programmiersprache)|Vala]] programmiert werden. [[http://live.gnome.org/Vala/HildonSample|Beispiel]] Vala vereinigt die Vorteile einer **gemanagte**n **Sprache** wie (Java/Csharp) mit den Vorteilen von C/C++. D.h. man bekommt u.a. Objektorientierung, Exceptions und automatische Speicherverwaltung mit der Performance einer nativ compilierten Applikation. Dies ist möglich, da Vala **ohne Runtime** auskommt. Auch lassen sich mit Vala x-beliebige externe C-Bibliotheken verwenden. Vala hat eine Csharp-ähnliche Syntax. Auf Grund der Performance und Benutzerfreundlichkeit bietet sich Vala auch für die Programmierung der eigentlichen Applikation (nicht nur HMI) an. Für die Projektierung und Gestaltung einer GTK-basierten GUI in deklarativer Form auf Basis von XML bietet sich [[wpde>Glade]] an. ===== Konkrete Lösungsmöglichkeiten == Drei Vorschläge zur Realisierung einer Steuerung auf einem Panelrechner mit lokaler- und remote HMI: ==== 1. Lokal: Touch Lib / Remote: Web-basiert == * Lokale GUI Applikation mit Finger-Touch-GUI (z.B. Hildon) * Standardbrowser (Firefox, Chrome, IE, ...) für die remote HMI (keine Plugins nötig) mit AJAX-SDK (z.B. Dojo oder GWT) für die GUI-Programmierung Beide HMIs sind optimal auf ihren Einsatzweck abgestimmt. Die lokale HMI kann die speziellen Möglichkeiten eines Touchscreens voll ausnutzten, während die remote HMI ohne Installation und Download sofort auf jedem Rechner funktioniert. Als Plattform bietet sich derzeit Maemo oder Ubuntu Mobile and Embedded Edition an, die hier Hildon schon als Bordmittel vorhanden ist. Die Plattform kann später jederzeit später noch geändert werden. ==== 2. Lokal und Remote: Web-basiert == AJAX für die lokale HMI und remote HMI * Touch Brower für die lokale HMI * Standardbrowser (Firefox, Chrome, IE) für die remote HMI (keine Plugins nötig) * Web-basierte AJAX-SDK (wie Dojo oder GWT) für die GUI-Programmierung Theoretisch ein HMI-Projektierung für lokale HMI und remote HMI nötig. Tatsächlich werden aber wohl spezielle Anpassungen für die unterschiedlichen Bildschirmgrößen und Bedienstrategien (Maus/Tastatur <=> Fingertouch) nötig werden. Weiterhin muß die AJAX-SDK den Touch Browser unterstützen. ==== 3. Lokal: Touch Lib / Remote: RIA == * Lokale GUI Applikation mit Finger-Touch-GUI (z.B. Hildon) * Remote GUI per RIA (z.B. Apache Pivot)