I'm happy to announce some great new additions and changes to Shapesmith that I've been working on for the last 6 weeks. These have been deployed online and version 0.3 on github. These are:
- User management (signin/sigup)
- Model management (the ability to create, delete and see you models)
- A new persistence architecture (including new undo/redo)
- Various smaller changes like easier local install, and better preview behaviour.
Thingiverse export(almost there)
For a while now, users have been able to play with Shapesmith online, but models and users have been anonymous. Anyone could access and edit a model is they knew the url. This is obviously not a feasible strategy going forward, so online users can now create their Shapesmith account and their models will be accessible only to them.
Note that if you download Shapesmith and run it locally, your username will be “local”, and you will not need to sign up or sign in when using the application.
The next fairly obvious addition to Shapesmith is model management. This allows a user to see a list of their models, create new ones, and delete them:
In future, this would also be the place where other users can derive or copy the public models of other users.
Renaming has not been implemented yet, but there is a feature issue for it.
A new persistence architecture (with new undo/redo)
This is the real technical meat of the last 2 months, without which user and design managent would not have been possible. I won't elaborate too much on this at this point, a blog post will describe the design soon.
The new persistence architecture is immutable. What this means is that at all times, the full history of your design is available. This does not mean that the full history is exposed through the interface, but it does create the ability to do so in future.
The design is based on git. This has made things more complex, but I believe the benefit of the additional capabilities outweigh that cost. This has also solved a problem with undo/redo that existed before (which is why saving was not available).
Now, each change to the design is uniquely referenced by a “commit” value (like git). This commit is unique to the entire state of the model. Notice the commit value in the url:
Because the state of each design is uniquely specified by the url, we can now make use of the HTML5 History API to do undo and redo. So you can undo and redo using the browser's back and forward buttons! Awesome. This also implies that as long as you're signed in, you can load the URL of any model at any point in the designs process (i.e. bookmarks will functional properly).
And various smaller changes...
- Riak is not longer required for local installs. Local installs will just write to disk.
- When creating models, use the “shift” key in conjunction with the mouse to use the current workplane values (doing this automatically caused some frustration - values would change unexpectedly)
- Better display of errors.
- STL Export of the whole model (instead of one component).
- Better support for Firefox
- Various bugfixes, minor improvements etc.
Thingiverse export (almost there)
I tried to finish export to Thingiverse for this release, but I was not able to get the upload API to work properly. The Thingiverse export from 3D Tin is also not working, so I'm not sure if the problem is on my side or theirs. Coming soon.
I'm proud of what has been achieved in the last few week, and I think with this solid persistence foundation I will be able to move towards adding more modelling functionality. I'm looking forward to implementing even better geometry creation, addressing problems with the tree view, and implementing new design features like bezier curves, extrusions etc.