<div dir="ltr">The IPython notebook has changed the way I work. Literate programming,<br>the merging of experiment scripts and experiment reports into a single<br>document, and countless other productivity gains: tweaking matplotlib<br>graphs interactively, easy parallelism, etc. It is quite awesome!<br><br>Could it be improved? It certainly can. Here are the two points I find<br>most prominent:<br>- After one has gotten used to SublimeText & co, CodeMirror just hurts.<br>- The notebook server has huge potential for remote work, but this<br>potential is partly unexploitable because of some aspects of the<br>client/server architecture.<br><br>Let me explain the latter point. I have a fairly beefy desktop machine in<br>my office, but I'm often working from other locations. I'd like to be<br>able to open a notebook remotely on my laptop, edit it, start some long-<br>running computations, close my laptop, go to lunch, and come back to it<br>in the afternoon to see the results.<br><br>Right now, it... kind of works. But the issue is that since the execution<br>of cells is orchestrated by client-side javascript, at most one cell will<br>be executed if I close the client. The results are there in the kernel<br>namespace, but the outputs are lost -- integrating the outputs into the<br>notebook is also done by client-side scripts. The client also loses track<br>of which cells are still being executed.<br><br>One solution would be to use X forwarding and keep the notebook client<br>running on the desktop machine, but in my case the connection lag makes<br>text editing quite unbearable. I prefer to connect to the notebook server<br>from a local client process.<br><br>Here is the solution I was thinking about:<br><br>- A new frontend app where, instead of embedding a text editor into the<br>notebook, the notebook itself is embedded into a text editor. A number of<br>nice, open-source, SublimeText-class editors are already being developed:<br>Atom, LimeText, LightTable, etc. LightTable has actually done some work<br>on integrating the IPython kernel and displaying results inline. I<br>imagine that it wouldn't be unreasonably hard to turn it into a full<br>notebook client. As a bonus, no more juggling between two editors: use<br>the same for the notebooks and for plain Python scripts!<br><br>- Move the task of supervising cell execution and integrating the outputs<br>into the notebook model from the client to the server, so that notebooks<br>can keep running when the client disconnects.<br><br>- Let the client app refresh its view of the notebook when it reconnects<br>to the server, showing the new outputs and which cells are still running.<br><br>Any thoughts on this? Is it all maybe already happening in the Jupyter<br>project? ;-)<br><br>Best,<br>Damien</div>