Differences between revisions 10 and 44 (spanning 34 versions)
Revision 10 as of 2009-09-30 16:53:48
Size: 11251
Editor: TimDumol
Comment:
Revision 44 as of 2010-02-25 15:07:36
Size: 13572
Editor: jason
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Sage Usability Tasks =

Source: [[SageUsability | Sage Usability Improvements List]]. TODO: Assign difficulties to individual tasks, if it's appropriate, or just order or group by difficulty.
#pragma section-numbers 2

<<TableOfContents(2)>>


= Sage Tasks Outline =

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]] 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. To keep items succinct, please make links to group discussions, etc.
Line 9: Line 14:
 * [[http://www.sagenb.org | Sagenb.org]] privacy policy.
Line 11: Line 18:
 * [[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]].
 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/258c07ae672a3617 | SageForge]] - semi-automated repository for contributions to Sage:
   * Scripts, worksheets, databases, and packages of [nearly] all sizes.
   * Supplementary documentation, including multimedia.
   * Optional reviews and ratings.
   * Live, ulimited cellular paste-bin.
   * RSS feeds.


############################## BUILD / TEST ##############################
== Build / Test ==

 * Tests:
   * Meaningful statistics / benchmarks, e.g., %timeit for individual doctests.

 * [[http://buildbot.net/ | Buildbot]].

 * Parallel inter/intra-spkg builds.

 * Windows port.

 * Fat binaries (no SSE3, etc.).

 * Notebook functional tests - Extend Selenium tests to other browsers.

 * Notebook load tests - [[http://grinder.sourceforge.net/ | The Grinder]], [[http://funkload.nuxeo.org/ | FunkLoad]], [[http://www.pylot.org/ | Pylot]], [[http://watir.com/ | Watir]], [[http://pypi.python.org/pypi/zope.testbrowser | Zope.testbrowser]] ([[http://trac.sagemath.org/sage_trac/ticket/7468 | now in SageNB]]).


############################## DEVELOPMENT ##############################
== Development ==

 * Auto-reload changed modules - [[http://pythonpaste.org/script/ | paster serve --reload]], !CherryPy's [[http://www.cherrypy.org/wiki/AutoReload | AutoReload]].

 * [[http://groups.google.com/group/sage-devel/msg/fb95603488afd9de | More convenient development workflow]]:
   * 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]], [[http://pypi.python.org/pypi/pep8/ | pep8]].


############################## DOCUMENTATION ##############################
Line 17: Line 60:
 * [[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]].
Line 20: Line 61:

   * Add many more modules to the reference manual.
Line 22: Line 65:

== Development ==

 * More convenient development workflow
   * Current workflow is:
     1. Change file
     2. Restart Sage Notebook
     3. Wash, rinse, repeat
   * Possible improvements:
     * Autoreload and autobuild mechanism (dev mode)

{{{
On Thu, Sep 24, 2009 at 11:07 AM, Robert Bradshaw wrote:

Here's my ideal system (which rietveld may or may not be a part of,
but certainly it'd be better to not start something from scratch).

0) I hack on my own code, committing as I want, the normal mercurial
way.
(1) I run a sage command that takes all my changes and uploads them
to trac (or rietveld, or Review Board, or ...). It may or may not
flatten them. The ticket description should be no more than the
commit description (i.e. our commit descriptions should be a lot more
verbose.)
(2) This patch automatically gets applied to the current alpha, any
merge problems, build problems (including documentation), or test
failures get reported and bounced back. Linting could happen at this
point too (everything from no tabs to coverage to "Sage:" in docstrings)
(3) Upon a successful build (or even not) this build gets saved and
can be accessed and played with (via the notebook or by ssh-ing into
a virtual machine). The code can be browsed and commented on.
(4) Reviewer makes comments, as a whole or line-by-line. They can use
(3), browse the code, and have a sage command like sage -merge that
will quickly update their local copy to the state of the ticket, and
allow them to push as well.
(5) I can quickly address those comments via a sage -b into that
branch (or otherwise using queues/etc. to get back to my ticket
state), make my changes, and re-push to trac. Building and tests
happen after every push. This point here is not to be underestimated--
I think it will greatly improve the quality of the code to lower the
overhead of the feedback loop.
(6) When the reviewer is happy, he marks it as positive review.
(7) The release manager(s) approve the patch. At this point they know
it builds, passes tests, and has at least one positive review. It
goes into a queue.
(8) Patches in the queue get applied to the current alpha. This
implies a moving alpha, which one knows builds and passes all tests
on at least one system. It should be easy to upgrade to that alpha.
(9) People can (easily) donate computer time to build and test
alphas, which will greatly increase hardware coverage. Bisection can
be used to locate the offending ticket in case of failure.
}}}
   * [[devel/SageNotebook | Notebook server technical overview]].
   * [[http://groups.google.com/group/sage-support/browse_thread/thread/b0d15b82eea3d652 | Run notebook server as daemon]].
Line 76: Line 70:
== Notebook: Admin ==

 * Authentication:
== Notebook ==
===
Admin ===

 * Don't list '''all''' users' worksheets.


 * Authentication - abstract interface:
Line 82: Line 79:
 * Dashboard for server settings / status:
   * View logged-in users, load, processes, etc.
   * Backups: all critical data, selective.
   * Configure thresholds, alerts, snapshot behavior.
   * Manage user accounts, groups, privileges.
   * Restricted version for users.

 * 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.
 * Dashboard:
   * Real-time and cumulative statistics, aggregate and per user.
   * Backups: complete or selective.
   * Manage user accounts, passwords, groups, privileges.
   * Send email to all registered users.
   * Install new / updated modules and spkgs.

 * More powerful account management tools.

 * Allow email address as username.

 * Custom analytics tags, geolocation ([[http://www.clustrmaps.com/ | ClustrMaps]]).
Line 103: Line 94:
== Notebook: Introspection ==

 * Use Sphinx for sagenb.org docstrings.

 * Matrix `B` mentioned twice in `B.solve_left?`: `B.solve_left(B, ...)`.
=== Introspection ===
Line 111: Line 98:
 * Completions link for mobiles.  * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e854336b08d436c6/fb8a62d01475e3eb?#fb8a62d01475e3eb | Completions link for mobiles]].
Line 117: Line 104:
 * 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.
 * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e9d0fc2c75ec6354/2634152df8f85f59?#2634152df8f85f59 | New documentation browser]]. Open worksheet docstrings in this browser.
Line 123: Line 108:
== Notebook: "Modes" == === "Modes" ===
Line 127: Line 112:
 * Graph editor - [[http://trac.sagemath.org/sage_trac/ticket/1321 | #1321]].  * %cython mode, full and outside `sage`.

 * Slideshow mode - [[http://trac.sagemath.org/sage_trac/ticket/6342 | #6342]].

 * interacts:
   * Auto updates.
   * Live published or remote - [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
   * Widget layout - [[http://trac.sagemath.org/sage_trac/ticket/7379 | #7379]].
   * Examples to include with Sage.
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/8aa6a3a84365f06d/42c7edf1c23ca169?#42c7edf1c23ca169 | Free-form workspace with pipelines]].
   * More widgets: [[http://trac.sagemath.org/sage_trac/ticket/7427 | circular slider ("angle" wheel)]], [[http://trac.sagemath.org/sage_trac/ticket/5305 | date picker ]], vertical sliders, spreadsheets, interactive plots, etc.
   * [[http://github.com/clemesha/jquery-interact | New architecture]].
Line 131: Line 127:
 * 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, plus math. [[http://qwebirc.org/ | qwebirc]] / [[http://webchat.freenode.net/ | Web IRC]].

 * 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.
 * reST mode, with server-side Sphinxify.

 * Chat - [[http://qwebirc.org/ | qwebirc]], [[http://webchat.freenode.net/ | Web IRC]].

 * Debugging:
   * Prettier tracebacks for %modes.
   * Python debugger a la [[https://developer.mozilla.org/En/Pylons | Pylons]] - [[http://trac.sagemath.org/sage_trac/ticket/7509 | #7509]].

 * 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]].

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

 * Browse worksheet directories like a file system.
Line 153: Line 144:
######################### NOTEBOOK: UNDER THE HOOD #########################
=== Under the hood ===

 * Manage Jmol applet count / memory use - [[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]].

 * Cythonize pexpect.

 * Load-balancing.

 * Offload more work to worksheet processes, e.g., docbrowser generation.

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

 * Client-server and server-server interaction:
   * Load JS / CSS components on demand - [[http://ajile.net/ | Ajile]].
   * Server-to-server backups, possibly with authentication.

 * Decouple secure transport from sage. Use OpenSSL(?)

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

 * 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: [[http://docs.djangoproject.com/en/dev/ | Django]], [[http://pylonshq.com/ | Pylons]], [[http://pyjs.org/ | Pyjamas]], [[http://www.tornadoweb.org/ | Tornado]], etc.:
   * Switch from twisted.web2 to [[http://jcalderone.livejournal.com/tag/sixty+seconds | twisted.web]].
   * [[http://routes.groovie.org/ | URL routes]].

Line 154: Line 182:
== Notebook: User Interaction == === User Interaction ===
Line 157: Line 185:
   * 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 162: Line 190:
   * Friendly bug buddy that emails reports, bundles session history, etc.
Line 165: Line 192:
   * Typeset output default setting.
   * Implicit multiplication default setting.
   * Custom window close callback.
   * Defaults: typeset, implicit multiplication, 3D viewer, rename "Untitled" worksheets.
Line 169: Line 194:
   * 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 173: Line 197:
   * 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 179: Line 201:
   * Right-click menu.
Line 180: Line 203:
   * Prevent text movement by a pixel on cell frame focus.    * Unify server and client-side resize algorithms.
Line 182: Line 205:
   * Easily identify idle, queued, and running cells.
Line 184: Line 206:
   * Leading space input bug - [[http://trac.sagemath.org/sage_trac/ticket/6729 | #6729]].
Line 188: Line 209:
   * [[http://deanm.github.com/pre3d/ | Pre3d]]-[[http://groups.google.com/group/sage-devel/browse_thread/thread/0315e138d5783377/742d9f9bb00b0cd7?#742d9f9bb00b0cd7 | enabled `canvas3d` viewer]].
Line 192: Line 214:
   * Slideshow mode.
   * Use notebook as IDE for running sage instance.
   * Always visible menubar at top of worksheet.
   * Export screen with checkboxes for images, data, etc.
   * 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]].
   * Don't list "Sage Users" when sharing.
   * Page through worksheet list, not all at once - [[http://tablesorter.com/ | tablesorter]].
Line 196: Line 220:
   * 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 202: Line 225:
   * Live cells, e.g, interacts.    * Live cells, e.g, interacts - [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].
Line 206: Line 229:
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags]].
   * Suppress browser warning for Konquereor.
   * Unique cookies for logins from different browsers / computers.
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags / labels]].
   * Manage logins:
     * Vie
w recent account activity. Add last login to `user.py`.
     * Invalidate other sessions' cookies.
Line 211: Line 235:
 * Fix !MoinMoin.

 * Externally embed live cells / worksheets. Live published workseets. [[http://trac.sagemath.org/sage_trac/ticket/6855 | #6855]].


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

 * Better handling of concurrent worksheet use.

 * Smartly manage Jmol applet count, or memory use.

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

 * Cythonize pexpect.

 * Client-server synchronization:
   * TinyMCE problem.
   * Server-to-server for backups, possibly with authentication.

 * Track worksheets and user data with Mercurial.

 * Balance server pool loads.

 * Load JS / CSS components on demand.

 * Migrate to server / framework: [[http://docs.djangoproject.com/en/dev/ | Django]], [[http://pylonshq.com/ | Pylons]], [[http://pyjs.org/ | Pyjamas]], [[http://www.tornadoweb.org/ | Tornado]], etc.:
  * [[http://routes.groovie.org/ | URL routes]].

######################## NOTEBOOK: DEVELOPMENT ###########################

== Notebook: Development ==

 * Auto-reloading (similar to `paster serve --reload` or CherryPy's AutoReload mechanism)


############################## BUILD / TEST ##############################
== Build / Test ==

 * !VirtualBox Sage.

 * andLinux Sage.

 * Binary distibutions that don't use SSE3, etc.

 * Sagelite for Windows.

 * Windows build farm.

 * Windows port.

 * Notebook testing infrastructure: [[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]].
 * 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.


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

Sage Tasks Outline

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 and sagenb/todo.txt, but the scope here is wider. Feel free to make changes. To keep items succinct, please make links to group discussions, etc.

1. General

  • Sagenb.org privacy policy.

  • Y. Aner's notebook threat model (PDF).

  • SageForge - semi-automated repository for contributions to Sage:

    • 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

  • Tests:
    • Meaningful statistics / benchmarks, e.g., %timeit for individual doctests.
  • Buildbot.

  • Parallel inter/intra-spkg builds.
  • Windows port.
  • Fat binaries (no SSE3, etc.).
  • Notebook functional tests - Extend Selenium tests to other browsers.
  • Notebook load tests - The Grinder, FunkLoad, Pylot, Watir, Zope.testbrowser (now in SageNB).

3. Development

4. Documentation

5. Notebook

5.1. Admin

  • Don't list all users' worksheets.

  • Authentication - abstract interface:
    • LDAP.
    • UNIX accounts.
  • Dashboard:
    • Real-time and cumulative statistics, aggregate and per user.
    • Backups: complete or selective.
    • Manage user accounts, passwords, groups, privileges.
    • Send email to all registered users.
    • Install new / updated modules and spkgs.
  • More powerful account management tools.
  • Allow email address as username.
  • Custom analytics tags, geolocation (ClustrMaps).

5.2. Introspection

5.3. "Modes"

5.4. Under the hood

  • Manage Jmol applet count / memory use - sage-notebook.

  • Use Python's logging facility.

  • Cythonize pexpect.
  • Load-balancing.
  • Offload more work to worksheet processes, e.g., docbrowser generation.
  • Alternate worksheet process implementations: remote, fork, named pipes, memory-mapped files.

  • Client-server and server-server interaction:
    • Load JS / CSS components on demand - Ajile.

    • Server-to-server backups, possibly with authentication.
  • Decouple secure transport from sage. Use OpenSSL(?)
  • 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. 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.