SlideShare a Scribd company logo
Magritte 2
Magritte 3
Im
  pro                   Ne
     ved
                          w
Magritte: Describe once,
       get everywhere
•   Introspection          • Object persistency
•   Reflection
                           • Object indexing
•   Documentation
                           • Object setup
•   Viewer building
                           • Object verification
•   Form/Editor building
                           • Object adaption
•   Report building

•   Data validation        • Object customization

•   Query processing       • and much more
Why Magritte 3                          All in all the "new" Magritte would look like in the following
From: Lukas Renggli                                                     example. Imagine a shop item with the accessor #place:

 November 2010                                                           Item>>place
                                                                            ^ place
I wrote a proposal this summer of want to proceed on                     Item>>place: aString
that, but of course I had to finish my writing and never actually           place := aString
found the time to implement it:
                                                                        The meta-description is defined on the instance-side and annotated. It
--------------------                                                    can refer to itself for the possible places:
I propose to perform the following (non-backward compatible) changes     Item>>placeDescription
in the Magritte 2 code-base to resolve some major annoyances and            <magritte>
issues that keep on reoccurring:
                                                                            ^ MASingleOptionDescription new
- Move descriptions from class-side to instance-side. This resolves           options: self possiblePlaces;
various issues such as cache-invalidation, instance specific                  label: 'Place of Item';
descriptions, dynamic descriptions, context dependent descriptions,           accessor: #place;
etc. Furthermore the descriptions will be closer to the code they             yourself
describe and it will be possible to describe class- and instance-side
of an object, not just the instance-side.                               Class extensions can modify a description using:
- Rename the method #description as the default entry point into         Item>>placeDescriptionXmlStorage: aDescription
Magritte to #magritteDescription. This avoids common problems where         <magritte: #placeDescription>
the domain model already defines such a method.
                                                                            ^ placeDescription xmlTag: 'xname'
- Instead of using a naming convention for description methods, use a
pragma called <magritte> to annotate the methods. And to extend and     Since these changes are not backward compatible I'll try to provide
change existing descriptions use <magritte: aSelector>. Finally all     automatic refactorings for most parts. Moving existing code to the new
Smalltalk implementation reached a consensus of pragmas that can be     codebase will certainly cause some problems, but in the long run I
safely used cross-platform.                                             believe this to be a much better approach than the current one. If
                                                                        people have any feedback, concerns or other changes that would be
                                                                        important in the same run I am happy to hear them.
Issues with Magritte2
• Name collision with #description
• class-side description:
 •   Cache-invalidation

 •   dynamic descriptions

 •   instance specific descriptions

 •   context dependent descriptions
Magritte 3
Magritte 3
Descriptions move from class to instance.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Rename #description to
#magritteDescription
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Rename #description to
#magritteDescription
Non-backward compatible
Demo
Magritte 2                  Magritte 3

     #description            #magritteDescription


  class-side descriptions    instance-side description

   #descriptionXXX          <magritteDescription>


#magritteDynamicObject            Not required

#descriptionContainer        <magritteContainer>
Refactoring support
Gofer it
  squeaksource: 'MetacelloRepository';
  package: 'ConfigurationOfMagritte3';
  load.

ConfigurationOfMagritte3 project stableVersion load:'Tools'
Refactoring demo
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate

 ^ MADateDescription new
   priority: 30;
   label: 'Booking date';
   tooltip: 'When the attendee booked';
   accessor: #bookingDate;
   default: [ Date today ] magritteDynamicObject;
   yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate
  <magritteDescription>
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate
  <magritteDescription>
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: Date today;
    yourself
Refactoring
 Move class-side descriptions to instance-
side
add <magritteDescription>
Works for description extensions.
 Operates at a method, class or package
level
Battle-tested in translating Pier
Refactoring will not
remove empty class-side categories
convert class-side message sends within
descriptions to add class
convert calls from #description to
#magritteDescription

Simplify Magritte 1 or 2 dynamic description work-
arounds
Remove #magritteDynamicObject and it’s associated
block
Porting guidelines
1. Use the refactoring support to move class-side
   descriptions to instance side descriptions with pragmas -
   making sure that any accessors to class side methods are
   either prefixed with ‘class’ or moved to the instance side.
2. remove #magritteDynamic and remove the block around
   the method.
3. search for all senders and implementors of #description
   in your code, if they are magritte descriptions rename the
   selector from #description to #magritteDescription 
4. Remove any empty categories on the class side.
Status
All tests green.
Although the API changes appear significant the code
changes within Magritte are less significant and mainly
localised to MAPragmaBuilder
Pier has been ported to Magritte 3 (Pier 3) and is stable.
Magritte-Json      and Magritte-XMLBinding ported
Other Magritte add-ons such Magritte-JQuery un-ported
No performance testing - descriptions are no longer
cached. Is this significant in the context of an application?
Next steps
•   Install:
Gofer it
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfMagritte3';
    load.

ConfigurationOfMagritte3 project stableVersion load:'Seaside'.

Gofer it
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfMagritte3AddOns';
    load.

ConfigurationOfMagritte3 project stableVersion load.



•   Use the refactoring tools to move to Magritte 3.
•   Profile performance within your application.
Load Sample

Gofer it
  url: 'http://ss3.gemstone.com/ss/MagritteMagic';
  package: 'ConfigurationOfMagritteMagic';
  load.

(Smalltalk at: #ConfigurationOfMagritteMagic) load.
Further information

• Seaside Book:
  http://book.seaside.st/book/advanced/magritte

• Lukas's site:  
  http://www.lukas-renggli.ch/smalltalk/magritte

• Magritte/Pier mail list:
  <smallwiki@iam.unibe.ch>

More Related Content

Similar to Magritte3

Pier Migration Workshop
Pier Migration WorkshopPier Migration Workshop
Pier Migration Workshop
ESUG
 
GraphQL-ify your APIs
GraphQL-ify your APIsGraphQL-ify your APIs
GraphQL-ify your APIs
Soham Dasgupta
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo images
ESUG
 
Advanced guide to Quartz plugin
Advanced guide to Quartz pluginAdvanced guide to Quartz plugin
Advanced guide to Quartz plugin
TO THE NEW | Technology
 
Grails Custom Tag lib
Grails Custom Tag libGrails Custom Tag lib
Grails Custom Tag lib
Ali Tanwir
 
Grails custom tag lib
Grails custom tag libGrails custom tag lib
Grails custom tag lib
NexThoughts Technologies
 
GraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxGraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptx
Soham Dasgupta
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
HostedbyConfluent
 
From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2Alessandro Molina
 
Part 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST APIPart 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST API
reneechemel
 
ng-grid and a Simple REST API
ng-grid and a Simple REST APIng-grid and a Simple REST API
ng-grid and a Simple REST API
Backand Cohen
 
Pdf tech deep dive 42 paris
Pdf tech deep dive 42 parisPdf tech deep dive 42 paris
Pdf tech deep dive 42 paris
Laure Vergeron
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with Rails
Paul Gallagher
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET Journal
 
Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.
Juciellen Cabrera
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Prasta Maha
 
Ember-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profitEmber-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profit
Salesforce Engineering
 
Extending Node.js using C++
Extending Node.js using C++Extending Node.js using C++
Extending Node.js using C++
Kenneth Geisshirt
 
GumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSGumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWS
DataStax Academy
 
Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
Troy Miles
 

Similar to Magritte3 (20)

Pier Migration Workshop
Pier Migration WorkshopPier Migration Workshop
Pier Migration Workshop
 
GraphQL-ify your APIs
GraphQL-ify your APIsGraphQL-ify your APIs
GraphQL-ify your APIs
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo images
 
Advanced guide to Quartz plugin
Advanced guide to Quartz pluginAdvanced guide to Quartz plugin
Advanced guide to Quartz plugin
 
Grails Custom Tag lib
Grails Custom Tag libGrails Custom Tag lib
Grails Custom Tag lib
 
Grails custom tag lib
Grails custom tag libGrails custom tag lib
Grails custom tag lib
 
GraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxGraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptx
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
 
From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2
 
Part 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST APIPart 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST API
 
ng-grid and a Simple REST API
ng-grid and a Simple REST APIng-grid and a Simple REST API
ng-grid and a Simple REST API
 
Pdf tech deep dive 42 paris
Pdf tech deep dive 42 parisPdf tech deep dive 42 paris
Pdf tech deep dive 42 paris
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with Rails
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
 
Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
 
Ember-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profitEmber-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profit
 
Extending Node.js using C++
Extending Node.js using C++Extending Node.js using C++
Extending Node.js using C++
 
GumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSGumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWS
 
Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
 

Recently uploaded

zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 

Recently uploaded (20)

zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 

Magritte3

  • 2. Magritte 3 Im pro Ne ved w
  • 3. Magritte: Describe once, get everywhere • Introspection • Object persistency • Reflection • Object indexing • Documentation • Object setup • Viewer building • Object verification • Form/Editor building • Object adaption • Report building • Data validation • Object customization • Query processing • and much more
  • 4. Why Magritte 3 All in all the "new" Magritte would look like in the following From: Lukas Renggli example. Imagine a shop item with the accessor #place: November 2010 Item>>place ^ place I wrote a proposal this summer of want to proceed on Item>>place: aString that, but of course I had to finish my writing and never actually place := aString found the time to implement it: The meta-description is defined on the instance-side and annotated. It -------------------- can refer to itself for the possible places: I propose to perform the following (non-backward compatible) changes Item>>placeDescription in the Magritte 2 code-base to resolve some major annoyances and <magritte> issues that keep on reoccurring: ^ MASingleOptionDescription new - Move descriptions from class-side to instance-side. This resolves options: self possiblePlaces; various issues such as cache-invalidation, instance specific label: 'Place of Item'; descriptions, dynamic descriptions, context dependent descriptions, accessor: #place; etc. Furthermore the descriptions will be closer to the code they yourself describe and it will be possible to describe class- and instance-side of an object, not just the instance-side. Class extensions can modify a description using: - Rename the method #description as the default entry point into Item>>placeDescriptionXmlStorage: aDescription Magritte to #magritteDescription. This avoids common problems where <magritte: #placeDescription> the domain model already defines such a method. ^ placeDescription xmlTag: 'xname' - Instead of using a naming convention for description methods, use a pragma called <magritte> to annotate the methods. And to extend and Since these changes are not backward compatible I'll try to provide change existing descriptions use <magritte: aSelector>. Finally all automatic refactorings for most parts. Moving existing code to the new Smalltalk implementation reached a consensus of pragmas that can be codebase will certainly cause some problems, but in the long run I safely used cross-platform. believe this to be a much better approach than the current one. If people have any feedback, concerns or other changes that would be important in the same run I am happy to hear them.
  • 5. Issues with Magritte2 • Name collision with #description • class-side description: • Cache-invalidation • dynamic descriptions • instance specific descriptions • context dependent descriptions
  • 7. Magritte 3 Descriptions move from class to instance.
  • 8. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention.
  • 9. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated.
  • 10. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated. Rename #description to #magritteDescription
  • 11. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated. Rename #description to #magritteDescription Non-backward compatible
  • 12. Demo
  • 13. Magritte 2 Magritte 3 #description #magritteDescription class-side descriptions instance-side description #descriptionXXX <magritteDescription> #magritteDynamicObject Not required #descriptionContainer <magritteContainer>
  • 14. Refactoring support Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3'; load. ConfigurationOfMagritte3 project stableVersion load:'Tools'
  • 16. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 17. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 18. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate <magritteDescription> ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 19. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate <magritteDescription> ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: Date today; yourself
  • 20. Refactoring Move class-side descriptions to instance- side add <magritteDescription> Works for description extensions. Operates at a method, class or package level Battle-tested in translating Pier
  • 21. Refactoring will not remove empty class-side categories convert class-side message sends within descriptions to add class convert calls from #description to #magritteDescription Simplify Magritte 1 or 2 dynamic description work- arounds Remove #magritteDynamicObject and it’s associated block
  • 22. Porting guidelines 1. Use the refactoring support to move class-side descriptions to instance side descriptions with pragmas - making sure that any accessors to class side methods are either prefixed with ‘class’ or moved to the instance side. 2. remove #magritteDynamic and remove the block around the method. 3. search for all senders and implementors of #description in your code, if they are magritte descriptions rename the selector from #description to #magritteDescription  4. Remove any empty categories on the class side.
  • 23. Status All tests green. Although the API changes appear significant the code changes within Magritte are less significant and mainly localised to MAPragmaBuilder Pier has been ported to Magritte 3 (Pier 3) and is stable. Magritte-Json and Magritte-XMLBinding ported Other Magritte add-ons such Magritte-JQuery un-ported No performance testing - descriptions are no longer cached. Is this significant in the context of an application?
  • 24. Next steps • Install: Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3'; load. ConfigurationOfMagritte3 project stableVersion load:'Seaside'. Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3AddOns'; load. ConfigurationOfMagritte3 project stableVersion load. • Use the refactoring tools to move to Magritte 3. • Profile performance within your application.
  • 25. Load Sample Gofer it url: 'http://ss3.gemstone.com/ss/MagritteMagic'; package: 'ConfigurationOfMagritteMagic'; load. (Smalltalk at: #ConfigurationOfMagritteMagic) load.
  • 26. Further information • Seaside Book: http://book.seaside.st/book/advanced/magritte • Lukas's site:   http://www.lukas-renggli.ch/smalltalk/magritte • Magritte/Pier mail list: <smallwiki@iam.unibe.ch>

Editor's Notes

  1. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  2. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  3. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  4. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  5. Magritte is a meta-description framework - it allows you to add meta-data descriptions to your domain objects which can then be used to automatically generate reports, editors but not just that I&amp;#x2019;m finding it increasingly useful for serialising into other industry standard formats such as Json, XML then materialising the domain objects back from those formats.\n
  6. \n
  7. \n
  8. allows renaming so that descriptions can be along-side the accessors\n
  9. allows renaming so that descriptions can be along-side the accessors\n
  10. allows renaming so that descriptions can be along-side the accessors\n
  11. allows renaming so that descriptions can be along-side the accessors\n
  12. allows renaming so that descriptions can be along-side the accessors\n
  13. \n
  14. \n
  15. Magritte-Deprecated - describe\nMagritte-Pharo-Tools\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n