Small Problems

I spent the better part of today doing repeated runs across my set of services trying to generate new data using my hypernym agent. for some reason, the silly thing keeps hanging on a particular service. I’ve let it sit for almost an hour with no visible progress. Remove that one service, and it runs just fine. that service causes no issues with the syntax or synonym agents, and it doesn’t throw any exceptions. It just hangs.

So I’ve finally removed that service from the rotation, and now it’s back to gathering data from square one again. I can’t say it’s a wasted day, but it sure doesn’t feel like great progress.

And Now, Hypernyms

I lost Wednesday through Friday to a wonderful bug my daughter gave me. A going away present before she leaves for college, I guess. I appreciate the sentiment, but I’d rather get a nice card than a 103 degree fever. I expected to spend today building and testing my hyperym agent, but I lost most of the day to a leaky kitchen faucet. Considering I replaced the core of that faucet less than three months ago because it was leaking, I was not happy. I have developed a very healthy dislike of Moen faucets — I’ve replaced more of those cores over the past few years than I should have had to replace in 20 years. Replacing a core every year should not be necessary.

But I digress.

But at last I got back to work, and I’ve built a hypernym agent to add to my growing menagerie of parameter comparison agents. Whether it works as intended remains to be seen. But so far it’s at least running and not throwing any exceptions.

In case anyone is wondering a hypernym is a more general sense of a given word. For example, a hypernym of “car” is “vehicle.” I’m operating on the theory that some service parameters may have names that are relatively precise compared to names used by others that refer to the same concept. I guess I’ll find out how valid an assumption that is.

Memory Problem Solved!

After installing Eclipse and the Eclipse Memory Analyzer on a different machine I was able to profile the application and find out what was causing the problem. It turns out that JADE gets upset when you don’t retrieve inter-agent messages from the queue. Ignore them long enough, and it will build into a serious memory problem.

Now that I’ve solved that problem, I can get back to analyzing my services and learning how to match their parameters based on the inherent semantics of the interface structure. But one of these days I will need to tear apart my primary development machine and rebuild it with a clean Eclipse install.

It feels good to finally have this behind me. Now I can get back to the real work I’m supposed to be engaged in.

Still having memory problems

I have managed to narrow down my memory issues a little, but still haven’t made any real progress. Frustrating is an understatement, but at least there are workarounds I can use to get the job done. I think I’ll hang that up for now and get back to something else so I at least feel like I’m making progress. I’ve blown a week on this with almost nothing to show for it.

Eclipse and Memory Profiling

I am discovering that trying to find a memory leak with Eclipse is like trying to give a cat a bath — some people may have luck, but for the majority of us it is a time consuming frustrating experience that doesn’t do anyone much good. First I tried the Eclipse Memory Analyzer, but the files produced by the memory dump were way too big for it to open.

So I tried the Eclipse Test & Performance Tools. Installing it the old fashioned way didn’t work, so I downloaded the all-in-one package. that seemed to work OK, but now it throws a JVMTI error that doesn’t seem to have a solution in any of the usual places on the net (although there are plenty of posts about problems with JVMTI).

I tried using the Java Visual VM memory profiler that comes with the JDK, but that apparently can’t see inside the JVM that Eclipse launches. I was able to launch the Jade container from the command line, but getting all the various libraries needed to to run my code properly is proving to be a royal pain in the butt. Almost two days spent on what should be a relatively trivial problem in this day and age.

Rumor has it that NetBeans has a much better profiling capability that Eclipse, so I guess that’s my next step. I’ve downloaded it, now I guess I’ll have to learn how to use it. What a pain.

Progress, slow but steady

Having squashed my scoring bug, I have spent most of the weekend working on ensuring that parameters are being classified correctly. It’s taken hours of trial and error consuming most of the past two days, but it is finally producing consistent and correct results in classifying parameters. Now the task is to make improvements to the classification system. At present, I’m only getting a few percent improvements over a straight syntactical match. But much of that could be in the weighting of the syntax and synonym evaluations. Perhaps adding more classifiers will help, but I hope I can get an improvement by tweaking the comparisons I am already making.

One bug down

Success! At least, a limited form of success. I manged to find the cause of my parameter scoring bug. It was indeed simple and it seems the one fix solved many (hopefully all) of the symptoms. Even better, I think I also found the cause of the memory issue that has recently cropped up. I’m running the fixes now to make sure they work.

It also appears that my ontology builder is working properly. Once I build an ontology out of enough services I should know whether or not my scoring algorithm is effective. It’s working as designed, but whether that is what it needs to do is another matter entirely.

In the meantime, having squashed my bug, I think I have earned a cigar and a glass of Scotch. And I intend to collect my earnings immediately.

Bug hunting

What a pain. I’ve spent about 4 hours total today running a bug to ground and I came across a couple other major bugs in the process. It seems these problems always multiply instead of collapsing into a smaller number than they first appear. The good news is, it should be a relatively quick fix; it will just take some tedious stubby-pencil analysis to get it right this time.

But as I have to coordinate the decorating for my church’s Vacation Bible School tomorrow night, I guess my bug hunting may have to wait for a day or so. If I can get it fixed on Friday night, I may be generating ontologies by Saturday. I’d like to get a paper submitted for a conference whose deadline is August 9th. I still have a fighting chance of making it, although I wouldn’t bet the rent money on it.

Learning the Protege API

I spent a couple of hours this evening learning the basics of the Protege API. It’s pretty easy to read in an ontology and read out or create new parts of it. But now I have to figure out how to take specific evaluated service parameters and create new named classes and individuals from them in the ontology. If I can do that, I will have some real results to show. Well, maybe not “real” results, but certainly some intermediate results.

There are a few display issues I’ll have to work on, but they shouldn’t be an issue. The issue is digging through all of the documentation to figure out how to suppress (or eliminate) the excess text that gets appended to the class names. that may or may work; there are still gaps in the Protege documentation. I spent an hour finding out why the I was getting an error that OntologyLoadException couldn’t resolve. I made sure I was importing all the jar files the programmer’s guide said should be imported, but they neglected to mention that protege.jar from the main Protege directory needed to be imported as well. Perhaps the computer science types who are creating Protege at Stanford should team up with some folks from the humanities majors to check their documentation. Just a thought.

Sometimes progress is slow

It seems like I have done nothing all weekend. I have no additional code, no improvements to my algorithm, no drafts of papers to show for two days (I took Friday off — even students are allowed a little relaxation).

However, I did spend my time learning the new interfaces for Protege 4.1 because it supports OWL 2.0. Based on the assumption that my research should be founded on the latest standards, I assumed this was the way to go. It took a little while, but I learned how to use the new user interface to create an ontology.

And then I realized that the Protege 4.1 release, being a beta release, does not include the Protege OWL API. Given that I want to generate an ontology from a set of web service parameters, the OWL API is something of  a necessity.  Lesson learned about researching the features and limitations of beta software.

So I spent the remainder of the weekend going through the tutorial for Protege 3.4.4. It doesn’t support OWL 2, but it does include the API I wanted. So I reviewed the tutorial and built a basic ontology (in reality, more like a meta-ontology). The next task is to learn the API so I can work on generating an ontology from the service parameters I have evaluated.

Not the most productive weekend I have had, but definitely a learning experience. And it certainly could have been worse.