Archive for August, 2010
MindTouch 10.0.2 Pre-Release Update
PeteE just updated the MindTouch Community Portal with the pre-release bits of MindTouch v10.0.2. This update includes fixes for 36 issues.
This is an incremental stabilization release for the Olympic family of products (MindTouch 2010, MindTouch Platform v10, MindTouch Core v10). Please be particularly alert to any changes in behavior and if you see something that not right, please take the time to file a bug. Assuming no surprises, we’re aiming to release this update by Friday.
2010 Requirement: Updating Debian from Etch to Lenny
Are you running a pre-packaged MindTouch VM? If you are, you are running MindTouch on a Debian environment. Have you checked lately to see if your version of Debian is up-to-date? The latest version of Debian is known as “Lenny”, while the previous version was “Etch”. Ensuring you are upgraded to Lenny is a highly important requisite prior to upgrading to MindTouch 10. Please take a look at our documentation here for instructions on how to successfully upgrade from Etch to Lenny.
MindTouch 10.0.1 Released
MindTouch version 10.0.1, an incremental stabilization release for the Olympic family of products (MindTouch 2010, MindTouch Platform v10, MindTouch Core v10) is now available for download.
This release consists of fixes for 61 issues which are covered in the changelog – anybody running on an Olympic release should upgrade to 10.0.1.
Special thanks go out to community members for their contributions in this incremental release: neilw, tobru, openseo, carles.coll, tungsten_22, varosi, crb, and bizzz.
Mount Olympus in the Olympic National Park
Wait a spec! Where did the specs go?
In order to reduce search confusion, the MindTouch Specs have been moved to a new home:
http://developer.mindtouch.com/User:dev/Specs
By moving the specs into the User Namespace, we have avoided polluting the search results with engineering specs when users are trying to find implemented solutions. Sure the specs are a great source of information, but they are not for everyone.
We still want your feedback on upcoming features so don’t be afraid to contribute your own specs! We’ve only made this move to reduce some headaches for casual users hitting the Community site; it wasn’t to hide our very open development processes.
Be sure to stop by the new specs & engineering section to let us know what features are important to you!
Serialization, Cloning and Immutability
Sparked by a discussion I had with Steve, I started looking at mechanisms for safely passing data between tasks with the emphasis on neither side ever seeing changes made to the data. This led to (currently) three blog posts on my personal blog, this being work that is more of an exploration and not yet something planned for inclusion in Dream.
The first post “Sharing data without sharing data state” reviewed patterns for sharing, from cloning to immutability to serialization and finally introduced a pattern for freezing objects in .NET. I followed this up with an implementation of a “Freezer” to automatically attach IFreezable behavior to Data Transfer Objects (DTOs), AOP style. This work was described in “Freezing DTOs by proxy” and the project, Subzero, can be found at github. The initial implementation used serialization for cloning objects as required when no Clone() method could be found on the DTO.
Next I decided to write a generic cloner for Subzero, based on my premise that serialization is expensive. This turned out to be a lesson in measuring and optimizing. My first pass was only faster than .NET’s built in serializer, BinaryFormatter, and being slower than BinaryFormatter can only be achieved by copying things to pager and typing it back in by hand. Other serializers blew my cloning out of the water. “When cloning isn’t faster than copy via serializer” describes the work of optimizing the cloner and comparisons to various serializers.
Dream 2.0 introduced the IKeyValueCache with an in-memory implementation and a plan for a Memcache wrapper. This cache uses serialization by default and let’s you easily register your favorite serializer. We’re using this cache in MindTouch Core for optimizing search performance and may use it for the MindTouch Platform data caching layer, which currently does explicit copying of entities in and out of the cache. So it would make sense to revisit IKeyValueCache and have it take advantage of IFreezable to avoid copying when possible and use Incubator.Clone when unavoidable to reduce all the manually maintained copy code.
Subzero may eventually make it into Dream, both for caching and potentially for Dream in-process REST calls, but we’ll have to see what makes sense. For right now Subzero is more an infrastructure experiment we’re evaluating for use.


