Building GUIs in Haskell
|
|
|
- Walter Haynes
- 10 years ago
- Views:
Transcription
1 Building GUIs in Haskell Building GUIs in Haskell Comparing Gtk2Hs and wxhaskell, Universiteit Utrecht December 14, 2006
2 Building GUIs in Haskell Dazzle
3 Building GUIs in Haskell Proxima
4 Building GUIs in Haskell hide
5 Building GUIs in Haskell Frag
6 Building GUIs in Haskell Overview 1 Introduction 2 Gtk2Hs 3 wxhaskell 4 Comparison 5 Styles of libraries 6 Conclusion
7 Building GUIs in Haskell > Introduction Prejudice of building GUIs in Haskell Building GUIs in Haskell is underrated, many prejudices exist: Most Haskell applications do not require a GUI Very few useful GUI libraries exist Implementing a GUI requires an object-oriented language
8 Building GUIs in Haskell > Introduction Prejudice of building GUIs in Haskell Building GUIs in Haskell is underrated, many prejudices exist: Most Haskell applications do not require a GUI Very few useful GUI libraries exist Implementing a GUI requires an object-oriented language Haskell features that facilitate building GUIs in Haskell: Monads Higher-order functions Polymorphism Type classes Phantom types
9 Building GUIs in Haskell > Introduction Implementation of GUI libraries Building a GUI library in Haskell from scratch is fruitless: Lifting on success of another library is easier Implementing a complete library takes a long time Extension to another library is more maintainable Many extensive libraries already exist
10 Building GUIs in Haskell > Introduction Implementation of GUI libraries Building a GUI library in Haskell from scratch is fruitless: Lifting on success of another library is easier Implementing a complete library takes a long time Extension to another library is more maintainable Many extensive libraries already exist Problem: Existing extensive libraries are mostly written in C/C++
11 Building GUIs in Haskell > Introduction Implementation of GUI libraries Building a GUI library in Haskell from scratch is fruitless: Lifting on success of another library is easier Implementing a complete library takes a long time Extension to another library is more maintainable Many extensive libraries already exist Problem: Existing extensive libraries are mostly written in C/C++ Solution: Use the Foreign Function Interface (FFI)
12 Building GUIs in Haskell > Introduction Foreign Function Interface FFI allows to interact with another language, two major problems: 1 Haskell value can reference C/C++ value Problem C/C++ expects the user to explicitly free memory Solution Use a ForeignPtr with reference scheme
13 Building GUIs in Haskell > Introduction Foreign Function Interface FFI allows to interact with another language, two major problems: 1 Haskell value can reference C/C++ value Problem C/C++ expects the user to explicitly free memory Solution Use a ForeignPtr with reference scheme 2 C/C++ value referencing Haskell value Problem Garbage collection for Haskell can free memory too early move data around in memory Solution Use a StablePtr, which is untouched by the garbage collector
14 Building GUIs in Haskell > Introduction Comparison of libraries Two different styles of libraries: Monadic, imperative feel to building GUIs Declarative, point-free style using arrows
15 Building GUIs in Haskell > Introduction Comparison of libraries Two different styles of libraries: Monadic, imperative feel to building GUIs Declarative, point-free style using arrows Two monadic libraries will be compared: Gtk2Hs Developed by Axel Simon, currently maintained by Duncan Coutts wxhaskell Developed by Daan Leijen
16 Building GUIs in Haskell > Introduction Comparison of libraries Two different styles of libraries: Monadic, imperative feel to building GUIs Declarative, point-free style using arrows Two monadic libraries will be compared: Gtk2Hs Developed by Axel Simon, currently maintained by Duncan Coutts wxhaskell Developed by Daan Leijen Question: What determines the usability of a GUI library in Haskell?
17 Building GUIs in Haskell > Introduction Running example Application converting currencies: Managing state Managing widgets Frame Input field Button Implementing layout Events Gtk2Hs wxhaskell
18 Building GUIs in Haskell > Introduction Library-independent code Currency data type data Currency = Euro Guilder deriving Show Showing a currency tolabel :: Currency String tolabel = ("To " +). show type State = (Float, Currency)
19 Building GUIs in Haskell > Introduction Library-independent code Currency data type data Currency = Euro Guilder deriving Show Showing a currency tolabel :: Currency String tolabel = ("To " +). show type State = (Float, Currency) Flipping the current state flipstate :: State State flipstate (rate, Euro) = (1 / rate, Guilder) flipstate (rate, Guilder) = (1 / rate, Euro)
20 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (1) Building the GUI main :: IO () main = do initgui var newioref ( , Euro) frm windownew windowsettitle frm "Converter" ent entrynew entrysettext ent "0" btn buttonnew buttonsetlabel (tolabel Guilder)...
21 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (1) Building the GUI main :: IO () main = do initgui var newioref ( , Euro) frm windownew windowsettitle frm "Converter" ent entrynew entrysettext ent "0" btn buttonnew buttonsetlabel (tolabel Guilder)...
22 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (1) Building the GUI main :: IO () main = do initgui var newioref ( , Euro) frm windownew windowsettitle frm "Converter" ent entrynew entrysettext ent "0" btn buttonnew buttonsetlabel (tolabel Guilder)...
23 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (1) Building the GUI main :: IO () main = do initgui var newioref ( , Euro) frm windownew windowsettitle frm "Converter" ent entrynew entrysettext ent "0" btn buttonnew buttonsetlabel (tolabel Guilder)...
24 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (1) Building the GUI main :: IO () main = do initgui var newioref ( , Euro) frm windownew windowsettitle frm "Converter" ent entrynew entrysettext ent "0" btn buttonnew buttonsetlabel (tolabel Guilder)...
25 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (2) Building the GUI cont d main :: IO () main = do... box hboxnew True 5 set box [containerchild := ent ] set box [containerchild := btn] set frm [containerchild := box ] let click = change var ent btn onclicked btn click widgetshowall frm maingui
26 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (2) Building the GUI cont d main :: IO () main = do... box hboxnew True 5 set box [containerchild := ent ] set box [containerchild := btn] set frm [containerchild := box ] let click = change var ent btn onclicked btn click widgetshowall frm maingui
27 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (2) Building the GUI cont d main :: IO () main = do... box hboxnew True 5 set box [containerchild := ent ] set box [containerchild := btn] set frm [containerchild := box ] let click = change var ent btn onclicked btn click widgetshowall frm maingui
28 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
29 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
30 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
31 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
32 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
33 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
34 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
35 Building GUIs in Haskell > Gtk2Hs > Example Gtk2Hs in action (3) Implementing the event handler type StateVar = IORef State change :: StateVar Entry Button IO () change var ent btn = do state@(rate, currency) readioref var input entrygettext ent case string2float input of Just x do writeioref var (flipstate state) entrysettext ent (show $ rate x) buttonsetlabel btn (tolabel currency) Nothing return ()
36 Building GUIs in Haskell > Gtk2Hs > Architecture Underlying toolkit Gtk2Hs built on top of GTK+: Large open source toolkit Many widgets available Platform independent Written in C Gtk2Hs API generated from GTK+ source
37 Building GUIs in Haskell > Gtk2Hs > Architecture Main features General features: Almost covered the complete GTK+ API Platform independence Bindings for Cairo vector graphics library Gnome modules (GConf and SourceView) Mozilla browser rendering engine Extensive documentation Unicode support Important feature to discuss: Support for visual GUI builder, called Glade
38 Building GUIs in Haskell > Gtk2Hs > Glade The visual GUI builder Defining (complex) layout by hand is hard: Not really intuitive Looking up library functions Effect of change visible after compilation
39 Building GUIs in Haskell > Gtk2Hs > Glade The visual GUI builder Defining (complex) layout by hand is hard: Not really intuitive Looking up library functions Effect of change visible after compilation do... edit textviewnew vbox vboxnew False 0 set vbox [boxhomogeneous := False ] boxpackstart vbox menubar PackNatural 0 boxpackstart vbox toolbar PackNatural 0 boxpackstart vbox edit PackGrow 0...
40 Building GUIs in Haskell > Gtk2Hs > Glade Glade to the rescue! Glade, the visual GUI builder: Comes with GTK+ Drag n drop widgets Designed GUI can be imported using Gtk2Hs
41 Building GUIs in Haskell > Gtk2Hs > Glade Exporting GUIs Glade saves GUI to.glade file (XML format)... <child> <widget class="gtkhbox" id="box"> <property name="visible">true</property> <property name="homogeneous">false</property> <property name="spacing">0</property> <child> <widget class="gtkentry" id="ent">...
42 Building GUIs in Haskell > Gtk2Hs > Glade Exporting GUIs Glade saves GUI to.glade file (XML format)... <child> <widget class="gtkhbox" id="box"> <property name="visible">true</property> <property name="homogeneous">false</property> <property name="spacing">0</property> <child> <widget class="gtkentry" id="ent">... Import widgets with xmlgetwidget using the id attribute
43 Building GUIs in Haskell > Gtk2Hs > Glade Gtk2Hs and Glade in action Creating and laying out widgets is done using Glade: Building the GUI main :: IO () main = do initgui Just xml xmlnew "converter.glade" frm xmlgetwidget xml casttowindow "frm" ent xmlgetwidget xml casttoentry "ent" btn xmlgetwidget xml casttobutton "btn"... The rest of the code is left unchanged
44 Building GUIs in Haskell > Gtk2Hs > Glade Gtk2Hs and Glade in action Creating and laying out widgets is done using Glade: Building the GUI main :: IO () main = do initgui Just xml xmlnew "converter.glade" frm xmlgetwidget xml casttowindow "frm" ent xmlgetwidget xml casttoentry "ent" btn xmlgetwidget xml casttobutton "btn"... The rest of the code is left unchanged
45 Building GUIs in Haskell > Gtk2Hs > Glade Gtk2Hs and Glade in action Creating and laying out widgets is done using Glade: Building the GUI main :: IO () main = do initgui Just xml xmlnew "converter.glade" frm xmlgetwidget xml casttowindow "frm" ent xmlgetwidget xml casttoentry "ent" btn xmlgetwidget xml casttobutton "btn"... The rest of the code is left unchanged
46 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
47 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
48 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
49 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
50 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
51 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
52 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (1) Building the GUI main :: IO () main = start $ do var variable [value := ( , Euro)] frm frame [text := "Converter"] ent mkvalueentry frm [typedvalue := Just 0] btn button frm [text := tolabel Guilder ] set frm [layout := row 5 [widget ent, widget btn]] let click = change var ent btn set btn [on command := click ]
53 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
54 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
55 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
56 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
57 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
58 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
59 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
60 Building GUIs in Haskell > wxhaskell > Example wxhaskell in action (2) Implementing the event handler type StateVar = Var State change :: StateVar ValueEntry Float () Button () IO () change var ent btn = do (rate, currency) get var value input get ent typedvalue case input of Just x do set var [value : flipstate ] set ent [typedvalue := Just (rate x)] set btn [text := tolabel currency ] Nothing return ()
61 Building GUIs in Haskell > wxhaskell > Architecture Underlying toolkit wxhaskell built on top of wxwidgets: Large open source toolkit Many widgets available Platform independent Written in C++ wxhaskell API generated from wxwidgets source
62 Building GUIs in Haskell > wxhaskell > Architecture Main features General features: Completely covered wxwidgets API Platform independence Extensive documentation Unicode support Important features to discuss: Inheritance between widgets Shared attributes Typed widgets
63 Building GUIs in Haskell > wxhaskell > Architecture Inheritance between widgets (1) Pointer to a C++ object type Object a = Ptr a
64 Building GUIs in Haskell > wxhaskell > Architecture Inheritance between widgets (1) Pointer to a C++ object type Object a = Ptr a For each C++ class, a phantom type is introduced: Phantom data types data CWindow a data CControl a data CButton a
65 Building GUIs in Haskell > wxhaskell > Architecture Inheritance between widgets (1) Pointer to a C++ object type Object a = Ptr a For each C++ class, a phantom type is introduced: Phantom data types data CWindow a data CControl a data CButton a Model inheritance using type synonyms: type Window a = Object (CWindow a) type Control a = Window (CControl a) type Button a = Control (CButton a)
66 Building GUIs in Haskell > wxhaskell > Architecture Inheritance between widgets (2) Unfold the definition of Button Button a = Control (CButton a) = Window (CControl (CButton a)) = Object (CWindow (CControl (CButton a)))
67 Building GUIs in Haskell > wxhaskell > Architecture Inheritance between widgets (2) Unfold the definition of Button Button a = Control (CButton a) = Window (CControl (CButton a)) = Object (CWindow (CControl (CButton a))) button :: Window a [Prop (Button ())] IO (Button ()) Window a is at least an instance of Window Button () is exactly an instance of Button
68 Building GUIs in Haskell > wxhaskell > Architecture Shared attributes Using inheritance for shared attributes text :: Attr (Window a) String Unfortunately, there is no uniform implementation available
69 Building GUIs in Haskell > wxhaskell > Architecture Shared attributes Using inheritance for shared attributes text :: Attr (Window a) String Unfortunately, there is no uniform implementation available Combination of inheritance and overloading class Textual w where text :: Attr w String instance Textual (Button a) where text =...
70 Building GUIs in Haskell > wxhaskell > XTC Typed widgets The extended and Typed Controls (XTC) library: Developed by Arjan van IJzendoorn en Martijn Schrage Parsing and showing of values by XTC Visual feedback given when parsing fails No need for explicit conversions
71 Building GUIs in Haskell > wxhaskell > XTC Typed widgets The extended and Typed Controls (XTC) library: Developed by Arjan van IJzendoorn en Martijn Schrage Parsing and showing of values by XTC Visual feedback given when parsing fails No need for explicit conversions Remember the following line from the wxhaskell example:... ent mkvalueentry frm [typedvalue := Just 0]...
72 Building GUIs in Haskell > Comparison Strongest points of Gtk2Hs Glade, the visual GUI builder Graphical power, especially using the cairo vector graphics library
73 Building GUIs in Haskell > Comparison Strongest points of wxhaskell In general, there are more abstractions available: Administrative tasks (e.g, start) Gtk2Hs should have offered some abstraction for this: Possible definition of start in Gtk2Hs start :: WidgetClass a IO a IO () start gui = do initgui frame gui widgetshowall frame maingui Inheritance between widgets Shared attributes Typed widgets
74 Building GUIs in Haskell > Styles of libraries Different styles of libraries Monadic style: Imperative intuition Declarative style: Functional intuition Monadic libraries: Declarative libraries:
75 Building GUIs in Haskell > Styles of libraries Different styles of libraries Monadic style: Imperative intuition Binding variables Declarative style: Functional intuition Point-free programming Monadic libraries: Declarative libraries:
76 Building GUIs in Haskell > Styles of libraries Different styles of libraries Monadic style: Imperative intuition Binding variables Explicit event handling Declarative style: Functional intuition Point-free programming Implicit event handling Monadic libraries: Declarative libraries:
77 Building GUIs in Haskell > Styles of libraries Different styles of libraries Monadic style: Imperative intuition Binding variables Explicit event handling Static aspect (layout) of building GUIs Monadic libraries: Declarative style: Functional intuition Point-free programming Implicit event handling Dynamic aspect (events) of building GUIs Declarative libraries:
78 Building GUIs in Haskell > Styles of libraries Different styles of libraries Monadic style: Imperative intuition Binding variables Explicit event handling Static aspect (layout) of building GUIs Monadic libraries: Gtk2Hs wxhaskell HToolkit... Declarative style: Functional intuition Point-free programming Implicit event handling Dynamic aspect (events) of building GUIs Declarative libraries: Fudgets Fruit Yampa...
79 Building GUIs in Haskell > Conclusion Concluding remarks Question: What determines the usability of a GUI library in Haskell? Usability of a library depends on its abstractions Cross-pollination improves development of libraries
80 Building GUIs in Haskell > Conclusion Concluding remarks Question: What determines the usability of a GUI library in Haskell? Usability of a library depends on its abstractions Cross-pollination improves development of libraries General remark about the two libraries introduced: Gtk2Hs is powerful, but misses a lot of abstractions wxhaskell has nice abstractions, but could improve on: Bindings for (more powerful) graphical libraries A visual GUI builder (thesis project anyone?)
81 Building GUIs in Haskell > Conclusion Concluding remarks Question: What determines the usability of a GUI library in Haskell? Usability of a library depends on its abstractions Cross-pollination improves development of libraries General remark about the two libraries introduced: Gtk2Hs is powerful, but misses a lot of abstractions wxhaskell has nice abstractions, but could improve on: Bindings for (more powerful) graphical libraries A visual GUI builder (thesis project anyone?) If you are interested, visit the websites of the libraries discussed: haskell.org/gtk2hs wxhaskell.sourceforge.net
Countdown Alarm Clock. GUI Programming with wxhaskell. Widgets used. UI Creation Code. Wei Tan <[email protected]>
Countdown Alarm Clock GUI Programming with wxhaskell Wei Tan Widgets used UI Creation Code Frame Menu StaticText -- create main window & container for widgets f
Course MS10975A Introduction to Programming. Length: 5 Days
3 Riverchase Office Plaza Hoover, Alabama 35244 Phone: 205.989.4944 Fax: 855.317.2187 E-Mail: [email protected] Web: www.discoveritt.com Course MS10975A Introduction to Programming Length: 5 Days
Proxima 2.0: WYSIWYG generic editing for Web 2.0
Proxima 2.0: WYSIWYG generic editing for Web 2.0 dr Martijn M. Schrage Dept. of Computing Sciences, Utrecht University [email protected] Abstract In line with the Web 2.0 trend, an increasing number of
Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months
Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months Our program is a practical knowledge oriented program aimed at making innovative and attractive applications for mobile
English. Asema.com Portlets Programmers' Manual
English Asema.com Portlets Programmers' Manual Asema.com Portlets : Programmers' Manual Asema Electronics Ltd Copyright 2011-2013 No part of this publication may be reproduced, published, stored in an
Embedded BI made easy
June, 2015 1 Embedded BI made easy DashXML makes it easy for developers to embed highly customized reports and analytics into applications. DashXML is a fast and flexible framework that exposes Yellowfin
Voice Driven Animation System
Voice Driven Animation System Zhijin Wang Department of Computer Science University of British Columbia Abstract The goal of this term project is to develop a voice driven animation system that could take
Using SQL Server Management Studio
Using SQL Server Management Studio Microsoft SQL Server Management Studio 2005 is a graphical tool for database designer or programmer. With SQL Server Management Studio 2005 you can: Create databases
MA-WA1920: Enterprise iphone and ipad Programming
MA-WA1920: Enterprise iphone and ipad Programming Description This 5 day iphone training course teaches application development for the ios platform. It covers iphone, ipad and ipod Touch devices. This
Visual Basic. murach's TRAINING & REFERENCE
TRAINING & REFERENCE murach's Visual Basic 2008 Anne Boehm lbm Mike Murach & Associates, Inc. H 1-800-221-5528 (559) 440-9071 Fax: (559) 440-0963 [email protected] www.murach.com Contents Introduction
Qualtrics Question API
Qualtrics Question API API subject to change without notice Version: 2010.01.12 Contents Introduction... 2 Functions... 2 disablenextbutton... 2 disablepreviousbutton... 2 enablenextbutton... 3 enablepreviousbutton...
Lecture 1 Introduction to Android
These slides are by Dr. Jaerock Kwon at. The original URL is http://kettering.jrkwon.com/sites/default/files/2011-2/ce-491/lecture/alecture-01.pdf so please use that instead of pointing to this local copy
INFOPATH FORMS FOR OUTLOOK, SHAREPOINT, OR THE WEB
INFOPATH FORMS FOR OUTLOOK, SHAREPOINT, OR THE WEB GINI COURTER, TRIAD CONSULTING Like most people, you probably fill out business forms on a regular basis, including expense reports, time cards, surveys,
Visual Basic Programming. An Introduction
Visual Basic Programming An Introduction Why Visual Basic? Programming for the Windows User Interface is extremely complicated. Other Graphical User Interfaces (GUI) are no better. Visual Basic provides
Application Developer Guide
IBM Maximo Asset Management 7.1 IBM Tivoli Asset Management for IT 7.1 IBM Tivoli Change and Configuration Management Database 7.1.1 IBM Tivoli Service Request Manager 7.1 Application Developer Guide Note
Source Code Translation
Source Code Translation Everyone who writes computer software eventually faces the requirement of converting a large code base from one programming language to another. That requirement is sometimes driven
JMulTi/JStatCom - A Data Analysis Toolkit for End-users and Developers
JMulTi/JStatCom - A Data Analysis Toolkit for End-users and Developers Technology White Paper JStatCom Engineering, www.jstatcom.com by Markus Krätzig, June 4, 2007 Abstract JStatCom is a software framework
How to Develop Accessible Linux Applications
Sharon Snider Copyright 2002 by IBM Corporation v1.1, 2002 05 03 Revision History Revision v1.1 2002 05 03 Revised by: sds Converted to DocBook XML and updated broken links. Revision v1.0 2002 01 28 Revised
MICROSOFT ACCESS 2003 TUTORIAL
MICROSOFT ACCESS 2003 TUTORIAL M I C R O S O F T A C C E S S 2 0 0 3 Microsoft Access is powerful software designed for PC. It allows you to create and manage databases. A database is an organized body
Android Application Development - Exam Sample
Android Application Development - Exam Sample 1 Which of these is not recommended in the Android Developer's Guide as a method of creating an individual View? a Create by extending the android.view.view
DataPA OpenAnalytics End User Training
DataPA OpenAnalytics End User Training DataPA End User Training Lesson 1 Course Overview DataPA Chapter 1 Course Overview Introduction This course covers the skills required to use DataPA OpenAnalytics
JavaFX Session Agenda
JavaFX Session Agenda 1 Introduction RIA, JavaFX and why JavaFX 2 JavaFX Architecture and Framework 3 Getting Started with JavaFX 4 Examples for Layout, Control, FXML etc Current day users expect web user
Syllabus for CS 134 Java Programming
- Java Programming Syllabus Page 1 Syllabus for CS 134 Java Programming Computer Science Course Catalog 2000-2001: This course is an introduction to objectoriented programming using the Java language.
Student Records Home Page
Student Records Home Page The homepage for Student Records is built using four sections. Therefore there will be four different processes in changing or modifying the content. The four parts are: 1. Photo
Access 2007 Creating Forms Table of Contents
Access 2007 Creating Forms Table of Contents CREATING FORMS IN ACCESS 2007... 3 UNDERSTAND LAYOUT VIEW AND DESIGN VIEW... 3 LAYOUT VIEW... 3 DESIGN VIEW... 3 UNDERSTAND CONTROLS... 4 BOUND CONTROL... 4
STRUCTURE AND FLOWS. By Hagan Rivers, Two Rivers Consulting FREE CHAPTER
UIE REPORTS FUNDAMENTALS SERIES T H E D E S I G N E R S G U I D E T O WEB APPLICATIONS PART I: STRUCTURE AND FLOWS By Hagan Rivers, Two Rivers Consulting FREE CHAPTER User Interface Engineering User Interface
An Overview of Java. overview-1
An Overview of Java overview-1 Contents What is Java Major Java features Java virtual machine Java programming language Java class libraries (API) GUI Support in Java Networking and Threads in Java overview-2
DEVELOPMENT OF AN ANALYSIS AND REPORTING TOOL FOR ORACLE FORMS SOURCE CODES
DEVELOPMENT OF AN ANALYSIS AND REPORTING TOOL FOR ORACLE FORMS SOURCE CODES by Çağatay YILDIRIM June, 2008 İZMİR CONTENTS Page PROJECT EXAMINATION RESULT FORM...ii ACKNOWLEDGEMENTS...iii ABSTRACT... iv
Building Applications With DUIM
Building Applications With DUIM Release 1.0 Dylan Hackers January 28, 2016 CONTENTS 1 Copyright 3 2 Preface 5 2.1 About this manual............................................ 5 2.2 Running examples in
An introduction to creating JSF applications in Rational Application Developer Version 8.0
An introduction to creating JSF applications in Rational Application Developer Version 8.0 September 2010 Copyright IBM Corporation 2010. 1 Overview Although you can use several Web technologies to create
for Sage 100 ERP Business Insights Overview Document
for Sage 100 ERP Business Insights Document 2012 Sage Software, Inc. All rights reserved. Sage Software, Sage Software logos, and the Sage Software product and service names mentioned herein are registered
HTML Form Widgets. Review: HTML Forms. Review: CGI Programs
HTML Form Widgets Review: HTML Forms HTML forms are used to create web pages that accept user input Forms allow the user to communicate information back to the web server Forms allow web servers to generate
Pastel Evolution BIC. Getting Started Guide
Pastel Evolution BIC Getting Started Guide Table of Contents System Requirements... 4 How it Works... 5 Getting Started Guide... 6 Standard Reports Available... 6 Accessing the Pastel Evolution (BIC) Reports...
metaengine DataConnect For SharePoint 2007 Configuration Guide
metaengine DataConnect For SharePoint 2007 Configuration Guide metaengine DataConnect for SharePoint 2007 Configuration Guide (2.4) Page 1 Contents Introduction... 5 Installation and deployment... 6 Installation...
Explore commands on the ribbon Each ribbon tab has groups, and each group has a set of related commands.
Quick Start Guide Microsoft Excel 2013 looks different from previous versions, so we created this guide to help you minimize the learning curve. Add commands to the Quick Access Toolbar Keep favorite commands
Rapid Application Development with GNOME and Python
Rapid Application Development with GNOME and Python Christian Egli [email protected] June 13, 2001 What is RAD? Abstract RAD is a programming system that enables programmers to build working programs
Getting Started Guide
Getting Started Guide Introduction... 3 What is Pastel Partner (BIC)?... 3 System Requirements... 4 Getting Started Guide... 6 Standard Reports Available... 6 Accessing the Pastel Partner (BIC) Reports...
Microsoft Access Basics
Microsoft Access Basics 2006 ipic Development Group, LLC Authored by James D Ballotti Microsoft, Access, Excel, Word, and Office are registered trademarks of the Microsoft Corporation Version 1 - Revision
An Introduction to Modern Software Development Tools Creating A Simple GUI-Based Tool Appleʼs XCode Version 3.2.6
1 2 3 4 An Introduction to Modern Software Development Tools Creating A Simple GUI-Based Tool Appleʼs XCode Version 3.2.6 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Charles J. Ammon / Penn State August, 2011
Hypercosm. Studio. www.hypercosm.com
Hypercosm Studio www.hypercosm.com Hypercosm Studio Guide 3 Revision: November 2005 Copyright 2005 Hypercosm LLC All rights reserved. Hypercosm, OMAR, Hypercosm 3D Player, and Hypercosm Studio are trademarks
HTML5. Turn this page to see Quick Guide of CTTC
Programming SharePoint 2013 Development Courses ASP.NET SQL TECHNOLGY TRAINING GUIDE Visual Studio PHP Programming Android App Programming HTML5 Jquery Your Training Partner in Cutting Edge Technologies
E4 development: examples, methods and tools. Eclipse Con France 2014
E4 development: examples, methods and tools Eclipse Con France 2014 18-19 June 2014 Table des matières I - Eclipse 4 Workshop 5 A. OPCoach... 5 B. Workshop Eclipse 4 : Building an E4 application... 6
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
Computing Concepts with Java Essentials
2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann
Creating Online Surveys with Qualtrics Survey Tool
Creating Online Surveys with Qualtrics Survey Tool Copyright 2015, Faculty and Staff Training, West Chester University. A member of the Pennsylvania State System of Higher Education. No portion of this
Architecture, Design and Implementation of a Mathematical Derivation Editor. Johannes Eriksson
Architecture, Design and Implementation of a Mathematical Derivation Editor Johannes Eriksson What is the Derivation Editor? The Mathematical Derivation Editor (nicknamed Mathedit ) is work in progress;
Android Development. Marc Mc Loughlin
Android Development Marc Mc Loughlin Android Development Android Developer Website:h:p://developer.android.com/ Dev Guide Reference Resources Video / Blog SeCng up the SDK h:p://developer.android.com/sdk/
Advantage of Jquery: T his file is downloaded from
What is JQuery JQuery is lightweight, client side JavaScript library file that supports all browsers. JQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling,
Firewall Builder Architecture Overview
Firewall Builder Architecture Overview Vadim Zaliva Vadim Kurland Abstract This document gives brief, high level overview of existing Firewall Builder architecture.
Dashcode User Guide. (Retired Document)
Dashcode User Guide (Retired Document) Contents Introduction to Dashcode User Guide 7 Who Should Read This Document? 7 Organization of This Document 7 Getting and Running Dashcode 8 Reporting Bugs 8 See
Release 2.1 of SAS Add-In for Microsoft Office Bringing Microsoft PowerPoint into the Mix ABSTRACT INTRODUCTION Data Access
Release 2.1 of SAS Add-In for Microsoft Office Bringing Microsoft PowerPoint into the Mix Jennifer Clegg, SAS Institute Inc., Cary, NC Eric Hill, SAS Institute Inc., Cary, NC ABSTRACT Release 2.1 of SAS
Java Interview Questions and Answers
1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write and compile the java
User Guide for Smart Former Gold (v. 1.0) by IToris Inc. team
User Guide for Smart Former Gold (v. 1.0) by IToris Inc. team Contents Offshore Web Development Company CONTENTS... 2 INTRODUCTION... 3 SMART FORMER GOLD IS PROVIDED FOR JOOMLA 1.5.X NATIVE LINE... 3 SUPPORTED
Introduction to Module 1: Converting Word Docs to FrameMaker
Introduction to Module 1: Converting Word Docs to FrameMaker Introduction to Module 1: Converting Word Docs to FrameMaker FrameMaker s tools make it easy to globally control formatting and some content.
Adding Panoramas to Google Maps Using Ajax
Adding Panoramas to Google Maps Using Ajax Derek Bradley Department of Computer Science University of British Columbia Abstract This project is an implementation of an Ajax web application. AJAX is a new
Introduction to WebGL
Introduction to WebGL Alain Chesnais Chief Scientist, TrendSpottr ACM Past President [email protected] http://www.linkedin.com/in/alainchesnais http://facebook.com/alain.chesnais Housekeeping If you are
WebSphere Business Monitor
WebSphere Business Monitor Monitor sub-models 2010 IBM Corporation This presentation should provide an overview of the sub-models in a monitor model in WebSphere Business Monitor. WBPM_Monitor_MonitorModels_Submodels.ppt
Paper 10-27 Designing Web Applications: Lessons from SAS User Interface Analysts Todd Barlow, SAS Institute Inc., Cary, NC
Paper 10-27 Designing Web Applications: Lessons from SAS User Interface Analysts Todd Barlow, SAS Institute Inc., Cary, NC ABSTRACT Web application user interfaces combine aspects of non-web GUI design
Xcode Project Management Guide. (Legacy)
Xcode Project Management Guide (Legacy) Contents Introduction 10 Organization of This Document 10 See Also 11 Part I: Project Organization 12 Overview of an Xcode Project 13 Components of an Xcode Project
Chapter 5 Names, Bindings, Type Checking, and Scopes
Chapter 5 Names, Bindings, Type Checking, and Scopes Chapter 5 Topics Introduction Names Variables The Concept of Binding Type Checking Strong Typing Scope Scope and Lifetime Referencing Environments Named
Getting Started Guide SAGE ACCPAC INTELLIGENCE
Getting Started Guide SAGE ACCPAC INTELLIGENCE Table of Contents Introduction... 1 What is Sage Accpac Intelligence?... 1 What are the benefits of using Sage Accpac Intelligence?... 1 System Requirements...
Image Management Suite. Mini Thesis. Roland Foster. Supervisors: Mr. Mehrdad Ghaziasgar and Mr. James Connan. B.Sc. Honours
Image Management Suite Mini Thesis Roland Foster 2916282 Supervisors: Mr. Mehrdad Ghaziasgar and Mr. James Connan B.Sc. Honours Department of Computer Science 2012 Acknowledgements I would like to thank
Page Editor Recommended Practices for Developers
Page Editor Recommended Practices for Developers Rev: 7 July 2014 Sitecore CMS 7 and later Page Editor Recommended Practices for Developers A Guide to Building for the Page Editor and Improving the Editor
Business Insight Report Authoring Getting Started Guide
Business Insight Report Authoring Getting Started Guide Version: 6.6 Written by: Product Documentation, R&D Date: February 2011 ImageNow and CaptureNow are registered trademarks of Perceptive Software,
Blackboard Help. Getting Started My Institution Tab Courses Tab Working With Modules Customizing Tab Modules Course Catalog.
Blackboard Help Getting Started My Institution Tab Courses Tab Working With Modules Customizing Tab Modules Course Catalog 1 Getting Started The following are some things to keep in mind when using Blackboard
Module 9 Ad Hoc Queries
Module 9 Ad Hoc Queries Objectives Familiarize the User with basic steps necessary to create ad hoc queries using the Data Browser. Topics Ad Hoc Queries Create a Data Browser query Filter data Save a
Microsoft Office System Tip Sheet
The 2007 Microsoft Office System The 2007 Microsoft Office system is a complete set of desktop and server software that can help streamline the way you and your people do business. This latest release
Microsoft Access 2010 Overview of Basics
Opening Screen Access 2010 launches with a window allowing you to: create a new database from a template; create a new template from scratch; or open an existing database. Open existing Templates Create
Declarative API for Defining Visualizations in Envision
Declarative API for Defining Visualizations in Envision Bachelor s Thesis Report Andrea Helfenstein Supervised by Dimitar Asenov, Prof. Peter Müller May 5, 2013 Contents 1 Introduction 1 1.1 Motivation..........................................
not at all a manual simply a quick how-to-do guide
not at all a manual simply a quick how-to-do guide As a general rule, the GUI implemented by spatialite-gis is closely related to the one implemented by the companion app spatialite-gui So, if you are
To determine the fields in a table decide what you need to know about the subject. Here are a few tips:
Access Introduction Microsoft Access is a relational database software product that you can use to organize your data. What is a "database"? A database is an integrated collection of data that shares some
Introduction to ProForm Rapid elearning Studio. What is ProForm? The ProForm Course Authoring Tool allows you to quickly create
Introduction to ProForm Rapid elearning Studio The ProForm Rapid elearning Studio includes the ProForm Course Authoring Tool, the SWiSH Rapid Animation Tool, and the RapidCam Screen Recording Tool. This
SignalDraw: GUI Tool For Generating Pulse Sequences
SignalDraw: GUI Tool For Generating Pulse Sequences Konstantin Berlin Department of Computer Science University of Maryland College Park, MD 20742 [email protected] December 9, 2005 Abstract Generating
15 minutes is not much so I will try to give some crucial guidelines and basic knowledge.
1 Presentation. Good morning ladies and gentlemen, dear colleagues. First of all I would like to thank the committee for this invitation and letting me speak about one of my favourite topics: the internet.
Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph. Client: Brian Krzys
Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph Client: Brian Krzys June 17, 2014 Introduction Newmont Mining is a resource extraction company with a research and development
Mobility Introduction Android. Duration 16 Working days Start Date 1 st Oct 2013
Mobility Introduction Android Duration 16 Working days Start Date 1 st Oct 2013 Day 1 1. Introduction to Mobility 1.1. Mobility Paradigm 1.2. Desktop to Mobile 1.3. Evolution of the Mobile 1.4. Smart phone
TUTORIAL 4 Building a Navigation Bar with Fireworks
TUTORIAL 4 Building a Navigation Bar with Fireworks This tutorial shows you how to build a Macromedia Fireworks MX 2004 navigation bar that you can use on multiple pages of your website. A navigation bar
Lesson 07: MS ACCESS - Handout. Introduction to database (30 mins)
Lesson 07: MS ACCESS - Handout Handout Introduction to database (30 mins) Microsoft Access is a database application. A database is a collection of related information put together in database objects.
The Clean programming language. Group 25, Jingui Li, Daren Tuzi
The Clean programming language Group 25, Jingui Li, Daren Tuzi The Clean programming language Overview The Clean programming language first appeared in 1987 and is still being further developed. It was
... Introduction... 17
... Introduction... 17 1... Workbench Tools and Package Hierarchy... 29 1.1... Log on and Explore... 30 1.1.1... Workbench Object Browser... 30 1.1.2... Object Browser List... 31 1.1.3... Workbench Settings...
How To Create A Powerpoint Intelligence Report In A Pivot Table In A Powerpoints.Com
Sage 500 ERP Intelligence Reporting Getting Started Guide 27.11.2012 Table of Contents 1.0 Getting started 3 2.0 Managing your reports 10 3.0 Defining report properties 18 4.0 Creating a simple PivotTable
AbiWord: A Cross Platform GNOME Office Component
AbiWord: A Cross Platform GNOME Office Component Dom Lachowicz Hubert Figuière 1 Abstract AbiWord is a cross platform Word Processor, but it is also GNOME s word
Programming Language Pragmatics
Programming Language Pragmatics THIRD EDITION Michael L. Scott Department of Computer Science University of Rochester ^ШШШШШ AMSTERDAM BOSTON HEIDELBERG LONDON, '-*i» ЩЛ< ^ ' m H NEW YORK «OXFORD «PARIS»SAN
Web Application Designer for Beginners
Applies To: Web Application Designer, SAP BW Version: 3.5, SAP GUI version 6.40/Patch Level 13 BW 3.5 front end patch 7 (bw350_7-10001615) Summary The document will run the readers through a step by step
Developer Tutorial Version 1. 0 February 2015
Developer Tutorial Version 1. 0 Contents Introduction... 3 What is the Mapzania SDK?... 3 Features of Mapzania SDK... 4 Mapzania Applications... 5 Architecture... 6 Front-end application components...
Building A Very Simple Web Site
Sitecore CMS 6.2 Building A Very Simple Web Site Rev 100601 Sitecore CMS 6. 2 Building A Very Simple Web Site A Self-Study Guide for Developers Table of Contents Chapter 1 Introduction... 3 Chapter 2 Building
14.1. bs^ir^qfkd=obcib`qflk= Ñçê=emI=rkfuI=~åÇ=léÉåsjp=eçëíë
14.1 bs^ir^qfkd=obcib`qflk= Ñçê=emI=rkfuI=~åÇ=léÉåsjp=eçëíë bî~äì~íáåö=oéñäéåíáçå=ñçê=emi=rkfui=~åç=lééåsjp=eçëíë This guide walks you quickly through key Reflection features. It covers: Getting Connected
Creating Database Tables in Microsoft SQL Server
Creating Database Tables in Microsoft SQL Server Microsoft SQL Server is a relational database server that stores and retrieves data for multi-user network-based applications. SQL Server databases are
8 CREATING FORM WITH FORM WIZARD AND FORM DESIGNER
8 CREATING FORM WITH FORM WIZARD AND FORM DESIGNER 8.1 INTRODUCTION Forms are very powerful tool embedded in almost all the Database Management System. It provides the basic means for inputting data for
Java 7 Recipes. Freddy Guime. vk» (,\['«** g!p#« Carl Dea. Josh Juneau. John O'Conner
1 vk» Java 7 Recipes (,\['«** - < g!p#«josh Juneau Carl Dea Freddy Guime John O'Conner Contents J Contents at a Glance About the Authors About the Technical Reviewers Acknowledgments Introduction iv xvi
J j enterpririse. Oracle Application Express 3. Develop Native Oracle database-centric web applications quickly and easily with Oracle APEX
Oracle Application Express 3 The Essentials and More Develop Native Oracle database-centric web applications quickly and easily with Oracle APEX Arie Geller Matthew Lyon J j enterpririse PUBLISHING BIRMINGHAM
Eclipse 4 RCP application Development COURSE OUTLINE
Description The Eclipse 4 RCP application development course will help you understand how to implement your own application based on the Eclipse 4 platform. The Eclipse 4 release significantly changes
Programming in Access VBA
PART I Programming in Access VBA In this part, you will learn all about how Visual Basic for Applications (VBA) works for Access 2010. A number of new VBA features have been incorporated into the 2010
Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner.
Handout 1 CS603 Object-Oriented Programming Fall 15 Page 1 of 11 Handout 1 Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner. Java
The Microsoft Access 2007 Screen
1 of 1 Office Button The Microsoft Access 2007 Screen Title Bar Help Ribbon Quick Access Toolbar Database Components Active Component NOTE: THIS HELP DOCUMENT EXPLAINS THE LAYOUT OF ACCESS. FOR MORE INFORMATION
Microsoft Migrating to Access 2010 from Access 2003
In This Guide Microsoft Access 2010 looks very different, so we created this guide to help you minimize the learning curve. Read on to learn key parts of the new interface, discover free Access 2010 training,
