Hi Thomas and others,

Before you start reading, I want to tell you, I think OpenEhr is a very 
valuable project, and many people want to use the concepts.
There are however difficulties which I want to address. If sometimes my 
writings seem unpolite or harsh, please keep in mind that English is not my 
second language, in fact it is the fourth language I learned in my live.
This can cause some of my expressions to be clumsy or harder then I meant to.

I spent quite some time last week with studying the OpenEhr-website, and, as I 
said, it is very valuable, there are also a lot of frustrations one has to 
experience when diving into the project.

I express myself with a lot of words, I often do, afraid people do not 
understand me, I do a lot of over-explaining. I admire when people can 
express themselves with not so many words, but as I see, sometimes this can 
also come to misunderstandings.
This is an important subject for me, at this time, so I do not want to take 
risks of misunderstanding.

Sometimes I also repeat myself because, different text-portions require a 
similar but slightly different approach or answer.

So please be patient with me.

A long introduction (I will not do it again!!)

>
> there is a Java ITS guide, which will be included here. The
> documentitself is available at
> http://svn.openehr.org/specification/BRANCHES/Release-1.0-candidate/publish
>ing/its/Java/openEHR-JavaITS.pdf

This document must be new, or I just have missed it. It is for a programmer 
very interesting document. Such documents prevents that programmers have to 
re-invent things, and can prevent unnecessary branching of code and concepts, 
which without such information can easily happen.
Necessary branching, which is explainable can be a good thing, but unnecessary 
or unintentional branching can be very bad and confusing.

>
> > - Although there is a lot of Java-code, but it represents a previous
> > version, and there is no guaranteed effort that it will be up to date
> > with the official Openehr-Eiffel-code.
> > It can be used as is, but for own risk for missing the project
> > developments.
>
> this is correct, it is not up to date. The intention is that it will be
> brought up to date very soon after the Feb 1 publishing of Release 1.0,
> probably by my group at UCL in London.

I will wait a bit with studying the code, anyway, I start studying the code 
when I start the project, I am thinking of. The expectation is that this will 
be very soon.

>
> > - One can say, the Eiffel-code, as Thomas states somewhere, is the
> > case-tool, it represents the formal state of work/definitions.
> > One can create dotnet-libraries with it, which is already done. I can
> > load them in my Visual Studio and Delphi.NET. But I have no way of
> > checking if there is something happening behind the
> > interface-properties, or if they are just there as placeholders for
> > later use. My knowledge of Eiffel is really not enough for judging the
> > source-files.
>
> are you talking about the ref_impl_eiffel repository? You don't have to
> use that if you are not interested in Eiffel. But I don't know what you
> mean by "interface properties" above...

It may be a way of describing, connected to other programming environments.

Some people may find following a bit boring, but I use this to explain what I 
mean by mixing two enviroments and the problems I experience. 
Anyway, just to make it clear.

<example>
A class has an "interface", this what it makes visible to other classes. A 
property is some characteristic of a class.
F.e a class Person has a property bodyLength. This can be in inches or 
centimeters. For example bodyLength can give you centimeters or inches, 
depending on which Local is configured:

In java one publishes the getters and setters, they do not use properties 
often,though it could be possible.
In object pascal one publishes the property, and private implements the 
getters and setters, they do not  have to be public or published, the 
compiler arranges the connection. One can also publish the getters and 
setters in object pascal
In Eiffel I don't know.

As you can see on the pseudo-code below, I am used to Pascal, Java and C(++), 
I mix them so anyone can understand. I call it Jascal++ ;-)

const BRITISH = 0;
const OTHER=1;

class Person{
        public  property bodyLength:Integer read getLength;
        public  property Local write setLocal;
        private function getLength:Integer;
        private         procedure setLocal(value:Integer);
        private fLength:Integer;
        private fLocal:Integer;
}

procedure Person.SetLocal(val:Integer);
{
        fLocal:=val;
}

function Person.getLength:Integer{
        if fLocal=BRITISH then Result := fLength/2.54
        else Result := fLength
}
</example>

In a case tool, only the class-interfaces is mentioned, and in a short way, 
eventually documentation added.
In a case tool a class would look like

Person
----------------
bodyLength:Integer
Local:Integer;

<comment>
(In XMI one would get about the same (but then in XML). 
A case-tool can load the XMI, and generate code following the syntax and 
programming standards of that particular language.
I know there are shortcomings in XMI, but still I think, it is better then 
nothing, in accompanying docs, want could explain the shortcomings. Most of 
the classes and their particularities can be expressed in XMI)
</comment>

The implementation-part is in the code, never seen implementation-parts in a 
case-tool. It is possible, but rarely done.

When you use a case-tool which is at the same time a programming-enviroment, 
then you can eventually compile the code, but there will be no implementation 
behind the class-properties/methods, and in the compiled product, it is hard 
to discover which property/method has implementation-code behind and which 
not. Escpecially when it is not explicitely said.

When I find a DLL, which is compiled code, one could assume, it has all the 
implementation-code in it, why would one else compile it. But the user of the 
environment as a case-tool may also want to compile, just for checking for 
errors.
So in this mixed case/programming-environment it is possible to find a 
dotnet-dll, which is large, publishing all the classes, but has no or not all 
implementation-code.

>
> > This is a confusing and maybe conflicting situation.
> > Because the code is at the same time case-tool storage, it serves two
> > purposes, which can for an outsider be confusing.
> > In a case-tool there is no need to write code behind the properties of
> > a class, one does not want to do that because code-writing is another
> > kind of job then software-architecture. A case-tool is a tool for an
> > architect, a designer, not for a programmer, although those two
> > professions can come together in one person, an outsider can never be
> > sure who was talking here behid this particular property or method.
>
>  From my point of view, it is very simple. We express the openEHR models
> in Eiffel, which is a nearly pure OO environment, and we compile the
> model to get code. If you write code into the routines, then it is the
> same as programming. That's the whole idea seamless software
> development. We then build executables on Windows (.exe or .Net
> assembly), Linux (we're not doing this yet, but you just recompile on
> Linux to get an executable) and on the Mac (we have done some initial
> recompiles of the ADL workbench on the Mac, but there are some GUI
> anomalies to be solved). But all this is only relevant if you want to
> have any contact with Eiffel.


Then I understand that the Eiffel-code has its implementation-parts worked 
out. 
<comment>
The dotnet-DLL could then be used in a project. Maybe it even can be used in 
Mono, because there want be much Windows-API-stuff in it. Depending of course 
on the dotnet-version. I think the OpenEhr kernel does not take advantage of 
dotnet 2.0, so for compatibility reasons one could stick to dotnet 1.1, for 
the time being
</comment>

I can understand, that using Eiffel in this way has a lot of advantage for 
you, but for people using other programming environments it is difficult.
So interoperability to other programming environments is not so good. This is 
a bit of a vendor lockin, or better said, to a programminglanguage-lockin

<eiffelstudio>
One is stuck to a certain environment. 
I downloaded the community-version of Eiffel-studio 5.6, and I really had 
problems to get the thing going. And I am used to many IDE's, Visual Studio, 
Borland-IDE's, KDevelop, and more. Also worked a bit with Eclipse.
Mostly it is simple, start a project, create new classes or add existing ones 
by adding sourcefiles.
Eiffel Studio does these thing a different way, even in the helpfile there is 
no entry which says: "Add a source file to a project."
I used it a few hours, then went back to tools in which I am much more 
productive.
I can get used to it, but I must say, it is not very intuitive for me to work 
with.
</eiffelstudio>

And since the "case-tool" Eiffel can only generate Eiffel-code, users op other 
programming environments have to completely rewrite the code from scratch.

If one could use an XMI-model, which is an OMG-standard, one could easily 
import/generate the code/classes and use them in an IDE and language of 
choice. Most programming languages have a way to connect to XMI.
Still there will be a lot work to do, but much less then now, and one can 
easier, and is also forced more to follow the code-concepts.

I understand from a previous mail from you years ago, there are two main 
advantages of Eiffel, multiple inheritance and the use of generic 
template-types.

For many languages, Java and object pascal, and also C# are solutions.
More or less elegant. As ACode proves, it is possible to write the kernel in 
Java, this is good news. It maybe possible to write it in other languages. 
Though, I had problems importing the code in Rose and in magicDraw, for 
re-engineering purposes, but I did not really try hard. Maybe it is possible.

> > - There are no example implementations of a complete openehr-system on
> > this website, does this mean that there are no open source
> > implementations?
> > Only parts can be found, which are interesting pieces of work, but the
> > things do not come together now.
>
> that's is true. To my knowledge, there are no complete open source
> implementations. That will take time.

If it was possible to export the code-concepts in a vendor-independent way, 
Openehr could become useable by much more programmers.
This would really speed up  the coming of open source implementations.

Also there is a need of more ITS and example projects. There is f.e. no 
persistence layer and no example GUI-layer, and though there is a lot of 
documentation, it is hard to get the pieces together. It takes weeks to read 
and understand the complete docs, after one must start programming, with bad 
luck, from scratch.

At this moment OpenEhr seems to me more like a OpenConcept-project instead of 
an OpenSource-project.

>
> > - Are there any known closed source implementations which run fine?
>
> You can see the list of (some) openEHR projects at
> http://www.openehr.org/projects/t_projects.htm

I tried some of those, hoping to gain some knowledge of OpenEhr implementing, 
but I found some of them not even mentioning the OpenEhr project, and some of 
them did not have much activity in the OpenEhr mailinglists. (I (re)search 
for, to discover which ones can really help.)
But I also found some, which do very promising work.

>
> > - Can the experienced programmers be hired?
> > - why is the ITS and knowledge coming from the closed source-projects
> > not returned to the project? "Give and Take" is the idea of open
> > source which I like.
>
> well, that is always up to the individual projects. Official openEHR.org
> projects (i.e. the ones you see under the website "project" link) are
> all completely open source.

I did not find a project which does the complete implementation. maybe I 
missed it.

But reading further, i can see that I have to wait. That is a bit of a 
problem. It is not that I am on a day to day schedule, but some investors 
want to have some time-schedule.They do not want to hear something like 
somewhere next year.

But maybe, I found a company willing to help us, I did not agree to mention 
its name publicly, sorry for that. But it is possible, that there will be 
some news in short time.
The people investing in the project are willing to donate the ITS coming from 
their project into the OpenEhr project.
What is needed most, for now, in my humble opinion, is an example persistence 
layer and an example GUI-project for representing medical data

>From your other email:
> we continue to use Eiffel simply because it actually implements
> object-oriented semantics properly, and allows us to validate the model.
> I don't know of any equivalent tool.

I have no problem with that, I am looking for a way to help more 
"Worlds" (specially mine ;-)

> > I have seen magicDraw UML in the SVN=tree, but is it always updated as
> > the Eiffel-code is? Can it safely be used to generate code?
> > Is it complete enough do do a signifant part of the code-generation?
>
> it is not currently up to date, and we had to introduce some real hacks
> to include even basic things like List<String>. My impression after
> working for some months with this tool, and also other supposedly top
> quality UML tools is that they are basically diagramming tools and do

By the way, I saw in the Eiffel Studio a menu-option: Export To XMI.
Could that be useful? Is it possible to do those basics things here

Regards
Bert Verhees


Reply via email to