[IPython-dev] experiment - remote execution of jquery and d3 code into the browser via ipython
Jason Grout
jason-sage at creativetrax.com
Mon Mar 19 10:51:00 EDT 2012
On 3/19/12 9:32 AM, hugo wrote:
>
>
> On 03/19/2012 09:22 AM, fawce wrote:
>> holy mackerel that's awesome!
>>
>> Can you elaborate on the callback issue? Wondering why you can't pass
>> in a callback that just makes a ws call internally.
>
> just that I serialize function names and the args they are called with
> via JSON
>
> so for d3, the normal way you would position points in a scatter plot is
> something like this
>
> d3.selectAll('circle').attr('cx', function(d){return axis(d['x'])});
>
> I have no good way to pass function(d){return xaxis(d['x'])}
>
> I could pass it as a string, but then I would need some way to determine
> whether strings I pass should be eval-ed to retrieve callbacks or not
> also - you would have to write javascript callbacks in string form,
> which is ugly anyways. furthermore, in d3, it is common to define
> scaling axes objects, and use those in your callbacks - I don't have a
> good place to do that either.
fawce's suggestion sounds very intriguing--make the websockets message
passing two-way between python and javascript. The way I understand the
suggestion, what about (in python):
def mycallback(d):
return d3.axis(d['x'])
d3.selectAll('circle').attr('cx', callback(mycallback));
This gets translated to the javascript code:
d3.selectAll('circle'.attr('cx', function(){
var results= send_message('mycallback', arguments);
return interpret_results(results);})
send_message sends a message back through websockets to call the
mycallback python function with some sort of proxy object d that knows
how to generate json messages describing the attribute accesses, etc.
In the python side, inside mycallback, d['x'] generates the javascript
code to access arguments[0]['x'], so what is passed back is some sort of
javascript code like 'd3.axis(arguments[0]['x'])'. interpret_results
then runs this code and returns the result.
Thanks,
Jason
More information about the IPython-dev
mailing list