SlideShare ist ein Scribd-Unternehmen logo
1 von 111
Downloaden Sie, um offline zu lesen
ESUG 2012




Extending a Base Product
for Multiple Customers
Denis Defreyne
MediaGeniX NG


                                  1
2
“
  Your product is cool,
but it’s missing feature X!
                    — CUSTOMER



                                 3
“
Yes, feature X would be nice…
  for you, but nobody else!
                         — YOU



                                 4
“
   Why did you not
implement feature X? :(
                  — CUSTOMER



                               5
“
Ugh, this product is
 getting bloated! :(
           — OTHER CUSTOMER



                              6
Contents
1. Customisations
2. Techniques
3. Modules




                    7
1. Customisations

                    8
Customisation =
  extra bits of code
for a single customer


                        9
Customisations
‣ New functionality
  e.g. new issue checks (no porn at noon)
‣ Extended functionality
  e.g. extra metadata on films, contracts, …
‣ Changed functionality
  e.g. parental rating management in UK, Finland



                                                   10
Integrations
‣ Playout server
‣ Commercial scheduling system
‣ Music scheduling system
‣ …

  unique for every customer!



                                 11
Customisations are
 only possible if you
have FEW customers


                        12
Requirements
‣ Be customer-specific
‣ Be fine-grained
‣ Allow merging bugfixes
‣ Be decoupled




                           13
Why?
‣   Talk to other devices
    You’ll have static on your TV otherwise
‣   Cater to a diverse market
    No two broadcasters have the same workflow
‣   Resolve conflicting requirements
    Don’t compromise, let them both have it their way
‣   Make customers happy!
    But don’t over-do it :)


                                                        14
15
2. Techniques

                16
Techniques
1. Site classes
2. Behaviors
3. Convenience methods




                         17
Techniques
1. Site classes
2. Behaviors
3. Convenience methods




                         18
Site classes – example




                         19
Site classes – example




                         20
Site class =
 subclass for one
specific customer


                    21
Site = customer



                  22
Site classes

     Film




               23
Site classes

     Film



    FilmMTV




               24
Site classes
Film  class  >>  siteClassForMTV

  ^FilmMTV




                                   MTV



                                         25
Site classes
newAustinPowersFilm

  ^Film  siteClass  new
    title:  'Adventures  at  ESUG';
    duration:  (Duration  fromMinutes:  93);
    yourself

                                               BASE



                                                      26
Packages

   MTV      WHATS’On code for MTV only



  BASE      WHATS’On code shared between customers



FRAMEWORK   MediaGeniX framework code



                                                 27
Packages

  NRK       TV2     PRO7


  VRT      MTV      VPRO


  VTM      SBS FI   NPO


  FOX       FTO      …



                           28
Extensions in packages

PACKAGE A              PACKAGE B

MusicClip              Contract
MusicClip>>title       Agreement
MusicClip>>videoFile
MusicClip>>audioFile   MusicClip>>contract
MusicClip>>is16Plus    MusicClip>>agency




                                             29
Site classes
Film  class  >>  siteClassForMTV

  ^FilmMTV




                                   MTV



                                         30
Site classes

BASE           MTV

Film           FilmMTV
MusicClip
Commercial     Film>>siteClassForMTV




                                       31
Film  >>  siteClassForMTV

  Film  siteClass  new


                            32
Site classes
Class  >>  siteClass
  ^Site  current  siteClassOf:  self

    




                                       FRAMEWORK



                                                   33
Site classes
SiteMTV  >>  siteClassOf:  aClass
  ^aClass  siteClassForMTV

    
    


                                    MTV



                                          34
Site classes
Site  >>  siteClassOf:  aClass
  ^aClass




                                 BASE



                                        35
Site classes – example
Film  class  >>  buildSuperModelWith:  aBuilder

  super  buildSuperModelWith:  aBuilder.

  aBuilder
    addString:  #title  name:  'Title';
    addDuration:  #duration  name:  'Duration'

                                                  BASE



                                                         36
37
Site classes – example
Film  class  >>  buildSuperModelWith:  aBuilder

  super  buildSuperModelWith:  aBuilder.

  aBuilder
    addString:  #title  name:  'Title';
    addDuration:  #duration  name:  'Duration'

                                                  BASE



                                                         38
Site classes – example
FilmMTV  class  >>  buildSuperModelWith:  aBuilder

  super  buildSuperModelWith:  aBuilder.

  aBuilder
    addString:  #idForMTV  name:  'ID  for  MTV'



                                                     MTV



                                                           39
Site classes – example




                         40
Site classes – example




                         41
Site classes – example
FilmEditor  class  >>  form

  ^self  newForm
    addFormField:  #title;
    addFormField:  #duration;
    yourself

                                BASE



                                       42
Site classes – example
FilmEditor  >>  siteClassForMTV

  ^FilmEditorMTV

FilmEditorMTV  class  >>  form

  ^super  form
    addFormField:  #idForMTV;
    yourself
                                  MTV



                                        43
Site classes – example




                         44
Site classes – example




                         45
Site classes – example
FilmEditor  class  >>  form

  ^self  newForm
    addFormField:  #title;
    addFormField:  #duration;
    addFormField:  #imdbRating;
    yourself
                                  BASE



                                         46
Site classes – example




                         47
Site classes – example




                         48
Site classes – example
Film  >>  openInEditor

  ^FilmEditor  siteClass
    openWithEditee:  self




                            BASE



                                   49
Call #siteClass everywhere?


            YES!
     It’s not as bad as you may think…


                                         50
PRO TIP
Avoid long methods


                     51
Techniques
1. Site classes
2. Behaviors
3. Convenience methods




                         52
Behaviors

             Product




  Film      Commercial   MusicClip



                                     53
Behaviors

             Product




            ProductMTV



                         54
Behaviors

         Product




 Film   Commercial   MusicClip




                                 55
Behaviors

         Product                  ProductBehavior




 Film   Commercial   MusicClip   ProductBehaviorMTV




                                                      56
Behavior class =
  siteclassable class with
behavior from original class


                               57
Behaviors
BehaviorObject  class  >>  newOn:  anObject

  ^self  new
    orig:  anObject;
    yourself


                                     FRAMEWORK



                                                 58
Behaviors – example
Product  >>  hasValidCertForTx:  aTx

  ^self  certification  isOkayForTx:  aTx




                                            BASE



                                                   59
Behaviors – example
ProductBehavior  >>  hasValidCertForTx:  aTx

  ^self  orig  certification  isOkayForTx:  aTx




                                                  BASE



                                                         60
Behaviors – example
ProductBehaviorMTV  >>  hasValidCertForTx:  aTx

  ^self  orig  videoFiles  allSatisfy:
    [:f  |  f  certification  isOkayForTx:  aTx]




                                                   MTV



                                                         61
Behaviors – example
Product  >>  hasValidCertForTx:  aTx

  ^self  behavior  hasValidCertForTx:  aTx




                                             BASE



                                                    62
Behaviors – example
Product  >>  behavior

  behavior  ifNil:
      [behavior  :=  ProductBehavior  siteClass
          newOn:  self].
  ^behavior


                                                  BASE



                                                         63
PRO TIP
Prefer composition
over inheritance


                     64
Techniques
1. Site classes
2. Behaviors
3. Convenience methods




                         65
Convenience method =
commonly implemented
 or overridden method


                        66
Convenience methods
buildSuperModelWith:  aBuilder


addToolsMenuItemsTo:  aMenu


addCommandsToToolBar:  aToolBar




                                  67
Convenience methods
buildSuperModelWith:  aBuilder
buildSuperModelForMTVWith:  aBuilder

addToolsMenuItemsTo:  aMenu
addToolsMenuItemsForMTVTo:  aMenu

addCommandsToToolBar:  aToolBar
addCommandsToToolBarForMTV:  aToolBar




                                        68
Convenience methods
FilmMTV  class  >>  buildSuperModelWith:  aBuilder

  super  buildSuperModelWith:  aBuilder.

  aBuilder
     addString:  #idForMTV  name:  'ID  for  MTV'



                                                     MTV



                                                           69
Convenience methods
Film  class  >>  buildSuperModelForMTVWith:  aBuilder

  super  buildSuperModelForMTVWith:  aBuilder.

  aBuilder
     addString:  #idForMTV  name:  'ID  for  MTV'



                                                        MTV



                                                              70
Convenience methods
Site  >>  buildSuperModelWith:  aBuilder
                for:  aClass

  aClass  buildSuperModelWith:  aBuilder




                                           FRAMEWORK



                                                       71
Convenience methods
SiteMTV  >>  buildSuperModelWith:  aBuilder
                      for:  aClass

  super  buildSuperModelWith:  aBuilder  for:  aClass.

  aClass  buildSuperModelForMTVWith:  aBuilder.




                                                         MTV



                                                               72
PRO TIP
Use convenience methods
for common methods only


                          73
Techniques to avoid
‣ Branches
  Use them, but not for customer-specific code
‣ VisualWorks “overrides”
  They prevent access to original code




                                                 74
Techniques
1. Site classes
2. Behaviors
3. Convenience methods




                         75
3. Modules

             76
Module =
pluggable component
that provides a set of
related functionalities

                          77
Example modules
‣ Contract management
‣ Secondary events (logos)
‣ Video on demand




                             78
Super models in modules
        Film  class  >>  buildSuperModelWith:  aBuilder

           super
              buildSuperModelWith:  aBuilder.
WRONG




           aBuilder
              "  …  other  attributes  here  …  "
              addReference:  #contract
                  to:  Contract  name:  'Contract'
                                                          BASE



                                                                 79
Activating modules
SiteMTV  >>  moduleClasses

  ^OrderedCollection  new
    add:  ContractModule;
    add:  SecondaryEventsModule;
    yourself

                                   MTV



                                         80
Super models in modules




                          81
Super models in modules
Film  class  >>
   buildSuperModelForContractModuleWith:  aBuilder

  super
     buildSuperModelForContractModuleWith:  aBuilder.

  aBuilder
     addReference:  #contract
        to:  Contract  name:  'Contract'
                                                        BASE



                                                               82
Super models in modules
Site  >>  buildSuperModelWith:  aBuilder
                for:  aClass

  aClass  buildSuperModelWith:  aBuilder.




                                            FRAMEWORK



                                                        83
Super models in modules
Site  >>  buildSuperModelWith:  aBuilder
                for:  aClass

  aClass  buildSuperModelWith:  aBuilder.

  self  modules  do:
     [:m  |
     m  buildSuperModelWith:  aBuilder  for:  aClass].

                                               FRAMEWORK



                                                           84
Super models in modules
Module  >>  buildSuperModelWith:  aBuilder
                    for:  aClass

     "nothing  by  default"




                                             FRAMEWORK



                                                         85
Super models in modules
ContractPresentModule  >>  buildSuperModelWith:  aBuilder
                                                  for:  aClass

   aClass  buildSuperModelForContractModuleWith:
      aBuilder.




                                                            BASE



                                                                   86
Extensions in modules




                        87
Extensions in modules
FilmEditor  class  >>  form

  form  :=  self  newForm.
  form  addFormField:  #title.
  form  addFormField:  #duration.
  ^form


                                    BASE



                                           88
Extensions in modules
        FilmEditor  class  >>  form

          form  :=  self  newForm.
WRONG




          form  addFormField:  #title.
          form  addFormField:  #duration.
          form  addFormField:  #contract.
          ^form

                                            BASE



                                                   89
Extensions in modules
FilmEditor  class  >>  form

  form  :=  self  newForm.
  form  addFormField:  #title.
  form  addFormField:  #duration.
  ContractModule  current
    addFieldsTo:  form  for:  self.
  ^form
                                      BASE



                                             90
Extensions in modules
ContractPresentModule  >>
    addFieldsTo:  aForm
    for:  anEditor

  anEditor  addContractFieldsTo:  aForm



                                          BASE



                                                 91
Extensions in modules
FilmEditor  >>
    addContractFieldsTo:  aForm

    aForm  addFormField:  #contract.




                                       BASE



                                              92
Extensions in modules
ContractAbsentModule  >>
    addFieldsTo:  aForm
    for:  aSender

    "nothing  by  default"



                             BASE



                                    93
Extensions in modules
                    CONTRACT




                               94
Extensions in modules
                    CONTRACT




                               95
Site classes vs. modules
‣ Modules can be shared across sites

‣ Modules require hooks




                                       96
Recap

        97
Techniques
‣ Use site classes
  whenever possible
‣ Use behaviors
  when site classes fail (inheritance trees)
‣ Use modules
  when you need more separation



                                               98
Requirements
‣ Be customer-specific (with packages)
‣ Be fine-grained (with site classes)
‣ Allow merging bugfixes (with packages)
‣ Be decoupled (with site classes and modules)




                                                 99
“
  Your product is cool,
but it’s missing feature X!
                    — CUSTOMER




       Do not worry.
We’ll implement it for you!
                         — YOU

                                 100
? MAIL  denis.defreyne@mediagenix.tv
TWITTER @ddfreyne
 GITHUB github.com/ddfreyne


                                       101
Extra Slides

               102
Site classing modules
Site  >>  modules

  ^self  moduleClasses  collect:
    [:c  |  c  siteClass  new]



                                   FRAMEWORK



                                               103
Site classing modules
SuperModellary  >>  buildSuperModelFor:  aClass

    builder  :=  SuperModelBuilder  new.

    Site  current  buildSuperModelWith:  builder
        for:  aClass.

    supermodels  at:  aClass  put:  builder  superModel.
                                              FRAMEWORK



                                                           104
Extensions in modules
FilmEditor  class  >>  form

  form  :=  self  newForm.
  form  addFormField:  #title.
  form  addFormField:  #duration.
  ContractModule  current
    addFieldsTo:  form  for:  self.
  ^form
                                      BASE



                                             105
Extensions in modules
FilmEditor  class  >>  form

  form  :=  self  newForm.
  form  addFormField:  #title.
  form  addFormField:  #duration.
  ContractModule  current  isAvailable  ifTrue:
    [form  addFormField:  #contract].
  ^form
                                                  BASE



                                                         106
Extensions in modules
Film  >>  isLegallyBroadcastable

  ^ContractModule  current  isAvailable
    ifFalse:  [true]
    ifTrue:  [self  contract  isSigned].


                                           BASE



                                                  107
Extensions in modules
Film  >>  isLegallyBroadcastable

  ^ContractModule  current  isAvailable
    ifFalse:  [true]
    ifTrue:  [self  contract  isSigned].


                                           BASE



                                                  108
Extensions in modules
Film  >>  isLegallyBroadcastable

  ^ContractModule  current
    isFilmLegallyBroadcastable:  self



                                        BASE



                                               109
Extensions in modules
ContractPresentModule  >>
    isFilmLegallyBroadcastable:  aFilm

  ^aFilm  contract  isSigned



                                         BASE



                                                110
Extensions in modules
ContractAbsentModule  >>
    isFilmLegallyBroadcastable:  aFilm

  ^true



                                         BASE



                                                111

Weitere ähnliche Inhalte

Ähnlich wie Extending a Base Product For Multiple Customers

Verified CKAD Exam Questions and Answers
Verified CKAD Exam Questions and AnswersVerified CKAD Exam Questions and Answers
Verified CKAD Exam Questions and Answersdalebeck957
 
Refacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresRefacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresDoron Rosenstock
 
UI Test Automation Effectiveness
UI Test Automation EffectivenessUI Test Automation Effectiveness
UI Test Automation EffectivenessSQALab
 
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK sizeAnsgar Lin
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum teamagilebin
 
CertsOut Linux Foundation-CKA Dumps.pdf
CertsOut Linux Foundation-CKA Dumps.pdfCertsOut Linux Foundation-CKA Dumps.pdf
CertsOut Linux Foundation-CKA Dumps.pdfJeannieHeldt
 
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpecMartin Etmajer
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfAnnyce Davis
 
Code quality
Code qualityCode quality
Code qualityProvectus
 
Phase One Rules Demo w corp Overview
Phase One Rules Demo w corp OverviewPhase One Rules Demo w corp Overview
Phase One Rules Demo w corp OverviewStan Ascher
 
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat Videos
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat VideosCassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat Videos
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat VideosDataStax Academy
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJiayun Zhou
 
Cloud-Native Builds & Deployments in Bitbucket Pipelines
Cloud-Native Builds & Deployments in Bitbucket PipelinesCloud-Native Builds & Deployments in Bitbucket Pipelines
Cloud-Native Builds & Deployments in Bitbucket PipelinesAtlassian
 
Vb.net session 15
Vb.net session 15Vb.net session 15
Vb.net session 15Niit Care
 
JFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceJFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceMonica Beckwith
 
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...whywaita
 

Ähnlich wie Extending a Base Product For Multiple Customers (20)

Verified CKAD Exam Questions and Answers
Verified CKAD Exam Questions and AnswersVerified CKAD Exam Questions and Answers
Verified CKAD Exam Questions and Answers
 
Refacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStoresRefacoring vs Rewriting WixStores
Refacoring vs Rewriting WixStores
 
UI Test Automation Effectiveness
UI Test Automation EffectivenessUI Test Automation Effectiveness
UI Test Automation Effectiveness
 
Let your tests drive your code
Let your tests drive your codeLet your tests drive your code
Let your tests drive your code
 
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size
[MOPCON2018] Effectively shrink ProGuard rules for reducing APK size
 
26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team26 story slicing techniques for any scrum team
26 story slicing techniques for any scrum team
 
CertsOut Linux Foundation-CKA Dumps.pdf
CertsOut Linux Foundation-CKA Dumps.pdfCertsOut Linux Foundation-CKA Dumps.pdf
CertsOut Linux Foundation-CKA Dumps.pdf
 
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Puppet, Test Kitchen, Serverspec and RSpec
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConf
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Code quality
Code qualityCode quality
Code quality
 
Phase One Rules Demo w corp Overview
Phase One Rules Demo w corp OverviewPhase One Rules Demo w corp Overview
Phase One Rules Demo w corp Overview
 
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat Videos
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat VideosCassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat Videos
Cassandra Day Denver 2014: A Cassandra Data Model for Serving up Cat Videos
 
Analysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4jAnalysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4j
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
 
Cloud-Native Builds & Deployments in Bitbucket Pipelines
Cloud-Native Builds & Deployments in Bitbucket PipelinesCloud-Native Builds & Deployments in Bitbucket Pipelines
Cloud-Native Builds & Deployments in Bitbucket Pipelines
 
Vb.net session 15
Vb.net session 15Vb.net session 15
Vb.net session 15
 
JFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceJFokus Java 9 contended locking performance
JFokus Java 9 contended locking performance
 
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
 
jQuery Migration
jQuery MigrationjQuery Migration
jQuery Migration
 

Mehr von ESUG

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

Mehr von ESUG (20)

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

Kürzlich hochgeladen

SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60% in 6 Months
SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60%  in 6 MonthsSEO Case Study: How I Increased SEO Traffic & Ranking by 50-60%  in 6 Months
SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60% in 6 MonthsIndeedSEO
 
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGpr788182
 
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...daisycvs
 
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...pujan9679
 
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...pujan9679
 
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book nowPARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book nowkapoorjyoti4444
 
Mckinsey foundation level Handbook for Viewing
Mckinsey foundation level Handbook for ViewingMckinsey foundation level Handbook for Viewing
Mckinsey foundation level Handbook for ViewingNauman Safdar
 
Kalyan Call Girl 98350*37198 Call Girls in Escort service book now
Kalyan Call Girl 98350*37198 Call Girls in Escort service book nowKalyan Call Girl 98350*37198 Call Girls in Escort service book now
Kalyan Call Girl 98350*37198 Call Girls in Escort service book nowranineha57744
 
Phases of Negotiation .pptx
 Phases of Negotiation .pptx Phases of Negotiation .pptx
Phases of Negotiation .pptxnandhinijagan9867
 
PHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPanhandleOilandGas
 
Falcon Invoice Discounting: Empowering Your Business Growth
Falcon Invoice Discounting: Empowering Your Business GrowthFalcon Invoice Discounting: Empowering Your Business Growth
Falcon Invoice Discounting: Empowering Your Business GrowthFalcon investment
 
joint cost.pptx COST ACCOUNTING Sixteenth Edition ...
joint cost.pptx  COST ACCOUNTING  Sixteenth Edition                          ...joint cost.pptx  COST ACCOUNTING  Sixteenth Edition                          ...
joint cost.pptx COST ACCOUNTING Sixteenth Edition ...NadhimTaha
 
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecJual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecZurliaSoop
 
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGpr788182
 
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTSJAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTSkajalroy875762
 
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGParadip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGpr788182
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1kcpayne
 
Organizational Transformation Lead with Culture
Organizational Transformation Lead with CultureOrganizational Transformation Lead with Culture
Organizational Transformation Lead with CultureSeta Wicaksana
 
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai KuwaitThe Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwaitdaisycvs
 
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...ssuserf63bd7
 

Kürzlich hochgeladen (20)

SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60% in 6 Months
SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60%  in 6 MonthsSEO Case Study: How I Increased SEO Traffic & Ranking by 50-60%  in 6 Months
SEO Case Study: How I Increased SEO Traffic & Ranking by 50-60% in 6 Months
 
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
 
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
 
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
Chennai Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Av...
 
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...
Ooty Call Gril 80022//12248 Only For Sex And High Profile Best Gril Sex Avail...
 
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book nowPARK STREET 💋 Call Girl 9827461493 Call Girls in  Escort service book now
PARK STREET 💋 Call Girl 9827461493 Call Girls in Escort service book now
 
Mckinsey foundation level Handbook for Viewing
Mckinsey foundation level Handbook for ViewingMckinsey foundation level Handbook for Viewing
Mckinsey foundation level Handbook for Viewing
 
Kalyan Call Girl 98350*37198 Call Girls in Escort service book now
Kalyan Call Girl 98350*37198 Call Girls in Escort service book nowKalyan Call Girl 98350*37198 Call Girls in Escort service book now
Kalyan Call Girl 98350*37198 Call Girls in Escort service book now
 
Phases of Negotiation .pptx
 Phases of Negotiation .pptx Phases of Negotiation .pptx
Phases of Negotiation .pptx
 
PHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation FinalPHX May 2024 Corporate Presentation Final
PHX May 2024 Corporate Presentation Final
 
Falcon Invoice Discounting: Empowering Your Business Growth
Falcon Invoice Discounting: Empowering Your Business GrowthFalcon Invoice Discounting: Empowering Your Business Growth
Falcon Invoice Discounting: Empowering Your Business Growth
 
joint cost.pptx COST ACCOUNTING Sixteenth Edition ...
joint cost.pptx  COST ACCOUNTING  Sixteenth Edition                          ...joint cost.pptx  COST ACCOUNTING  Sixteenth Edition                          ...
joint cost.pptx COST ACCOUNTING Sixteenth Edition ...
 
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan CytotecJual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
Jual Obat Aborsi ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan Cytotec
 
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGBerhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Berhampur 70918*19311 CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
 
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTSJAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR  ESCORTS
JAJPUR CALL GIRL ❤ 82729*64427❤ CALL GIRLS IN JAJPUR ESCORTS
 
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDINGParadip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
Paradip CALL GIRL❤7091819311❤CALL GIRLS IN ESCORT SERVICE WE ARE PROVIDING
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1
 
Organizational Transformation Lead with Culture
Organizational Transformation Lead with CultureOrganizational Transformation Lead with Culture
Organizational Transformation Lead with Culture
 
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai KuwaitThe Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
The Abortion pills for sale in Qatar@Doha [+27737758557] []Deira Dubai Kuwait
 
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...
Horngren’s Cost Accounting A Managerial Emphasis, Canadian 9th edition soluti...
 

Extending a Base Product For Multiple Customers