[IPython-dev] make ipython work over web

Brian Granger ellisonbg at gmail.com
Mon Mar 29 13:15:59 EDT 2010


On Mon, Mar 29, 2010 at 7:47 AM, Robert Kern <robert.kern at gmail.com> wrote:
> On 2010-03-28 22:41 PM, Brian Granger wrote:
>> Ondrej,
>> On Sat, Mar 27, 2010 at 12:20 PM, Ondrej Certik<ondrej at certik.cz>  wrote:
>>> On Sat, Mar 27, 2010 at 11:42 AM, Brian Granger<ellisonbg at gmail.com>  wrote:
>>>> Ondrej,
>>>>> Ok. Here is my API (so far I have no sessions there):
>>>>> In [1]: import jsonrpclib
>>>>> In [2]: s = jsonrpclib.SimpleServerProxy("http://2.latest.sympy-gamma.appspot.com/test-service/")
>>>>> In [3]: s.eval_cell("2+3")
>>>>> Out[3]: '5'
>>>>> In [4]: s.eval_cell("""\
>>>>>    ...: from sympy import sin, integrate, var
>>>>>    ...: var("x")
>>>>>    ...: integrate(sin(x), x)
>>>>>    ...: """)
>>>>> Out[4]: '-cos(x)'
>>>>> In [5]: s.eval_cell("""\
>>>>>    ...: from sympy import sin, integrate, var
>>>>>    ...: var("x")
>>>>>    ...: a = integrate(sin(x), x)
>>>>>    ...: """)
>>>>> Out[5]: ''
>>>>> In [6]: s.eval_cell("a.diff(x)")
>>>>> Out[6]: 'sin(x)'
>>>> OK, if this is the only API you want, it is possible.  BUT, a few points:
>>>> * It is completely blocking and synchronous.  We can create such an
>>>> API using 0MQ, but it obviously has limitations.
>>>> * It handles stdout in a completely synchronous manner.  I think we
>>>> can do this too (again limitations apply).
>>>> You are going to have to work *very* hard using json-rpc alone to get
>>>> asynchronous stdout/stderr/displayhook.  Here is the design that you
>>>> want that will entirely do what you want:
>>>> client<--jsonrpc-->bridge<--0MQ-->kernel
>>>> The bridge would be a fully asynchronous 0MQ client and would receive
>>>> the asynchronous 0MQ stdout/stderr/displayhook and simply put them in
>>>> queues.  The bridge would also be a json-rpc server.  with methods
>>>> like:
>>>> eval_cell  # submit but don't block. get back an object that would
>>>> allow you to see if the cell was done evaluating.
>>>> complete # again submit but don't return.  Similar logic.
>>>> get_stdout  # get all the stdout that has been written thus far
>>>> get_stderr  # get all stderr that has been written thus far.
>>>> You basically want to put a blocking API on top of the asynchronous 0MQ API.
>>>> This type of thing should be be too difficult to write using 0MQ and
>>>> we can help out.  If you are serious about this, let me know and
>>>> Fernando and I can come up with a plan.
>>>> We could probably develop this in the pyzmq tree for now.
>>> My primary concern is the notebook. What is your idea to implement the
>>> asynchronous output update? Let me look at how Sage does it.
>> I would also look at how we are handling it in the 0MQ prototype.  Th
>> challenge is translating that to a browser.
>>> As to json-rpc, it is not blocking, that's just how I like to use it
>>> in ipython. But below the hood, it works exactly as you said, e.g. you
>>> get some id back immediately and then your method gets called (in
>>> pyjamas) when the result is back. I don't know how this is done
>>> internally. I think it's just how AJAX works (the browser calls your
>>> javascript method when the result is back).
>> I need to look at jsonrpclib so better see how it works.  I also see
>> that the author has something that works with tornado.
> You may be interested in using the new HTML5 WebSocket API. There is a
> compatibility library for older browsers and Python integration:
>   http://orbited.org/

Thanks!  I have not been keeping up with HTML5.  I will talk to the
0MQ team about implementing the 0MQ wire protocol with this.  Orbited
looks interesting, but relies on Twisted, which is going to hold back
the python 3 transition.  This stuff is exactly what we need in the
browser though.



> --
> Robert Kern
> "I have come to believe that the whole world is an enigma, a harmless enigma
>  that is made terrible by our own mad attempt to interpret it as though it had
>  an underlying truth."
>   -- Umberto Eco
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev

Brian E. Granger, Ph.D.
Assistant Professor of Physics
Cal Poly State University, San Luis Obispo
bgranger at calpoly.edu
ellisonbg at gmail.com

More information about the IPython-dev mailing list