SlideShare a Scribd company logo
Practical Models
   in Practice
   www.lukas-renggli.ch
Practical Models of
Models in Practice
    www.lukas-renggli.ch
Practical Meta-
Models in Practice
    www.lukas-renggli.ch
Lukas Renggli
‣ Software Engineer at Google
 YouTube Video Analytics

‣ SCG Alumni
 Bachelor, Master and PhD

‣ Open-Source Communities
 Seaside, Magritte and Pier
 Helvetia, PetitParser
Roadmap
1. Protocol Buffers
   Meta-data model for serialization
2. Magritte
   Meta-model for generic services
3. Google Web Toolkit
   Model-driven web architecture
4. Helvetia
   Meta-model for programming languages
Protocol Buffers
Meta-data model for serialization
Protocol Buffers

‣ Encode structured data
‣ Language-neutral
‣ Platform-neutral
‣ Extensible
‣ Efficient
Protocol Buffer IDL

message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}
message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}




         protoc




                               C++
Serialize in C++


Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email("jdoe@example.com");

fstream output("myfile", ios::out | ios::binary);
person.SerializeToOstream(&output);
Deserialize in Python


file = open("myfile", "rb")
person = Person()
person.ParseFromString(file.read())
file.close

print "Name: ", person.name
print "E-mail: ", person.email
Demo
Why not XML/JSON?

‣ Protocol Buffers are
 – 3—10 times smaller
 – 20—100 times faster
 – consistent code generators
 – less ambiguous
 – evolvable
message Person {               message Person {
  required int32 id = 1;         required int32 id = 1;
  required string name = 2;      required string name = 2;
  optional string email = 3;     repeated string email = 3;
}                                repeated Phone phone = 4;
                               }




                                          :Person
          :Person
                                         :Person
‣ Describe your data once, and use it
  across platforms and languages
‣ Evolution supported by design
‣ Used at Google for almost all
 – data storage (file formats, database)
 – remote procedure protocols (RPC)
Magritte
Meta-model for generic services
Address Object


               :Address
    street = 'Schützenmattstrasse'
    plz = 3012
    place = 'Bern'
    canton = 'Bern'
Address Class


           :Address                        Address
street = 'Schützenmattstrasse'   class street: String
plz = 3012                             plz: Integer
place = 'Bern'                         place: String
canton = 'Bern'                        canton: String
Address Description

                                 Magritte                                 :StringDescription
                                                                   label = 'Street'

                                                                         :NumberDescription
                                                                   label = 'PLZ'
                                                                   required = true
           :Address                                                range = 1000..9999
street = 'Schützenmattstrasse'   description                              :StringDescription
                                                  :Container
plz = 3012                                                         label = 'Place'
                                               label = 'Address'
place = 'Bern'                                                     required = true
canton = 'Bern'
                                                                      :SingleOptionDescription
                                                                   label = 'Canton'
                                                                   required = true
                                                                   sorted = true
                                                                   options = #( 'Bern' 'Zurich' ... )
User Interfaces
result := anAddress asMorph
	 addButtons;
	 addWindow;
	 callInWorld
Web Interfaces
result := self call: (anAddress asComponent
	 addValidatedForm;
	 yourself)


                                 *

                                 *

                             *
Other Services
                    Reports
Viewers                                    Filtering
          Editors        Validation


Serialization                      Initialization
                 Indexing
      Copying             Initialization


   Extension                  Customization
                Adaptation
Meta-
              Metamodel




            <described-by>



              Metamodel



Developer
            <described-by>



            Domain Model



End User
Meta-
  Metamodel




<described-by>



  Metamodel


                  Magritte
                 Developer
<described-by>



Domain Model


                 Magritte
                 End User
Run- t im e

 Adaptive
Object Model
End users
customizability
Demo
Magritte

‣ Very powerful and flexible
‣ Runtime adaptive code
‣ End-user programmable code
‣ Can cause meta meta-confusion
‣ Can be slower than hardcoding
Google Web Toolkit
  Model-driven web architecture
Is this really a model?
    public class Main implements EntryPoint {
      public void onModuleLoad() {
        Label label = new Label(“Hello World”);
        RootPanel.add(label);
      }
    }
Is this really a model?
      public class Main implements EntryPoint {
        public void onModuleLoad() {
          Label label = new Label(“Hello World”);
          RootPanel.add(label);
        }
      }




High-level
 Widgets
Is this really a model?
      public class Main implements EntryPoint {
        public void onModuleLoad() {
          Label label = new Label(“Hello World”);
          RootPanel.add(label);
        }
      }




High-level                                    Description
 Widgets                                      Language
public class Main implements EntryPoint {
  public void onModuleLoad() {                platform
    Label label = new Label(“Hello World”);
    RootPanel.add(label);                     independent
  }
}                                             model



                                              model
                                              transformation
Transformation
            Mozilla   Chrome   Safari   IE   ...

 English

French

German

      ...
GWT

‣ Write JavaScript using a high-level widget
  library in a well defined (statically typed)
  language
‣ Translate and optimize code towards
  specific browsers
‣ Debugging actually works nowadays
He vetia
         Helvetia
Meta-model for programming languages
Practical Models in Practice
Practical Models in Practice
Practical Models in Practice
Programming
  Language
    Model
ID	
  ::=	
  letter	
  {	
  letter	
  |	
  digit	
  }	
  ;




              a..z                 a..z
                                  0..9
scanIdentifier
	 self step.	
	 ((currentCharacter between: $A and: $Z) or:
[ currentCharacter between: $a and: $z ]) ifTrue: [
	 	 [ self recordMatch: #IDENTIFIER.
	 	 self step.
	 	 (currentCharacter between: $0 and: $9)
or: [ (currentCharacter between: $A and: $Z) or:
[ currentCharacter between: $a and: $z ] ] ]
  	 	 	 whileTrue.
     	 ^ self reportLastMatch ]
#(	#[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41]
	 #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112]
	 #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34]
 	 #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41]
 	 #[0 1 210 0 76 0 81]
 	 #[0 1 214 0 76 0 81]
 	 #[1 0 173 0 76 0 177 0 81]
 	 #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41]
 	 #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 69]
 
 #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34]
 
 #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76]
	 #[0 2 50 0 21 0 25 0 26 0 76 0 79]
	 #[1 1 13 0 76 2 85 0 124 1 21 0 125]
	 #[1 2 89 0 17 2 30 0 21 2 30 0 82]
	 #[1 2 93 0 21 2 97 0 82] )
ID	
  ::=	
  letter	
  {	
  letter	
  |	
  digit	
  }	
  ;




              a..z                 a..z
                                  0..9




                            44
ID	
  ::=	
  letter	
  {	
  letter	
  |	
  digit	
  }	
  ;


                    sequence

             letter              many

                                 choice

                         letter      digit


                            45
Extensible        sequence

             letter          many        Composable

                             choice
Transformable
                      letter     digit

                                Customizable
                        46
Editors                                    Code
                                              Highlighting

Contextual
                   He vetia
 Menus                                           Custom
                     sequence                   Inspector
Navigation
                letter            many              Search

   Code                           choice
                                                    Error
  Folding
                                                  Correction
                           letter     digit
      Code
    Expansion                                   Debuggers
                         Refactorings
                             47
Demo
He vetia
‣ Grammar is the meta-model
‣ Composable programming languages
‣ Extensible programming languages
‣ Tooling is built around the grammar
Structural    Behavioral
            Model         Model


Run-time
 Static
Run-time
Adaptive




                        He vetia
“Meta-models are the enablers of
practical software development.”

                               He vetia

        www.lukas-renggli.ch

More Related Content

What's hot (20)

PDF
Session 3 - Object oriented programming with Objective-C (part 1)
Vu Tran Lam
 
PPT
C#
Joni
 
PDF
Patterns for JVM languages - Geecon 2014
Jaroslaw Palka
 
PDF
Refactoring-ch7 moving feature btw objects
fungfung Chen
 
PDF
Scoping Tips and Tricks
Sebastian Zarnekow
 
PPTX
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
Doug Jones
 
PDF
Object-oriented Basics
Jamie (Taka) Wang
 
PPT
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
Dave Steinberg
 
PPT
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
CHOOSE
 
PDF
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Philip Schwarz
 
PDF
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 2
Philip Schwarz
 
KEY
A fresh look at graphical editing
Dr. Jan Köhnlein
 
KEY
2011 10-24-initiatives-tracker-launch-v1.0
tommyoneill
 
PPT
Ch7 structures
Hattori Sidek
 
PDF
C,c++ interview q&a
Kumaran K
 
PPTX
Javascript best practices
Manav Gupta
 
PDF
JavaScript Programming
Sehwan Noh
 
PPT
Ch6 pointers (latest)
Hattori Sidek
 
PDF
Monadic Java
Mario Fusco
 
PDF
Applicative Functor - Part 2
Philip Schwarz
 
Session 3 - Object oriented programming with Objective-C (part 1)
Vu Tran Lam
 
C#
Joni
 
Patterns for JVM languages - Geecon 2014
Jaroslaw Palka
 
Refactoring-ch7 moving feature btw objects
fungfung Chen
 
Scoping Tips and Tricks
Sebastian Zarnekow
 
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
Doug Jones
 
Object-oriented Basics
Jamie (Taka) Wang
 
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
Dave Steinberg
 
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
CHOOSE
 
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 1
Philip Schwarz
 
Scala 3 by Example - Algebraic Data Types for Domain Driven Design - Part 2
Philip Schwarz
 
A fresh look at graphical editing
Dr. Jan Köhnlein
 
2011 10-24-initiatives-tracker-launch-v1.0
tommyoneill
 
Ch7 structures
Hattori Sidek
 
C,c++ interview q&a
Kumaran K
 
Javascript best practices
Manav Gupta
 
JavaScript Programming
Sehwan Noh
 
Ch6 pointers (latest)
Hattori Sidek
 
Monadic Java
Mario Fusco
 
Applicative Functor - Part 2
Philip Schwarz
 

Viewers also liked (12)

PDF
Choose'10: Uwe Zdun - Compliance in service-oriented architectures: A model-d...
CHOOSE
 
PDF
Choose'10: Jean-Marie Favre - Domain and Technique Specific Languages – A Jou...
CHOOSE
 
PDF
Services and Models in a Large IT System
CHOOSE
 
PDF
Choose'10: Stephane Ducasse - Powerful DSL engineering in Smalltalk
CHOOSE
 
PPT
Security patterns and model driven architecture
bdemchak
 
PPTX
CPI, Inflation for Belize, July 2014 (PowerPoint)
Adele Ramos
 
PDF
Ralph Jocham The Risks Of Scrum Handout
CHOOSE
 
PPT
Hausi Müller - Towards Self-Adaptive Software-Intensive Systems
CHOOSE
 
PDF
Self-adaptive Systems : An Introduction
Sagar Sen
 
PDF
A White-box Perspective on Self-Adaptation and Self-Awareness (with a focus o...
Alberto Lluch Lafuente
 
PDF
ACTRESS: Domain-Specific Modeling of Self-Adaptive Software Architectures
Filip Krikava
 
PDF
201209 An Introduction to Building Affective-Driven Self-Adaptive Software
Javier Gonzalez-Sanchez
 
Choose'10: Uwe Zdun - Compliance in service-oriented architectures: A model-d...
CHOOSE
 
Choose'10: Jean-Marie Favre - Domain and Technique Specific Languages – A Jou...
CHOOSE
 
Services and Models in a Large IT System
CHOOSE
 
Choose'10: Stephane Ducasse - Powerful DSL engineering in Smalltalk
CHOOSE
 
Security patterns and model driven architecture
bdemchak
 
CPI, Inflation for Belize, July 2014 (PowerPoint)
Adele Ramos
 
Ralph Jocham The Risks Of Scrum Handout
CHOOSE
 
Hausi Müller - Towards Self-Adaptive Software-Intensive Systems
CHOOSE
 
Self-adaptive Systems : An Introduction
Sagar Sen
 
A White-box Perspective on Self-Adaptation and Self-Awareness (with a focus o...
Alberto Lluch Lafuente
 
ACTRESS: Domain-Specific Modeling of Self-Adaptive Software Architectures
Filip Krikava
 
201209 An Introduction to Building Affective-Driven Self-Adaptive Software
Javier Gonzalez-Sanchez
 
Ad

Similar to Practical Models in Practice (20)

PDF
Magritte
Lukas Renggli
 
PPTX
Rock solid UI modeling using annotation processing - CodeGeneration 2013
gdigugli
 
PDF
Dynamic languages, for software craftmanship group
Reuven Lerner
 
PDF
Classboxes
ESUG
 
PDF
Extension and Evolution
Eelco Visser
 
PDF
The Dynamic Language is not Enough
Lukas Renggli
 
PDF
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
changehee lee
 
PDF
Java Modifiers Matrix
Yasser Ibrahim
 
PPTX
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Igor Anishchenko
 
PDF
JavaFX and Scala in the Cloud: Stephen Chin
jaxconf
 
PPT
If2036 class based-modeling
metciankcemuah
 
PDF
Introduction to Ruby
Ranjith Siji
 
PPTX
Clean Code - Design Patterns and Best Practices for Bay.NET SF User Group (01...
Theo Jungeblut
 
PPTX
JavaFX and Scala in the Cloud
Stephen Chin
 
PDF
Enabling White-Box Reuse in a Pure Composition Language
elliando dias
 
PDF
Coding for
David Gelb
 
PDF
Linking UK Government Data, John Sheridan
Semantic Web Company
 
PDF
Incremental pattern matching in the VIATRA2 model transformation framework
Istvan Rath
 
PDF
Oop
kecoaktidur
 
Magritte
Lukas Renggli
 
Rock solid UI modeling using annotation processing - CodeGeneration 2013
gdigugli
 
Dynamic languages, for software craftmanship group
Reuven Lerner
 
Classboxes
ESUG
 
Extension and Evolution
Eelco Visser
 
The Dynamic Language is not Enough
Lukas Renggli
 
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
changehee lee
 
Java Modifiers Matrix
Yasser Ibrahim
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Igor Anishchenko
 
JavaFX and Scala in the Cloud: Stephen Chin
jaxconf
 
If2036 class based-modeling
metciankcemuah
 
Introduction to Ruby
Ranjith Siji
 
Clean Code - Design Patterns and Best Practices for Bay.NET SF User Group (01...
Theo Jungeblut
 
JavaFX and Scala in the Cloud
Stephen Chin
 
Enabling White-Box Reuse in a Pure Composition Language
elliando dias
 
Coding for
David Gelb
 
Linking UK Government Data, John Sheridan
Semantic Web Company
 
Incremental pattern matching in the VIATRA2 model transformation framework
Istvan Rath
 
Ad

Practical Models in Practice

  • 1. Practical Models in Practice www.lukas-renggli.ch
  • 2. Practical Models of Models in Practice www.lukas-renggli.ch
  • 3. Practical Meta- Models in Practice www.lukas-renggli.ch
  • 4. Lukas Renggli ‣ Software Engineer at Google YouTube Video Analytics ‣ SCG Alumni Bachelor, Master and PhD ‣ Open-Source Communities Seaside, Magritte and Pier Helvetia, PetitParser
  • 5. Roadmap 1. Protocol Buffers Meta-data model for serialization 2. Magritte Meta-model for generic services 3. Google Web Toolkit Model-driven web architecture 4. Helvetia Meta-model for programming languages
  • 7. Protocol Buffers ‣ Encode structured data ‣ Language-neutral ‣ Platform-neutral ‣ Extensible ‣ Efficient
  • 8. Protocol Buffer IDL message Person {   required int32 id = 1;   required string name = 2;   optional string email = 3; }
  • 9. message Person {   required int32 id = 1;   required string name = 2;   optional string email = 3; } protoc C++
  • 10. Serialize in C++ Person person; person.set_name("John Doe"); person.set_id(1234); person.set_email("[email protected]"); fstream output("myfile", ios::out | ios::binary); person.SerializeToOstream(&output);
  • 11. Deserialize in Python file = open("myfile", "rb") person = Person() person.ParseFromString(file.read()) file.close print "Name: ", person.name print "E-mail: ", person.email
  • 12. Demo
  • 13. Why not XML/JSON? ‣ Protocol Buffers are – 3—10 times smaller – 20—100 times faster – consistent code generators – less ambiguous – evolvable
  • 14. message Person { message Person {   required int32 id = 1;   required int32 id = 1;   required string name = 2;   required string name = 2;   optional string email = 3;   repeated string email = 3; } repeated Phone phone = 4; } :Person :Person :Person
  • 15. ‣ Describe your data once, and use it across platforms and languages ‣ Evolution supported by design ‣ Used at Google for almost all – data storage (file formats, database) – remote procedure protocols (RPC)
  • 17. Address Object :Address street = 'Schützenmattstrasse' plz = 3012 place = 'Bern' canton = 'Bern'
  • 18. Address Class :Address Address street = 'Schützenmattstrasse' class street: String plz = 3012 plz: Integer place = 'Bern' place: String canton = 'Bern' canton: String
  • 19. Address Description Magritte :StringDescription label = 'Street' :NumberDescription label = 'PLZ' required = true :Address range = 1000..9999 street = 'Schützenmattstrasse' description :StringDescription :Container plz = 3012 label = 'Place' label = 'Address' place = 'Bern' required = true canton = 'Bern' :SingleOptionDescription label = 'Canton' required = true sorted = true options = #( 'Bern' 'Zurich' ... )
  • 20. User Interfaces result := anAddress asMorph addButtons; addWindow; callInWorld
  • 21. Web Interfaces result := self call: (anAddress asComponent addValidatedForm; yourself) * * *
  • 22. Other Services Reports Viewers Filtering Editors Validation Serialization Initialization Indexing Copying Initialization Extension Customization Adaptation
  • 23. Meta- Metamodel <described-by> Metamodel Developer <described-by> Domain Model End User
  • 24. Meta- Metamodel <described-by> Metamodel Magritte Developer <described-by> Domain Model Magritte End User
  • 25. Run- t im e Adaptive Object Model
  • 27. Demo
  • 28. Magritte ‣ Very powerful and flexible ‣ Runtime adaptive code ‣ End-user programmable code ‣ Can cause meta meta-confusion ‣ Can be slower than hardcoding
  • 29. Google Web Toolkit Model-driven web architecture
  • 30. Is this really a model? public class Main implements EntryPoint { public void onModuleLoad() { Label label = new Label(“Hello World”); RootPanel.add(label); } }
  • 31. Is this really a model? public class Main implements EntryPoint { public void onModuleLoad() { Label label = new Label(“Hello World”); RootPanel.add(label); } } High-level Widgets
  • 32. Is this really a model? public class Main implements EntryPoint { public void onModuleLoad() { Label label = new Label(“Hello World”); RootPanel.add(label); } } High-level Description Widgets Language
  • 33. public class Main implements EntryPoint { public void onModuleLoad() { platform Label label = new Label(“Hello World”); RootPanel.add(label); independent } } model model transformation
  • 34. Transformation Mozilla Chrome Safari IE ... English French German ...
  • 35. GWT ‣ Write JavaScript using a high-level widget library in a well defined (statically typed) language ‣ Translate and optimize code towards specific browsers ‣ Debugging actually works nowadays
  • 36. He vetia Helvetia Meta-model for programming languages
  • 41. ID  ::=  letter  {  letter  |  digit  }  ; a..z a..z 0..9
  • 42. scanIdentifier self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter between: $a and: $z ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter between: $a and: $z ] ] ] whileTrue. ^ self reportLastMatch ]
  • 43. #( #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41] #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112] #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34] #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41] #[0 1 210 0 76 0 81] #[0 1 214 0 76 0 81] #[1 0 173 0 76 0 177 0 81] #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41] #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 69] #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34] #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76] #[0 2 50 0 21 0 25 0 26 0 76 0 79] #[1 1 13 0 76 2 85 0 124 1 21 0 125] #[1 2 89 0 17 2 30 0 21 2 30 0 82] #[1 2 93 0 21 2 97 0 82] )
  • 44. ID  ::=  letter  {  letter  |  digit  }  ; a..z a..z 0..9 44
  • 45. ID  ::=  letter  {  letter  |  digit  }  ; sequence letter many choice letter digit 45
  • 46. Extensible sequence letter many Composable choice Transformable letter digit Customizable 46
  • 47. Editors Code Highlighting Contextual He vetia Menus Custom sequence Inspector Navigation letter many Search Code choice Error Folding Correction letter digit Code Expansion Debuggers Refactorings 47
  • 48. Demo
  • 49. He vetia ‣ Grammar is the meta-model ‣ Composable programming languages ‣ Extensible programming languages ‣ Tooling is built around the grammar
  • 50. Structural Behavioral Model Model Run-time Static Run-time Adaptive He vetia
  • 51. “Meta-models are the enablers of practical software development.” He vetia www.lukas-renggli.ch