Differences between revisions 36 and 44 (spanning 8 versions)
Revision 36 as of 2009-11-27 14:52:02
Size: 14142
Editor: qed777
Comment: Succinctness plea.
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:
#pragma section-numbers 2

<<TableOfContents(2)>>

Line 3: Line 8:
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 [[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. 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 12: Line 17:

 * [[http://carsonified.com/blog/design/top-10-ux-myths/ | Keith Lang's Top 10 UI Myths]].
Line 27: Line 30:
   * Increase coverage to 100%.
   * Fix all sagenb doctests and run them from Sage library.
Line 31: Line 32:
 * 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:
   * andLinux Sage.
   * Windows.
   * Windows build farm.
   * Sagelite for Windows.
   * Binary distributions that don't use
SSE3, etc.

 * 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://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]]).
Line 49: Line 48:
 * 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 55: Line 54:
 * [[http://www.doughellmann.com/articles/CompletelyDifferent-2008-03-linters/index.html | Static Python code analysis]].  * [[http://www.doughellmann.com/articles/CompletelyDifferent-2008-03-linters/index.html | Static Python code analysis]], [[http://pypi.python.org/pypi/pep8/ | pep8]].
Line 66: Line 65:
   * [[SageNotebook | Notebook server technical overview]].    * [[devel/SageNotebook | Notebook server technical overview]].
Line 69: Line 68:
Line 70: Line 70:
== Notebook: Admin == == Notebook ==
===
Admin ===
Line 85: Line 86:
 * '''Lots''' of options with sensible defaults:
   * Email address as username.
   * Secure tokens to reset passwords.
   * Moderated new account registration.
  
* Custom analytics tags, geolocation ([[http://www.clustrmaps.com/ | ClustrMaps]]).
 * More powerful account management tools.

* Allow email address as username.

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

 * Matrix `B` mentioned twice in `B.solve_left?`: `B.solve_left(B, ...)`.
=== Introspection ===
Line 105: 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]]. Open 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 111: Line 108:
== Notebook: "Modes" == === "Modes" ===
Line 122: Line 119:
   * Control over widget layout - [[http://trac.sagemath.org/sage_trac/ticket/7379 | #7379]].    * Widget layout - [[http://trac.sagemath.org/sage_trac/ticket/7379 | #7379]].
Line 125: Line 122:
   * Display nicely formatted docstrings (or captions).
   * [[http://groups.google.com/group/sage-devel/msg/d32ad8e2663bd7d1 | Simplify extension]], via HTML templates or an API.
* More widgets: [[http://trac.sagemath.org/sage_trac/ticket/7427 | circular slider ("angle" wheel)]], [[http://trac.sagemath.org/sage_trac/ticket/5305 | date picker ]], [[http://trac.sagemath.org/sage_trac/ticket/7267 | compact color picker]], vertical sliders, spreadsheets, interactive plots, etc.
   * 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.
Line 132: Line 127:
 * reST - [[http://markitup.jaysalvat.com/home/ | markItUp]] with server-side Sphinx.  * reST mode, with server-side Sphinxify.
Line 140: Line 135:
 * [[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.
 * 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]].
Line 152: Line 145:
== Notebook: Under the hood ==

 * Implement `base_url`.

 * Deprecation message at top of '''old''' notebook `.py` files.

 * Move `is_valid_username`, etc., out of `twist.py`. A validation module for all types of notebook form fields.

 * `notebook()`:
   * Allow default systems besides 'sage'.
   * Allow a different sage command on a remote machine.
=== Under the hood ===
Line 168: Line 151:
 * [[http://bitbucket.org/brickenstein/rumcomponent/src/tip/rumcomponent/ | Component architecture]].
Line 172: Line 153:
 * Processes:
   * Balance server pool loads.
   * Run the worksheet process as another user.
   * Reference implementation:
     * Make ctrl-c quit.
     * Don't put "data" link in all output cells.
   * Don't blocking the server: making docbrowsers, etc.
   * Remote worksheet processes.
   * Use fork (cf. [[http://trac.sagemath.org/sage_trac/ticket/6967 | #6967]]), named pipes, and/or [[http://docs.python.org/library/mmap.html | memory-mapped]] files for worksheet processes.
 * 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]].
Line 186: Line 163:
 * Decouple secure transport from sage/dsage. Use OpenSSL.

 * Remote access Python API - [[http://code.google.com/apis/documents/overview.html | Google Documents List Data API]].
   * (Non-)authenticated modes.
 * Decouple secure transport from sage. Use OpenSSL(?)

 * Remote access Python API - [[http://code.google.com/apis/documents/overview.html | Google Documents List Data API]]
Line 206: Line 182:
== Notebook: User Interaction == === User Interaction ===
Line 212: Line 188:
   * Easy set up of shipped jsMath fonts.    * Easy set up of shipped jsMath fonts - [[http://www.mathjax.org/ | MathJax]].
Line 214: Line 190:
   * Friendly bug buddy that emails reports, bundles session history, etc.
Line 218: Line 193:
   * Custom window close callback.
Line 221: Line 195:
   * Download zip files of multiple worksheets, even if `accounts=True`.
Line 224: 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 230: Line 201:
   * Right-click menu.
Line 231: Line 203:
   * Prevent text movement by a pixel on cell frame focus.    * Unify server and client-side resize algorithms.
Line 233: Line 205:
   * Easily identify idle, queued, and running cells.
Line 235: Line 206:
   * Leading space input bug - [[http://trac.sagemath.org/sage_trac/ticket/6729 | #6729]].
Line 245: Line 215:
   * Use notebook as IDE for running sage instance.
   * Optional 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 250: Line 218:
   * Rate worksheet title shows false error.
Line 252: Line 219:
   * "Save as" option, e.g., for downloading, that prompts for a name.
Line 255: Line 221:
   * 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]].
Line 264: Line 229:
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags]].
   * Suppress browser warning for Konqueror.
   * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags / labels]].
Line 269: Line 233:
     * Unique cookies for logins from different browsers / computers.
Line 271: Line 234:

 * Fix !MoinMoin.
Line 278: Line 239:


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