This document provides an overview of a tutorial on EMF-IncQuery, an incremental query engine for EMF models. It discusses the motivation for model queries and issues with existing solutions. The tutorial will cover the EMF-IncQuery technology, including hands-on examples of basic and advanced model queries. It will conclude with performance benchmarks and a question and answer section. Attendees will learn how to define and execute queries over EMF models incrementally for improved performance with complex queries over large models.
This document discusses why the author loves Python. In 3 sentences:
The author loves Python because it allows them to focus on concepts rather than syntax or performance. Python reduces clutter and makes the author more productive by avoiding unnecessary complexity. The clean design of Python encourages clean library design and idioms that are simple for the author to remember.
Automated static deobfuscation in the context of Reverse Engineeringzynamics GmbH
This document discusses automated static deobfuscation in the context of reverse engineering. It describes challenges with deobfuscation like side effects, code blowup, and address mapping. It summarizes the authors' approach of translating obfuscated assembly to REIL and running algorithms on it. However, it notes limitations like inability to debug and side effects. It considers alternatives like effect comments, formula extraction, and a full compiler to better address problems but notes the significant work required.
Incremental Queries and Transformations for Engineering Critical SystemsÁkos Horváth
This document discusses incremental queries and transformations for engineering critical systems. It describes how model transformations can be used in critical systems engineering to enable early validation of system models. It presents EMF-IncQuery and VIATRA, which allow for incremental queries and transformations over models. These technologies have been applied in various industrial domains including avionics, automotive, and telecommunications. The talk concludes by discussing some of the industrial applications and contributors to this work.
Local search-based pattern matching features in EMF-IncQueryZoltán Ujhelyi
Graph patterns provide a declarative formalism to describe model queries used for several important engineering tasks, such as well-formedness constraint validation or model transformations. As different pattern matching approaches, such as local search or incremental evaluation, have different performance characteristics (smaller memory footprint vs. smaller runtime), a wider range of practical problems can be addressed. The current paper reports on a novel feature of the EMF-IncQuery framework supporting local search-based pattern matching strategy to complement the existing incremental pattern matching capabilities. The reuse of the existing pattern language and query development environment of EMF-IncQuery enables to select the most appropriate strategy separately for each pattern without any modifications to the definitions of existing patterns. Furthermore, a graphical debugger component is introduced that visualizes the execution of the search process, helping to understand how complex patterns behave. This tool paper presents the new pattern matching feature from an end user’s view- point while the scientific details of the pattern matching strategy itself are omitted. The approach is illustrated on a case study of automated identification of anti-patterns over program models created from Java source code.
EMF-IncQuery: Blazing-fast reaction time even for very large diagrams (Sirius...Ákos Horváth
This document discusses using EMF-IncQuery as a query language in Sirius for defining viewpoints over EMF models. It provides an overview of Sirius and EMF-IncQuery, demonstrates defining queries in different languages, and evaluates performance of incremental recalculation. Experimental results show IncQuery queries have blazing fast reaction times for incremental updates even for large models. The approach is proven in a motivating EU project but still requires expertise in both Sirius and IncQuery and could be enhanced with Obeo's help.
High performance model queries and their novel applications discusses model query performance for large models. Benchmark results show that model size affects query response times polynomially, with incremental engines achieving lower exponents. Query complexity also significantly impacts performance, with RETE-based tools like EMF-IncQuery performing well regardless of complexity. EMF-IncQuery is presented as an optimized model query engine for incremental queries, enabling on-the-fly validation over large models.
This document discusses why the author loves Python. In 3 sentences:
The author loves Python because it allows them to focus on concepts rather than syntax or performance. Python reduces clutter and makes the author more productive by avoiding unnecessary complexity. The clean design of Python encourages clean library design and idioms that are simple for the author to remember.
Automated static deobfuscation in the context of Reverse Engineeringzynamics GmbH
This document discusses automated static deobfuscation in the context of reverse engineering. It describes challenges with deobfuscation like side effects, code blowup, and address mapping. It summarizes the authors' approach of translating obfuscated assembly to REIL and running algorithms on it. However, it notes limitations like inability to debug and side effects. It considers alternatives like effect comments, formula extraction, and a full compiler to better address problems but notes the significant work required.
Incremental Queries and Transformations for Engineering Critical SystemsÁkos Horváth
This document discusses incremental queries and transformations for engineering critical systems. It describes how model transformations can be used in critical systems engineering to enable early validation of system models. It presents EMF-IncQuery and VIATRA, which allow for incremental queries and transformations over models. These technologies have been applied in various industrial domains including avionics, automotive, and telecommunications. The talk concludes by discussing some of the industrial applications and contributors to this work.
Local search-based pattern matching features in EMF-IncQueryZoltán Ujhelyi
Graph patterns provide a declarative formalism to describe model queries used for several important engineering tasks, such as well-formedness constraint validation or model transformations. As different pattern matching approaches, such as local search or incremental evaluation, have different performance characteristics (smaller memory footprint vs. smaller runtime), a wider range of practical problems can be addressed. The current paper reports on a novel feature of the EMF-IncQuery framework supporting local search-based pattern matching strategy to complement the existing incremental pattern matching capabilities. The reuse of the existing pattern language and query development environment of EMF-IncQuery enables to select the most appropriate strategy separately for each pattern without any modifications to the definitions of existing patterns. Furthermore, a graphical debugger component is introduced that visualizes the execution of the search process, helping to understand how complex patterns behave. This tool paper presents the new pattern matching feature from an end user’s view- point while the scientific details of the pattern matching strategy itself are omitted. The approach is illustrated on a case study of automated identification of anti-patterns over program models created from Java source code.
EMF-IncQuery: Blazing-fast reaction time even for very large diagrams (Sirius...Ákos Horváth
This document discusses using EMF-IncQuery as a query language in Sirius for defining viewpoints over EMF models. It provides an overview of Sirius and EMF-IncQuery, demonstrates defining queries in different languages, and evaluates performance of incremental recalculation. Experimental results show IncQuery queries have blazing fast reaction times for incremental updates even for large models. The approach is proven in a motivating EU project but still requires expertise in both Sirius and IncQuery and could be enhanced with Obeo's help.
High performance model queries and their novel applications discusses model query performance for large models. Benchmark results show that model size affects query response times polynomially, with incremental engines achieving lower exponents. Query complexity also significantly impacts performance, with RETE-based tools like EMF-IncQuery performing well regardless of complexity. EMF-IncQuery is presented as an optimized model query engine for incremental queries, enabling on-the-fly validation over large models.
EclipseCon Eu 2015 - Breathe life into your Designer!melbats
You have your shiny new DSL up and running thanks to the Eclipse Modeling Technologies and you built a powerful tooling with graphical modelers, textual syntaxes or dedicated editors to support it. But how can you see what is going on when a model is executed ? Don't you need to simulate your design in some way ? Wouldn't you want to see your editors being animated directly within your modeling environment based on execution traces or simulator results?
The GEMOC Research Project designed a methodology to bring animation and execution analysis to DSLs. The companion technologies required to put this in action are small dedicated components (all open-source) at a "proof of concept" maturity level extending proven components : Sirius, Eclipse Debug, Xtend making such features within the reach of Eclipse based tooling. The general intent regarding those OSS technologies is to leverage them within different contexts and contribute them to Eclipse once proven strong enough. The method covers a large spectrum of use cases from DSLs with a straightforward execution semantic to a combination of different DSLs with concurrent execution semantic. Any tool provider can leverage both the technologies and the method to provide an executable DSL and animated graphical modelers to its users enabling simulation and debugging at an early phase of the design.
This talk presents the approach, the technologies and demonstrate it through an example: providing Eclipse Debug integration and diagram animation capabilities for Arduino Designer (EPL) : setting breakpoints, stepping forward or backward in the execution, inspecting the variables states... We will walk you through the steps required to develop such features, the choices to make and the trade-offs involved. Expects live demos with simulated blinking leds and a virtual cat robot !
Xcore meets IncQuery: How the New Generation of DSLs are MadeIstvan Rath
Slides for the presentation at EclipseCon Europe 2013.
For more details, see
http://www.eclipsecon.org/europe2013/xcore-meets-incquery-how-new-generation-dsls-are-made
http://incquery.net/blog/2013/10/xcore-meets-incquery-how-new-generation-dsls-are-made-talk-eclipsecon-europe-2013
The document discusses lessons learned in building robust QA infrastructure for commercial software. Key points include:
1) QA infrastructure is as important as the application itself and must be developed in parallel, not as an afterthought. QA and development teams should work closely together.
2) The build, source control, and test systems form an integrated distributed infrastructure that should allow development and testing from any location.
3) Tests should be written to easily grow over time, from simple unit tests to complex tests that export application states. An automated continuous testing system is critical.
This document summarizes a presentation on neural networks. It discusses introduction to neural networks including what they are and how they can solve non-linear problems. It then covers backpropagation for updating weights, training neural networks including challenges like vanishing gradients. It also discusses multi-class neural networks, word embeddings, and considerations for machine learning engineering in production systems.
Test Driven Development (TDD) is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases that are failed, then the software is improved to pass the new tests, and finally any newly introduced code is refactored. The document outlines the TDD lifecycle and process, describes unit testing and how it verifies isolated units of code, and discusses how TDD results in testable, clean code through refactoring. It provides examples of unit testing code for a bank account class.
The Art Of Performance Tuning - with presenter notes!Jonathan Ross
A somewhat more verbose version of https://www.slideshare.net/JonathanRoss74/the-art-of-performance-tuning.
Presented at JavaOne 2017 [CON4027], this presentation takes a practical, hands-on look at Java performance tuning. It discusses methodology (spoiler: it’s the scientific method) and how to apply it to Java SE systems (on any budget). Exploring concrete examples with tools such as the Oracle Java Mission Control feature of Oracle Java SE Advanced, VisualVM, YourKit, and JMH, the presentation focuses on ways of measuring performance, how to interpret data, ways of eliminating bottlenecks, and even how to avoid future performance regressions.
EMF-IncQuery: Incremental evaluation of model queries over EMF modelsIstvan Rath
The document describes EMF-IncQuery, an incremental query engine for EMF models. It addresses three main problems with existing model query techniques: 1) limited expressiveness of queries, 2) inability to incrementally evaluate queries when models change, and 3) performance issues with large models. EMF-IncQuery contributes an expressive graph pattern query language, an incremental cache for query results that is efficiently maintained as models change, and high performance for queries over large models with over 1 million elements.
EMF-IncQuery 0.7 Presentation for ItemisIstvan Rath
The document introduces EMF-INCQUERY, a model query engine for Eclipse Modeling Framework (EMF) models. It provides an expressive graph pattern query language and incremental query evaluation based on the Rete algorithm. This enables efficient complex queries over large models. EMF-INCQUERY addresses performance issues of model queries in modeling tools and simplifies writing complex queries through reusable query libraries and pattern composition. It integrates with EMF-based applications and provides features like on-the-fly validation and view maintenance.
The document discusses principles for writing clean and comprehensible code. It covers topics like:
- Thinking about context and goals before applying patterns or paradigms.
- Favoring declarative code over imperative code to reduce complexity and coupling.
- Avoiding null values and static methods/variables when possible as they make code harder to reason about and test.
- Using immutable objects when able to improve thread-safety, reduce defects, and enable caching/sharing.
- Keeping methods and classes small and focused on single responsibilities to improve readability and maintainability.
This document summarizes and compares different JavaScript frameworks. It discusses the pros and cons of JavaScript, including that it is weakly typed, supports both imperative and functional paradigms, and has no packaging. It also covers reasons to use a framework, such as leveraging community support. Two main types of frameworks are described: Swiss army knife frameworks that provide utilities and widget-based frameworks that focus on components and effects. Popular examples of each type are listed and what problems they aim to solve. Finally, criteria for evaluating frameworks are outlined.
The document discusses object-oriented design principles and patterns. It covers topics like encapsulation, inheritance, polymorphism, the open-closed principle (OCP), dependency inversion, and architectural patterns like layered architectures and domain-driven design. Examples are provided to illustrate concepts like dependency injection and inversion of control. The conclusion emphasizes applying principles pragmatically based on user needs while aiming for maintainable code.
SiriusCon 2015 - Breathe Life into Your Designer!melbats
You have your shiny new DSL up and running thanks to the Eclipse Modeling Technologies and you built a powerful tooling with graphical modelers, textual syntaxes or dedicated editors to support it. But how can you see what is going on when a model is executed ? Don't you need to simulate your design in some way ? Wouldn't you want to see your editors being animated directly within your modeling environment based on execution traces or simulator results?
The GEMOC Research Project designed a methodology to bring animation and execution analysis to DSLs. The companion technologies required to put this in action are small dedicated components (all open-source) at a "proof of concept" maturity level extending proven components : Sirius, Eclipse Debug, Xtend making such features within the reach of Eclipse based tooling. The general intent regarding those OSS technologies is to leverage them within different contexts and contribute them to Eclipse once proven strong enough. The method covers a large spectrum of use cases from DSLs with a straightforward execution semantic to a combination of different DSLs with concurrent execution semantic. Any tool provider can leverage both the technologies and the method to provide an executable DSL and animated graphical modelers to its users enabling simulation and debugging at an early phase of the design.
This talk presents the approach, the technologies and demonstrate it through an example: providing Eclipse Debug integration and diagram animation capabilities for Arduino Designer (EPL) : setting breakpoints, stepping forward or backward in the execution, inspecting the variables states... We will walk you through the steps required to develop such features, the choices to make and the trade-offs involved. Expects live demos with simulated blinking leds and a virtual cat robot ! This talks presents also xCapella an industrial use case onwhich the Gemoc methodology was applied.
This talks was presented at SiriusCon 2015 in collaboration with Jérôme Le Noir from Thales.
The Arduino Designer documentation is available on : https://github.com/mbats/arduino/wiki/Documentation
This document discusses aspect-oriented programming and how aspects can be used to clean up code by encapsulating cross-cutting concerns. It provides examples of common cross-cutting concerns like logging, validation, and transactions. The presenter explains what aspects are and how they work, including different types of advices. Demonstrations are provided to show refactoring code to use aspects and testing aspects. The overall message is that aspects promote cleaner, more reusable code by separating cross-cutting concerns from the main code logic.
Slides from a quick and dirty presentation I gave to colleagues on Continuous Integration, Unit / Spec testing, etc.
CREDIT: this is very much in the Zach Holman school of presentation. I borrowed a lot of inspiration (and some colors/fonts) from his designs. Attribution was given.
Quick fix for domain-specific modeling languages using the VIATRA framework (http://viatra.inf.mit.bme.hu/) presented at the VL/HCC 2011 conference (http://www.cs.cmu.edu/~vlhcc2011/)
So You Just Inherited a $Legacy Application… NomadPHP July 2016Joe Ferguson
You were just handed the keys to a new repo. Your first glance over the code base causes the fearful “LEGACY” word to ring in your head. HAVE NO FEAR! I’ll share the techniques I’ve learned after working on several legacy codebases to help update that old code to the current PHP generation. We’ll cover triaging the old code base, writing tests to make sure you don’t break anything, and how to modernize your old code base!
This document discusses aspect-oriented programming (AOP) and how it can be used to clean up code. It begins with an introduction to AOP and what aspects are, which are pieces of cross-cutting functionality used across multiple parts of a system. Examples are given of common cross-cutting concerns like logging and caching. The document then demonstrates how to refactor code to use aspects through examples and discusses benefits like improved encapsulation and reuse. It also covers how to test aspects by testing pointcuts and advice functionality.
Distributed Model Validation with EpsilonSina Madani
Scalable performance is a major challenge with current model management tools. As the size and complexity of models and model management programs increases and the cost of computing falls, one solution for improving performance of model management programs is to perform computations on multiple computers. The developed prototype demonstrates a low-overhead data-parallel approach for distributed model validation in the context of an OCL-like language. The approach minimises communication costs by exploiting the deterministic structure of programs and can take advantage of multiple cores on each (heterogenous) machine with highly configurable computational granularity. Performance evaluation shows linear improvements with more machines and processor cores, being up to 340x faster than the baseline sequential program with 88 computers.
Presentations Unusual Java Bugs And Detecting Them Using Foss ToolsGanesh Samarthyam
This document discusses using free and open source (FOSS) static analysis tools to find bugs in Java code. It describes common reasons bugs occur, benefits of static analysis over testing alone, and introduces several FOSS tools like FindBugs, PMD and Jlint/Antic that can detect different types of bugs like unusual syntax errors, deadlocks, and violations of coding standards. Examples of bugs found by these tools are provided, such as a long variable mistaken for a digit, an invalid NaN comparison, and constructor calling an overridden method. The document encourages using these tools to improve software quality by detecting and fixing bugs early.
The document discusses cloud-based modeling solutions from IncQuery Labs that enable tool integration. It describes challenges with large-scale collaboration and automation across multiple teams and tools. The IncQuery Model Checking Tool Suite uses a custom query language to perform validation checks and transformations across models stored in a repository. Case studies demonstrate tool integration workflows at companies like Airbus. Live demos of the solutions are also provided.
IncQuery Labs provides cloud-based modeling solutions to enable tool integration in model-based systems engineering (MBSE). Their IncQuery tool suite includes a desktop query authoring tool and backend server that allows running complex queries on large models. IncQuery was used to develop an interoperability platform for Airbus that automates workflows involving transformations between modeling tools and generates reports through a web interface.
EclipseCon Eu 2015 - Breathe life into your Designer!melbats
You have your shiny new DSL up and running thanks to the Eclipse Modeling Technologies and you built a powerful tooling with graphical modelers, textual syntaxes or dedicated editors to support it. But how can you see what is going on when a model is executed ? Don't you need to simulate your design in some way ? Wouldn't you want to see your editors being animated directly within your modeling environment based on execution traces or simulator results?
The GEMOC Research Project designed a methodology to bring animation and execution analysis to DSLs. The companion technologies required to put this in action are small dedicated components (all open-source) at a "proof of concept" maturity level extending proven components : Sirius, Eclipse Debug, Xtend making such features within the reach of Eclipse based tooling. The general intent regarding those OSS technologies is to leverage them within different contexts and contribute them to Eclipse once proven strong enough. The method covers a large spectrum of use cases from DSLs with a straightforward execution semantic to a combination of different DSLs with concurrent execution semantic. Any tool provider can leverage both the technologies and the method to provide an executable DSL and animated graphical modelers to its users enabling simulation and debugging at an early phase of the design.
This talk presents the approach, the technologies and demonstrate it through an example: providing Eclipse Debug integration and diagram animation capabilities for Arduino Designer (EPL) : setting breakpoints, stepping forward or backward in the execution, inspecting the variables states... We will walk you through the steps required to develop such features, the choices to make and the trade-offs involved. Expects live demos with simulated blinking leds and a virtual cat robot !
Xcore meets IncQuery: How the New Generation of DSLs are MadeIstvan Rath
Slides for the presentation at EclipseCon Europe 2013.
For more details, see
http://www.eclipsecon.org/europe2013/xcore-meets-incquery-how-new-generation-dsls-are-made
http://incquery.net/blog/2013/10/xcore-meets-incquery-how-new-generation-dsls-are-made-talk-eclipsecon-europe-2013
The document discusses lessons learned in building robust QA infrastructure for commercial software. Key points include:
1) QA infrastructure is as important as the application itself and must be developed in parallel, not as an afterthought. QA and development teams should work closely together.
2) The build, source control, and test systems form an integrated distributed infrastructure that should allow development and testing from any location.
3) Tests should be written to easily grow over time, from simple unit tests to complex tests that export application states. An automated continuous testing system is critical.
This document summarizes a presentation on neural networks. It discusses introduction to neural networks including what they are and how they can solve non-linear problems. It then covers backpropagation for updating weights, training neural networks including challenges like vanishing gradients. It also discusses multi-class neural networks, word embeddings, and considerations for machine learning engineering in production systems.
Test Driven Development (TDD) is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases that are failed, then the software is improved to pass the new tests, and finally any newly introduced code is refactored. The document outlines the TDD lifecycle and process, describes unit testing and how it verifies isolated units of code, and discusses how TDD results in testable, clean code through refactoring. It provides examples of unit testing code for a bank account class.
The Art Of Performance Tuning - with presenter notes!Jonathan Ross
A somewhat more verbose version of https://www.slideshare.net/JonathanRoss74/the-art-of-performance-tuning.
Presented at JavaOne 2017 [CON4027], this presentation takes a practical, hands-on look at Java performance tuning. It discusses methodology (spoiler: it’s the scientific method) and how to apply it to Java SE systems (on any budget). Exploring concrete examples with tools such as the Oracle Java Mission Control feature of Oracle Java SE Advanced, VisualVM, YourKit, and JMH, the presentation focuses on ways of measuring performance, how to interpret data, ways of eliminating bottlenecks, and even how to avoid future performance regressions.
EMF-IncQuery: Incremental evaluation of model queries over EMF modelsIstvan Rath
The document describes EMF-IncQuery, an incremental query engine for EMF models. It addresses three main problems with existing model query techniques: 1) limited expressiveness of queries, 2) inability to incrementally evaluate queries when models change, and 3) performance issues with large models. EMF-IncQuery contributes an expressive graph pattern query language, an incremental cache for query results that is efficiently maintained as models change, and high performance for queries over large models with over 1 million elements.
EMF-IncQuery 0.7 Presentation for ItemisIstvan Rath
The document introduces EMF-INCQUERY, a model query engine for Eclipse Modeling Framework (EMF) models. It provides an expressive graph pattern query language and incremental query evaluation based on the Rete algorithm. This enables efficient complex queries over large models. EMF-INCQUERY addresses performance issues of model queries in modeling tools and simplifies writing complex queries through reusable query libraries and pattern composition. It integrates with EMF-based applications and provides features like on-the-fly validation and view maintenance.
The document discusses principles for writing clean and comprehensible code. It covers topics like:
- Thinking about context and goals before applying patterns or paradigms.
- Favoring declarative code over imperative code to reduce complexity and coupling.
- Avoiding null values and static methods/variables when possible as they make code harder to reason about and test.
- Using immutable objects when able to improve thread-safety, reduce defects, and enable caching/sharing.
- Keeping methods and classes small and focused on single responsibilities to improve readability and maintainability.
This document summarizes and compares different JavaScript frameworks. It discusses the pros and cons of JavaScript, including that it is weakly typed, supports both imperative and functional paradigms, and has no packaging. It also covers reasons to use a framework, such as leveraging community support. Two main types of frameworks are described: Swiss army knife frameworks that provide utilities and widget-based frameworks that focus on components and effects. Popular examples of each type are listed and what problems they aim to solve. Finally, criteria for evaluating frameworks are outlined.
The document discusses object-oriented design principles and patterns. It covers topics like encapsulation, inheritance, polymorphism, the open-closed principle (OCP), dependency inversion, and architectural patterns like layered architectures and domain-driven design. Examples are provided to illustrate concepts like dependency injection and inversion of control. The conclusion emphasizes applying principles pragmatically based on user needs while aiming for maintainable code.
SiriusCon 2015 - Breathe Life into Your Designer!melbats
You have your shiny new DSL up and running thanks to the Eclipse Modeling Technologies and you built a powerful tooling with graphical modelers, textual syntaxes or dedicated editors to support it. But how can you see what is going on when a model is executed ? Don't you need to simulate your design in some way ? Wouldn't you want to see your editors being animated directly within your modeling environment based on execution traces or simulator results?
The GEMOC Research Project designed a methodology to bring animation and execution analysis to DSLs. The companion technologies required to put this in action are small dedicated components (all open-source) at a "proof of concept" maturity level extending proven components : Sirius, Eclipse Debug, Xtend making such features within the reach of Eclipse based tooling. The general intent regarding those OSS technologies is to leverage them within different contexts and contribute them to Eclipse once proven strong enough. The method covers a large spectrum of use cases from DSLs with a straightforward execution semantic to a combination of different DSLs with concurrent execution semantic. Any tool provider can leverage both the technologies and the method to provide an executable DSL and animated graphical modelers to its users enabling simulation and debugging at an early phase of the design.
This talk presents the approach, the technologies and demonstrate it through an example: providing Eclipse Debug integration and diagram animation capabilities for Arduino Designer (EPL) : setting breakpoints, stepping forward or backward in the execution, inspecting the variables states... We will walk you through the steps required to develop such features, the choices to make and the trade-offs involved. Expects live demos with simulated blinking leds and a virtual cat robot ! This talks presents also xCapella an industrial use case onwhich the Gemoc methodology was applied.
This talks was presented at SiriusCon 2015 in collaboration with Jérôme Le Noir from Thales.
The Arduino Designer documentation is available on : https://github.com/mbats/arduino/wiki/Documentation
This document discusses aspect-oriented programming and how aspects can be used to clean up code by encapsulating cross-cutting concerns. It provides examples of common cross-cutting concerns like logging, validation, and transactions. The presenter explains what aspects are and how they work, including different types of advices. Demonstrations are provided to show refactoring code to use aspects and testing aspects. The overall message is that aspects promote cleaner, more reusable code by separating cross-cutting concerns from the main code logic.
Slides from a quick and dirty presentation I gave to colleagues on Continuous Integration, Unit / Spec testing, etc.
CREDIT: this is very much in the Zach Holman school of presentation. I borrowed a lot of inspiration (and some colors/fonts) from his designs. Attribution was given.
Quick fix for domain-specific modeling languages using the VIATRA framework (http://viatra.inf.mit.bme.hu/) presented at the VL/HCC 2011 conference (http://www.cs.cmu.edu/~vlhcc2011/)
So You Just Inherited a $Legacy Application… NomadPHP July 2016Joe Ferguson
You were just handed the keys to a new repo. Your first glance over the code base causes the fearful “LEGACY” word to ring in your head. HAVE NO FEAR! I’ll share the techniques I’ve learned after working on several legacy codebases to help update that old code to the current PHP generation. We’ll cover triaging the old code base, writing tests to make sure you don’t break anything, and how to modernize your old code base!
This document discusses aspect-oriented programming (AOP) and how it can be used to clean up code. It begins with an introduction to AOP and what aspects are, which are pieces of cross-cutting functionality used across multiple parts of a system. Examples are given of common cross-cutting concerns like logging and caching. The document then demonstrates how to refactor code to use aspects through examples and discusses benefits like improved encapsulation and reuse. It also covers how to test aspects by testing pointcuts and advice functionality.
Distributed Model Validation with EpsilonSina Madani
Scalable performance is a major challenge with current model management tools. As the size and complexity of models and model management programs increases and the cost of computing falls, one solution for improving performance of model management programs is to perform computations on multiple computers. The developed prototype demonstrates a low-overhead data-parallel approach for distributed model validation in the context of an OCL-like language. The approach minimises communication costs by exploiting the deterministic structure of programs and can take advantage of multiple cores on each (heterogenous) machine with highly configurable computational granularity. Performance evaluation shows linear improvements with more machines and processor cores, being up to 340x faster than the baseline sequential program with 88 computers.
Presentations Unusual Java Bugs And Detecting Them Using Foss ToolsGanesh Samarthyam
This document discusses using free and open source (FOSS) static analysis tools to find bugs in Java code. It describes common reasons bugs occur, benefits of static analysis over testing alone, and introduces several FOSS tools like FindBugs, PMD and Jlint/Antic that can detect different types of bugs like unusual syntax errors, deadlocks, and violations of coding standards. Examples of bugs found by these tools are provided, such as a long variable mistaken for a digit, an invalid NaN comparison, and constructor calling an overridden method. The document encourages using these tools to improve software quality by detecting and fixing bugs early.
The document discusses cloud-based modeling solutions from IncQuery Labs that enable tool integration. It describes challenges with large-scale collaboration and automation across multiple teams and tools. The IncQuery Model Checking Tool Suite uses a custom query language to perform validation checks and transformations across models stored in a repository. Case studies demonstrate tool integration workflows at companies like Airbus. Live demos of the solutions are also provided.
IncQuery Labs provides cloud-based modeling solutions to enable tool integration in model-based systems engineering (MBSE). Their IncQuery tool suite includes a desktop query authoring tool and backend server that allows running complex queries on large models. IncQuery was used to develop an interoperability platform for Airbus that automates workflows involving transformations between modeling tools and generates reports through a web interface.
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...Istvan Rath
Slides of the talk at the MBSE Cyber Experience Symposium 2019 (https://mbsecyberexperience2019.com/speakers/abstracts/item/mbse-meets-industrial-iot-introducing-the-new-magicdraw-connext-dds-plug-in)
IncQuery Server for Teamwork Cloud - Talk at IW2019Istvan Rath
IncQuery Server provides scalable query evaluation over collaborative model repositories. It uses a hybrid database technology that is 10-100x faster than conventional databases and supports large models and complex queries. IncQuery Server integrates with MagicDraw and Teamwork Cloud to enable version control, access control, and customizable queries for model validation and impact analysis.
Easier smart home development with simulators and rule enginesIstvan Rath
The document discusses using simulators and rule engines like Drools Fusion to make smart home development easier. It presents a smart home demonstrator that uses a HomeIO MQTT adapter, an extended event bus, and Drools rules to integrate a simulator with OpenHAB. Rules provide a simple yet flexible way to program smart home logic. The demonstrator source code is open source and available on GitHub to help developers prototype and test smart home applications.
- The VIATRA framework provides a model query and transformation engine for design tools, with applications in systems engineering.
- It features a declarative query language called VQL, Java and Xtend APIs, and a reactive engine for live queries and transformations.
- VIATRA helps validate design rules on large models, allowing designers to be immediately notified of violations during architecture design. It can efficiently query models with millions of elements.
Smarter internet of things with stream and event processing virtual io_t_meet...Istvan Rath
This document summarizes a presentation on using stream and event processing for smarter IoT applications. It introduces concepts like IoT, stream processing, complex event processing (CEP), and discusses how IncQuery Labs' smart home CEP demonstrator uses Drools Fusion for CEP integrated with Eclipse SmartHome and OpenHAB. The demonstrator features a home simulator, extended event bus, and sample rules. It aims to make smart home development easier by bringing CEP capabilities to the edge for low latency offline operation.
Modes3: Model-based Demonstrator for Smart and Safe SystemsIstvan Rath
A talk on Modes3, presented at the IoT Budapest Meetup (April 2017). https://www.meetup.com/IoT-Budapest/events/238267893/
More information:
http://inf.mit.bme.hu/en/research/projects/modes3
https://github.com/FTSRG/BME-MODES3
http://modes3.tumblr.com
Eclipse DemoCamp Budapest 2016 November: Best of EclipseCon Europe 2016Istvan Rath
Ebben a DemoCamp előadásban az EclipseCon Europe 2016 és SiriusCon 2016 konferenciák legfontosabb témáit, technológiáit foglalom össze, kiegészítve néhány szubjektív véleménnyel és megérzéssel a technológiai trendekről.
Exploring the Future of Eclipse Modeling: Web and Semantic CollaborationIstvan Rath
This document discusses a new framework for semantic collaboration on Eclipse modeling projects. It aims to provide fine-grained access control for modeling assets while retaining compatibility with traditional version control systems. The framework uses model queries and transformations to filter models on the server-side according to access rules. This allows for rule-based, context-aware access policies without modifying modeling tools or infrastructure. A demonstration of the framework showed how standard version control features like locking, history and merging still work while providing improved security and flexibility over file-based access control. The framework was presented at MODELS 2016 and the authors are looking for contributors to help bring it to Eclipse.
IoT Supercharged: Complex event processing for MQTT with Eclipse technologiesIstvan Rath
Slides for our talk at EclipseCon Europe 2015. More details at https://www.eclipsecon.org/europe2015/session/iot-supercharged-complex-event-processing-mqtt-eclipse-technologies
Event-driven Model Transformations in Domain-specific Modeling LanguagesIstvan Rath
This PhD thesis by István Ráth focuses on event-driven model transformations in domain-specific modeling languages. The thesis contains 3 parts: 1) developing concepts for event-driven graph transformations based on incremental pattern matching, 2) applying these concepts to provide advanced language engineering features like simulation, and 3) integrating modeling tools using change-driven transformations. The research aims to address challenges in scalability, usability and tool integration for model-driven software engineering.
The SENSORIA Development Environment is a CASE tool for service-oriented architecture (SOA) development from the SENSORIA EU FP6 project. It has 19 partners from 7 countries over 4 years with 4 million Euro funding. The tool provides an integrated platform for SOA development tools, allowing tools to be discovered, installed, composed, and orchestrated as services. The environment is based on Eclipse and OSGi services. It addresses challenges in SOA such as service specification, composition correctness, and continuous operation in changing environments.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
Things to Consider When Choosing a Website Developer for your Website | FODUUFODUU
Choosing the right website developer is crucial for your business. This article covers essential factors to consider, including experience, portfolio, technical skills, communication, pricing, reputation & reviews, cost and budget considerations and post-launch support. Make an informed decision to ensure your website meets your business goals.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfTechgropse Pvt.Ltd.
In this blog post, we'll delve into the intersection of AI and app development in Saudi Arabia, focusing on the food delivery sector. We'll explore how AI is revolutionizing the way Saudi consumers order food, how restaurants manage their operations, and how delivery partners navigate the bustling streets of cities like Riyadh, Jeddah, and Dammam. Through real-world case studies, we'll showcase how leading Saudi food delivery apps are leveraging AI to redefine convenience, personalization, and efficiency.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Best 20 SEO Techniques To Improve Website Visibility In SERP
A tutorial on EMF-IncQuery
1. A
TUTORIAL
ON
EMF-‐INCQUERY
Incremental
evalua;on
of
model
queries
over
EMF
models
Gábor
Bergmann,
Ákos
Horváth,
Ábel
Hegedüs,
Zoltán
Ujhelyi,
Balázs
Polgár,
István
Ráth,
Dániel
Varró
Budapest
University
of
Technology
and
Economics
Fault
Tolerant
Systems
Research
Group
Budapest
University
of
Technology
and
Economics
Department
of
Measurement
and
Informa<on
Systems
2. Contents
§ Mo;va;on
o Model
queries…?
o State
of
the
art
of
EMF
model
queries
o Goals
§ Technology
overview
§ Hands-‐on
part
1
o Basics
(UML
model
sta;s;cs)
§ Break
§ Hands-‐on
part
2
o Advanced
well-‐formedness
valida;on
for
UML
o Integra;on
with
Papyrus
UML
§ Conclusion
o Performance
benchmarks
o Q&A
§ Feel
free
to
ask
ques4ons
along
the
way!
3. Downloads
§ h_p://viatra.inf.mit.bme.hu/incquery/events/ecmfa2011#Files
§ What
you’ll
need
o Eclipse
Helios
(Modeling)
• Make
sure
to
allocate
enough
heap
by
passing
“-‐Xmx1024m”
through
eclipse.ini
o Op;onally:
Papyrus
UML
h_p://www.eclipse.org/modeling/mdt/papyrus/updates/index.php
o Everything
from
the
update
site
h_p://viatra.inf.mit.bme.hu/update/ecmfa11/
o In
your
workspace:
• Sample
IncQuery
project
h_p://viatra.inf.mit.bme.hu/downloads/demo/
ecmfa11/ecmfa-‐incquery-‐project.zip
• Sample
Papyrus
UML
models
h_p://viatra.inf.mit.bme.hu/downloads/demo/
ecmfa11/ecmfa-‐umlsamples-‐project.zip
5. First
of
all…
§ What
is
a
model
query?
o A
piece
of
code
that
looks
for
certain
parts
of
the
model.
§ “Mathema;cally”
o Query
=
set
of
constraints
that
have
to
be
sa;sfied
by
(parts
of)
the
model.
o Result
=
set
of
model
elements
(element
configura;ons)
that
sa;sfy
the
constraints
of
the
query.
§ A
query
engine?
o Supports
the
defini;on/execu;on
of
model
queries.
9. Hi
Jane,
what
do
you
do
at
work?
Jane
Detect
Boss
Constraint
10. Hi
Jane,
what
do
you
do
at
work?
Jane
Detect
Report
Boss
Constraint
11. Hi
Jane,
what
do
you
do
at
work?
Jane
Detect
Report
View
Boss
Constraint
12. Hi
Jane,
what
do
you
do
at
work?
Jane
Detect
Gen
Report
View
Boss
Constraint
13. Model
queries
§ Queries
are
at
the
heart
of
MDD.
o Views
o Reports
o Generators
o Validators
o…
§ Development
issues
o Complex
queries
are
hard
to
write
14. Issues
with
query
development
§ Hard
to
write?
§ Your
op;ons
o Java
(or
C/C++,
C#,
…)
o Declara;ve
languages
(OCL,
EMF
Query
1-‐2,
…)
Impera;ve
query
languages Declara;ve
query
languages
Expressive
power L
(you
write
lots
of
code) J (very
concise)
Safety JJ (precise
control
over
JL
what
happens
at
execu;on) (unintended
side-‐effects)
Learning
curve J (you
already
know
it) L (may
be
difficult
to
learn)
Reusability J (standard
OO
prac;ces) LL (???)
Performance LJ (considerable
manual
JL (depends
on
various
op;miza;on
necessary) factors)
15. Issues
with
query
execu;on
§ Query
performance
o =
Execu;on
;me,
as
a
func;on
of
• Query
complexity
• Model
size
/
contents
• Result
set
size
§ Incrementality
o Don’t
forget
previously
computed
results!
o Models
changes
are
usually
small,
yet
up-‐to-‐date
query
results
are
needed
all
the
;me.
o Incremental
evalua;on
is
an
essen;al,
but
not
a
very
well
supported
feature.
16. Model
query
engine
wish
list
§ Declara;ve
query
language
o Easy
to
learn
o Good
bindings
to
the
impera;ve
world
(Java)
o Safe
yet
powerful
o Reusable
§ High
performance
o Fast
execu;on
for
complex
queries
over
large
models
o First-‐class
support
for
incremental
execu;on
§ Technology
o Works
with
EMF
out-‐of-‐the-‐box
18. Problem
1:
Expressiveness
§ EMF
Query
(declara;ve)
o Low
expressiveness
o Limited
navigability
• no
„cycles”
§ OCL
(declara;ve)
o Verbose
o Lack
of
reusability
support
o Local
constraints
of
a
model
element
o Poor
handling
of
recursion
àChallenging
to
use
19. Problem
2:
Incrementality
§ Goal:
Incremental
evala;on
of
model
queries
o Incremental
maintenance
of
result
set
o Avoid
unnecessary
re-‐computa;on
§ Related
work:
o Constraint
evalua;on
(by
A.
Egyed)
• Arbitrary
constraint
descrip;on
– Can
be
a
bo_leneck
for
complex
constraints
– Always
local
to
a
model
element
• Listen
to
model
no;fica;ons
• Calculate
which
constraints
need
to
be
reevaluated
o No
other
related
technology
directly
over
EMF
o Research
MT
tools:
with
varying
degrees
of
support
20. Problem
3:
Performance
§ Na;ve
EMF
queries
(Java
program
code):
Lack
of
o Reverse
naviga;on
along
references
o Enumera;on
of
all
instances
by
type
o Smart
Caching
§ Scalability
of
(academic)
MT
tools
o Queries
over
>100K
model
elements
(several
proofs):
FUJABA,
VIATRA2
(Java),
GrGEN,
VMTS
(.NET),
Egyed’s
tools
21. EMF-‐IncQuery
§ Expressive
declara;ve
query
language
by
graph
pa_erns
§ Incremental
cache
of
matches
(materialized
view)
§ High
performance
for
large
models
23. Technology
Overview
§ What
is
EMF-‐INCQuery?
o Query
language
+
incremental
pa_ern
matcher
+
development
tools
for
EMF
models
• Works
with
any
(pure)
EMF
applica;on
• Reusability
by
pa_ern
composi;on
• Arbitrary
recursion,
nega;on
• Generic
and
parameterized
model
queries
• Bidirec;onal
navigability
• Immediate
access
to
all
instances
of
a
type
• Complex
change
detec;on
§ Benefits
o Fully
declara;ve
+
Scalable
performance
24. Contribu;ons
§ Expressive
declara;ve
query
language
by
graph
pa_erns
o Capture
local
+
global
queries
o Composi;onality
+
Reusabilility
o „Arbitrary”
Recursion,
Nega;on
§ Incremental
cache
of
matches
(materialized
view)
§ High
performance
for
large
models
25. Origins
of
the
idea
§ Model
transforma;ons
by
VIATRA2
o Transforma;on
language
• Declara;ve
pa_erns
for
model
queries
• Graph
transforma;on
rules
for
elementary
mapping
specifica;ons
• ASM
rules
for
control
structure
o Matching
strategy
• Local
search-‐based
(op;mized
search
plans)
• Incremental
pa@ern
matching
(based
on
RETE)
• Hybrid
pa_ern
matching
(adap;ve
combina;on
of
INC
and
LS)
§ Developed
by
BUTE
and
OptXware
Ltd.
§ More
info
o h_p://eclipse.org/gmt/VIATRA2
o h_p://wiki.eclipse.org/VIATRA2
26. ECore
models
as
graphs
§ Ecore § VIATRA2
o EClass o En;ty
(Node)
o EReference o Rela;on
(Edge)
o EA_ribute o Node+Edge
Car:
EClass Car
parts:
EReference parts
weight
+weight:
EInt Part:
EClass
Integer Part
MyCar:
Car :parts
MyCar:
Car :weight MyWheel:
Part
weight
=
1500
parts
=
[MyWheel:Part] :
Integer
value
=
1500
27. Pa_ern
defini;on Graphical
nota;on
implements
pa_ern
siblingClass(C1,C2)
UI
Model superClass
S:
Class S GComp Cmd Iface
S1:superClass S2:superClass Class
C1 Bu_on ImageBu_on C2
C1:
Class C2:
Class
matching
s1:implement
§ Graph
Pa_ern:
o Structural
condi;on
that
have
to
be
GComp:Class Cmd:Iface
fulfilled
by
a
part
of
the
model
space
s2:included
§ Graph
pa_ern
matching:
s1:superClass i2:implement:
Iface
o A
model
(i.e.
part
of
the
model
space)
c
Bu_on:Class ImageBu_on:Class sa;sfy
a
graph
pa_ern,
o if
the
pa_ern
can
be
matched
to
a
subgraph
of
the
model
Instance
Model
28. Graph
pa_erns
(VTCL)
// B is a sibling class of A
siblingClass(A,B)
pattern siblingClass(A, B) =
P:
Class {
Class(A);
s1:superClass s2:superClass
Class.superClass(S1, A, P);
A:
Class B:
Class Class(P);
Class.superClass(S2, B, P);
Class(B);
29. Graph
pa_erns
(VTCL)
// B is a sibling class of A
siblingClass(A,B)
pattern siblingClass(A, B) =
P:
Class {
Class(A);
s1:superClass s2:superClass
Class.superClass(S1, A, P);
A:
Class B:
Class Class(P);
Class.superClass(S2, B, P);
Class(B);
// S is locally substitutable by A
locallySubs
(A,
S,
X) pattern localSubs(A, S, X) = {
Class(A);
X:
Iface Iface(X);
I1:implements I2:implements Class.implements(I1, A, X);
Class(S);
A:
Class S:Class
Class.implements(I2, S, X);
OR } or {
X:
Class OR
pa_ern Class(A);
Class(X);
s1:superClass s2:
superClass
Class.superClass(P1, X, X);
A:
Class S:Class Class(S);
30. Contribu;ons
§ Expressive
declara;ve
query
language
by
graph
pa_erns
o Capture
local
+
global
queries
o Composi;onality
+
Reusabilility
o „Arbitrary”
Recursion,
Nega;on
§ Incremental
cache
of
matches
(materialized
view)
o Cheap
maintenance
of
cache
(only
memory
overhead)
o No;fy
about
relevant
changes
(new
match
–
lost
match)
o Enable
reac;ons
to
complex
structural
events
§ High
performance
for
large
models
31. RETE
nets
§ RETE
network
o node:
(par;al)
matches
of
a
(sub)pa_ern
o edge:
update
propaga;on
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
TE:
TypedElement
NEG
T:
type
TE:
TypedElement JOIN ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
TE:
TypedElement
o input:
UML
model TE:
TypedElement NEG
o pa_ern:
UnusedClass
UnusedClass(C)
o change:
delete/retarget
type
reference
32. RETE
nets
§ RETE
network
o node:
(par;al)
matches
of
a
(sub)pa_ern
o edge:
update
propaga;on
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
UnusedClass(C)
TE:
TypedElement
NEG A
class
to
which
no
type
reference
points
T:
type
•Associa;on
TE:
TypedElement JOIN•Property ANTI-‐JOIN
•Parameter
C
:
Class C
:
Class
T
:
type •Variable
T
:
type
§ Demonstra;on
TE:
TypedElement
o input:
UML
model TE:
TypedElement NEG
o pa_ern:
UnusedClass
UnusedClass(C)
o change:
delete/retarget
type
reference
33. RETE
nets
§ RETE
network
o node:
(par;al)
matches
In-‐memory
model
of
a
(sub)pa_ern
o edge:
update
(EMF
ResourceSet)
propaga;on
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C) Input
nodes
T
:
type
TE:
TypedElement
NEG
T:
type
TE:
TypedElement JOIN ANTI-‐JOIN
Intermediate
Produc;on
C
:
Class C
:
Class
T
:
type
nodes
T
:
type
§ Demonstra;on
o input:
UML
model
TE:
TypedElement
node NEG
TE:
TypedElement
o pa_ern:
UnusedClass
UnusedClass(C)
o change:
delete/retarget
type
reference
34. RETE
nets
§ RETE
network
o node:
(par;al)
matches
of
a
(sub)pa_ern
o edge:
update
propaga;on
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
TE:
TypedElement
NEG
T:
type
TE:
TypedElement JOIN ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
TE:
TypedElement
o input:
UML
model TE:
TypedElement NEG
o pa_ern:
UnusedClass
UnusedClass(C)
o change:
delete/retarget
type
reference
35. RETE
nets
Class
objects
§ RETE
network a b c
o node:
(par;al)
matches
p s
TypedElement.type
edges
of
a
(sub)pa_ern
x z w TypedElement
objects
o edge:
update
propaga;on
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
x z w a b c
TE:
TypedElement
NEG
T:
type
p s
TE:
TypedElement JOIN ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
TE:
TypedElement
o input:
UML
model TE:
TypedElement NEG
o pa_ern:
UnusedClass p x s z
UnusedClass(C)
o change:
delete/retarget
type
reference
c
36. RETE
nets
Class
objects
§ RETE
network a b c
o node:
(par;al)
matches
p s
TypedElement.type
edges
of
a
(sub)pa_ern
x z w TypedElement
objects
o edge:
update
propaga;on p
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
x z w a b c
TE:
TypedElement
NEG
T:
type
p s
TE:
TypedElement JOIN p ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
o input:
UML
model
TE:
TypedElement p x TE:
TypedElement NEG
o pa_ern:
UnusedClass p x s z
UnusedClass(C)
o change:
delete/retarget
type
reference
c
37. RETE
nets
Class
objects
§ RETE
network a b c
o node:
(par;al)
matches
p s
TypedElement.type
edges
of
a
(sub)pa_ern
x z w TypedElement
objects
o edge:
update
propaga;on p
PATTERN INPUT INPUT INPUT
C:
Class TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C)
T
:
type
x z w a b c
TE:
TypedElement
NEG
T:
type
p s
TE:
TypedElement JOIN p ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
o input:
UML
model
TE:
TypedElement p x TE:
TypedElement NEG
o pa_ern:
UnusedClass p x s z
UnusedClass(C)
o change:
delete/retarget
type
reference
a c
38. RETE
nets
Class
objects
§ RETE
network a b c
o node:
(par;al)
matches
p s
TypedElement.type
edges
of
a
(sub)pa_ern
x z w TypedElement
objects
No4fica4onupdate
o edge:
propaga;on p
Transparent:
user
modifica;on,
PATTERN results
oClass
model
imports,
INPUT INPUT INPUT
C:
f
a
TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C) external
transforma;on,
T
:
type
modifica;on,
…
x z w a b c
TE:
TypedElement
à RETE
is
always
updated!
NEG
T:
type
p s
TE:
TypedElement JOIN p ANTI-‐JOIN
C
:
Class C
:
Class
T
:
type
T
:
type
§ Demonstra;on
o input:
UML
model
TE:
TypedElement p x TE:
TypedElement NEG
o pa_ern:
UnusedClass p x s z
UnusedClass(C)
o change:
delete/retarget
type
reference
a c
39. RETE
nets
Class
objects
§ RETE
network a b c
o node:
(par;al)
matches
p s
TypedElement.type
edges
of
a
(sub)pa_ern
x z w TypedElement
objects
No4fica4onupdate
o edge:
propaga;on p
Transparent:
user
modifica;on,
PATTERN results
oClass
model
imports,
INPUT INPUT INPUT
C:
f
a
TE:
TypedElement C
:
Class C
:
Class
UnusedClass(C) external
transforma;on,
T
:
type
modifica;on,
…
x z w a b c
TE:
TypedElement
à RETE
is
always
updated!
NEG
T:
type
p s
Experimental
results:
TE:
TypedElement JOIN ANTI-‐JOIN
good,
if… C
:
Class
p
C
:
Class
o There
is
enough
T
:
type
T
:
type
§ Demonstra;on
memory
o input:
UML
modelmodel
TE:
TypedElement p x TE:
TypedElement NEG
o Transac;onal
o pa_ern:
UnusedClass p x s z
manipula;on UnusedClass(C)
o change:
delete/retarget
type
reference
a c
41. EMF-‐INCQUERY
Tooling
§ Genera;ve
approach
o compile
queries
into
• RETE
network
builders
• Query
interface
wrappers
o end-‐to-‐end
solu;on:
generates
Eclipse
plug-‐in
projects
§ Relies
on
the
VIATRA2
environment
o query
development
o debugging
43. Development
workflow
Import
EMF
domain
Integrate
into
EMF
into
VIATRA2 applica;on
Develop
and
test
Generate
INCQuery
queries
over
code
VIATRA2
44. Development
workflow
Import
EMF
domain
Integrate
into
EMF
into
VIATRA2 applica;on
Automated
Develop
and
test
Generate
INCQuery
queries
over
code
VIATRA2
45. Development
workflow
Import
EMF
domain
Integrate
into
EMF
into
VIATRA2 applica;on
Automated
Develop
and
test
Generate
INCQuery
queries
over
code
VIATRA2
Supported
by
the
VIATRA2
IDE
46. Development
workflow
Semi-‐automated
for
typical
scenarios,
some
manual
coding
Import
EMF
domain
Integrate
into
EMF
into
VIATRA2 applica;on
Automated
Develop
and
test
Generate
INCQuery
queries
over
code
VIATRA2
Supported
by
the
VIATRA2
IDE
48. Example
1
§ Model
sta;s;cs
§ Inspired
by
the
“model
measurement”
ATL
case
studies
o h_p://www.eclipse.org/m2m/atl/usecases/
ModelsMeasurement/
o h_p://www.eclipse.org/m2m/atl/usecases/
Measuring_UML_models/
49. Model
measures
§ Total
number
of
o Packages
o Classes
o A_ributes
§ Number
of
o Children
o A_ributes
o A_ributes
inherited
§ …
50. Solu;on:
Development
workflow
Import
EMF
domain
Integrate
into
EMF
into
VIATRA2 applica;on
Develop
and
test
Generate
INCQuery
queries
over
code
VIATRA2
51. DEMO Pa_ern
development
in
VIATRA2
§ Create
IncQuery
project
§ Import
the
UML
metamodel
§ Import
UML
instance
models
§ VTCL
development
environment
o Create
and
debug
pa_erns
o Visualize
pa_ern
matches
o Test
queries/pa_erns
in
transforma;ons
o Create
pa_erns
using
instance
model
“examples”
53. DEMO Genera;ng
IncQuery
code
§ Generate
o EMF-‐IncQuery
Source
code:
Pa_ern
matchers
o Sample
UI
project:
UI
integra;on
§ Run
Sample
UI
project
commands
to
see
model
measures
54. Generated
pa_ern
matchers
§ INCQuery
run;me
o Eclipse
plugin
• Depends
only
on
EMF
and
the
INCQuery
core
• No
VIATRA2
dependency!
o Private
code:
pa_ern
builders
• Parameterize
the
RETE
core
and
the
generic
EMF
PM
library
o Public
API:
Pa_ern
matcher
access
layer
• Query
interfaces
• Data
Transfer
Objects
(DTOs)
• Used
to
integrate
to
EMF
applica;ons
55. Generated
Sample
UI
§ Command
contribu;ons
o Project
explorer,
Naviga;on,
Package
Explorer
o Perform
model
loading
and
query
execu;on
o Display
the
results
on
the
UI
• List
(default)
– Pre_y
prints
a
list
of
matches
• Counter
– Prints
the
number
of
matches
57. Generated
Query
API
§ Basic
queries
o Uses
tuples
(object
arrays)
corresponding
to
pa_ern
parameters
o Object[] getOneMatch()
o Collection<Object[]> getAllMatches()
§ Parameterized
queries
o getOneMatch(Object X, Object Y, …)
o getAllMatches(Object X, Object Y, …)
o Null
input
values
=
unbound
input
variables
Based
on
pa_ern
signature
58. Query
Signatures
§ Data
Transfer
Objects
generated
// B is a sibling class of A
pattern siblingClass(C1, C2) =
for
{
pa_ern
signatures /* contents */
§ Signature
query
methods }
o SiblingClassSignature getOneMatch()
o SiblingClassSignature
getOneMatchAsSignature(Object C1,
Object C2) public class SiblingClassSignature
o Collection<SiblingClassSignature> {
getAllMatchesAsSignature()
Object C1;
o Collection<SiblingClassSignature>
getAllMatchesAsSignature(Object C1, Object C2;
Object C2) }
§ C1,
C2:
EObjects
or
datatype
instances
(String,
Boolean,
…)
59. Query
Signatures
§ Data
Transfer
Objects
generated
// B is a sibling class of A
pattern siblingClass(C1, C2) =
for
{
pa_ern
signatures /* contents */
§ Signature
query
methods }
o SiblingClassSignature
getOneMatchAsSignature()
o SiblingClassSignature
getOneMatchAsSignature(UMLClass C1, public class SiblingClassSignature
UMLClass C2) {
o Collection<SiblingClassSignature>
getAllMatchesAsSignature()
UMLClass C1;
o Collection<SiblingClassSignature> UMLClass C2;
getAllMatchesAsSignature(UMLClass }
C1, UMLClass C2)
§ C1,
C2:
EObjects
or
Ongoing
work:
use
datatype
instances
domain-‐specific
types
(String,
Boolean,
…)
in
generated
code
60. Integra;ng
into
EMF
applica;ons
§ Pa_ern
matchers
may
be
ini;alized
for
o Any
EMF
No;fier
• e.g.
Resources,
ResourceSets
o (Transac;onalEdi;ngDomains)
§ Ini;aliza;on
o Possible
at
any
;me
o Involves
a
single
exhaus;ve
model
traversal
(independent
of
the
number
of
pa_erns,
pa_ern
contents
etc.)
61. Typical
programming
pa_erns
1. Ini;alize
EMF
model
o Usually
already
done
by
your
app
J
2. Ini;alize
incremental
PM
whenever
necessary
o Typically:
at
loading
;me
3. Use
the
incremental
PM
for
queries
o Model
updates
will
be
processed
transparently,
with
minimal
performance
overhead
o Delta
monitors
can
be
used
to
track
complex
changes
4. Dispose
the
PM
when
not
needed
anymore
o +
Frees
memory
o -‐
Re-‐traversal
will
be
necessary
63. Example
2
§ Inspired
by
the
“Verifying
UML
profiled
models”
ATL
case
study
o h_p://www.eclipse.org/m2m/atl/usecases/
Verifying_UML_profiled_models/
§ Well-‐formedness
checking
of
UML
models,
with
a
crucial
difference:
o Incremental,
on-‐the-‐fly
valida;on
o Maintain
error
markers
as
the
user
is
edi;ng
the
model
64. UML
well-‐formedness
rules
§ Tradi;onally
specified
by
OCL
constraints
o Note:
OCL
constraints
included
in
UML
models
serve
a
different
purpose
o OCL
constraints
can
be
a_ached
to
any
EMF
instance
model
via
EMF
Valida;on
§ Rules
specified
by
o Tool
developers
o (End
users)
65. Well-‐formedness
checking
from
a
tool
developer’s
perspec;ve
§ Well-‐formedness
rules
o Express
constraints
not
(easily)
possible
by
metamodeling
techniques
o Ensure
“sane”
modeling
conven;ons
&
best
prac;ces
o Aid
code
genera;on
by
design-‐;me
valida;on
§ Example
66. Well-‐formedness
checking
from
a
tool
developer’s
perspec;ve
§ Well-‐formedness
rules
o Express
constraints
not
(easily)
possible
by
metamodeling
techniques
o Ensure
“sane”
modeling
conven;ons
&
best
prac;ces
o Aid
code
genera;on
by
design-‐;me
valida;on
§ Example
67. Well-‐formedness
checking
from
a
tool
developer’s
perspec;ve
§ Well-‐formedness
rules
o Express
constraints
not
(easily)
possible
by
metamodeling
techniques
o Ensure
“sane”
modeling
conven;ons
&
best
prac;ces
o Aid
code
genera;on
by
design-‐;me
valida;on
2
§ Example
The
number
of
parameters
of
a
Behavior’s
specifica;on
should
match
with
the
defini;on
of
the
1
Behavior
itself.
68. IncQuery
Valida;on
Engine
§ Simple
valida;on
engine
o Supports
on-‐the-‐fly
valida;on
through
incremental
pa_ern
matching
and
problem
marker
management
o Uses
IncQuery
graph
pa_erns
to
specify
constraints
§ Simulates
EMF
Valida;on
markers
o To
ensure
compa;bility
and
easy
integra;on
with
exis;ng
editors
o Doesn’t
use
EMF
Valida;on
directly
• Execu;on
model
is
different
69. How
it
works
–
IncQuery
Change
API
§ Track
changes
in
the
match
set
of
pa_erns
(new/lost)
§ Delta
monitors
o May
be
ini;alized
at
any
;me
o DeltaMonitor.matchFoundEvents /
DeltaMonitor.matchLostEvents
• Queues
of
matches
(tuples/Signatures)
that
have
appeared/disappeared
since
ini;aliza;on
§ Typical
usage
o Listen
to
model
manipula;on
(transac;ons)
o A}er
transac;on
commits:
• Evaluate
delta
monitor
contents
and
process
changes
• Remove
processed
tuples/Signatures
from
.matchFound/LostEvents
70. Well-‐formedness
rule
specifica;on
by
graph
pa_erns
§ WFRs:
Invariants
which
must
hold
at
all
;mes
§ Specifica;on
=
set
of
elementary
constraints
+
context
o Elementary
constraints:
Query
(pa_ern)
o Loca;on/context:
a
model
element
on
which
the
problem
marker
will
be
placed
§ Constraints
by
graph
pa_erns Match:
o Define
a
pa_ern
for
the
“bad
case” A
viola;on
of
the
invariant
• Either
directly
• Or
by
nega;ng
the
defini;on
of
the
“good
case”
o Assign
one
of
the
variables
as
the
loca;on/context
71. EXAMPLE A
simple
UML
valida4on
constraint
§ “All
Behaviors
must
have
an
Opera;on
as
their
specifica;on.”
o Otherwise
they
do
not
have
any
“interface”
through
which
they
could
be
accessed
à
“dead
code”
§ Bad
case:
72. EXAMPLE A
simple
UML
valida4on
constraint
§ “All
Behaviors
must
have
an
Opera;on
as
their
specifica;on.”
o Otherwise
they
do
not
have
any
“interface”
through
which
they
could
be
accessed
à
“dead
code”
§ Bad
case:
Iden;fy
pa_ern
variable
“Behavior”
as
the
loca;on
73. EXAMPLE A
simple
UML
valida4on
constraint
§ “All
Behaviors
must
have
an
Opera;on
as
their
specifica;on.”
o Otherwise
they
do
not
have
any
“interface”
through
which
they
could
be
accessed
à
“dead
code”
§ Bad
case:
Iden;fy
pa_ern
variable
“Behavior”
as
the
loca;on
• Subs;tute
the
model
element
match
to
“Behavior”.
• Syntax:
$Behavior.featureName$
• $Behavior$:
shortcut
for
$Behavior.name$
76. Valida;on
lifecycle
§ Constraint
viola;ons
o Represented
by
Problem
Markers
(Problems
view)
o Marker
text
is
updated
if
affected
elements
are
changed
in
the
model
o Marker
removed
if
viola;on
is
no
longer
present
§ Lifecycle
o Editor
bound
valida;on
(markers
removed
when
editor
is
closed)
o Incremental
maintenance
not
prac;cal
outside
of
a
running
editor
77. Valida;on
UI
integra;on
§ A
menu
item
(command)
to
start
the
valida;on
engine
§ Generic
(part
of
the
IncQuery
Valida;on
framework)
o GMF
editor
command
• Appears
in
all
GMF-‐based
editor’s
context
menu
o Sample
Reflec;ve
Editor
command
• Appears
on
the
toolbar
§ Generated
o EMF
generated
tree
editor
command
• Appears
on
the
toolbar
78. EXAMPLE A
complex
UML
constraint
§ “Unused
signal”
o A
Class
defines
a
Recep;on
for
a
Signal,
but
it
doesn’t
use
it
in
its
StateMachine
for
triggering
a
transi;on.
§ Good
case:
79. EXAMPLE A
complex
UML
constraint
§ “All
Recep;ons
of
a
Class
must
use
Signals
that
are
used
in
the
defining
Class’
StateMachine
as
a
Transi;on
Trigger.”
§ Bad
case:
80. EXAMPLE A
complex
UML
constraint
§ “All
Recep;ons
of
a
Class
must
use
Signals
that
are
used
in
the
defining
Class’
StateMachine
as
a
Transi;on
Trigger.”
§ Bad
case:
below
expresses
a
transi;ve
containment
rela;onship.
81. EXAMPLE A
complex
UML
constraint
§ “All
Recep;ons
of
a
Class
must
use
Signals
that
are
used
in
the
defining
Class’
StateMachine
as
a
Transi;on
Trigger.”
BELOW
82. EXAMPLE A
complex
UML
constraint
§ “All
Recep;ons
of
a
Class
must
use
Signals
that
are
used
in
the
defining
Class’
StateMachine
as
a
Transi;on
Trigger.”
Transi;ons
can
be
located
in
any
Region
of
the
StateMachine.
BELOW
83. DEMO On-‐the-‐fly
valida;on
on
a
large
model
§ Generate
Sample
Valida;on
code
§ Load
modelGenera;onExample_2000.uml
§ Observe
on-‐the-‐fly
valida;on
o Performance
is
capped
by
the
Eclipse
Marker
management
layer.
84. EXAMPLE Extra
assignment
§ The
number
of
parameters
of
a
Behavior’s
specifica;on
Opera;on
should
match
with
the
Behavior’s
defini;on.
§ Bad
case:
2
1
85. EXAMPLE Solu;on
Cardinality
constraints
expressing
the
“number
of
matches”
87. Challenges
§ Performance
evalua;ons
are
hard
o Fair?
o Reliable?
o Reproducible?
o Can
the
results
be
generalized?
§ Benchmark
example:
on-‐the-‐fly
constraint
valida;on
over
AUTOSAR
models
o Conference
presenta;on
at
MODELS
2010
o Mo;va;on:
the
Embedded
Architect
Tool
of
OptXware
Ltd.
o AUTOSAR
models
can
be
very
large
(>>1m
elements)
88. What
is
measured?
§ Sample
models
were
generated
o matches
are
scarce
rela;ve
to
overall
model
size
§ On-‐the-‐fly
valida;on
is
modeled
as
follows:
1. Compute
ini;al
valida;on
results
2. Apply
randomly
distributed,
small
changes
3. Re-‐compute
valida;on
results
§ Measured:
execu;on
;mes
of
o Ini;aliza;on
(model
load
+
RETE
construc;on)
o Model
manipula;on
opera;ons
(negligible)
o Valida;on
result
(re)computa;on
§ Compared
technologies
o MDT-‐OCL
o Plain
Java
code
that
an
average
developer
would
write
89. IncQuery
Results
§ Hardware:
normal
desktop
PC
(Core2,
4GB
RAM)
§ Model
sizes
up
to
1.5m
elements
§ Ini;aliza;on
;mes
(resource
loading
+
first
valida;on)
o <1
sec
for
model
sizes
below
50000
elements
o Up
to
40
seconds
for
the
largest
model
(grows
linearly
with
the
model
size)
§ Recomputa;on
;mes
o Within
error
of
measurement
(=0),
independent
of
model
size
o Retrieval
of
matches
AND
complex
changes
is
instantaneous
§ Memory
overhead
o <50
MB
for
model
sizes
below
50000
elements
o Up
to
1GB
for
the
largest
model
(grows
linearly
with
model
size)
§ How
does
it
compare
to
na;ve
code
/
OCL?
95. Assessment
of
the
benchmark
§ High
performance
complex
queries
are
hard
to
write
manually
in
Java.
§ IncQuery
can
do
the
trick
nicely
as
long
as
you
have
enough
RAM.
§ Metamodel
structure
has
huge
impact
on
performance
when
using
“conven;onal”
query
technologies
such
as
OCL,
due
to
o Lack
of
reverse
naviga;on
o Lack
of
type
enumera;on
(.allInstances())
96. Contribu;ons
§ Expressive
declara;ve
query
language
by
graph
pa_erns
o Capture
local
+
global
queries
o Composi;onality
+
Reusabilility
o „Arbitrary”
Recursion,
Nega;on
§ Incremental
cache
of
matches
(materialized
view)
o Cheap
maintenance
of
cache
(only
memory
overhead)
o No;fy
about
relevant
changes
o Enable
reac;ons
to
complex
structural
events
§ High
performance
for
large
models
o Linear
overhead
for
loading
o Instant
response
for
queries
o >
1
million
model
elements
(on
a
desktop
PC)
98. Closing
thoughts
§ On-‐the-‐fly
valida;on
is
only
one
scenario
o Early
model-‐based
analysis
o Language
engineering
in
graphical
DSMLs
o Model
execu;on/analysis
(stochas;c
GT)
o Tool
integra;on
o Model
op;miza;on
/
constraint
solving
o …
§ The
tutorial
examples
o Do
not
make
use
of
advanced
features
such
as
parameterized
queries
or
complex
structural
constraints
(recursion)
o Are
meant
only
as
a
star;ng
point
o The
project
website
has
many
more
examples!
99. Model
transforma4ons
based
on
IncQuery
§ High
performance
model
transforma;ons
o Hybrid
query
approach
• Use
IncQuery
for
– Complex
queries
– Frequently
used
queries
– Parameterized
queries
• Plain
Java
for
simple
queries
(saves
RAM)
o Java
for
control
structure
&
model
manipula;on
§ High-‐level
transforma;on
languages
(VIATRA2,
ATL,
Epsilon,
…)
could
be
“compiled”
to
run
on
this
infrastructure
§ Ongoing
research:
automa;c
mapping
of
SPARQL,
OCL
&
others
to
the
IncQuery
language
100. Wish
list
IncQuery
features
J
§ Declara;ve
query
language
o Easy
to
learn
o Good
bindings
to
the
impera;ve
world
(Java)
o Safe
yet
powerful
o Reusable
§ High
performance
o Fast
execu;on
for
complex
queries
over
large
models
o First-‐class
support
for
incremental
execu;on
§ Technology
o Works
with
EMF
out-‐of-‐the-‐box
101. Pointers
§ Open
source
project:
o h_p://viatra.inf.mit.bme.hu/incquery
§ VIATRA2
(grandfather)
o h_p://eclipse.org/gmt/VIATRA2
o h_p://viatra.inf.mit.bme.hu
§ István
o rath@mit.bme.hu
§ The
development
team
o viatra-‐dev@inf.mit.bme.hu
o We’re
glad
to
help
with
any
problems
you
might
have.
o Check
the
site
for
FAQ,
examples
&
more.
§ Ques;ons
&
answers