Upstreaming scsolver

I’m in the process of upstreaming my solver (a.k.a scsolver – its cvs module name) to the OpenOffice.org repository at the moment. So, with everything else put on hold, all my effort is shifting toward making that happen.

Typically, any new code to the OO.o is upstreamed via a process known as the child work space (CWS), which is basically a front-end to the CVS repository (soon to be SVN’ed, I suppose? ;-) ) designed to ease the management of source control from different parties, including external contributors such as myself.

But CWS can be a bit intimidating and confusing to the un-initiated. For instance, it took me a great deal of trouble to figure out how to add new top-level modules. All sorts of emails went back and forth, and in the end, thanks especially to Petr, I was able to at least add new stub modules directories in cvs HEAD, and filed an issue to have the right person (Jens?) add cvs alias to those modules so that they can be checked out for further work.

Also, because my code has dependency on lp_solve, which itself is an external project, the right steps needed to be taken as outlined in the external project page to make sure that we are complying with the license of that particular software. Not sure how long this process will take, but at least I did my part (or did I?).

Anyway, things are moving along. :-) Michael was kind enough to create a new cws for me, so hopefully once those modules get aliased for checkout I’ll be able to start working on putting my code in that cws.

Oh yeah, also not to forget that patch for lpsolve that maho wants to commit. ;-)

Solver new snapshot available

I’ve uploaded a new snapshot of Solver up on the usual place. The difference from the last snapshot is that the Solver now uses lp_solve as the backend LP optimizer. lp_solve is quite a robust optimizer currently developed and maintained by Kjell Eikland and Peter Notebaert. It has an excellent track record with users across many industries, so if you have a model that my Solver failed to solve previously, try out this snapshot to see if it will do a better job for you.

Now that the UNO package version of my Solver is finally out after a long 4-month hiatus , my next immediate task is to work on integrating this lp_solve-based Solver into ooo-build. For this, I will take a different integration strategy.

To recap, the strategy I took to implement the lp_solve-based Solver (this snapshot) was to add a UNO layer to lp_solve to turn it into a UNO library, and add a UNO hook to the main Solver component to glue the two separate components. This strategy was necessary despite its over-complexity and obvious overhead because, currently, it is not possible to include a shared library into a UNO package unless it provides a UNO service, or the package registration will simply fail. This is because OO.o expects every library included inside a package to export a certain set of callback functions for component registration, or it will balk at it.

The integration into the build, however, will be much simpler because there is no need for component registration. So I can simply have the Solver core library dynamically link to it and avoid the overhead of UNO. The downside of this is that I have to write additional code for it ;-), but I expect it to take only a minimal amount of effort.

Recent activities

So, I have several things going on at the moment:

  • I have just registered for my final exam for the class I’ve been taking since December. This class has certainly been an eye-opener, especially for someone like myself who’d been coding in high-level languages with only a vague understanding of low level architectural stuff.
  • I’ve started looking at lp_solve for possible integration into Calc Solver, and solicited for some interests. This Solver task, admittedly, has become much, much, more than what one person can handle. So, strategic change is necessary to keep things moving. I’ve also updated the wiki page to add more content.
  • Created a new wiki page for Statistical Data Analysis Tool project, to hopefully mobilize the near-death-experienced-yet-still-important project for Calc. There is no content on this page yet as it is still pretty much a skeleton. I wonder if this project will ever gain enough momentum to get it going…