This has taken a bit longer than I had hoped! Welcome to the Shapesmith blog and my first post about shapesmith.net. This is a quick update on the project and the plans for the near future.

Since posting on my blog about working on this project, progress has been steady but slow. I have made some progress in terms of user features (such as undo/redo, saving of models and validation), but the majority of work has gone into making the backend lean and mean. Most noteworthy is the separation of api, database and worker components.

The success of a cloud-based Shapesmith depends very much on addressing the scalability of BRep operations, or, effectively using processing power for multiple users. For deploying a local solution (for example on a school network), this is not as important a consideration, but a hosted Shapesmith needs to be very effective with processor utilisation in order to contain the hosting cost. "Traditional" LAMP web applications don't use a lot of processing power per user action, whereas BRep operations are by nature N cubed and require an architecture that is sentisive to this fact. The good news is that it makes the optimisation path clear - BRep operations take much longer than database operations, serializing and deserializing data, validation, etc, and I can optmize taking this into account.

Is it worth mentioning that I have now transitioned to using an actual database, Riak, and have switched to the community version of OpenCASCADE, OCE. This is an important step for users to be able to install their own local version of Shapesmith with a stable data store and BRep library. OCE is a new community effort to improve on some of the shortcomings of OpenCASCADE, and I am pleased with the results so far (especially the cross -platform build support). I will not go into the architecture in detail in this post, but the design can accomodate scaling the application in 3 dimensions, the API nodes which handle the ReSTful calls, the DB nodes, and the worker nodes which perform the BRep operations:

continue reading →