<span style='font-family:Verdana'><span style='font-size:12px'>Hi,<br /><br />I've been looking for a way to showcase (and dogfood) the<br />library I released a couple of weeks ago, Exhibitionist<br /><br />Yesterday, I started work enhancing the wonderful notebooks on<br />MCMC released by @CamDavidsonPilon at:<br />https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers<br /><br />with interactive views of various kinds.<br /><br />I wanted to share a pleasent success I had in "freezing" a dynamic Exhibitionist<br />based on d3 and data streaming via AJAX, into a static view which is stored with<br />the notebook, and viewable in nbviewer.<br /><br />Here's a screenshot:<br />https://f.cloud.github.com/assets/1820866/277146/5e11823a-90be-11e2-917a-a317e7702318.png<br /><br />the upper view is dyanmic, and you can control the lambda parameter of the<br />exponential distribution plotted in realtime.<br /><br />The lower view is the result of hitting the "freeze" button in the upper right corner,<br />and is saved with the notebook, viewable even without exhibitionist installed<br />- completely reproducable.<br /><br />A nice feature of this, is that you can interactively "tweak" your plot parameters<br />until you're satisfied, and then freeze the plot for "publication".<br /><br />I plan to working on gradually enhancing all the book chapters in this way,<br />and release the notebooks on github.<br /><br />If anyone has a need to do something similar, here are the technical bullet<br />points for how this works:<br /><br />- the dynamic view lives in an embedded iframe<br />- the HTML5 postmessage API is used for exchanging messages between<br />the iframe and the IPPython main window.<br />- when the "freeze" button is clicked, the svg blob generated by d3 (using<br />json data fetched over AJAX, from an exhibitioinst server running n the IPython<br />kernel process) is sent over to the IPython window.<br />- the listener catching the message introspects the cells using the IPython<br />js object, and jquery to replace the IFrame with the svg blob, and to overwrite<br />the cell output area so that the svg data is serialized when the notebook<br />is saved.<br />- Styiing the svg is an interesting problem. You can include the css ctyles<br />for the plot in the IPython notebook, or, if you inline the styles as svg element<br />attributes, the plot becomes completely self-contained. I'm using the latter for now.<br /><br />This was really excited to get working, I wasn't even sure it's possible. It is.<br /><br />Cheers,<br />Yoval<br />&nbsp;<p style="margin:0px; padding:0px;" > </p><blockquote style="border-left: 1px solid #CCC; padding-left: 5px; margin-left: 5px; margin-bottom: 0px; margin-top: 0px; margin-right: 0px;" type="cite"><p style="margin:0px; padding:0px;" ><span style="font-family:Verdana"><span style="font-size:12px">----- Original Message -----</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family:Verdana"><span style="font-size:12px">From: Matthias BUSSONNIER</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family:Verdana"><span style="font-size:12px">Sent: 03/07/13 07:39 PM</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family:Verdana"><span style="font-size:12px">To: IPython developers list</span></span></p><p style="margin:0px; padding:0px;" ><span style="font-family:Verdana"><span style="font-size:12px">Subject: Re: [IPython-dev] "Freezing" dynamic content with nbconvert, was ANN: Exhibitionist</span></span></p> <div>Hi Yoval,&nbsp;<div><div>Le 7 mars 2013 à 17:48, yoval p. a écrit :</div> <blockquote type="cite"><span style="font-family:Verdana"><span style="font-size:12px">Hi,<br /><br /><br />My suggestion is that the display protocol be modified&nbsp; so that the semantics of<br />`_repr_html_` would mean static HTML only, and a new `_repr_jshtml_` (however named)<br />magic method would be supported, under which objects would implement<br />dynamic views.<br /><br /><br />Thoughts?</span></span></blockquote><div> </div><div>What you describe look IMHO to much to the current _repr_html_/_repr_javascript_, we had quite some time to think about it,&nbsp;</div><div>and something in those line was my first idea,&nbsp;but dealing with displaying javascript is both much more complicated than it looks.</div><div>We are also &nbsp;certain that we can have a more general approach.</div><div> </div><div>(Keep in mind that, thinking of the display protocol as only html/js notebook/qtconsole is also much too restrictive)</div><div> </div><div>In short, we believe using _display_json_ is the right way and is enough.&nbsp;</div><div> </div><div>Most of the time, when you display js, the only thing you want to send are data that need to be interpreted.</div><div>Javascript plugin should be js files loaded as extension, you shouldn't need to display generated code.&nbsp;</div><div>This allow also to depend on other installed plugin without having to embed lib like jQuery etc at every call.</div><div> </div><div>In framework like chromium embeded, you cannot in any way execute code that are in script tag. The js</div><div>**have to** be part of the application at launch time.</div><div> </div><div>With the architecture we planed, rewriting _display_javascript_ should be totally possible as simple small plugin</div><div>it will just not be supported.</div><div> </div><div>As for nbviewer, if there is a _repr_json_ , nothing prevent it from using it in html to have dynamic represent,&nbsp;</div><div>but the same json could be use to make a Tikz representation in latex, or even multiple plugin could be able to interpret the same json.</div><div> </div><div>So after long repletion, I am convince that json-repr is the way to go.</div><div> </div><div>We'll still consider the suggestion of course, and discussion are welcomed.&nbsp;</div><div> </div><div>--&nbsp;</div><div>Matthias</div><div> </div><div> </div>_______________________________________________<blockquote type="cite">IPython-dev mailing list<br /><a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br />http://mail.scipy.org/mailman/listinfo/ipython-dev</blockquote></div></div></blockquote><p style="margin:0px; padding:0px;" > </p></span></span>