On Jan 9, 7:50 pm, ghtdak <gl...@tarbox.org> wrote:
> On Jan 9, 2:20 am, Alejandro Serrano <trup...@gmail.com> wrote:
>
> > Hi,
> > I'm currently developing something very similar as the thing you are
> > proposing. I sent it to the list about two months ago 
> > (http://groups.google.com/group/sage-devel/browse_thread/thread/53b3d6...

I took a look and its interesting.  But I have some questions.
Perhaps, though, it might be easier to describe what I was trying and
why so you could contrast your approach.

First, it seemed that exploiting the existing notebook capabilities
was going to yield the best reward / effort.  Knowing that QtWebKit
and the browser demo which comes with the Qt distro works with Sage, I
figured that the easiest first cut would be to build a simple
application with an embedded browser window and hook into the
underlying Sage Notebook server process.  This way, all the notebook
code could be exploited and I could focus on whatever specific
weirdness I wanted without needing to do major surgery.

Unfortunately, this approach wasn't possible with the Sage Notebook
process as it existed primarily because it wasn't an asynchronous
process.  It blocks on the pipe to the main Twisted Server process.  I
had some luck using Python threads for some workarounds but,
unfortunately, this made nailing the Qt main loop tricky because Qt
really wants a single thread for gui applications... Since I was using
PyQt I didn't know what tricks I would need to try when integrating
with Cython etc... so I kinda punted.

Some things have changed.  First, it is more straightforward to create
a custom python process using Cython.  While I haven't tried it, it
seems that one could start up all the Qt stuff before invoking the
notebook process code... this approach requires understanding how the
Twisted server worked and getting in the middle of the notebook
process launch... I don't think its very hard but the few times I
poked around didn't yield much success.  Even with this approach,
however, threads would be needed meaning synchronization etc and I
think it would be architecturally incorrect.

There was occasional back and forth on making the notebook process
asynchronous.  I haven't been following so don't know if asynchronous
is part of the current notebook rewrite effort.

In my perfect world, I would have an asynchronous sage notebook
process supporting the browser window... which would require no code
change to Sage, and I would simply add components to the event loop to
support other activities.  For example, Mayavi2 could work alongside
the notebook sharing the underlying data structures with no concern
for synchronization which could get tricky.  Extensions could be
written to support notebook invocations of Mayavi2 but they could come
in time... custom widgets would initially be used that would have no
impact on the Sage baseline code.

I previously built a Twisted Qt Reactor to do this for PyQt but it
requires that the supported processes be asynchronous... which the
sage notebook wasn't and may still not be (again haven't been
following)

In looking at your code, it "appears" that you're providing some
capabilities  which might be more easily handled in the notebook. I
really liked the variables being shown and I believe you're thinking
along some of the lines I was originally.  But you mentioned you were
using threads and I wonder why and what kind... this will require more
looking on my part.

I should say that my primary interest in having the notebook be
asynchronous was to interact with external systems.  This is a
requirement which isn't shared by many in the Sage community so it
hasn't been a priority.  It is also a non-trivial adjustment to the
notebook itself... the combination may preclude its development.

-glenn
-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to