Funktionale GUI-Programmierung in Haskell mit Grapefruit



Ähnliche Dokumente
Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

KI im Weltall: Der Remote Agent

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

VBA-Programmierung: Zusammenfassung

Software Engineering. 3. Anforderungsanalyse. Franz-Josef Elmer, Universität Basel, WS 2006/07

Die aktuelle Entwicklung des GeoService-Portals. Analyse- und Auswertefunktionen

ALP I. Funktionale Programmierung

Lebenserwartung nach Sterbetafel 2003/2005

Versionsverwaltung GIT & SVN. Alexander aus der Fünten. Proseminar: Methoden und Werkzeuge, SS Lehrstuhl i9, Prof. Dr. T.

Inhaltsverzeichnis Dokumentverwaltung Organisation von Dokumenten Ordner erstellen Dokumente im Dateisystem behandeln...

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

ECO-Manager - Funktionsbeschreibung

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Abwesenheitsnotiz im Exchange Server 2010

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

Anzeige von eingescannten Rechnungen

Einführung in. Logische Schaltungen

Grundlagen Software Engineering

Einführung in die Programmierung

Presse-Information

Grundlagen der Künstlichen Intelligenz

Mehrere Diagramme zu einer Darstellung kombinieren

Passung von Partnern: Der Einfluss von Persönlichkeitsmerkmalen auf Beziehungsqualitäten

Software-Engineering SS03. Zustandsautomat

Integrierte Dienstleistungen regionaler Netzwerke für Lebenslanges Lernen zur Vertiefung des Programms. Lernende Regionen Förderung von Netzwerken

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Design Patterns 2. Model-View-Controller in der Praxis

Lehrer: Einschreibemethoden

KMU-verträgliche Umsetzung eines integrierten Qualitäts- und Umweltmanagementsystems

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Deutsches Rotes Kreuz. Kopfschmerztagebuch von:

So geht s Schritt-für-Schritt-Anleitung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Artenkataster. Hinweise zur Datenbereitstellung. Freie und Hansestadt Hamburg. IT Solutions GmbH. V e r s i o n

Integrierte und automatisierte GUI-Tests in Java

WPF Steuerelemente Listbox, ComboBox, ListView,

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

StudyDeal Accounts auf

GRAFISCHE BENUTZERSCHNITTSTELLEN

Einrichtung HBCI mit PIN/TAN in VR-NetWorld-Software

Ein mobiler Electronic Program Guide

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Qualitätsmanagement an beruflichen Schulen in Deutschland: Stand der Implementierung. Diplomarbeit

Anleitung Nutzung VOR SORGE-Check. Sehr geehrte Damen und Herren!

Sehr geehrte/r Teilnehmer/in,

Thematische Abfrage mit Computerlinguistik

Vorabversion. Schulung am Homepage Administration und Pflege

Insiderwissen Hintergrund

1 Mathematische Grundlagen

Häufig gestellte Fragen zu Professional webmail

Standard XPersonenstand - Version Verbindliche Handlungsanweisungen

Drucken in den Pools

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

TYPO3 Tipps und Tricks

WSO de. <work-system-organisation im Internet> Allgemeine Information

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Die Arbeitsschutz-Allianz Sachsen aus Sicht der Unfallversicherungsträger. Bilanzierungskonferenz AS-Allianz / Gründungskonferenz SAK

Fsr Amazon Konfiguration

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Zweisprachigkeit im Dokumentationsportal

FAQ 04/2015. Auswirkung der ISO auf 3SE53/3SF13 Positionsschalter.

Von Perimeter-Security zu robusten Systemen

Data Mining: Einige Grundlagen aus der Stochastik

»Infografik GIS«bei der Stadt Erlangen. Version 1.0 Stand August 2015

Beweisbar sichere Verschlüsselung

Biogena IMK. Individuelle Mikronährstoff Komponenten. Benutzerhandbuch. Natürlich so individuell wie Ihr Patient

Projektmanagement in der Spieleentwicklung

Software Entwicklung II (SS12)

Simulink: Einführende Beispiele

Kapitel 4 Schaltungen mit Delays (Schaltwerke) Literatur: Oberschelp/Vossen, Kapitel 4. Kapitel 4: Schaltungen mit Delays Seite 1

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Im Folgenden werden die jeweiligen Elemente erklärt. Im Anschluss folgt ein Beispieldatensatz in xml.

Anwendertreffen 20./21. Juni

Das PC-Topp.NET Abfall-Terminal

KURZANLEITUNG ANBIETER

Print2CAD 2017, 8th Generation. Netzwerkversionen

Vorstellung des BMBF-Projektes FluSs aus Sicht eines Endanwenders. Düsseldorf Maritim-Hotel, 09. Juli 2013 Mark Zwirner

Sechster ProSTEP Benchmark Teil 2: PDM Data Exchange

Weiter mit beliebiger Taste.

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

Prof. Dr. Norbert Pohlmann, Institut für Internet Sicherheit - if(is), Fachhochschule Gelsenkirchen. Lage der IT-Sicherheit im Mittelstand

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Anforderungsanalyse: Tutor

ecaros2 - Accountmanager

Hilfe zur Urlaubsplanung und Zeiterfassung

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Auswertung JAM! Fragebogen: Deine Meinung ist uns wichtig!

Produkte Info Touchscreen-Panel

Vektoren mit GeoGebra

Zwischenablage (Bilder, Texte,...)

esearch one-single-point-of-information Federated Search Modul

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

15.3 Bedingte Wahrscheinlichkeit und Unabhängigkeit

Fragebogen Weisse Liste-Ärzte

Transkript:

Funktionale GUI-Programmierung in Haskell mit Grapefruit Brandenburgische Technische Universität Cottbus Lehrstuhl Programmiersprachen und Compilerbau Haskell in Leipzig 2, Juli 2007

GUI-Programmierung in Haskell Grapefruit GUI-Programmierung in Haskell heute in der Praxis imperative Bibliotheken mit etwas funktionalem Flair: Gtk2Hs wxhaskell und andere daher nur unzureichende Nutzung der Vorteile von Haskell

GUI-Programmierung in Haskell Grapefruit Rein funktionale GUI-Programmierung Forschung zu rein funktionaler GUI-Programmierung seit über 15 Jahren viele Bibliotheken: fortschrittliche Konzepte umgesetzt i.a. nicht für den produktiven Einsatz geeignet viele Projekte auch wieder eingeschlafen

Grapefruit-Entwicklungsziele GUI-Programmierung in Haskell Grapefruit Aufgreifen bewährter Ideen und Entwicklung neuer Techniken Praxistauglichkeit natives Look-and-Feel Plattform für Forschung zu Spezifikation und Verifikation grafischer Oberflächen

Eckdaten zur Entwicklung GUI-Programmierung in Haskell Grapefruit Entwicklung seit Ende Februar 2007 an der BTU Cottbus derzeitige Entwickler: (wissenschaftlicher Mitarbeiter) Matthias Reisner (Student) momentaner Stand: zentrale Konzepte umgesetzt noch sehr kleine Auswahl an GUI-Komponenten

Architektur Einführung GUI-Programmierung in Haskell Grapefruit Anwendung Gtk2Hs-Adapter Grapefruit-Kern Gtk2Hs GTK+ Nutzung des Gtk2Hs-Toolkits als Basis Trennung von allgemeinem und toolkitspezifischem Code (Portierung auf andere Toolkits geplant)

Beispiel: Mastermind TM -ähnliches Spiel Codebreaker 1243 Add 4635 1 1 1432 1 2 4623 2 0 1365 2 0 1243 3 0 Hinzufügeknopf aktiv, wenn gültige Kombination im Eingabefeld beim Drücken dieses Knopfes Einfügen der Kombination in die Versuchsliste Anzeige stellt immer Versuche zusammen mit Feedbacks dar Spielfeld ist aktiv, wenn die Versuchsliste nicht den Code enthält

GUI-Programmierung in Grapefruit zeitliche Abläufe als First-Class-Objekte: Ereignisströme Signale Netzwerke miteinander kommunizierender GUI-Komponenten: Arrows Effizienz durch datengetriebene Implementierung

Ereignisströme Einführung Definition Ein Ereignisstrom ist eine Folge von Ereignissen, wobei folgendes gilt: Intuition Jedes Ereignis tritt zu einer bestimmten Zeit auf. Jedes Ereignis transportiert einen Wert. data EventStream value = EventStream [(Time, value)]

Funktionen zur Arbeit mit Ereignisströmen (Auswahl) mempty :: EventStream value mappend :: EventStream value EventStream value EventStream value fmap filter scan :: (value1 value2) (EventStream value1 EventStream value2) :: (value Bool) (EventStream value EventStream value) :: accu (accu eventvalue accu) (EventStream eventvalue EventStream accu)

Signale Einführung Definition Ein Signal ist eine Zuordnung von Werten zu Zeitpunkten, beschreibt also zeitabhängige Werte. Intuition data Signal value = Signal (Time value)

Funktionen zur Arbeit mit Signalen (Auswahl) signal :: value EventStream value Signal value ( $ ) :: (value1 value2) (Signal value1 Signal value2) lifta2 :: (value1 value2 value3) (Signal value1 Signal value2 Signal value3) sample :: EventStream () Signal value EventStream value

Arrows Einführung Intuition Arrows sind Komponenten mit je einer Eingabe und einer Ausgabe, welche miteinander vernetzt werden können, um neue Arrows zu formen.

Arrowklassen (Auswahl) für uns wichtige Arrowklassen: Basisklasse Arrow mit Methoden pure, ( ) und first Subklasse ArrowLoop mit Methode loop Zweck der Methoden: pure für Konstruktion effektloser Arrows ( ), first und loop für Konstruktion zusammengesetzter Arrows

Konstruktion zusammengesetzter Arrows first loop

Arrow-Syntax (vereinfacht) proc-ausdrücke für komfortable Konstruktion von Arrows: proc input do output 1 arrow 1 input 1.. output n arrow n input n returna output rec-blöcke zur Darstellung von Arrows mit Zyklen

Beispielcode: Eingabekomponente in Codebreaker (vereinfacht) proc () do guess guessinputfield () sendreq addbutton isok $ guess returna sample sendreq guess

Umsetzung dynamischer Oberflächen Dynamikkomponente: erhält zeitabhängige Collection von Komponenten als Eingabe enthält immer genau die Elemente der aktuellen Collection Probleme bei der Verwendung von Signalen: linearer Zeitaufwand für Aktualisierungen keine Elementidentitäten Lösung durch spezielle Containersignal-Typen: gegenwärtig für Listen implementiert: data ListSignal element

Erzeugung elementarer Listensignale Konstruktion durch Initalwert und Ereignisstrom mit Änderungen: listsignal :: [element ] EventStream (Change element) ListSignal element data Change element = Addition Int element Removal Int Move Int Int

Weitere Funktionen zur Arbeit mit Listensignalen (Auswahl) elem length :: element ListSignal element Signal Bool :: ListSignal element Signal Int reverse :: ListSignal element ListSignal element filter sort :: (element Bool) (ListSignal element ListSignal element) :: Ord element ListSignal element ListSignal element

Effizienz von Listensignalen Platzaufwand: O(1) bzw. O(n log n) Zeitaufwand: für Initialisierung: O(1) bzw. O(n log n) für Aktualisierung: O(1), O(log n) bzw. O ( ) log 2 n

Zusammenfassung problemnahe Beschreibung von Oberflächen: Beschreibung zeitlicher Abläufe als zentrales Konzept Arrows und Arrow-Syntax zur Beschreibung der Interaktion von Komponenten trotzdem effiziente Umsetzung: datengetriebene Implementierung

Ausblick Einführung größere Auswahl an Komponenten weitere Containersignaltypen weitere Adapter Model-View-Controller-Prinzip sich kontinuierlich verändernde Signale Grafik (animiert, ggf. interaktiv) Einbindung externer Objekte (z.b. Dateisystem) Klangsynthese

Schluss Einführung weiterführende Ressourcen: Grapefruit-Homepage unter http://haskell.org/haskellwiki/grapefruit Kontaktierung des Autors unter jeltsch@informatik.tu-cottbus.de Danke für die Aufmerksamkeit! Fragen?