Sunday, October 11, 2009

The Sage Notebook

The Sage Notebook is the graphical user interface to the math software Sage. The notebook is perhaps somewhat unusual in that it is a web application that people also use locally. It's a large program that has been written and rewritten a few times since 2006 by myself, Tom Boothby, Alex Clemesha, and many, many other people.

Supported by an internal grant from University of Washington, I've been working on separating the notebook off from Sage and rewriting many parts of it to improve the robustness and fix subtle issues. My goal is that the notebook be robust, fast, scalable, and work well outside Sage. Also, it would be very nice to port it to run natively on Microsoft Windows.

Nearly two weeks ago I had the Sage notebook stabilized and all known new bugs fixed (after separating it off from sage as a separate program and rewriting the interface stuff). But I realized that it would be a total nightmare to introduce yet another ("Sage object") storage format, which would make refactoring code extremely painful. So, I created an "abstract storage layer" and implemented a storage system for everything in the Sage notebook which doesn't use any special Sage-related pickles. Some data is stored as pickled basic Python objects that can be read from any version of Python with or without Sage installed, but that is it. Rewriting the notebook to use an abstract storage layer is the sort of thing that at first seems like it will take a day, but then takes more than a week. Anyway, I did it (with help from Tim Dumol and Mitesh Patel).

I hope people will test! Please try it.