Differences between revisions 49 and 50
Revision 49 as of 2010-04-01 00:50:26
Size: 16538
Editor: jason
Comment:
Revision 50 as of 2010-04-01 06:11:39
Size: 16878
Editor: jason
Comment:
Deletions are marked like this. Additions are marked like this.
Line 119: Line 119:
Line 120: Line 121:
   * Possibly the best way to do this is to make the code cells contenteditable divs (or just use an existing javascript editor)
     * http://blog.whatwg.org/the-road-to-html-5-contenteditable
     * http://www.cdolivet.com/index.php?page=editArea
     * http://en.wikipedia.org/wiki/Comparison_of_JavaScript-based_source_code_editors

Sage Projects

This is a general outline of targeted areas, including specific tasks, for improving the usability of Sage. The sources include the Sage Usability Improvements List, but the scope here is wider. Feel free to make changes. To keep items succinct, please make links to group discussions, etc.

1. General

  • Make a privacy policy for Sagenb.org.

  • Read and make suggestions based on Y. Aner's notebook threat model (PDF).

  • SageForge - establish a semi-automated repository for contributions to Sage. These contributions can include

    • Scripts, worksheets, databases, and packages of [nearly] all sizes.
    • Supplementary documentation, including multimedia.
    • Optional reviews and ratings.
    • Live, ulimited cellular paste-bin.
    • RSS feeds.

2. Build / Test

  • Make a system for analyzing the performance of doctests. Such a system could be used to do performance regression testing across releases, for example.
  • Make an automated system for building Sage on lots of different platforms.
  • Make progress on the windows port.
  • Enhance the Selenium test suite for the notebook, which tests the notebook code. Extend these tests to other browsers.
  • Make a system for building fat binaries (e.g., no SSE3, etc.)

3. Development

  • Auto-reload changed modules - paster serve --reload, CherryPy's AutoReload.

  • More convenient development workflow:

    • Make a code review tool for Sage. One possibility is Rietveld.

    • Make a system for automatically applying and doctesting every ticket marked "needs review", for example. The system can mark the ticket as "needs work" if the patches don't apply or pass doctests. It would be great if there was an easy way for people to donate computer time to this, say, by running a function that starts the process.
  • Run a static code checker on code (maybe even as part of the automated testing mentioned above). See Static Python code analysis or pep8.

4. Documentation

5. Notebook

5.1. Admin

  • Make an abstract interface to authentication modules. Several possibilities for new authentication modules include:
    • LDAP.
    • UNIX accounts.
  • Make it possible to accumulate and analyze statistics about notebook use. For example, analyze geographic traffic patterns (ClustrMaps)

  • Make an easy way for an administrator to backup a notebook or selected notebook accounts.
  • Make an option for an administrator to send an email to all registered users.
  • Make an easy way for an administrator to install new spkgs.
  • Allow email address as username.

5.2. Introspection

5.3. "Modes"

5.4. Under the hood

  • Make the notebook manage Jmol applet count / memory use to avoid java out-of-memory errors - sage-notebook.

  • Use Python's logging facility to log notebook errors.

  • Alternate worksheet process implementations: remote, fork, named pipes, memory-mapped files.

  • Make server-to-server sync or backup functionality
  • Load javascript or css components on demand - Ajile.

  • Remote access Python API - Google Documents List Data API

    • Manipulate, share, up/download, publish worksheets at a given Sage(Forge) server.
  • Storage:
    • Fix worksheet.autosave().

    • Always retrieve worksheet content from disk on open.
    • Use a revision control tool (e.g., Mercurial) for undo, history, snapshots, etc.
    • File size limit - auto-delete and warn above threshold.
    • Access a user's data directory securely via the new storage API.

    • Handle permissions better for directories, history, output, conf files, etc.
  • Migrate to server / framework: Django, Pylons, Pyjamas, Tornado, etc.:

5.5. User Interaction

  • Help:
    • Reorganize help page:
      • Search for commands.
      • Linking to similar and related commands.
    • Easy set up of shipped jsMath fonts - MathJax.

    • Automatic tips for keyboard shortcuts, editing features, etc. Opt out.
  • Customization:
    • Defaults: typeset, implicit multiplication, 3D viewer, rename "Untitled" worksheets.
    • Function to update worksheet titlebar.
    • Easy backups, selective or complete.
  • Keys
    • New shortcuts, e.g., for restart worksheet.
    • Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells - #7618.

  • Cells:
    • Right-click menu.
    • Auto-updating cells, e.g., interacts.
    • Unify server and client-side resize algorithms.
    • Always show links for long output cells, regardless of length or interruption.
    • Select, delete, (un)group, move multiple cells.

  • 2D / 3D plots:
  • Worksheets:
    • Export screen with checkboxes for images, data, etc.
    • Use notebook as IDE for running sage instance - #7501.

    • Drag-and-drop file upload.

    • Don't list "Sage Users" when sharing.
    • Page through worksheet list, not all at once - tablesorter.

    • Toolbar with buttons to interrupt running code, save, attach files, etc.
    • Real-time concurrent editing - #7362.

  • Published worksheets:
    • Delete them.
    • RSS feeds.
    • Live cells, e.g, interacts - #6855.

    • Only to selected users or groups.
  • Notebook:
    • Tags / labels.

    • Manage logins:
      • View recent account activity. Add last login to user.py.

      • Invalidate other sessions' cookies.
    • Full-text search: SQLalchemy, Whoosh (codenode-devel).

  • External:

6. Graphics

7. Numerical

  • Port some of the ExpoKit routines to Sage/Cython (or if the author agrees to the license, to scipy).

  • Examine the alglib numerical muliprecision linear algebra library and see if we can use it for RealField and ComplexField matrices.

  • See if we have a use for fastfunlib, which implements multiprecision evaluation of special functions in a much faster way than mpfr, at the possible cost of a very minor difference in accuracy.

  • Review http://trac.sagemath.org/sage_trac/ticket/4446 and get MPC into Sage

  • See if CRQ has interesting bits we could use in Sage to do numerical integration. See also http://www.lirmm.fr/arith18/slides/fousse-GLQuad.pdf

  • Investigate CRLib, which provides a correctly-rounded version of libm using MPFR.

  • Implement flexible printing for RR, including making ring-specific flags for defaults which truncate zeros, truncate "extra" digits, give a C printf string, print in scientific notation, etc. When teaching numerical analysis, for example, it's nice to be able to turn truncation off completely. (I'm doing this)
  • Make a class for calculating with minifloat numbers with user-specified precision //and// user-specified exponent size. Currently RealField lets us specify the precision, but it does not let us specify the exponent size. Being able to specify the exponent size would be very useful in teaching (i.e., we could exactly model single or double precision numbers), and would be a very good exercise in understanding in-depth how arithmetic of floating point numbers works.

  • Implement various types of cubic splines with various boundary conditions. See http://netlib.sandia.gov/pppack and maybe just wrap cubspl or translate it to cython?

8. Abbreviated items

These items were found on this page in the past. They weren't specific enough to understand, though. If someone knows what the item is talking about, please elaborate and put the item back up above.

  • Notebook
    • Don't list all users' worksheets.

    • Live introspection cells.
    • Introspection cross-links.
    • Auto updates for interacts.
    • Cythonize pexpect.
    • Load-balancing.
    • Offload more work to worksheet processes, e.g., docbrowser generation.
    • Decouple secure transport from sage. Use OpenSSL(?)
  • Parallel inter/intra-spkg builds.