Saturday, November 19, 2005

Server side scientific software as a way to try out an algorithm's popularity ?

I was recently asked about how one could try to test the attractiveness of an algorithm one had devised and see how it was used by users. Generally, people want to be free to toy with an algorithm, so giving them an implementation of an algorithm is fine but how do you do feedback ?

Some of the models I have seen over time include examples such:

* Wavelab where the toolbox allows examples and implementation to be totally readable to your audience
* Beamlab where the toolbox allows examples to be run but hide the content of the algorithm to the user
* The MadMax Optics Matlab toolbox (Multipole method) that can be used for free for a 2-D problem but requires a commercial licence for more complex cases (3D).

All the previous examples use Matlab as a way to remove the complexity of having to deal with different customer's platforms. It certainly does not work well when Matlab versions change. For instance, Carrie Grimes shows us that Matlab Revision 12 and Revision 13 do not handle eigenvectors (eigs.m) the same way. These methods are fine in order to enhance people's understanding of the capabilities of your algorithm, but there are other issues to consider. If you want to improve that same algorithm in order to fit into a specialized area of expertise or several areas of expertises, then the complexities of the previous solution carry a tremendous implementation and platform knowledge burden. In particular, what do you do when you have improved the algorithm ? In most cases, you have to publish a new version of software and hope that your users are tracking your web page or that you were wise enough to have set up a mailing lists and thenhope that all your users still have the same e-mail addresses. Mailing lists handling, in my experience, is a pain and takes away time you should be focusing on the algorithm. Last but not least, you also need to make sure your new algorithm works perfectly on different platforms.

Another way to go about this and avoid the upgrade nightmare is to evaluate the possibility of having a server side software like the Argonne optimization server and provide a GUI that anybody can use. There, computations are performed on somebody else's computer provided that you send the right batch job. An example would be the interactive demo on the simplex method.

Another example with a GUI is Spenvis (a software that provides a way of quantifying radiation doses to spacecrafts while in orbit.) To see how it works, you might need to take a look at it by creating an account. There, you are never running the models on your machine and therefore do not have access to the models except through their reference number. You can run different models and play with many different parameters. If this is an important application, customers may want to pay a licence to use and keep the data on their accounts. They may even ask for a freezed version of the current server side computation. It is also very likely that if a new use of your algorithm arises, an account holder/client might provide a useful input as to what needs to be added to the application to make it appealing to a larger audience. This is not a new idea, Paul Graham lists the reasons why this server-side business is promising in his now famous essay "Beating the averages"

I was initially thinking about implementing something like this server side algorithm for a multilayer algorithm but let's take an example in the space business. If one were to design orbits for spacecrafts performing remote sensing imagery, one could use the different tools offered in the Google Maps API to project these orbits on earth using examples such as these:

* a simple Spacecraft tracking,
* or the shadow of eclipses on the ground,
* or the map of Robotic car race which uses polylines,
* or finally a map of Nuclear detonation which uses an image superimposed on maps.

But why stop at 2-d imagery, when Google Earth provides a 3-d view.

Just generate a klm file and you are done. A way to do your server side algorithm would be to just generate a klm files to be used in Google Earth!

The example of Google Maps or Google Earth serves two purposes:

* With very little capability you can produce output similar to commercial products such as STK thanks to a third party product like Google Maps.
* If you have a good algorithm, it would be of tremendous help to designing a good API.

And don't forget, your initial crowd of users might be students at colleges and universities. You might use the WOW factor to initiate a good following. Wowing examples can be found in the following references ([1], [2],[3], [4])

Other relevant references of interest:
* LAMP: 5
* Ajax: drag and drop site creator, Tutorial on Ajax, here,
and here as well.

No comments: