SlideShare a Scribd company logo
1 of 40
Download to read offline
Telescope:
A High-Level Model to 

Build DynamicVisualizations
Guillaume Larchevêque, Usman Bhatti, 

Nicolas Anquetil, Stéphane Ducasse
A visualization
• groups	

• layout	

• nodes	

• connections	

• style	

• interactions	

• legend
Telescope
• A visualization framework	

• Built on top of Roassal
Why Telescope?
• Roassal is cool but requires skills	

• Capitalize experts knowledge	

• Provide high-level mechanisms	

• Capture the visualization domain	

• Need a stable API
Newbie users
• No time to invest	

• Want to visualize data	

• Will reuse pre-defined visualizations	

• Eventually customize for their needs
Demo
#exampleTreeExplorerCollectionHierarchy	

#exampleDistributionMapAbstractMethodsCollection
Tree Explorer
Distribution Map
Use existing visualization
| butterfly |	

butterfly := TLButterfly new	

	

 mainEntity: 10;	

	

 leftEntities: [ :n | 1 to: n - 1 ];	

	

 rightEntities: (15 to: 20).	

butterfly open.
Use existing visualization
Customize visualization
|
butterfly
	

 mainEntity:
	

 leftEntities: [
	

 rightEntities: (
butterfly styleSheet shape:TLEllipse; width: 40.	

butterfly styleSheet > #redBackground	

backgroundColor: Color red; 	

textColor: Color white.	

butterfly > #left addStyle: #redBackground.	

butterfly
Customize visualization
|
butterfly
	

 mainEntity:
	

 leftEntities: [
	

 rightEntities: (
butterfly styleSheet shape:TLEllipse; width: 40.	

butterfly styleSheet > #redBackground	

backgroundColor: Color red; 	

textColor: Color white.	

butterfly > #left addStyle: #redBackground.	

butterfly
Change default
style of
visualization
Customize visualization
Customize visualization
|
butterfly
	

 mainEntity:
	

 leftEntities: [
	

 rightEntities: (
butterfly styleSheet shape:TLEllipse; width: 40.	

butterfly styleSheet > #redBackground	

backgroundColor: Color red; 	

textColor: Color white.	

butterfly > #left addStyle: #redBackground.	

butterfly
Define a new style
#redBackground
Customize visualization
|
butterfly
	

 mainEntity:
	

 leftEntities: [
	

 rightEntities: (
butterfly styleSheet shape:TLEllipse; width: 40.	

butterfly styleSheet > #redBackground	

backgroundColor: Color red; 	

textColor: Color white.	

butterfly > #left addStyle: #redBackground.	

butterfly
Apply this style
on a group
Customize visualization
#left group
Customize visualization
Customisation
is efficient
because
Telescope
modelize a
visualization
logic
Customized Butterfly
visu := TLButterfly new	

mainEntity: (model entities detect: [ :e | e
isTable and: [ e name = 'personne' ] ]);	

leftEntities: [ :table | ((table queryAll: #in)
atScope: FAMIXSQLFunction),((table
queryAll: #in) atScope: FAMIXTable),(table
triggers )] ;	

rightEntities: [ :table | ((table queryAll: #out
atScope: FAMIXTable) reject: #isNil) ].	

visu styleSheet nodeLabelPosition: #top;
backgroundColor: [ :entity | entity isView
ifTrue: [ Color red ] ifFalse: [ entity isTrigger
ifTrue: [Color blue] ifFalse: [ entity
isSQLFunction ifTrue: [ Color yellow ] ifFalse:
[ entity isTable ifTrue: [Color lightRed] ifFalse:
[ Color white ] ] ] ] ].
Expert developers
• Create new visualizations	

• Have to know the model	

• No need to know (or care) anything about
drawing	

• Can reuse pre-defined actions	

• High level abstractions
Demo in order to
explain construction
and logic
#exampleMovingNodeToAnotherGroup
Logic of the
visualisation
Visualization Model
Visualization	

#group1	

 #group2	

Node	

 Node	

 Node	

Layout
Layout Layout
Interaction
Visualization	

#group1	

 #group2	

Node	

 Node	

 Node	

Layout
Layout Layout
Interaction
Add new interaction
Interaction
Visualization	

#group1	

 #group2	

Node	

 Node	

 Node	

Layout
Layout Layout
Interaction
Moving node
Interaction
Moving node
Visualization	

#group1	

 #group2	

Node	

 Node	

Layout
Layout Layout
Interaction Interaction
Node
Creating a visualization
TLVisualization is the root of the whole
visualization. It is just a group able to
render itself
TLVisualization is the root of the whole
visualization. It is just a group able to
render itself
visu := TLVisualization new.
visu open
Groups define the structure of the
visualization and also layout to place
inner elements
Groups define the structure of the
visualization and also layout to place
inner elements
visu := TLVisualization new.
visualization > #group1.
visu open
#> is syntactic sugar that access to
the group or create it if does not exist
Groups define the structure of the
visualization and also layout to place
inner elements
visu := TLVisualization new.
visualization > #group1
layout: RTVerticalLineLayout
visu open
layout defines the way elements will
be placed inside the group.
Nodes are leaves of the visualization
Tree. They contain the entity they
represent
Nodes are leaves of the
visualization Tree. They contain
the entity they represent
visu := TLVisualization new.
visualization > #group1
layout: RTVerticalLineLayout;
addNodesFromEntities: ($a to: $d).
visu open
No needs to create
nodes manually;
Telescope has a nice API
for that
(TLMoveConnectableAction destination: visualization > #group2)
Telescope offers many
pre-defined actions
Here it is an action that moves
elements to another group
Telescope offers many
pre-defined actions
(TLMoveConnectableAction destination: visualization > #group2)
onClick
Combine it with many
way to trigger actions to
obtain an interaction
visu := TLVisualization new.
visualization styleSheet nodeLabel: #asString.
visualization > #group1
layout: RTVerticalLineLayout;
addNodesFromEntities: ($a to: $d);
addInteraction: (TLMoveConnectableAction
destination: visualization > #group2) onClick
Now you can use this
interaction directly on a
Drawable (node, legend,
connection, group)
Here the interaction is
added to a group so all
drawables in the group
hierarchy acquire it
visu := TLVisualization new.
visualization styleSheet nodeLabel: #asString.
visualization > #group1
layout: RTVerticalLineLayout;
addNodesFromEntities: ($a to: $d);
addInteraction: (TLMoveConnectableAction
destination: visualization > #group2) onClick;
addInteraction: (TLStyleCustomizationAction custom:
[:style | style backgroundColor: Color red]) onMouseOver.
visu open
Adding another interaction
customizing style on Mouse over
The logic of the second group is
exactly the same:
visu := TLVisualization new.
visualization styleSheet nodeLabel: #asString.
visualization > #group1
layout: RTVerticalLineLayout;
addNodesFromEntities: ($a to: $d);
addInteraction: (TLMoveConnectableAction
destination: visualization > #group2) onClick;
addInteraction: (TLStyleCustomizationAction custom:
[:style | style backgroundColor: Color red]) onMouseOver.
visualization > #group2
layout: RTVerticalLineLayout;
addNodesFromEntities: ($e to: $h);
addInteraction: (TLMoveConnectableAction
destination: visualization > #group1) onClick;
addInteraction: (TLStyleCustomizationAction custom:
[:style | style backgroundColor: Color blue]) onMouseOver.
visu open
Conclusion
• Telescope is a model to represent
visualization	

• Telescope is built on top of Roassal and let
it the rendering.	

!
• If you get any question please ask
guillaume.larcheveque@synectique.eu

More Related Content

Similar to Telescope: A High-Level Model to Build Dynamic Visualizations

Similar to Telescope: A High-Level Model to Build Dynamic Visualizations (20)

Demo Eclipse Science
Demo Eclipse ScienceDemo Eclipse Science
Demo Eclipse Science
 
Demo eclipse science
Demo eclipse scienceDemo eclipse science
Demo eclipse science
 
Developing the Seaside ecosystem to increase its productivity
Developing the Seaside ecosystem to increase its productivityDeveloping the Seaside ecosystem to increase its productivity
Developing the Seaside ecosystem to increase its productivity
 
No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluen...
No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluen...No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluen...
No Coding Necessary: Building User Macros and Dynamic Reports Inside Confluen...
 
Re-architecting visualisations in Java Swing
Re-architecting visualisations in Java SwingRe-architecting visualisations in Java Swing
Re-architecting visualisations in Java Swing
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
 
OOP, API Design and MVP
OOP, API Design and MVPOOP, API Design and MVP
OOP, API Design and MVP
 
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon RitterJava Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
 
Glorp Tutorial Guide
Glorp Tutorial GuideGlorp Tutorial Guide
Glorp Tutorial Guide
 
Functional programming with Scala
Functional programming with ScalaFunctional programming with Scala
Functional programming with Scala
 
Boost delivery stream with code discipline engineering
Boost delivery stream with code discipline engineeringBoost delivery stream with code discipline engineering
Boost delivery stream with code discipline engineering
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
CATiled Layer - Melbourne Cocoheads February 2012
CATiled Layer - Melbourne Cocoheads February 2012CATiled Layer - Melbourne Cocoheads February 2012
CATiled Layer - Melbourne Cocoheads February 2012
 
Implementing CATiledLayer
Implementing CATiledLayerImplementing CATiledLayer
Implementing CATiledLayer
 
Solid OOPS
Solid OOPSSolid OOPS
Solid OOPS
 
Boosting Your Productivity, with Backbone & RactiveJS
Boosting Your Productivity, with Backbone & RactiveJS Boosting Your Productivity, with Backbone & RactiveJS
Boosting Your Productivity, with Backbone & RactiveJS
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 

More from 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 programming
ESUG
 
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
ESUG
 
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 results
ESUG
 
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
ESUG
 
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
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
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
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
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
ESUG
 

More from 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
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
UK Journal
 

Recently uploaded (20)

AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 

Telescope: A High-Level Model to Build Dynamic Visualizations

  • 1. Telescope: A High-Level Model to 
 Build DynamicVisualizations Guillaume Larchevêque, Usman Bhatti, 
 Nicolas Anquetil, Stéphane Ducasse
  • 2. A visualization • groups • layout • nodes • connections • style • interactions • legend
  • 3. Telescope • A visualization framework • Built on top of Roassal
  • 4. Why Telescope? • Roassal is cool but requires skills • Capitalize experts knowledge • Provide high-level mechanisms • Capture the visualization domain • Need a stable API
  • 5. Newbie users • No time to invest • Want to visualize data • Will reuse pre-defined visualizations • Eventually customize for their needs
  • 9. Use existing visualization | butterfly | butterfly := TLButterfly new mainEntity: 10; leftEntities: [ :n | 1 to: n - 1 ]; rightEntities: (15 to: 20). butterfly open.
  • 11. Customize visualization | butterfly mainEntity: leftEntities: [ rightEntities: ( butterfly styleSheet shape:TLEllipse; width: 40. butterfly styleSheet > #redBackground backgroundColor: Color red; textColor: Color white. butterfly > #left addStyle: #redBackground. butterfly
  • 12. Customize visualization | butterfly mainEntity: leftEntities: [ rightEntities: ( butterfly styleSheet shape:TLEllipse; width: 40. butterfly styleSheet > #redBackground backgroundColor: Color red; textColor: Color white. butterfly > #left addStyle: #redBackground. butterfly Change default style of visualization
  • 14. Customize visualization | butterfly mainEntity: leftEntities: [ rightEntities: ( butterfly styleSheet shape:TLEllipse; width: 40. butterfly styleSheet > #redBackground backgroundColor: Color red; textColor: Color white. butterfly > #left addStyle: #redBackground. butterfly Define a new style #redBackground
  • 15. Customize visualization | butterfly mainEntity: leftEntities: [ rightEntities: ( butterfly styleSheet shape:TLEllipse; width: 40. butterfly styleSheet > #redBackground backgroundColor: Color red; textColor: Color white. butterfly > #left addStyle: #redBackground. butterfly Apply this style on a group
  • 18. Customized Butterfly visu := TLButterfly new mainEntity: (model entities detect: [ :e | e isTable and: [ e name = 'personne' ] ]); leftEntities: [ :table | ((table queryAll: #in) atScope: FAMIXSQLFunction),((table queryAll: #in) atScope: FAMIXTable),(table triggers )] ; rightEntities: [ :table | ((table queryAll: #out atScope: FAMIXTable) reject: #isNil) ]. visu styleSheet nodeLabelPosition: #top; backgroundColor: [ :entity | entity isView ifTrue: [ Color red ] ifFalse: [ entity isTrigger ifTrue: [Color blue] ifFalse: [ entity isSQLFunction ifTrue: [ Color yellow ] ifFalse: [ entity isTable ifTrue: [Color lightRed] ifFalse: [ Color white ] ] ] ] ].
  • 19. Expert developers • Create new visualizations • Have to know the model • No need to know (or care) anything about drawing • Can reuse pre-defined actions • High level abstractions
  • 20. Demo in order to explain construction and logic #exampleMovingNodeToAnotherGroup
  • 22. Visualization Model Visualization #group1 #group2 Node Node Node Layout Layout Layout Interaction
  • 23. Visualization #group1 #group2 Node Node Node Layout Layout Layout Interaction Add new interaction Interaction
  • 24. Visualization #group1 #group2 Node Node Node Layout Layout Layout Interaction Moving node Interaction
  • 25. Moving node Visualization #group1 #group2 Node Node Layout Layout Layout Interaction Interaction Node
  • 27. TLVisualization is the root of the whole visualization. It is just a group able to render itself
  • 28. TLVisualization is the root of the whole visualization. It is just a group able to render itself visu := TLVisualization new. visu open
  • 29. Groups define the structure of the visualization and also layout to place inner elements
  • 30. Groups define the structure of the visualization and also layout to place inner elements visu := TLVisualization new. visualization > #group1. visu open #> is syntactic sugar that access to the group or create it if does not exist
  • 31. Groups define the structure of the visualization and also layout to place inner elements visu := TLVisualization new. visualization > #group1 layout: RTVerticalLineLayout visu open layout defines the way elements will be placed inside the group.
  • 32. Nodes are leaves of the visualization Tree. They contain the entity they represent
  • 33. Nodes are leaves of the visualization Tree. They contain the entity they represent visu := TLVisualization new. visualization > #group1 layout: RTVerticalLineLayout; addNodesFromEntities: ($a to: $d). visu open No needs to create nodes manually; Telescope has a nice API for that
  • 34. (TLMoveConnectableAction destination: visualization > #group2) Telescope offers many pre-defined actions Here it is an action that moves elements to another group
  • 35. Telescope offers many pre-defined actions (TLMoveConnectableAction destination: visualization > #group2) onClick Combine it with many way to trigger actions to obtain an interaction
  • 36. visu := TLVisualization new. visualization styleSheet nodeLabel: #asString. visualization > #group1 layout: RTVerticalLineLayout; addNodesFromEntities: ($a to: $d); addInteraction: (TLMoveConnectableAction destination: visualization > #group2) onClick Now you can use this interaction directly on a Drawable (node, legend, connection, group) Here the interaction is added to a group so all drawables in the group hierarchy acquire it
  • 37. visu := TLVisualization new. visualization styleSheet nodeLabel: #asString. visualization > #group1 layout: RTVerticalLineLayout; addNodesFromEntities: ($a to: $d); addInteraction: (TLMoveConnectableAction destination: visualization > #group2) onClick; addInteraction: (TLStyleCustomizationAction custom: [:style | style backgroundColor: Color red]) onMouseOver. visu open Adding another interaction customizing style on Mouse over
  • 38. The logic of the second group is exactly the same:
  • 39. visu := TLVisualization new. visualization styleSheet nodeLabel: #asString. visualization > #group1 layout: RTVerticalLineLayout; addNodesFromEntities: ($a to: $d); addInteraction: (TLMoveConnectableAction destination: visualization > #group2) onClick; addInteraction: (TLStyleCustomizationAction custom: [:style | style backgroundColor: Color red]) onMouseOver. visualization > #group2 layout: RTVerticalLineLayout; addNodesFromEntities: ($e to: $h); addInteraction: (TLMoveConnectableAction destination: visualization > #group1) onClick; addInteraction: (TLStyleCustomizationAction custom: [:style | style backgroundColor: Color blue]) onMouseOver. visu open
  • 40. Conclusion • Telescope is a model to represent visualization • Telescope is built on top of Roassal and let it the rendering. ! • If you get any question please ask guillaume.larcheveque@synectique.eu