SlideShare ist ein Scribd-Unternehmen logo
1 von 26
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>

Weitere ähnliche Inhalte

Ähnlich wie Magritte3

Pier Migration Workshop
Pier Migration WorkshopPier Migration Workshop
Pier Migration WorkshopESUG
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo imagesESUG
 
Grails Custom Tag lib
Grails Custom Tag libGrails Custom Tag lib
Grails Custom Tag libAli Tanwir
 
GraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxGraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxSoham 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 LondonHostedbyConfluent
 
From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2Alessandro Molina
 
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 APIBackand Cohen
 
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 APIreneechemel
 
Pdf tech deep dive 42 paris
Pdf tech deep dive 42 parisPdf tech deep dive 42 paris
Pdf tech deep dive 42 parisLaure Vergeron
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with RailsPaul 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 2023Prasta 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 profitSalesforce Engineering
 
GumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSGumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSDataStax Academy
 
Angular Weekend
Angular WeekendAngular Weekend
Angular WeekendTroy Miles
 

Ähnlich wie 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
 
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
 
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
 
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
 

Kürzlich hochgeladen

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 

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>

Hinweis der Redaktion

  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