Differences between revisions 17 and 51 (spanning 34 versions)
Revision 17 as of 2009-10-01 13:03:36
Size: 12257
Editor: qed777
Comment: Dev section mods.
Revision 51 as of 2010-04-01 12:00:58
Size: 17136
Editor: jason
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Sage Tasks Outline =

This is a general outline of targeted areas, including specific tasks, for improving Sage. The sources include [[SageUsability | Sage Usability Improvements List]] and [[http://sage.math.washington.edu:8100/file/tip/sagenb/todo.txt | sagenb/todo.txt]], but the scope here is wider. Feel free to make changes.


############################## GENERAL ##############################
#pragma section-numbers 2

<<TableOfContents(2)>>


= Sage Projects =

This is a general outline of targeted areas, including specific tasks, for improving the usability of [[http://www.sagemath.org/ | Sage]]. The sources include the [[devel/SageUsability | 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.

Line 9: Line 13:
 * Y. Aner's [[http://www.gingerlime.com/20090901_securing_sage_notebook.pdf | notebook threat model (PDF)]].

 * [[http://carsonified.com/blog/design/top-10-ux-myths/ | Keith Lang's Top 10 UI Myths]].

 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/258c07ae672a3617 | Sage Forge]].


############################## BUILD / TEST ##############################
 * Make a privacy policy for [[http://www.sagenb.org | Sagenb.org]].

 * Read and make suggestions based on Y. Aner's [[http://www.gingerlime.com/20090901_securing_sage_notebook.pdf | notebook threat model (PDF)]].

 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/258c07ae672a3617 | 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.

Line 19: Line 27:
 * Tests:
   * Increase coverage.
   * Meaningful statistics / benchmarks, e.g., %timeit for individual doctests.

 * Build logs:
   * Separate file for each spkg for parallel builds.
   * Group by install, upgrade, or spkg install event.
   * Remotely aggregate and display refreshed statistics.

 * Porting:
   * !VirtualBox Sage.
   * andLinux Sage.
   * Windows.
   * Windows build farm.
   * Sagelite for Windows.
   * Binary distributions that don't use SSE3, etc.

 * Automated notebook benchmarking and [stress] testing: [[http://wwwsearch.sourceforge.net/mechanize/ | mechanize]], [[http://seleniumhq.org/ | Selenium]], [[http://testled.com/ | Testled]], [[http://code.google.com/p/webdriver/ | Webdriver]], [[http://pylonshq.com/docs/en/0.9.7/testing/ | WebTest]], [[http://www.getwindmill.com/ | Windmill]].


############################## DEVELOPMENT ##############################
 * 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.)
Line 42: Line 40:
 * Auto-reload / auto-build changed files - [[http://www.sagemath.org/doc/reference/sage/misc/attach.html | attach]], [[http://pythonpaste.org/script/ | paster serve --reload]], !CherryPy's [[http://www.cherrypy.org/wiki/AutoReload | AutoReload]].  * Auto-reload changed modules - [[http://pythonpaste.org/script/ | paster serve --reload]], !CherryPy's [[http://www.cherrypy.org/wiki/AutoReload | AutoReload]].
Line 45: Line 43:
   * Code review tools - [[http://code.google.com/p/rietveld/ | Rietveld]].
   * Automated, continuous builds and testing for new patches.

 * [[http://www.doughellmann.com/articles/CompletelyDifferent-2008-03-linters/index.html | Static Python code analysis]].
   * Make a code review tool for Sage. One possibility is [[http://code.google.com/p/rietveld/ | 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 [[http://www.doughellmann.com/articles/CompletelyDifferent-2008-03-linters/index.html | Static Python code analysis]] or [[http://pypi.python.org/pypi/pep8/ | pep8]].
Line 54: Line 52:
 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/8fa0d854b6928f2b/dc4cfe0a941762aa#dc4cfe0a941762aa | Allow $ for reST math]] - [[http://trac.sagemath.org/sage_trac/ticket/6892 | #6892]].

 * Document:
   * [[http://groups.google.com/group/sage-devel/msg/35e97a1d1cedfdfd | pexpect interface for users]].
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/6d94c8655e41ba24# | notebook port forwarding]].
   * [[SageNotebook | notebook server]]
 * Add more modules to the reference manual. This involves converting the module to use ReST and adding it to the reference manual file.
 * Document and provide examples of the pexpect interface that users can use to interact with remote Sage servers. See [[http://groups.google.com/group/sage-devel/msg/35e97a1d1cedfdfd]].

 * Notebook
   * Document and provide examples of using ssh port forwarding to access a local Sage notebook server through an SSH tunnel. See [[http://groups.google.com/group/sage-devel/browse_thread/thread/6d94c8655e41ba24# | notebook port forwarding]].
   * Document how the notebook works. See [[devel/SageNotebook | Notebook server technical overview]].
   * Document how to best run the notebook server as a daemon. See [[http://groups.google.com/group/sage-support/browse_thread/thread/b0d15b82eea3d652 | Run notebook server as daemon]].
Line 63: Line 62:
== Notebook: Admin ==

 * Authentication - abstract interface:
== Notebook ==
=== Admin ===

 * Make an abstract interface to authentication modules. Several possibilities for new authentication modules include:
Line 69: Line 69:
 * Dashboard for server settings / status:
   * Statistics: all / logged-in users, load, processes, worksheets [per user], etc.
   * Backups: all critical data, selective.
   * Configure thresholds, alerts, snapshot behavior.
   * Manage user accounts, groups, privileges.
   * Restricted version for users.
   * Install new / updated modules and spkgs.

 * Registration:
   * [[http://recaptcha.net/ | reCAPTCHA]].
   * Challenge questions.
   * Admin approval.
   * Revokable custom tokens.

 * Users:
   * Groups.
   * Privileges.
   * Email address as username.
   * Use secure tokens to reset passwords.


######################### NOTEBOOK: INTROSPECTION #########################
== Notebook: Introspection ==

 * Use Sphinx for sagenb.org docstrings.

 * Matrix `B` mentioned twice in `B.solve_left?`: `B.solve_left(B, ...)`.
 * Make it possible to accumulate and analyze statistics about notebook use. For example, analyze geographic traffic patterns ([[http://www.clustrmaps.com/ | 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.

=== Introspection ===
Line 99: Line 79:
 * Completions link for mobiles.

 * Live introspection cells.

 * Introspection cross-links.

 * Improve introspection / completion interface: floating div, RHS div.

 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e9d0fc2c75ec6354/2634152df8f85f59?#2634152df8f85f59 | New documentation browser]]. Send worksheet docstrings to this browser.


############################## NOTEBOOK: "MODES" ##############################
== Notebook: "Modes" ==
 * Enhance Sage for use on a mobile phone, especially using a touch interface. For example, you can't insert a text cell since you can't shift-click. Also, you can't do tab-completion (the Touch has no Tab key). See [[http://groups.google.com/group/sage-devel/browse_thread/thread/e854336b08d436c6/fb8a62d01475e3eb?#fb8a62d01475e3eb]].

 * Make documentation have collapsible headings or other ways of browsing that aren't so overwhelming. See [[http://groups.google.com/group/sage-devel/browse_thread/thread/e9d0fc2c75ec6354/2634152df8f85f59?#2634152df8f85f59 | New documentation browser]].
 


=== "Modes" ===
Line 117: Line 91:
 * Slideshow mode.  * Fix the slideshow in the notebook. See [[http://trac.sagemath.org/sage_trac/ticket/6342 | #6342]].
Line 120: Line 94:
   * Auto updates.
   * Live published.
   * Control over widget layout.
   * Examples to include with Sage.
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/8aa6a3a84365f06d/42c7edf1c23ca169?#42c7edf1c23ca169 | Free-form workspace with pipelines]].
   * Display nicely formatted docstrings (or captions).
   * Simplify extension, via HTML templates or an API.
   * More widgets: vertical sliders, spreadsheets, interactive plots, etc.

 * Graph editor - [[http://trac.sagemath.org/sage_trac/ticket/1321 | #1321]].

 * [[http://groups.google.com/group/sage-devel/msg/e86932eeadd88c6a | LaTeX doc mode]].

 * reST:
   * [[http://tinymce.moxiecode.com/examples/example_09.php# | TinyMCE-style editor]].
   * `%rest` cells (auto-hide, double-click to show) converted to HTML by Sphinx.

 * Preparse in the browser: implicit multiplication, less work for server.

 * Chat - [[http://qwebirc.org/ | qwebirc]], [[http://webchat.freenode.net/ | Web IRC]].
   * Rich content, e.g., equations.
   * Sage compute bot.
   * Add to help page.
   * Live published or remote - [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
   * Make it possible to lay out widgets in a grid or other format - [[http://trac.sagemath.org/sage_trac/ticket/7379 | #7379]].
   * Make a library of good-quality interact examples in Sage. They'll see more use, and right now, the code in the examples on the wiki gets out of date pretty quickly.
   * Make a worksheet a free-form workspace, where you can just put computations anywhere and link them anyhow. See the discussion on [[http://groups.google.com/group/sage-devel/browse_thread/thread/8aa6a3a84365f06d/42c7edf1c23ca169?#42c7edf1c23ca169 | Free-form workspace with pipelines]].
   * Make more widgets for interacts. These include
      * [[http://trac.sagemath.org/sage_trac/ticket/7427 | circular slider ("angle" wheel)]]
      * [[http://trac.sagemath.org/sage_trac/ticket/5305 | date picker ]]
      * vertical sliders
      * spreadsheet-like tables (there is an input_grid control, but it is pretty primitive)
   * Look the interact architecture here: [[http://github.com/clemesha/jquery-interact | New architecture]]. Can we use any improvements from it?

 * Make a system for converting worksheets to latex documents. See [[http://groups.google.com/group/sage-devel/msg/e86932eeadd88c6a | LaTeX doc mode]].

 * Have a special text cell mode that understands ReST. The server formats it into html for display.

 * Include a chat in the notebook - [[http://qwebirc.org/ | qwebirc]], [[http://webchat.freenode.net/ | Web IRC]].
Line 145: Line 112:
   * Prettier tracebacks for %modes.
   * Python debugger a la [[https://developer.mozilla.org/En/Pylons | Pylons]].

 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/86429406fb3bba17/dd3163cb2a47fa38?#dd3163cb2a47fa38 | Vector graphics]] - [[http://trac.sagemath.org/sage_trac/ticket/6973 | #6973]].
   * Draw - [[http://code.google.com/p/svg-edit/ | SVG-edit]].
   * Annotate output from matplotlib's SVG backend.

 * Code editor a la [[https://bespin.mozilla.com/ | BeSpin]]
   * Command-line history.
   * Syntax highlighting.
   * Context-sensitive completion.

 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/da578e3918f08709/da54258f1783b874?#da54258f1783b874 | Math input GUI plug-ins]].


######################### NOTEBOOK: UNDER THE HOOD #########################
== Notebook: Under the hood ==

 * Implement `base_url`.

 * Move `is_valid_username`, etc., out of `twist.py`.

 * `notebook()`:
   * Allow `default_mode='python'`, i.e., not 'sage'.
   * Allow a different sage command on a remote machine.

 * Smartly manage Jmol applet count, or memory use.

 * Use Python's [[http://docs.python.org/library/logging.html | logging facility]].

 * [[http://bitbucket.org/brickenstein/rumcomponent/src/tip/rumcomponent/ | Component architecture]].

 * Cythonize pexpect.

 * Processes:
   * Balance server pool loads.
   * Run the worksheet process as another user.
   * Make ctrl-c quit the server's reference implementation.
   * Upload worksheets without blocking the server.
   * Remote worksheet processes.
   * Use fork, named pipes, and/or [[http://docs.python.org/library/mmap.html | memory-mapped]] files for worksheet processes.

 * Client-server and server-server interaction:
   * TinyMCE problem.
   * Load JS / CSS components on demand.
   * Load browser-specific code only in the specific browser.
   * Better handling of concurrent worksheet use.
   * Server-to-server for backups, possibly with authentication.

 * Decouple secure transport from sage/dsage. Use OpenSSL.
   * Make prettier tracebacks for %modes.
   * Include a python debugger a la [[https://developer.mozilla.org/En/Pylons | Pylons]] - [[http://trac.sagemath.org/sage_trac/ticket/7509 | #7509]].

 * Make a way to draw or annotate with [[http://groups.google.com/group/sage-devel/browse_thread/thread/86429406fb3bba17/dd3163cb2a47fa38?#dd3163cb2a47fa38 | vector graphics]] - [[http://trac.sagemath.org/sage_trac/ticket/6973 | #6973]].

 * Include a code editor - [[https://bespin.mozilla.com/ | BeSpin]], [[http://marijn.haverbeke.nl/codemirror/ | CodeMirror]] ([[http://trac.sagemath.org/sage_trac/ticket/7501 | #7501]]).

 * Make a way to input math in a GUI: [[http://groups.google.com/group/sage-devel/browse_thread/thread/da578e3918f08709/da54258f1783b874?#da54258f1783b874 | Math input GUI plug-ins]].
   * Possibly the best way to do this is to make the code cells contenteditable divs (or just use an existing javascript editor). This is related to the "include a code editor" item in that if we use a "code editor" for the code cells, we probably automatically have a contenteditable div.
     * 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
     * See the bottom of http://marijn.haverbeke.nl/codemirror/story.html for a few editors too.

=== Under the hood ===

 * Make the notebook manage Jmol applet count / memory use to avoid java out-of-memory errors - [[http://groups.google.com/group/sage-notebook/browse_thread/thread/0fd98c858e7d24c5/2ef2c296f1b13c3b?#2ef2c296f1b13c3b | sage-notebook]].

 * Use Python's [[http://docs.python.org/library/logging.html | logging facility]] to log notebook errors.

 * Alternate worksheet process implementations: remote, fork, named pipes, [[http://docs.python.org/library/mmap.html | memory-mapped files]].

 * Make server-to-server sync or backup functionality
 * Load javascript or css components on demand - [[http://ajile.net/ | Ajile]].

 * Remote access Python API - [[http://code.google.com/apis/documents/overview.html | Google Documents List Data API]]
   * Manipulate, share, up/download, publish worksheets at a given Sage(Forge) server.
Line 197: Line 141:
   * Implement infinite undo with revision logs, not snapshots.
   * Track user data / worksheets with Mercurial.
   * Deprecate the [unused] `objects` directory.
   * Access a user's data directory securely, e.g., via an API.
   * Use the filesystem or a database, '''not''' an sobj:
     * Worksheet list.
     * Notebook configuration.
   * 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.
Line 211: Line 154:
== Notebook: User Interaction == === User Interaction ===
Line 214: Line 157:
   * Reorganize help page.
    * Search for commands
    * linking to similar and related commands
   * Easy set up of shipped jsMath fonts.
   * Reorganize help page:
     * Search for commands.
     * Linking to similar and related commands.
   * Easy set up of shipped jsMath fonts - [[http://www.mathjax.org/ | MathJax]].
Line 219: Line 162:
   * Friendly bug buddy that emails reports, bundles session history, etc.
Line 222: Line 164:
   * Typeset output default setting.
   * Implicit multiplication default setting.
   * Custom window close callback.
   * Defaults: typeset, implicit multiplication, 3D viewer, rename "Untitled" worksheets.
Line 226: Line 166:
   * Easy backups of own work, with or w/o data, output, snapshots, etc.
   * Download zip files of multiple worksheets, even if `accounts=True`.
   * Easy backups, selective or complete.
Line 230: Line 169:
   * Restart worksheet shortcut.
   * Splash-screen with common keys.
   * Insert new cell after current cell shortcu
t.
   * Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells - [[http://code.google.com/p/js-hotkeys/ | js-hotkeys]].
   * New shortcuts, e.g., for restart worksheet.
   * Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells - [[http://trac.sagemath.org/sage_trac/ticket/7618 | #7618]].
Line 236: Line 173:
   * Right-click menu.
Line 237: Line 175:
   * Prevent text movement by a pixel on cell frame focus.    * Unify server and client-side resize algorithms.
Line 239: Line 177:
   * Easily identify idle, queued, and running cells.
Line 241: Line 178:
   * Leading space input bug - [[http://trac.sagemath.org/sage_trac/ticket/6729 | #6729]].
Line 245: Line 181:
   * [[http://deanm.github.com/pre3d/ | Pre3d]]-[[http://groups.google.com/group/sage-devel/browse_thread/thread/0315e138d5783377/742d9f9bb00b0cd7?#742d9f9bb00b0cd7 | enabled `canvas3d` viewer]].
Line 247: Line 184:
   * Render the 3d plots to WebGL. Maybe a library listed here will help: [[http://www.khronos.org/webgl/wiki/User_Contributions]]
Line 250: Line 188:
   * Use notebook as IDE for running sage instance.
   * Always visible menubar at top of worksheet.
   * Make "Browse your computer" upload fields editable.
   * Fix "undefined" bug on first save in Safari 4.0.3.
   * Use notebook as IDE for running sage instance - [[http://trac.sagemath.org/sage_trac/ticket/7501 | #7501]].
   * [[http://hacks.mozilla.org/2009/12/file-drag-and-drop-in-firefox-3-6/ | Drag-and-drop file upload]].
Line 255: Line 191:
   * "Save as" option, e.g., for downloading, that prompts for a name.    * Page through worksheet list, not all at once - [[http://tablesorter.com/ | tablesorter]].
Line 257: Line 193:
   * Parens matching - [[http://trac.sagemath.org/sage_trac/ticket/3646 | #3646]].
   * TinyMCE [[http://groups.google.com/group/sage-devel/msg/e2eb3f848a21faa3 | synchronization]] [[http://groups.google.com/group/sage-devel/browse_frm/thread/4cd1cc188470c723/c2477e1bdba68028?q=tinymce+bug+group:sage-devel#c2477e1bdba68028 | problem]].
   * Real-time concurrent editing - [[http://trac.sagemath.org/sage_trac/ticket/7362 | #7362]].
Line 263: Line 198:
   * Live cells, e.g, interacts.    * Live cells, e.g, interacts - [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
Line 267: Line 202:
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags]].
   * Suppress browser warning for Konquereor.
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags / labels]].
Line 270: Line 204:
     * View recent account activity.      * View recent account activity.  Add last login to `user.py`.
Line 272: Line 206:
     * Unique cookies for logins from different browsers / computers.
Line 275: Line 208:
 * Fix !MoinMoin.

 * Externally embed live cells / worksheets. Live published workseets. [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
 * External:
   * Embed live cells / worksheets - [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
   * [[http://wave.google.com/ | Wave]] [[http://code.google.com/apis/wave/guide.html | gadgets and robots]].
   * Live published worksheets.

== Graphics ==

  * Streamlines/Line Integral Convolutions to visualize vector fields.
    * NCAR graphics libraries are GPL? They contain well-tested Fortran streamline libraries
    * http://www.cc.gatech.edu/~turk/streamlines/streamlines.html for a very nice 1996 algorithm for doing aesthetic streamlines. The code on that page says it is public domain, but it isn't (the license says the code can't be sold).
    * [[http://www.zhanpingliu.org/Research/FlowVis/FlowVis.htm]] - Survey page on vector field visualization. See his "An Advanced Evenly-Spaced Streamline Placement Algorithm" for the [[http://www.zhanpingliu.org/Research/FlowVis/ADVESS/index.htm|ADVESS]] algorithm which is quite a bit faster than the current standard(?) of Merbarki's algorithm.
    * [[http://www.cs.swan.ac.uk/~cstony/research/star/]] - Survey paper
    * [[http://www.sagenb.org/home/pub/106/]] Some basic integration illustrating calculating a streamline
    * There is a [[http://www.scipy.org/scipy/scikits/#vectorplot|scikit]] for doing line integral convolutions


== Numerical ==

  * Port some of the [[http://www.maths.uq.edu.au/expokit/|ExpoKit]] routines to Sage/Cython (or if the author agrees to the license, to scipy).
  * Examine the [[http://www.alglib.net/integration/|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 [[http://code.google.com/p/fastfunlib/|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 [[http://www.multiprecision.org/index.php?prog=mpc|MPC]] into Sage
  * See if [[http://komite.net/laurent/soft/crq/|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 [[http://lipforge.ens-lyon.fr/www/crlibm/index.html|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 [[http://en.wikipedia.org/wiki/Minifloat|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?

== 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.

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.