Practical Models in Practice
Upcoming SlideShare
Loading in...5
×
 

Practical Models in Practice

on

  • 321 views

presented by Lukas Renggli at the CHOOSE Forum 2012

presented by Lukas Renggli at the CHOOSE Forum 2012

Statistics

Views

Total Views
321
Views on SlideShare
321
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Practical Models in Practice Practical Models in Practice Presentation Transcript

    • Practical Models in Practice www.lukas-renggli.ch
    • Practical Models ofModels 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
    • Roadmap1. Protocol Buffers Meta-data model for serialization2. Magritte Meta-model for generic services3. Google Web Toolkit Model-driven web architecture4. Helvetia Meta-model for programming languages
    • Protocol BuffersMeta-data model for serialization
    • Protocol Buffers‣ Encode structured data‣ Language-neutral‣ Platform-neutral‣ Extensible‣ Efficient
    • Protocol Buffer IDLmessage 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 Pythonfile = open("myfile", "rb")person = Person()person.ParseFromString(file.read())file.closeprint "Name: ", person.nameprint "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)
    • MagritteMeta-model for generic services
    • Address Object :Address street = Schützenmattstrasse plz = 3012 place = Bern canton = Bern
    • Address Class :Address Addressstreet = Schützenmattstrasse class street: Stringplz = 3012 plz: Integerplace = Bern place: Stringcanton = Bern canton: String
    • Address Description Magritte :StringDescription label = Street :NumberDescription label = PLZ required = true :Address range = 1000..9999street = Schützenmattstrasse description :StringDescription :Containerplz = 3012 label = Place label = Addressplace = Bern required = truecanton = Bern :SingleOptionDescription label = Canton required = true sorted = true options = #( Bern Zurich ... )
    • User Interfacesresult := anAddress asMorph addButtons; addWindow; callInWorld
    • Web Interfacesresult := self call: (anAddress asComponent addValidatedForm; yourself) * * *
    • Other Services ReportsViewers Filtering Editors ValidationSerialization Initialization Indexing Copying Initialization Extension Customization Adaptation
    • Meta- Metamodel <described-by> MetamodelDeveloper <described-by> Domain ModelEnd User
    • Meta- Metamodel<described-by> Metamodel Magritte Developer<described-by>Domain Model Magritte End User
    • Run- t im e AdaptiveObject Model
    • End userscustomizability
    • 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 ... EnglishFrenchGerman ...
    • 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 HelvetiaMeta-model for programming languages
    • 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 choiceTransformable letter digit Customizable 46
    • Editors Code HighlightingContextual He vetia Menus Custom sequence InspectorNavigation 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 ModelRun-time StaticRun-timeAdaptive He vetia
    • “Meta-models are the enablers ofpractical software development.” He vetia www.lukas-renggli.ch