I saw a talk about IPython notebook the other day. How do you guys view it? As an IDE with an output format? Or a web browser with interactive interpreter?
It seemed sort of cool, but I am not quite sure where to place it. The guy doing the talk didn't sound very experienced, and I think the majority of his plus points for using it I get from an IDE. I would do the same thing using a full blown web app, but that would take a lot longer.
I've used it recently as excel on steroids. As in, you have a lot of data and you want to make a 20 page .pdf report with lots of charts and nice page breaks.
I did this by editing a python script in vim that did everything, and just %load it in ipython every time I changed it (only a few keystrokes - not instant but ok), but ipython's magic is putting all the matplotlib charts in a nice html package (you can also mix markdown/text/html), that I can then run nbconvert to html & print to pdf (with only a few hacks / frustration).
I like to think of it as an engineering hack pad. Use it to prototype and interate over scripts like you would with the CLI version of IPython, but with a GUI instead. I had an immense amount of fun learning OpenCV with it, shunting data to my phone over Tornado, and building interfaces to various data systems (each thing I knew nothing about from the start, but could explore). It can do all the stuff Python does, but with quite a lot of cleverness built into it.
I suppose it's really an IDE, but I certainly don't use it as one. It really lends itself to being a solid, robust, napkin programming interface. Alternately: it's the turn-based tactics to LightTable's realtime strategy.
It is a mixed bag, largely because it is still in development. It is wonderful for authoring content - I can freely mix latex, code, output all together - you don't have to wonder how I generated that plot, the code and data is right there. OTOH, no section numbers, not quite WYSISYG, no way to hide code if you only want the output, and other minor things make me wonder if I should just use the tried and true latex workflow.
If I am just programming I prefer an IDE like spyder (I do mostly math-y type stuff).
A big annoyance is it's interaction with git. If you regenerate the output, git interprets that as a big file change, and the repository gets polluted with nonsense commits. There are workarounds, but none are perfect.
In general it is really great where you want to mix text, images, html, and python. So, great for presentations {audience: 'what if you change X==3', you: 'here you go'}, for paper writing, maybe less than great for full on book authorship or general programming.
But these are nitpicks. I love IPython Notebook. Even if I end up in the traditional Latex workflow at the end, it is so easy to keep code, text, and output all synced up with the notebook compared to the alternatives.
You can also run more than Python in it. IJulia supports running Julia in the notebook, for example.
>A big annoyance is it's interaction with git. If you regenerate the output, git interprets that as a big file change, and the repository gets polluted with nonsense commits. There are workarounds, but none are perfect.
This is probably one of the workarounds you're thinking of, but I clear the output and use a precommit hook to make sure I haven't missed any cells. It's a bit annoying, but it works. I'm waiting for the day VCS integration is built-in. For now, I enjoy having my notes and code together and versioned.
More like an interactive calculation and graphing environment. 90% of the time, for me, the key output is a set of graphs. I like the consistency of plotting them programmatically in (matplotlib) code, while the interactive cell-based format makes it quick to run and make changes.
Sure, it isn't too different to using an IDE, but the UI owes more to mathematical environments such as Maple and Mathematica.
I use it primarily as a prototyping and blogging platform. With a little tweaking, Pelican can convert IPython to static HTML. It makes a really great way to create and share blog content, especially because I am basically looking at the final product while writing. Hosting with Github is also a breeze, and gives me automatic version control for all content. Anyone interested can check it out here [1]
It is also has a built-in presentation display - can be very handy for sharing your analysis/code with other folks.
IPython is definitely not an IDE for me - I usually prototype my code as a gist, then either import or copy depending on what type of code I am writing. Working purely in IPython tends to lead me toward spaghetti code, but being more disciplined would probably make it work well.
It's basically an attempt to bring the user interface of Mathematica or MATLAB (the "notebook") to the Python world. You can get an idea of what this is like in Mathematic by watching Wolfram's demo: https://www.youtube.com/watch?v=_P9HqHVPeik
Rather disappointed with IPython 2.0. They appear to have taken steps back in usability in the push to make notebooks wizzy and interactive.
I eventually downgraded to 1.2 because it was hampering my productivity. You'd be surprised how annoying removing the 'add cell above' button is, or not switching focus when a new cell is inserted. I don't care about showing my notebooks to the world. I want a convenient way to test out scripts, time functions and play with data visualisation.
Most annoying is the frankly poor change documentation and trying to figure out what's been deprecated or what happened to shortcuts. Many of the changes are subtle and you're simply expected to know where to look.
Just as a counter point, I was a huge fan of the changes in version two. "Wizzy and interactive" can be incredibly important for a wide range of applications. Half the reason interpreters are wonderful is that they drastically reduce the "idea to running" time, and having interactive widgets can do even more for that. (Not to mention things like animations and UIs, which are just useful sometimes.) Similarly, notebooks are a great way for me to publish content, and a very large portion of the things I write are written as IPython notebooks.
As an aside, everything in IPython 2 is available from the keyboard and all shortcuts can be viewed by pressing the Help menu or 'h'. 'Add cell above' is now just 'a' (and below is 'b') when in command-mode. I expect that learning to use the new modal interface can be a bit of a hassle, but for me it turned out to ultimately be really awesome.
I think it's mostly getting used to the fact there's an edit mode and a browse mode. To me it seems that if you create a cell, 99% of the time you want to jump into it and start typing code - not adding another cell or selecting whether it's in Markdown/Python/Raw format or whatever.
I suppose my biggest gripe is that I had to search for what changed (rather than simply what's new), given how much is different from a UI perspective it would have saved me a lot of time to skim a document.
It's probably awesome who want that kind of functionality, and it makes the IPython platform so much more powerful for content delivery, but I wish it had a simple "Code and execute" mode. I always wondered why people complained about extra keystrokes in applications and now I know why :P
I felt the same way when I first upgraded to 2.0 from 1.0, but I got used to it so fast that I don't remember why I cared. I think the only thing I still don't like is that kernel restart, and shutdown, are two clicks away instead of one.
Kernel restart is zero clicks if you use the shortcut: esc-0-0-return
esc to go to command mode
zero-zero to bring up the kernel restart prompt
return/enter to confirm
I definitely still get thrown by the command vs editing mode (mostly manifesting in new cells above or below the one I'm working on). But, I'm willing to accept the temporary handicap since everything has a shortcut now.
That's not to mention the other big convenience win of 2.0: directory navigation. You used to have to boot up a new server for each directory of notebooks you wanted to use. I have hundreds of notebooks...things were getting out of hand. Now you can run a single server, easily navigate your notebook directories from the browser, and write simple links between your notebooks.