I am looking for a new MDA tool to try out for modelling and code generation. This is not for any work related project yet, but for testing purposes. I only used the Merode approach until now (using jMermaid for modelling and the accompagnied code generator) but want to try out something new.
Since EMF is integrated in Eclipse I see a lot of positive reasons to try it out. But after reading some documentation and online articles, I wonder how much it adopts the OMG MDA standards and how much it doesn't.
For example I found the following text
If, on the other hand, you have already bought into the idea of modeling, and even the Model Driven Architecture (MDA) big picture,3 you should think of EMF as a technology that is moving in that direction, but more slowly than immediate widespread adoption. You can think of EMF as MDA on training wheels.
on http://www.informit.com/articles/article.aspx?p=1323360&seqNum=2
But I can nowhere find a concise list of what points of the OMG standard are implemented and which ones are left out or interpreted differently. Anyone that can help out with that?
(And if there are other, more recommended tools, I'm always open to suggestions.)
There is very little relation. EMF is a framework to create (meta)models with very basic code-generation capabilities (basically only a Java direct translation). EMF's goal is not to be an MDA framework but to be the building block on top of which other tools may build more sophisticated solutions (e.g. check the open soruce Eclipse Acceleo tool).
And MDA is just a philosophy. Itself is not even a specific method. The MDA guide, the OMG standard document explaining MDA, is just a set of principles for model-driven development using OMG technologies but does not go further than that (if needed you may want to check the difference between all these MD* acronyms).
So, you can find EMF-based tools that follow MDA principles but EMF as such does not pretend to do so.
In EMF FAQ there is question "What is the relationship of EMF to OMG MDA?" which states
"Essentially EMF supports the key MDA concept of using models as input
to development and integration tools which produce multiple
programming language (Java in the case of Eclipse EMF itself) or data
interchange format (XML) representations."
EMF corresponds to a simplified OMG's MOF implementation (http://www.omg.org/mof/), providing facilities to express custom metamodels and generate java components to instantiate models.
MDA is a particular model-driven philosophy, based on several kind of models (CIM, PIM, PSM...), and aiming to provide a way to target several technical architectures (PSM) from a unique functional model (PIM).
You can use EMF for any model-driven philosophy MBE, MDE, MDD, or MDA. It is the fundamental building block that allows you to define your own metamodels and models. Simply said, EMF provides models, and you can use it for any model-driven approach, including MDA.
Related
I have been reading the documentation and playing with Eigen recently:
docs
and would like to build something that uses it extensively to learn it well. I looked on their website and they mention various projects that use it - like Google Ceres. Something like that might be too large for one or two people to undertake on the side as an Eigen learning experience so I'm looking for something simpler but not trivial that would use it extensively and is a real - useful - application..
Eigen is extensively used in computer vision, and if you are comfortable with linear algebra and matrix calculus (I assume you are, otherwise you wouldn't use Eigen), why not build a toy VSLAM (visual simultaneous localization and mapping) system? Those that are based on bundle adjustment (there's a whole chapter dedicated to that in zisserman's book on multipleview geometry, and it is also discussed in the open-source yet excellent book enter link description here) can be very tricky to implement efficiently, and will take a lot of time, but since your goal is to learn Eigen, performance shouldn't be that much of an issue. If that seems too hard/long for two people, and you think it demands too much energy for a side-project, I recommend that you select some computer-vision algorithms like those that compute the the essential matrix between two images, or are used in 3d pose estimation. Well, those are the only really fun things that come to mind right now, and they will force you to discover a lot of Eigen's functionalities (and gotchas!).
The QT dev kit comes with some good examples of how to code features via trivial apps, but nothing comes close to showing how to structure a complex program in QT. What, if anything, should be global, etc? Pitfalls in designing your classes that would turn out to need a lot of eventual refactoring?
I'm sure there are plenty of open source KDE apps that would serve nicely, so I guess my question is what't the minimal amount of source code I'd need to download and set up in order to work with, say, Dolphin as a sample app? If the answer is 'all of KDE', then I guess this isn't practical (unless downloading and building all of KDE from source is easy enough to make that practical).
Any suggestions? Personally, I'm looking to build a browser-like app, but much simpler. So for an example to follow, something that handles sockets and multiple tabbed viewports would be nice.
Thanks,
Rob
The main advice regarding Qt itself is I would give is to try to spend as much effort as possible in learning to use Qt's Model View Delegate functionality. It can be a lot of work to wrap your head around, but once you get there, you can do very powerful things with it. Another relatively tricky topic you will want to invest learning resources in is memory management and how Qt facilitates (and doesn't facilitate) it.
One of the most confusing things to me was though that when your model is very complex, you might not want to have your core model class be a Qt model at all. Instead, I nowadays see Qt models as something that primarily provide data to views. If your model is very complex, you might want to use your actual, more complex model as a data source for the Qt model class (an QAbstractItemModel derivative), which in turn attaches to the UI view.
Also, Qt documentation is your friend. Qt is a wide framework and contains LOTS of useful functionality. I love the data structures in their ease of use, for example: QHash, QList, etc.
Project scaffolding features for beginners, for different project types in Qt Creator might indeed be useful. For now, the Qt Examples actually are quite good ones, and contain lots of good practices. You just need to pick and choose what you need.
I have been developing our Qt desktop app family for five years now. Our directory structure is quite unorthodox - the main thing is that we have lib/ under which we have grouped different related functionality in subdirectories. The thinking goes, if something is in lib, it is general-purpose and atomic enough to be used in several of the actual desktop applications in our software family.
Your question seems more general level than Qt. It is difficult to tell if you are looking for a more general level computer science education. Globals in general should be avoided, sure. OTOH, we do have a constants.h and other immutable configuration data that is global-like, since it is needed in many places. This adds state though, so it can have unpredictable consequences if you don't do it carefully.
You could look for directory structures in places like this, though I don't really follow this advice myself. http://hiltmon.com/blog/2013/07/03/a-simple-c-plus-plus-project-structure/
Unless you are planning to contribute directly to KDE, I would advice against learning KDE way of doing things. Not necessarily because they are doing things badly, but because it is a world of its own - the best practice for KDE development might not be the best practice for a stand-alone Qt app. (Disclaimer: I, as a UI developer, don't actually like KDE, so I do not know the project very well - aside from the fact that it indeed seems a bit monolithic to the outsider.)
So I wonder if something like Qupzilla would fit the bill for you? (Found via qt-apps.)
HTH.
I want to ask some questions about MDA:
First, I know that there exist tools that you can write code in one language and then the code be generated in another, for example in 'GWT' Java code is transformed to Javascript, or some mobile development tools that transform HTML+Javascript to native code for different platforms. Are these transformations consider as MDA or is something different?
Except that using MDA part of the code is generated automatically are there any other reason that increase programmer's productivity?
Compared to traditional development, will switching to MDA worth the value (immediately) and is that possible in reality?
your knowledge about MDA is less or defective.
main goal of MDA is modeling and in all levels (cim-oim-psm) we are working with model and write 0 line of code, yes input and output of MDA levels is model.
another important activity in MDA is transformation that there are many transformation tools.
i think you should studding first about MDA and transformation (also stereotype).
...
Are these transformations consider as MDA or is something different?
In general, no. But you can use MDA approach for making such transformations.
Except that using MDA part of the code is generated automatically are there >any other reason that increase programmer's productivity?
Yes, it gives you clear picture of system which is free from platform specific details.
Compared to traditional development, will switching to MDA worth the value > (immediately) and is that possible in reality?
Yes, it worth the value, not immediately, but in long run. Yes, switching to MDA is possible in reality.
I would like to easily implement a data classification project, so I'm looking for the language which provides the library for that. Could you suggest the proper language?
matlab is not exactly a programming language, but no doubt it's the easiest way to implementing math oriented programs. it has lots of toolboxes for classifications (e.g. MLP, SVM) optimization toolboxes.
There is a Python distribution called SciPy that has lots of tools for scientific programming and people have used it to do data classification. Some bioinformatics people have built Excel2SVM in Python.
If the focus of your work is on the data classification, not on developing software, then Python is a good choice because you can be more productive than with languages like java or C++.
I'd say you really need more information before choosing a language.
Where are you getting data from, what front end do you want to use (web / dedicated client) ?
C# could do just as good a job, or any Object oriented language.
Cheers
(A little late coming, but I thought this answer should be here for the record).
WEKA and MALLET are two useful libraries for data classification that I've come across. I've used WEKA in a couple of projects and can say that it is pretty mature. Both these libraries are Java-based.
I have inherited a flex project which is sadly not documented. Im looking for a documentation generation tool / class diagram generater or something like that which works with actionscript. There are around a 1000 class files and I don't have the time to step through all the code in debug.
I have tried a few tools like Doxygen (set the language to java) and NaturalDocs but that didn't work out too well.
No idea for the document generation, BTW, would it really help with a huge bulk ASDoc ?
Regarding the diagram generation I posted an answer for the following question. Not sure the guy ever found out, I'm interested about the matter as well.
Static Actionscript code analysis?
Consider this just a pointer, but Enterprise Architect supports round-trip source code engineering for Actionscript (it's the only tool that can generate UML from AS source code, that I'm aware of).
I haven't used it much, just tried it some time ago, but perhaps it's worth a shot. I think it has a 30-day free trial.
If anybody else is looking for an answer, I would recommend using Crocus Modeller, UML modeling tool for AS3 & FLex with reverse engineering feature.