News
Keep current on your OMF updates!
09.15.2004
Apparently, I forgot to post the fixed version of the OMF from the 10th of this
month. Oh well...
Big news, however. I'm calling today the official release of the OMF version
1.0. The library is pretty solid - and all of the Python bindings seem to work
properly. Also included in the release is the much-vaunted GNU autotools
integration. No longer do you have to tweak the Makefiles to get the build
right. Just configure, make and install. Of course, this is the first time
I've used autotools (from scratch) so somethings are still a little flaky
- like finding and libxml2 includes. Please
download the new OMF and let me know what you think.
09.10.2004
Redevelopment of the web page continues...
A new version of the OMF has been released. This includes a small fixes that
actually makes the UML Python bindings useful, and it includes a new facility
for lightweight property extensions (really lightweight). See the
download page to download the new version.
09.08.2004
The obvious big news is a redevelopment of the OMF website. Explore, have fun.
I've also finished a pretty ugly code generator (mmgen is back) that I used
to generate a stub of UML for the OMF. I haven't tested the new code, but
it's already in the build. This version of mmgen is written in Python.
Aside from that there have been some pretty significant modifications to the
OMF.
-
The most visible change is the addition of a new module for the OMF:
UML is back! In theory, the OMF is now ready for the development of
real UML tools.
-
OMF can read XMI 1.2 and XMI 2.0, but it only writes 2.0. Also, I haven't
implemented any of the cross-document reference support for the 1.2
module. I added this support so I didn't have to re-create the UML
metamodel in XMI 2.0.
-
The Python bindings have an interesting new feature: classes in the
metamodel libraries. No longer are all the elements "OMF.Element", but
actually appear as their instantiated types (e.g., Model.Class, UML.Pacakge).
Caveat: you'll need to import all the OMF modules if you want this to
work right. For example, it's probably pretty bad to request the meta-
object of a UML object if you haven't imported the MOF package.
- Numerous and various bugfixes
Get your new version of the OMF here and the
Doxygen documentation can be found here.
08.23.2004
After a month of semi-intensive development and frustration with coding, I'm
releasing a new version of the OMF2 library and Python bindings. This fixes most
of the bugs that were around in the last release - particularly with respect to
the Python bindings. However, the build environment is still probably a little
flaky (I need to learn automake/autoconf). But, here it is:
Get the OMF2 library. This will untar to the
directory "omf2". Build directions are the same. If you want to build the tests
or the Python bindings, You'll have to cd into those directories specifically.
Check the ChangeLog for details.
07.19.2004
Well, after looking at my lists of improvements and then at the code in its
existing state, I've decided that the most direct path to getting this done would
be to... well.. start from scratch. I'm sort of working on a new philosophy with
this version that goes something like this: make the MOF (Meta-Object Facility)
as complete as possible and build on that. The MOF should have been the starting
point from the beginning but I've always seen it as just another model. However,
after seeing how successful the EMF (Eclipse Modeling Framework) has become,
I've had to rethink my approach to the problem. As such, I've been pounding out
code for the last four or five days and actually have a nice hand-built implementation
of the MOF that includes some of easier "improvements". Here's what I've got so far:
- No more Qt
- New and improved type system
- New property system using templte get/set functors
- Dynamically loadable metamodels (coming soon)
- No XMI reading or writing (coming soon)
- No reflective interfaces (coming soon - sort of)
Basically, what I've got is an API for building metamodels, but you can't do
anything with them just yet. However, based on the rate of progress, that shouldn't
be too far off. If anybody wants to sample the new code base, here's a
link to it. You'll need a version of Boost that
includes boost::lexical_cast. Also, it's not using the automake/autoconf tools,
just a simple set of Makefiles. Here's some build instructions:
$ tar xvjf omf2-.tar.bz2
$ cd omf2
$ export OMF_ROOT=`pwd`
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/lib
$ make
The test dir will not build by default and you'll need the LD_LIBRARY_PATH stuff to get
the examples to run. Feedback is always appreciated :)
07.14.2004
It's been a while since I've done any work on the OMF. Well, that's not entirely
true, but it's certainly been a while since I've made a release. I'm still not
going to - I've got some plans in mind. I did some work to beef up the implementation
for a reverse engineering tool I had built, but in the end, decided that it wasn't
worth compiling the release for everybody. There are just too many problems with
the current incarnation. Instead, what I'm posting today is my wishlist for fixes,
optimizations and extensions to the current OMF. Here's the
[pdf] file describing my proposed changes.
Unfortunately, the list of changes is so long, that it's going to take forever
and a day. I'm considering moving the CVS repository for this set of modifications
to a subversion server with anonymous access on my personal machine. If there's
any interest in public src code access (above and beyond the current level) send
me an email and I'll see what I can do.
Alternatively, if I get significant interest, I'll move the project to SourceForge
or something similar.
03.08.2004
Big news for the OMF today. Well, not really the OMF, but people wanting to play
with UML at the data level. This release inludes a set of Python bindings for the
OMF. They're built using the excellent (although sometimes cryptic) Boost.Python
library. You'll need the latest version of that (1.3.1 works fine) to build it.
It also isn't part of the regular build so you should build and install the OMF
first, and you'll probably need to tweak the setup.py script to link against the
right version of Boost.Python... I got lazy and forgot to change that before tarring
the distro.
I've also been lazy and haven't updated anything else on this page... Just the
OMF. Oh. and there are some nasty bugs (like the fact that deleting a model
will crash the program). For a better list of bugs, see the TODO file.
Just to show a quick example of how nice Python is, here's a snippet of code to
list all the types and names of objects in the UML metamodel.
# the most important step
import omf
# create an empty model
model = omf.Model()
# read the uml metamodel
model.read("/usr/share/apps/libomf/uml-1.4.xmi")
# get the MOF extent for the metamodel
ext = model.extent(omf.model())
# get the extent of the base-most class in UML (Element)
proxy = ext.proxy("Element")
# get all derived types of Element
types = proxy.types()
# print everything
for i in types:
print i.meta().get("name"), i.get("name")
Yes, that's really all it takes. This will, of course, be under some pretty heavy
development over the course of the semester, so expect improvements and interface
changes.
Older news
I got tired of backporting my news... most of it isn't relevant anyways, so i'm
not going to write it all down.
Last modified: Wed Sep 15 09:42:06 EDT 2004