SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Presenty

       User Interface Application Framework




http://www.squeaksource.com/Presenty      MIT license
Presenty




Separation business logic of user interface application
              from presentation level
Business logic of user interface application


  Sequence of domain user requests:

      ●   Select savings account
      ●   Select pay service
      ●   Input pay service requisities
      ●   Input payment amount
      ●   Wait payment processed
      ●   Take cheque
Business logic of user interface application


  Sequence of primitive user requests:

       ●   Select item from list
       ●   Edit item
       ●   Wait something
       ●   Look at item
Presentation level

               ●   Combo box
               ●   Check box
               ●   Radio button
Widgets:       ●   Context menu
               ●   Button
               ●   Shortcuts
               ●   Table
               ●   List
               ●   Tree
Presentation level

             ●   Combo box
             ●   Check box
                 Radio button
It's all designer terminology
             ●


             ●Context menu
             ●   Button
             ●   Shortcut
             ●   Table
             ●   List
             ●   Tree
Classic package browser
Alt Browser
Classic browser, Alt-browser, Whisker browser, Newspeak browser


               Same business logic

           ●   Select package
           ●   Select class from selected package
           ●   Select protocol from selected class
           ●   Select method from selected protocol
Classic browser, Alt-browser, Whisker browser, Newspeak browser


               Same business logic

           ●   Select package
           ●   Select class from selected package
           ●   Select protocol from selected class
           ●   Select method from selected protocol

  Can be presented by million ways,
                 by million widgets
No widgets!
at application programming level
          ●   Combo box
          ●   Check box
          ●   Radio button
          ●   Context menu
          ●   Button
          ●   Shortcut
          ●   Table
          ●   List
          ●   Tree
Simple package browser with Presenty

PtyBrowsePackagesTask>>body
| package class method protocol |


package := user select: 'Package' from: PackageOrganizer default packages.
class := user select: 'Class' from: package classes.
protocol := user select: 'Protocol' from: class protocols.
method := user select: 'Method' from: (class methodsInProtocol: protocol).
user lookAt: method sourceCodePreviewPresenter
Browser with simple navigation
Browser with simple navigation and filtered lists




                 List filters
Browser with table
Browser with table and filters




           List filters
Modal browser with filters and items paging


           Kernel selected




                                  Float selected




            Arithmetic selected
Browser with tree




Not yet implemented
How all this work
●   PtyGuide is central object which drive all application
●   PtyUser presents domain user of application. It implements
    domain specific requests
    ●   user payForService
    ●   user selectSavingsAccount
    ●   …
●   User interacts with guide to call new tasks
●   Task describes business logic as sequence of user requests
●   Task can call other tasks
●   Task can add UI items (presenters) to view area
●   UI items are presenters which connect model to view
●   Task can inherit UI items from other tasks
How all this work
                  PtyTask                                                    PtyTaskContext
                                                       task
    ●    user                                                                ●   task
    ●    guide                                                               ●   continuation
    ●    activationStrategy (default)                                        ●   activation
    ●    parentContext                             parentContext
                                                                      activation          context
    ●    prototype

                                                                  PtyTaskActivationStrategy
                                         context
                                                              ●    context
PtyViewAreaPresenter                                          ●    parentViewArea
                                        parentViewArea
●       context                                               ●    shouldRememberTask
●       items                                                 ●    shouldForgetCompleteTask
                                                              ●    shouldRestoreParentArea
How all this work
                          PtyTaskActivationStrategy



SeparatedAreaActivationStrategy                       InheritedActivationStrategy



                                                         PtyNewAreaActivator
         areaActivator
                                                        PtyInlinedAreaActivator

                                                        PtyModalAreaActivator
     PtyViewAreaActivator

    show view area to user                              PtyNewWindowActivator

                                                        PtyPopUpAreaActivator

                                                      PtyEmbeddedAreaActivator
Tree UI element

package := user select: 'Package' from: PackageOrganizer default packages.
class := user select: 'Class' from: package classes.


●   Class selection task configured to be activated on separated
    view area near selected package item
●   With same way any task which executed by button can show
    its items near this button
●   Not implemented yet
Combo box UI element

guide addTask: [model value: (user select: 'Item' from: possibleItems)].
user lookAt: model preferredPreviewPresenter


●   #lookAt: shows user current value of model
●   #addTask: adds extra task to view area
●   #addTask: can be configured as button              which executes
    extra task
●   Extra task with items selection can be configured to show
    popup view area with items list
PtyForkTask
●   PtyForkTask is one way to add extra task to view area
●   PtyForkTask just executed target task and when user request
    happen parent task continue execution
●   There are many ways to share «fork task items» with parent
    task
    ●   Add all items to parent view area
    ●   Put all items on separated panel
    ●   Put first request items on one panel but next on other
    ●   ...
What about buttons?
●   Presenty has no ButtonPresenter or ButtonView (Morph)
●   Button is just specific way to execute some action. It's same
    as:
    ●   Shortcuts
    ●   Voice command
    ●   Gesture
    ●   Million other ways
User actions
                                    *    userActions
            PtyUserAction                                           PtyPresenter


                  connector                             presenter


action          PtyUserActionConnector


               activators
                                                         PtyButtonUserActionActivator
                    *
          PtyUserActionActivator
                                                          PtyShortcutActionActivator
         Implements #hookupPresenter
                                                       PtyMouseClickUserActionActivator
User actions




               Any list item has user action which
                             executes
               PtyReturnValueFromPresenterTask



User action PtyReturnToPreviousTask
How all this configured
●   Presenter views can be different for different contexs
●   Requested tasks can be different for different contexts
●   Action activators can be different for different contexts

                            Extendible UI contexts
●   Task context
●   Presenter context
●   Presenter style context
●   List items name context
●   Any domain specific contexts
    ●   Big payment context
    ●   Little account balance context
UISettings and PtyPrototypesManager
●   Each configured object has prototype
●   Prototype can create new instances by copy its sample
●   PtyPrototypesManager contains collections of prototypes
●   Manager know how to find appropriate prototype
    ●   manager prototypeFor: someContextObject
    ●   special lookup logic which can be extended by domain specific contexts
●   Separated managers for presenters, tasks and user actions
●   UISettings contains all managers
●   UISettings know how to prepare new instances created from
    prototype
●   PrototypesManager is separated package. It is not depends
    on Presenty. It is MIT
Future work
●   Extendible object editor
     ●    user edit: object
●   Extendible object explorer
     ●    user lookAt: object
●   User actions with parameters. Drag and drop activators
●   Text editor based on presenter and user actions
●   More forking task strategies
●   More view area activators
●   Improvements for basic stuff like tables
●   Docs
●   ...
The end

Weitere ähnliche Inhalte

Ähnlich wie Presenty

Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Sam Becker
 
Apache Airflow in Production
Apache Airflow in ProductionApache Airflow in Production
Apache Airflow in ProductionRobert Sanders
 
Write unit test from scratch
Write unit test from scratchWrite unit test from scratch
Write unit test from scratchWen-Shih Chao
 
Presenty: User Interface Framework
Presenty: User Interface FrameworkPresenty: User Interface Framework
Presenty: User Interface FrameworkESUG
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingAlessandro Molina
 
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Paris Android User Group
 
Ad107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPagesAd107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPagesddrschiw
 
Monitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operatorMonitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operatorLili Cosic
 
Five android architecture
Five android architectureFive android architecture
Five android architectureTomislav Homan
 
Tokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma NetbookTokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma NetbookMarco Martin
 
Lecture #4 activities & fragments
Lecture #4  activities & fragmentsLecture #4  activities & fragments
Lecture #4 activities & fragmentsVitali Pekelis
 
A Python Petting Zoo
A Python Petting ZooA Python Petting Zoo
A Python Petting Zoodevondjones
 
GUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptxGUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptxdvarshitha04
 
Interview qutions
Interview qutionsInterview qutions
Interview qutionssatyaragha
 
Introducing Honeycomb
Introducing HoneycombIntroducing Honeycomb
Introducing HoneycombCommonsWare
 
Android design patterns
Android design patternsAndroid design patterns
Android design patternsPlatty Soft
 

Ähnlich wie Presenty (20)

Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8
 
Apache Airflow in Production
Apache Airflow in ProductionApache Airflow in Production
Apache Airflow in Production
 
Write unit test from scratch
Write unit test from scratchWrite unit test from scratch
Write unit test from scratch
 
Qtp day 1
Qtp day 1Qtp day 1
Qtp day 1
 
Presenty: User Interface Framework
Presenty: User Interface FrameworkPresenty: User Interface Framework
Presenty: User Interface Framework
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
 
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
 
Qtp - Introduction to synchronization
Qtp -  Introduction to synchronizationQtp -  Introduction to synchronization
Qtp - Introduction to synchronization
 
Ad107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPagesAd107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPages
 
Monitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operatorMonitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operator
 
Five android architecture
Five android architectureFive android architecture
Five android architecture
 
Tokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma NetbookTokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma Netbook
 
Lecture #4 activities & fragments
Lecture #4  activities & fragmentsLecture #4  activities & fragments
Lecture #4 activities & fragments
 
Hibernate 1x2
Hibernate 1x2Hibernate 1x2
Hibernate 1x2
 
A Python Petting Zoo
A Python Petting ZooA Python Petting Zoo
A Python Petting Zoo
 
RxSwift
RxSwiftRxSwift
RxSwift
 
GUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptxGUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptx
 
Interview qutions
Interview qutionsInterview qutions
Interview qutions
 
Introducing Honeycomb
Introducing HoneycombIntroducing Honeycomb
Introducing Honeycomb
 
Android design patterns
Android design patternsAndroid design patterns
Android design patterns
 

Mehr von ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Mehr von ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Kürzlich hochgeladen

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 

Kürzlich hochgeladen (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

Presenty

  • 1. Presenty User Interface Application Framework http://www.squeaksource.com/Presenty MIT license
  • 2. Presenty Separation business logic of user interface application from presentation level
  • 3. Business logic of user interface application Sequence of domain user requests: ● Select savings account ● Select pay service ● Input pay service requisities ● Input payment amount ● Wait payment processed ● Take cheque
  • 4. Business logic of user interface application Sequence of primitive user requests: ● Select item from list ● Edit item ● Wait something ● Look at item
  • 5. Presentation level ● Combo box ● Check box ● Radio button Widgets: ● Context menu ● Button ● Shortcuts ● Table ● List ● Tree
  • 6. Presentation level ● Combo box ● Check box Radio button It's all designer terminology ● ●Context menu ● Button ● Shortcut ● Table ● List ● Tree
  • 9. Classic browser, Alt-browser, Whisker browser, Newspeak browser Same business logic ● Select package ● Select class from selected package ● Select protocol from selected class ● Select method from selected protocol
  • 10. Classic browser, Alt-browser, Whisker browser, Newspeak browser Same business logic ● Select package ● Select class from selected package ● Select protocol from selected class ● Select method from selected protocol Can be presented by million ways, by million widgets
  • 11. No widgets! at application programming level ● Combo box ● Check box ● Radio button ● Context menu ● Button ● Shortcut ● Table ● List ● Tree
  • 12. Simple package browser with Presenty PtyBrowsePackagesTask>>body | package class method protocol | package := user select: 'Package' from: PackageOrganizer default packages. class := user select: 'Class' from: package classes. protocol := user select: 'Protocol' from: class protocols. method := user select: 'Method' from: (class methodsInProtocol: protocol). user lookAt: method sourceCodePreviewPresenter
  • 13. Browser with simple navigation
  • 14. Browser with simple navigation and filtered lists List filters
  • 16. Browser with table and filters List filters
  • 17. Modal browser with filters and items paging Kernel selected Float selected Arithmetic selected
  • 18. Browser with tree Not yet implemented
  • 19. How all this work ● PtyGuide is central object which drive all application ● PtyUser presents domain user of application. It implements domain specific requests ● user payForService ● user selectSavingsAccount ● … ● User interacts with guide to call new tasks ● Task describes business logic as sequence of user requests ● Task can call other tasks ● Task can add UI items (presenters) to view area ● UI items are presenters which connect model to view ● Task can inherit UI items from other tasks
  • 20. How all this work PtyTask PtyTaskContext task ● user ● task ● guide ● continuation ● activationStrategy (default) ● activation ● parentContext parentContext activation context ● prototype PtyTaskActivationStrategy context ● context PtyViewAreaPresenter ● parentViewArea parentViewArea ● context ● shouldRememberTask ● items ● shouldForgetCompleteTask ● shouldRestoreParentArea
  • 21. How all this work PtyTaskActivationStrategy SeparatedAreaActivationStrategy InheritedActivationStrategy PtyNewAreaActivator areaActivator PtyInlinedAreaActivator PtyModalAreaActivator PtyViewAreaActivator show view area to user PtyNewWindowActivator PtyPopUpAreaActivator PtyEmbeddedAreaActivator
  • 22. Tree UI element package := user select: 'Package' from: PackageOrganizer default packages. class := user select: 'Class' from: package classes. ● Class selection task configured to be activated on separated view area near selected package item ● With same way any task which executed by button can show its items near this button ● Not implemented yet
  • 23. Combo box UI element guide addTask: [model value: (user select: 'Item' from: possibleItems)]. user lookAt: model preferredPreviewPresenter ● #lookAt: shows user current value of model ● #addTask: adds extra task to view area ● #addTask: can be configured as button which executes extra task ● Extra task with items selection can be configured to show popup view area with items list
  • 24. PtyForkTask ● PtyForkTask is one way to add extra task to view area ● PtyForkTask just executed target task and when user request happen parent task continue execution ● There are many ways to share «fork task items» with parent task ● Add all items to parent view area ● Put all items on separated panel ● Put first request items on one panel but next on other ● ...
  • 25. What about buttons? ● Presenty has no ButtonPresenter or ButtonView (Morph) ● Button is just specific way to execute some action. It's same as: ● Shortcuts ● Voice command ● Gesture ● Million other ways
  • 26. User actions * userActions PtyUserAction PtyPresenter connector presenter action PtyUserActionConnector activators PtyButtonUserActionActivator * PtyUserActionActivator PtyShortcutActionActivator Implements #hookupPresenter PtyMouseClickUserActionActivator
  • 27. User actions Any list item has user action which executes PtyReturnValueFromPresenterTask User action PtyReturnToPreviousTask
  • 28. How all this configured ● Presenter views can be different for different contexs ● Requested tasks can be different for different contexts ● Action activators can be different for different contexts Extendible UI contexts ● Task context ● Presenter context ● Presenter style context ● List items name context ● Any domain specific contexts ● Big payment context ● Little account balance context
  • 29. UISettings and PtyPrototypesManager ● Each configured object has prototype ● Prototype can create new instances by copy its sample ● PtyPrototypesManager contains collections of prototypes ● Manager know how to find appropriate prototype ● manager prototypeFor: someContextObject ● special lookup logic which can be extended by domain specific contexts ● Separated managers for presenters, tasks and user actions ● UISettings contains all managers ● UISettings know how to prepare new instances created from prototype ● PrototypesManager is separated package. It is not depends on Presenty. It is MIT
  • 30. Future work ● Extendible object editor ● user edit: object ● Extendible object explorer ● user lookAt: object ● User actions with parameters. Drag and drop activators ● Text editor based on presenter and user actions ● More forking task strategies ● More view area activators ● Improvements for basic stuff like tables ● Docs ● ...