Monday, August 21, 2006

(not so) Final news

It has been a long time since my last post, but I've been a bit busy working some rough corners with the menu generation stuff. Since my last report, many things have moved on, let's summarize them:
  • I committed the initial Desktop plugin which resembles the standard planar desktop experience. While actually it's a bit limited, it does the job for now including vertical scrolling capabilities and supports multiple tabs. It supports three file categories in the desktop ( namely: ".desktop" files, directories and regular files (detected through their MIME type)). After getting rid of the infamous 666 (i'll tell you about it later), another problem was resolved. Now external jars can be included in the classpath for a SceneManagerPlugin before it's loaded, so I can access another tools that already live in the lg3d-incubator, which allows, for example, to open a directory using some of the available 3D file managers. This let my desktop thing to open directories that reside within it inside a well suited app.
  • I worked for a long period in menu generation, mainly because my lack of solid xml knowledge, but also for some complex algorithms that finally resulted much easier. One of this refer to the way to process rulesets in an xml tree. As usually happens with trees, most algorithms are better expressed as recursive systems, but they also require a deep understand of the problem as a whole and as a part, so I needed a quite long period to get to it while finally the solution was quite simple and of course elegant (I will dedicate an article on it soon). Another interesting point with the parsing of the xml applications file is the concept of Merging, which wasn't a hard task, but also took more than I expected just because I'm so lazy that I needed like 4 days to realize that I was passing the wrong Node to a given method (I must say in my defense that there are many Nodes in the menu tree ;).
  • Well, even with that hard corners, I was able to parse the full file, merge it with the other necesary files and generate the needed events, but I found a total showstopper when the StartMenu code almost completly ignored the events I was sending to it. This is still a problem (see Issue 678) and after a lot of unproductive debugging I decided to freeze the menu stuff and move to another things...
  • ...In my last TODO list, there was a dark element (reflected in Issue 666) which refered to classpath problems when trying to load a SceneManagerPlugin from a jar file located in the ext/app directory. I left this concrete issue down in the tasks stack because I focused in the menu stuff, but after my another lock-up, it looked like a good moment to look at this again, which was a nice idea, because as soon as I started looking at the SceneManagerPluginConfig (the class responsible from creating a SceneManagePlugin from an xml object) I saw clear that it was only needed to add a property to add new elements to the classpath, before the SceneManagerPlugin is loaded. I needed a way to modify the classpath during runtime, a simple search gave me the answer, a cool hack that hijacks the accessor protection to call a protected method in java.net.URLClassLoader from my own package, isn't it cool?. After some cleanup, my patch has been included in the lg3d-core, which makes for my very first direct code contribution to the core ;) (Given that now I have very clear how to integrate a SceneManagerPlugin or a normal Frame3D in the incubator i'm planning to write an article on this topic for the The looking glass developer's blog, stay tuned there).
These are the things I've worked on for the last weeks, it has been a bit stressing to get locked in what later was revealed as dumb issues, but anyway finally things seems to go working (apart from the StartMenu issue). Now i'll focus on creating a more elaborated desktop system, because I don't like the planar one (it's too classical). Of course there is a lot of bug haunting out there, and i've to study too. PS: You may have noticed that the title of this post includes the "not so" prefix, this is because i'm not over yet with this stuff, it needs (a lot) more work, and I want to do it. Thanks for reading up to this small place !!