SlideShare a Scribd company logo
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

More Related Content

Similar to 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 8
Sam Becker
 
Apache Airflow in Production
Apache Airflow in ProductionApache Airflow in Production
Apache Airflow in Production
Robert Sanders
 
Write unit test from scratch
Write unit test from scratchWrite unit test from scratch
Write unit test from scratch
Wen-Shih Chao
 
Qtp day 1
Qtp day 1Qtp day 1
Qtp day 1
Prashanth BS
 
Presenty: User Interface Framework
Presenty: User Interface FrameworkPresenty: User Interface Framework
Presenty: User Interface Framework
ESUG
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
Alessandro 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 Q3
Paris Android User Group
 
Qtp - Introduction to synchronization
Qtp -  Introduction to synchronizationQtp -  Introduction to synchronization
Qtp - Introduction to synchronization
Vibrant Technologies & Computers
 
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
ddrschiw
 
Monitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operatorMonitoring kubernetes with prometheus-operator
Monitoring kubernetes with prometheus-operator
Lili Cosic
 
Five android architecture
Five android architectureFive android architecture
Five android architecture
Tomislav Homan
 
Tokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma NetbookTokamak 4: KDE Plasma Netbook
Tokamak 4: KDE Plasma Netbook
Marco Martin
 
Lecture #4 activities & fragments
Lecture #4  activities & fragmentsLecture #4  activities & fragments
Lecture #4 activities & fragments
Vitali Pekelis
 
Hibernate 1x2
Hibernate 1x2Hibernate 1x2
A Python Petting Zoo
A Python Petting ZooA Python Petting Zoo
A Python Petting Zoo
devondjones
 
RxSwift
RxSwiftRxSwift
RxSwift
Sally Ahmed
 
GUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptxGUI Programming using Tkinter-converted.pptx
GUI Programming using Tkinter-converted.pptx
dvarshitha04
 
Interview qutions
Interview qutionsInterview qutions
Interview qutions
satyaragha
 
Introducing Honeycomb
Introducing HoneycombIntroducing Honeycomb
Introducing Honeycomb
CommonsWare
 
Android design patterns
Android design patternsAndroid design patterns
Android design patterns
Platty Soft
 

Similar to 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
 

More from 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 programming
ESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG
 
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
ESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
ESUG
 
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 results
ESUG
 
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
ESUG
 
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
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG
 
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
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG
 
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
ESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG
 
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
ESUG
 

More from 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
 

Recently uploaded

"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 

Recently uploaded (20)

"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 

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 ● ...