 Yeah, so thanks Valerie and welcome and so this is me as fellow Valerie said, I'm an assistant professor from Federal Institute of Technology in Brazil I'm using Qt and KDE for a few years already and I'm contributing to the community since 2008 and And in this presentation, I'm gonna I'm gonna talk about Qt model, which is actually a new Qt 5 at home module. I developed About I started develop about two years ago as part of my PhD research carried out at Federal University of Bahia also in Brazil Okay So what's Qt modeling about so and first I would like to To talk about what Qt modeling isn't about I have seen some some people having mistaken ideas about that as a kind of framework for mathematical model that they're so Qt modeling has nothing to do actually with mathematical We are interested in software models and in particular in particular for having a more a more Programmatic way to manipulating and querying software model like this stuff in UML Diagrams that you should probably be and use it too. So but first of all a quick survey How many of you have already had any experience with doing UML models before? Okay two persons and how many of you have already had it experience from a developer point of view for Implementing UML meta models or writing plugins for tools Okay, one person. That's fine and So, yeah, we will we want to have this kind of stuff working in Qt and in KD applications So why do we need software models? Obviously, we have the more naive motivations for working with models like using them for documentation purposes to document in the main decisions of your architecture and Let newcomers see this documentation in starting doing that Contributions, but we can also use the software models for soft code generation generation or for keeping models and code in sync and We can also use models for Representing architectures that are recovered from existing software or to To verify if the implemented architecture are indeed what the Have the Prescribes for your implementation and We have seen some some works of quality as soon as the and continual Integration being done with the support of models and that's fine for have some technology and independence and If you you work in some missio critical systems, you may use model models for doing some prediction of quality attributes or for simulating the The benefits of your software before you are you are deeply going into coding stages and model is the basic tool also for creating domain specific language and There's also more advanced that uses of more the models deployed at runtime for Supporting for example self adaptive System so models can play quite an interesting role also in a software process Development process, but also in runtime Why do we need to keep a cute mod that they so when I start my PhD some years ago, we basically This is not actually the the main target of our research But we needed to handle that with very huge model models and with many many models simultaneously and We basically realized that we had some issues in scalability Performancy and standard dirty compliance in current Available Java based implementation for supporting a UML like for example the eclipsing model in frame and there is a lack of Up-to-date C++ or Qt based implementation for open and Manipulating UML Models, okay Umbrella is a pretty good application, but it's still using UML version one So it lacks a lot of new features provided by UML dot two dot four or two dot five and We could support more modeling features in Qt creator or K developer if you have all the This infrastructure for dealing with models written in C++ or Qt and We could also have more model centric process in KDE working flow using models as a very centric and important artifact in KDE projects So this picture shows the basically about modeling and meta modeling when you create this kind of diagram in an UML tool that isn't actually the more important thing This is only the concrete syntax the model in itself is represented as a set of instances of Metaclass classes Defined by in the language you use it to create a model. So actually this class is Indeed an instance of an UML Metaclass, which is UML class this attribute is actually an instance with another UML Metaclass, which is UML Properies and so on UML is a pretty huge language. It comprises about 239 Metaclasses, so a lot of constructs that you can use in your models And the UML meta model is itself a model which should be described in another language by By having these metaclasses as instance of another meta meta class In this case, the UML meta model is described in the MOF language Which is kind of a bit of interest and stuff because the MOF is described in MOF So it's a kind of self-contained language. The MOF class is actually an instance of the MOF class So that is the basic stuff and you can create your own MOF based language for a new particular domain and so on Yes, we want to have this available as a huge implementation for creating and manipulating our UML Models by using script or C++ or whatever Okay, when we started the design of Qt modeling we had some some very Particular interest from the beginning we wanted which should be a hundred percent compliant to the OMG standards OMG is the object management group Which is a consortium that maintains and evolves the UML model Corba and other Standard Dirt We wanted our implementation to be Metamodel agnostic so we don't want this is specific for UML it should work and Easily and seamlessly for any other language including user-defined language and It should perform well for we want to deal with large Models and also with multiple models simultaneously that was some of the requirements of my research and Models should also be easily created or changed via a script We want people to create there all Java scripting and For for doing query and manipulating this model So how did we address this this driver one? so basically when you go to the OMG UML website you can get from there a very big PDF file containing 800 pages, which is the UML specification, but you can also get an XML file that which represents all the language meta class as a XML file so what we did we basically use the pure template toolkit to read this XML and We develop a set we develop a set of templates for having this meta classes automatically implemented in C++ and Qt so the result is a Barely complete implementation of UML in Qt And as I said before UML is a very huge language 239 meta class Luckily, we can have 90% of those capabilities being automatically Implemented by using this template the remaining ones are a sort of derive it proper to them that you we can Effectively writing them manually, but that is actually pretty good and Also the UML met meta model has has a lot of dreaded diamonds We know that this is a completely no goal for having any Q at object-based implementation So we have we had to taking some actions for dealing with that Okay for for addressing the driver to and we made extensive use of Qt's introspection capabilities for not committing to a specific language We didn't want that Will implements new modeling languages or like a UML MOF your your your own as a As Qt plugins we define a new category for Qt plugins and that plugins can be discovered at runtime and We also realize that the Qt meta object Capabilities for dealing with proper meta data has several limitations We had some some troubles for having all the UML Capabilities for dealing with Propets implemented in Qt. There is a bug that it's actually considered Considered there in how to extend Qt Qt Qt for support these new features and Regarding Performancy it's actually already good enough, but we have some some plans in the road map as support copy on right in our models or and Reduce the footprint of Derived union propets. It's a kind of UML propets that Hacker requires a lot of memory to work or Implementing shared objects when dealing with multiple models at the same time and For scripting this was basically by using a Qt script code You can manipulate your models by using JavaScript or Qt script so this is our technology stack so it was built on top of Qt 5 and We created the Qt modeling add-on which is responsible for implementing the basic xmi serialization and the required extensions to Qt meta meta object systems to support What UML requires and then we have a second Module add-on module which is Qt modeling widgets Which implements some new Qt models and views for showing and and displaying Objects for any language and we have basically the plug-in for a UML and Moff language implemented and We develop a tool that actually began as an example of how to use the features and it's It's pretty functional. I think I have some demo to do here Okay, this is the tool isn't it's not completely functional yet It's like a proof of consent concept about how to use it so we can see here a set of plugins and So you can you can see here the plug-in which implements the UML meta model the plug-in which implements the Moff meta model and You can for example, yeah, we can for example open an UML model with here so Here you can see the abstract representation of the UML model It's basically a class diagram and you can select on the specific model elements and you have all the UML divided properties available here. It's taken Directly from the OMG XMI File you have you have some two chips Saying what is that property about that's pretty fine if you want to learn More about you UML here you have a Javascript Console where you have for example, I think I have one here to show you and I want to check with No, this is safe open I want okay, this isn't work But you can you can query your models by Javascript for example to see if there is any use of multiple inheritance and Check if that can be properly implemented in Java for example and We develop a sort of an Initial Version of supporting concrete syntax. So we basically have some QML Actually is that one you have some QML based implementation for dealing with Concrete syntax. It's pretty good to see how feel QML codes you need to have this kind of stuff working It works It changes these screens. Sorry. I will finish here. And so what's next? We're still trying to do a release of it. It's been developed upstream with the Qt community and so the code is all there and We're trying to get some guys for doing some basic review of the basic architecture and and get it Enough for doing a release. We plan to to do first a Qt model then release Then the meta models then the widgets that until that can be used in applications and like K develop keep create all or something like that and We still need to implement the remaining part of QML based concrete syntax and Yes, we need you Contributions are Welcome as usual. Okay. That's all thanks. Am I on my time? Sorry No, yeah, actually and And the main goal here is to is to providing the basic infrastructure for joining with models And regardless if that is going to be a user in umbrella or as a plug-in key to create or or as a plug-in K develop so and we can for a simple Basically, I use all these you ML implementation again in umbrella I actually have no plans for for extending for having this tool as a new Q UML tool it starts as a proof of Concepts and I was doing the things there But I would be very happy to see umbrella being extended to support a UML to and the the new features And Not yet because I think we still need to to do some work for having it in an stable stable version but I had some some previous and Contact with K develop. I've already developed some plugins for for it. I think I Everything's this don't and working properly. It would be Somehow easy to to have this working in K develop. Yeah. Yeah, that's that would be one of one of these goals Yeah, to have the two way Instinct models and code