Current Status

The latest version of the UOAI library and all directly related information can be found in this forum.

Current Status

Postby Artaxerxes on Thu Jan 14, 2010 11:59 am

Just to address most recent problems with UOAI...

Currently UOAI is not compatible with the latest client patches, the callibration routine crashes, which is probably the source of most errors observed in the last few months; even though i haven't spent any time looking into it yet.

This leaves UOAI in a broken state; i will however fix the callibration routine next weekend.

After that I will start spending time again on UOAI development; but development will be slow, i will only work on it during weekends. And from now on i'll try to work in a slightly more organized way (as far as I'm capable of that :D).
One major issue during development of UOAI up to now is that I have more ideas than I will ever find time to implement; ... if I keep that up UOAI will be in development for ever. As a result i will focus right now on developping a version of the COM library only, that will basically just fix all currently known issues, even though i will rebuilt it from scratch. After that I will solely focus on maintaining compatibility with newer client patches. I will no longer spend any time on the wrapper or developing a .NET version of UOAI as I first planned to do, but maybe Arul or anyone else will keep that part alive for me.

The reason to redesign from scratch, is partly just because i feel like i need a clean start on UOAI, but also results from the fact that I have been working on this now and then as part of a project unrelated to UOAI: In the research institute I work there is a huge 'software-mess' as I like to call it. Experimental setups are typically using a lot of special-purpose devices that can be controlled by some text-based protocol through a bus system (typically GPIB). These special-purpose devices are often moved from one setup to another, and each experiment might require a different combination of devices. It would therefore be interesting if the software (drivers) controlling each device is 'pluggable', so that you can assemble the sofware you need for a specific experiment by just using the right combination of drivers, and code a small macro or sequence to do the required data-collection. In one part of our lab there has been a consistent set of rules on how such a driver program should work to make it 'interchangeable'; but these rules are limited and quite outdated (based on sharing data through DDE, even including some components that date back to the 16bit-era, running only on f.e. win95 :)). Also other (parts of the) labs in the institute don't stick to these rules at all. The result is that very often software is just completely rewritten whenever a new experiment is started. We wanted to address this problem, and my idea is to address it by requiring the drivers to be COM-components, and by defining fixed interfaces for devices with the same purpose (basically this means the same as requiring the COM objects for one class of devices are inherited from the same object class). That would result in perfectly interchangeable and pluggable code,... but it would also complicate software development... not everyone would be able to quickly write a driver in the form of a COM component; some people here are limited to assembling a program in a graphical language like LabView.
That's why i wanted to redesign my COM subsystem to allow easy building of COM components. The idea was to use an extension language (f.e. LUA) and build an IDispatch implementation to expose interface implementations written in LUA. In combination with software that can generate LUA code automatically and assemble a stand-alone assembly from your LUA interface implementations; it would be really easy to write such drivers. So basically what i'm working on right now is a redesign of my COM subsystem to allow a wide variety of interface implementations to be exposed; including the LUA part. Also correct error-handling and self-registration and signing is addressed in the newer version.

From there i have a choice, when it comes to UOAI: either i use a C implementation of the UOAI interfaces, or i implement everything in LUA. The last choice would make it easier to extend and change UOAI; but i'm not sure about the resulting performance hit. As however the LUA code would get loaded and compiled whenever UOAI is started it might actually perform quite well. Note that other extensibility languages can be considered... but LUA seems the most obvious choice.

(Extra Note... I later on also noticed that the idea for a software framework based on COM in our lab is not new: the IVI foundation already came up with exactly the same idea before me; and they worked out every single detail... see http://www.ivifoundation.org/ for the interested!)

Greetz,
Artaxerxes
Artaxerxes
Site Admin
 
Posts: 530
Joined: Tue Nov 18, 2008 9:51 pm

Re: Current Status

Postby arul on Wed Jan 20, 2010 8:27 pm

Always wanted to get into LUA, never had any serious reason, which changed now, so GO LUA GO!
arul
Pro
 
Posts: 107
Joined: Thu Nov 20, 2008 2:03 am
Location: Prague

Re: Current Status

Postby Artaxerxes on Thu Jan 21, 2010 9:03 am

arul wrote:Always wanted to get into LUA, never had any serious reason, which changed now, so GO LUA GO!


Great to see you back here!

We currently moved .NET development of UOAI to vb.NET, under the name UOAI2, because megamandos is more proficient in that langauge... he's been doing a lot of work; though I think they're currently waiting for me to finish an update and vb.NET include class for the injected dll ;). I think if you want to join the UOAI2 (vb.NET) part it's best to talk to megamandos too...

The COM library, including the LUA part is moving on slower, i'll be working on that now and then, but it 'll take some time. The LUA part is essentially just an IDispatch translating calls into LUA calls; and the reverse of that.

Greetz,
Artaxerxes
Artaxerxes
Site Admin
 
Posts: 530
Joined: Tue Nov 18, 2008 9:51 pm

Re: Current Status

Postby Artaxerxes on Wed Feb 03, 2010 6:16 pm

As part of UOAI2 development i got working on a managed (C#) replacement for the injected dll. After playing around with different ideas and attempts to get a stable, easy-to-manage injection system, it is now closing it's final stages.

This new library is turning into more than just an 'injected dll' to be used from UOAI2.... in fact i will build this new dll into a replacement for the COM library, which I will call UOAI Basic.

So UOAI, which was UOAI COM and it's .NET wrapper; will now become "UOAI Basic" and UOAI2, both written in .NET (one in C#, the other in vb.NET).

The UOAI Basic library exposes only callibrated features, that is functions and methods that can be called directly on the client; data that can be read directly from the client; and events that get invoked whenever a hooked function is called. Only this basic functionality will be exposed from UOAI Basic; so I will not parse packets, add special events or fast item-searching, etc... if you want that you have to refer to UOAI2 that does packet-parsing for you to implement such features. UOAI2 will thus be a more complete toolset, built on top of the basic features of UOAI Basic.

The advantage of this total change from COM library will be that this UOAI Basic library is much easier to maintain, and thus will be updated much faster to support newer clients. The callibration code is also smarter and will no longer crash the client, but rather provide your apps to check which features got callibrated and which features are not available, should you run an unsupported client.

Some details about the design of the Basic Library, for those interested: some powerfull features are now built on top of .NET remoting. To avoid the need of having to rewrite classes whenever new features (new callibrations) are added, and to get rid of the need to maintain a fast and bugfree inter-process communication system; i switched to the following .NET remoting based system: at callibration i map callibrated offsets to members on different interfaces... so i get f.e. a callibrated offset for IClient.Macro(...) or for the IItem.ID property... i just store this information: an Interface Member <-> callibration mapping. A custom remoting proxy class than exposes objects that support those interfaces; but dynamically translates access to these members into an actual call: the proxy uses the Interface Member <-> callibration mapping to perform the call. This means all i have to do from now is keep the callibration-code up-to-date so that all (Interface Member <-> callibration) mappings are there, and just add extra interface members and (Interface Member <-> callibration) mappings whenever new features are added. Communication is done using a .NET remoting Ipc channel which is tested to deliver great performance; and which takes the need for me to maintain the communication part out of my hands, leaving me with more time to focus on the callibration-routine.
I don't know if anyone gets this :) ... but in summary it means this "UOAI Basic" part will be much easier to update and maintain.

On COM support... for now i think i will stick to this "UOAI Basic" library only (and ofc UOAI2, but Megamandos is doing most of the work on this right now) and no longer work on the COM library. I will however include all installation details to get the "UOAI Basic" library and an a typelibrary registered for COM interop.

I still have quite some work on this, so my announcement is a little early; but just thought i'd let you know what i was working on... since there is so much news and new features from megamandos on UOAI2, while i've been rather silent.

I expect most people to use the UOAI2 library and not UOAI Basic though...

Regards,
Artaxerxes
Artaxerxes
Site Admin
 
Posts: 530
Joined: Tue Nov 18, 2008 9:51 pm


Return to UOAI Developers Forum

Who is online

Users browsing this forum: No registered users and 1 guest

cron