|
Size: 7678
Comment: Continued import.
|
Size: 11337
Comment: Logging!
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 3: | Line 3: |
| Source: [[SageUsability | Sage Usability Improvements List]]. This is an attempt to organize the desired changes into tasks of varying difficulty (e.g., easy, medium, hard). |
Source: [[SageUsability | Sage Usability Improvements List]]. TODO: Assign difficulties to individual tasks, if it's appropriate, or just order or group by difficulty. ############################## GENERAL ############################## |
| Line 17: | Line 19: |
| * [[http://groups.google.com/group/sage-devel/msg/35e97a1d1cedfdfd | Document pexpect interface]]. * [[http://groups.google.com/group/sage-devel/browse_thread/thread/6d94c8655e41ba24# | Document notebook port forwarding]]. |
* 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]]. == 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. }}} ############################## NOTEBOOK: ADMIN ############################## |
| Line 23: | Line 78: |
| * Dashboard for server settings / status. | * Authentication: * LDAP. * UNIX accounts. * Dashboard for server settings / status: |
| Line 25: | Line 84: |
| * Backup all critical data. | * Backups: all critical data, selective. |
| Line 30: | Line 89: |
| * Selective registration with [[http://recaptcha.net/ | reCAPTCHA]], challenge questions, admin approval, and/or revokable custom tokens. * Custom authentication: LDAP, UNIX accounts, etc. * Password "recovery:" Use secure tokens. * Email address as username. * User groups. * Privileged users, e.g, admins. |
* 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 ######################### |
| Line 46: | Line 107: |
| * Matrix `B` mentioned twice in `B.solve_left?`: `B.solve_left(B, ...)`. * Better error detection, e.g., for Maxima command completion. * Completions link for mobiles. |
|
| Line 50: | Line 117: |
| * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e9d0fc2c75ec6354/2634152df8f85f59?#2634152df8f85f59 | New documentation browser]]. Send docstrings to this browser. * Better error detection, e.g., for Maxima command completion. * Matrix `B` mentioned twice in `B.solve_left?`: `B.solve_left(B, ...)`. * Completions link for mobiles. |
|
| Line 60: | Line 119: |
| * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e9d0fc2c75ec6354/2634152df8f85f59?#2634152df8f85f59 | New documentation browser]]. Send worksheet docstrings to this browser. ############################## NOTEBOOK: "MODES" ############################## |
|
| Line 62: | Line 125: |
| * %timeit. |
|
| Line 66: | Line 131: |
| * reST editing. | * reST: |
| Line 68: | Line 133: |
| * `%rest` cells (auto-hide, double-click to show) sent to Sphinx on-the-fly. * %timeit. |
* `%rest` cells (auto-hide, double-click to show) converted to HTML by Sphinx. |
| Line 74: | Line 137: |
| * 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. |
|
| Line 76: | Line 152: |
| * [[http://groups.google.com/group/sage-devel/browse_thread/thread/86429406fb3bba17/dd3163cb2a47fa38?#dd3163cb2a47fa38 | Vector graphics editor]] - [[http://code.google.com/p/svg-edit/ | SVG-edit]]. |
######################### NOTEBOOK: USER INTERACTION ######################### |
| Line 80: | Line 156: |
| * Automatic tips for keyboard shortcuts, editing features, etc. Opt out. * Friendly bug buddy that emails reports, bundles session history, etc. * Easy backups of own work, with or w/o data, output, snapshots, etc. * Toolbar with buttons to interrupt running code, save, get key help, etc. * Easily identify idle, queued, and running cells. |
* Help: * Reorganize help page. * Search for commands * linking to similar and related commands * Easy set up of shipped jsMath fonts. * Automatic tips for keyboard shortcuts, editing features, etc. Opt out. * Friendly bug buddy that emails reports, bundles session history, etc. * Customization: * Typeset output default setting. * Implicit multiplication default setting. * Custom window close callback. * Function to update worksheet titlebar. * Easy backups of own work, with or w/o data, output, snapshots, etc. * Download zip files of multiple worksheets, even if `accounts=True`. |
| Line 91: | Line 173: |
| * Restart worksheet shortcut. * Splash-screen with common keys. |
|
| Line 92: | Line 176: |
| * Restart worksheet shortcut. * Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells. * Use js-hotkeys. * Splash-screen with common keys. * Interactive 2D/3D plots * [[http://groups.google.com/group/sage-support/browse_thread/thread/c29abdaaa4f0ee13 | coordinates]], zoom, pan, annotate * [[http://sourceforge.net/mailarchive/forum.php?thread_name=6e8d907b0909012053s19e7c5fl29cdcd0e1fab1d50%40mail.gmail.com&forum_name=matplotlib-devel | matplotlib]], canvas, SVG, [[http://code.google.com/p/flot/ | Flot]], [[http://teethgrinder.co.uk/open-flash-chart-2/ | Open Flash Chart]]. * Animated 2D/3D plots using only !JavaScript. * Always show long output links, regardless of interrupt or length. * Custom window close callback. * Suppress browser warning for Konquereor. * Unique cookie for each login. * Cells: Select, delete, (un)group, move [[http://boagworld.com/demos/sitemap/ | multiple cells]]. * Slideshow mode. |
* Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells - [[http://code.google.com/p/js-hotkeys/ | js-hotkeys]]. * Cells: * Auto-updating cells, e.g., interacts. * Prevent text movement by a pixel on cell frame focus. * Always show links for long output cells, regardless of length or interruption. * Easily identify idle, queued, and running cells. * Select, delete, (un)group, move [[http://boagworld.com/demos/sitemap/ | multiple cells]]. * Leading space input bug - [[http://trac.sagemath.org/sage_trac/ticket/6729 | #6729]]. * 2D / 3D plots: * !JavaScript animations. * Mouse-over for [[http://groups.google.com/group/sage-support/browse_thread/thread/c29abdaaa4f0ee13 | coordinates]] - [[http://sourceforge.net/mailarchive/forum.php?thread_name=6e8d907b0909012053s19e7c5fl29cdcd0e1fab1d50%40mail.gmail.com&forum_name=matplotlib-devel | matplotlib]]. * Interactively zoom, pan, annotate - canvas, SVG, [[http://code.google.com/p/flot/ | Flot]], [[http://teethgrinder.co.uk/open-flash-chart-2/ | Open Flash Chart]]. * Worksheets: * Slideshow mode. * Use notebook as IDE for running sage instance. * Always visible menubar at top of worksheet. * Toolbar with buttons to interrupt running code, save, attach files, etc. * 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]]. |
| Line 121: | Line 205: |
| * jsMath fonts: * Ship with Sage. * Clear install directions. * 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]]. * Default options: * Implicit multiplication. * Typeset output. * Reorganize help page. * Automatically save / restore worksheet state. Pause / resume. * Function to update worksheet titlebar. * Auto-update cells, e.g., interacts. * Full-text search: SQLalchemy, [[http://whoosh.ca/ | Whoosh]] ([[http://groups.google.com/group/codenode-devel/browse_thread/thread/d3ffefa3b09937b6/98bdf00f65441934?#98bdf00f65441934 | codenode-devel]]). * Math-enabled chat. [[http://qwebirc.org/ | qwebirc]] / [[http://webchat.freenode.net/ | Web IRC]]. * [[http://groups.google.com/group/sage-devel/browse_thread/thread/e46f0a59d5cf70dc | Tags]]. |
* Notebook: * [[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. * Full-text search: SQLalchemy, [[http://whoosh.ca/ | Whoosh]] ([[http://groups.google.com/group/codenode-devel/browse_thread/thread/d3ffefa3b09937b6/98bdf00f65441934?#98bdf00f65441934 | codenode-devel]]). * Fix !MoinMoin. |
| Line 147: | Line 215: |
| * Prevent text movement by a pixel on cell frame focus. * Leading space input bug - [[http://trac.sagemath.org/sage_trac/ticket/6729 | #6729]]. * Python debugger a la [[https://developer.mozilla.org/En/Pylons | Pylons]]. * Editor a la [[https://bespin.mozilla.com/ | BeSpin]] * Command-line history. * Syntax highlighting. * Context-sensitive completion. * Fix MoinMoin. * Use notebook as IDE for running sage instance. * Download zip files of multiple worksheets, even if `accounts=True`. * Parens matching - [[http://trac.sagemath.org/sage_trac/ticket/3646 | #3646]]. * Optional always visible menubar at top of worksheet. |
######################### NOTEBOOK: UNDER THE HOOD ######################### |
| Line 174: | Line 223: |
| * Use Python's [[http://docs.python.org/library/logging.html | logging facility]]. |
|
| Line 179: | Line 230: |
| * TinyMCE problem * Server-to-server sync for backups, possibly with authentication. |
* TinyMCE problem. * Server-to-server for backups, possibly with authentication. |
| Line 188: | Line 239: |
| * Migrate to another server and/or 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]]. == Build / Tests == |
* 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. |
| Line 195: | Line 265: |
* Binary distibutions that don't use SSE3, etc. * Windows port. * Windows build farm. * !VirtualBox Sage. * andLinux Sage. |
Sage Usability Tasks
Source: Sage Usability Improvements List. TODO: Assign difficulties to individual tasks, if it's appropriate, or just order or group by difficulty.
1. General
2. Documentation
3. Development
- More convenient development workflow
- Current workflow is:
- Change file
- Restart Sage Notebook
- Wash, rinse, repeat
- Possible improvements:
- Autoreload and autobuild mechanism (dev mode)
- Current workflow is:
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.
4. Notebook: Admin
- Authentication:
- LDAP.
- UNIX accounts.
- 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:
- Challenge questions.
- Admin approval.
- Revokable custom tokens.
- Users:
- Groups.
- Privileges.
- Email address as username.
- Use secure tokens to reset passwords.
5. Notebook: Introspection
- Use Sphinx for sagenb.org docstrings.
Matrix B mentioned twice in B.solve_left?: B.solve_left(B, ...).
- Better error detection, e.g., for Maxima command completion.
- Completions link for mobiles.
- Live introspection cells.
- Introspection cross-links.
- Improve introspection / completion interface: floating div, RHS div.
New documentation browser. Send worksheet docstrings to this browser.
6. Notebook: "Modes"
- %timeit.
Graph editor - #1321.
- reST:
%rest cells (auto-hide, double-click to show) converted to HTML by Sphinx.
- Preparse in the browser: implicit multiplication, less work for server.
Python debugger a la Pylons.
Draw - SVG-edit.
- Annotate output from matplotlib's SVG backend.
Code editor a la BeSpin
- Command-line history.
- Syntax highlighting.
- Context-sensitive completion.
7. Notebook: User Interaction
- Help:
- Reorganize help page.
- Search for commands
- linking to similar and related commands
- Easy set up of shipped jsMath fonts.
- Automatic tips for keyboard shortcuts, editing features, etc. Opt out.
- Friendly bug buddy that emails reports, bundles session history, etc.
- Reorganize help page.
- Customization:
- Typeset output default setting.
- Implicit multiplication default setting.
- Custom window close callback.
- Function to update worksheet titlebar.
- Easy backups of own work, with or w/o data, output, snapshots, etc.
Download zip files of multiple worksheets, even if accounts=True.
- Keys
- Restart worksheet shortcut.
- Splash-screen with common keys.
- Insert new cell after current cell shortcut.
Custom shortcuts, e.g., ctrl-bksp to delete previous word, not join cells - js-hotkeys.
- Cells:
- Auto-updating cells, e.g., interacts.
- Prevent text movement by a pixel on cell frame focus.
- Always show links for long output cells, regardless of length or interruption.
- Easily identify idle, queued, and running cells.
Select, delete, (un)group, move multiple cells.
Leading space input bug - #6729.
- 2D / 3D plots:
JavaScript animations.
Mouse-over for coordinates - matplotlib.
Interactively zoom, pan, annotate - canvas, SVG, Flot, Open Flash Chart.
- Worksheets:
- Slideshow mode.
- Use notebook as IDE for running sage instance.
- Always visible menubar at top of worksheet.
- Toolbar with buttons to interrupt running code, save, attach files, etc.
Parens matching - #3646.
TinyMCE synchronization problem.
- Published worksheets:
- Delete them.
- RSS feeds.
- Live cells, e.g, interacts.
- Only to selected users or groups.
- Notebook:
Tags.
- Suppress browser warning for Konquereor.
- Unique cookies for logins from different browsers / computers.
Full-text search: SQLalchemy, Whoosh (codenode-devel).
Fix MoinMoin.
Externally embed live cells / worksheets. Live published workseets. #6855.
8. Notebook: Under the hood
- Better handling of concurrent worksheet use.
- Smartly manage Jmol applet count, or memory use.
Use Python's logging facility.
- 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: Django, Pylons, Pyjamas, Tornado, etc.:
9. Notebook: Development
Auto-reloading (similar to paster serve --reload or CherryPy's AutoReload mechanism)
