<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-462991820843482154</atom:id><lastBuildDate>Fri, 18 May 2012 06:00:52 +0000</lastBuildDate><category>python</category><category>ipython</category><category>scipy</category><title>Fernando Perez</title><description>Thoughts and notes on open scientific computing, with a focus on Python-based tools (IPython, numpy, scipy, matplotlib and friends).</description><link>http://blog.fperez.org/</link><managingEditor>noreply@blogger.com (Fernando Perez)</managingEditor><generator>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-6712526932591474288</guid><pubDate>Mon, 09 Jan 2012 00:37:00 +0000</pubDate><atom:updated>2012-01-09T18:46:06.108-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>ipython</category><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>The IPython notebook: a historical retrospective</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
On December 21 2011, we &lt;a href="http://ipython.org/news.html#ipython-0-12"&gt;released IPython 0.12&lt;/a&gt; after an intense 4 1/2 months of development.&amp;nbsp; Along with a number of new features and bug fixes, the main highlight of this release is our new &lt;a href="http://ipython.org/ipython-doc/rel-0.12/whatsnew/version0.12.html#an-interactive-browser-based-notebook-with-rich-media-support"&gt;browser-based interactive notebook&lt;/a&gt;: an environment that retains all the features of the familiar console-based IPython but provides a cell-based execution workflow and can contain not only code but any element a modern browser can display.&amp;nbsp; This means you can create interactive computational documents that contain explanatory text (including LaTeX equations rendered in-browser via MathJax), results of computations, figures, video and more.&amp;nbsp; These documents are stored in a version-control-friendly JSON format that is easy to export as a pure Python script, reStructuredText, LaTeX or HTML.&lt;br /&gt;
&lt;br /&gt;
For the IPython project this was a major milestone, as we had wanted for years to have such a system, and it has generated a fair amount of interest online. In particular, on our mailing list a user asked us about the relationship between this effort and the well-known and highly capable &lt;a href="http://sagemath.org/"&gt;Sage&lt;/a&gt; &lt;a href="http://sagenb.org/"&gt;Notebook&lt;/a&gt;.&amp;nbsp; In responding to the question, I ended up writing up a fairly detailed retrospective of our path to get to the IPython notebook, and it seemed like a good idea to put this up as a blog post to encourage discussion beyond the space of a mailing list, so here it goes (the &lt;a href="http://mail.scipy.org/pipermail/ipython-user/2012-January/009021.html"&gt;original email&lt;/a&gt; that formed the base of this post, in case anyone is curious about the context).&lt;br /&gt;
&lt;br /&gt;
The question that was originally posed by Oleg Mikulchenklo was: &lt;i&gt;What is the relation and comparison between the IPython notebook and the Sage notebook? Can someone provide motivation and roadmap for the IPython notebook as an alternative to the Sage notebook?&amp;nbsp; &lt;/i&gt;I'll try to answer that now...&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Early efforts: 2001-2005&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Let me  provide some perspective on this, since it's a valid question that is probably in the minds of others as well.&amp;nbsp; This is a long post, but I'm trying to do justice to over 10 years of development, multiple interactions between the two projects and the contributions of many people. &amp;nbsp;I apologize in advance to anyone I've forgotten, and please do correct me in the comments, as I want to have a full record that's reasonably trustworthy.&lt;br /&gt;
&lt;br /&gt;
Let's go back to the beginning: when I started IPython in late 2001, I was a graduate student in &lt;a href="http://phys.colorado.edu/" target="_blank"&gt;physics at CU Boulder&lt;/a&gt;, and had used extensively first Maple, then Mathematica, both of which have notebook environments. &amp;nbsp;I also used Pascal (earlier) then C/C++, but those two (plus IDL for numerics) were the interactive environments that I knew well, and my experience with them shaped my views on what a good system for everyday scientific computing should look like. &amp;nbsp;In particular, I was a heavy user of the Mathematica notebooks and liked them a lot.&lt;br /&gt;
&lt;br /&gt;
I started using Python in 2001 and liked the language, but its interactive prompt felt like a crippled toy compared to the systems mentioned above or to a Unix shell. &amp;nbsp;When I found out about sys.displayhook, I realized that by putting in a callable object, I would be able to hold state and capture previous results for reuse. &amp;nbsp;I then wrote a python startup file to provide these features and some other niceties such as loading Numeric and Gnuplot, giving me a 'mini-mathematica' in Python (femto- might be a better description, in fairness). &amp;nbsp;Thus was my 'ipython-0.0.1' born, a &lt;a href="https://gist.github.com/1579699"&gt;mere 259 lines to be loaded as $PYTYHONSTARTUP&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I also read &lt;a href="http://onjava.com/pub/a/python/2001/10/11/pythonnews.html"&gt;an article&lt;/a&gt; that mentioned two good interactive systems for Python, LazyPython and IPP, not surprisingly also created by scientists.&amp;nbsp; I say this because the natural flow of scientific computing pretty much mandates a solid interactive environment, so while other Python users and developers may like having occasional access to interactive facilities, scientists more or less demand them.&amp;nbsp; I contacted their authors, &amp;nbsp;Nathan Gray and Janko Hauser, seeking to join forces to create IPython;&amp;nbsp; they were both very gracious and let me use their code, but didn't have the time to participate in the effort. &amp;nbsp;As any self-respecting graduate student with a dissertation deadline looming would do, I threw myself full-time into building the first 'real' IPython by merging my code with both of theirs (eventually I did graduate, by the way).&lt;br /&gt;
&lt;br /&gt;
The point of this little trip down memory lane is to show how from the very beginning, Mathematica and its notebooks (and the Maple worksheets before) were in my mind as the ideal environment for daily scientific work. In 2005 we had two Google SoC students and we took a stab at building, using Wx, a notebook system. &amp;nbsp;Robert Kern then put some more work into the problem, but unfortunately that prototype never really became fully usable.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Sage bursts into the scene&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In early 2006, &lt;a href="http://wstein.org/" target="_blank"&gt;William Stein&lt;/a&gt; organized  &lt;a href="http://sagemath.org/old/days1"&gt;the first Sage Days at UCSD&lt;/a&gt; and invited me; William and I had been in touch since 2005 as he was using IPython for the Sage terminal interface. &amp;nbsp;I&amp;nbsp; suggested Robert Kern come as well, and he demoed the notebook prototype he had at that point. It was very clear that the system wasn't production ready, and William was already starting to think about a notebook-like system for Sage as well. Eventually he started working on a browser-based system, and by Sage Days 2 in October 2006, as shown by the &lt;a href="http://wiki.sagemath.org/sd2-sprint" target="_blank"&gt;coding sprint topics&lt;/a&gt;, the Sage notebook was already usable.&lt;br /&gt;
&lt;br /&gt;
For Sage, going at it separately was completely reasonable and justified: we were moving slowly and by that point we weren't even convinced the Wx approach would go anywhere. William is a force of nature and was trying to get Sage to be very usable very fast, so building something integrated for his needs was certainly the right choice.&lt;br /&gt;
&lt;br /&gt;
We continued slowly working on IPython, and actually had another attempt at a notebook-type system in 2006-2007. By that point &lt;a href="http://www.calpoly.edu/%7Ephys/faculty_pages/bgranger.html" target=""&gt;Brian Granger&lt;/a&gt; and &lt;a href="http://github.com/minrk"&gt;Min Ragan-Kelley&lt;/a&gt; had come on board and we had built the Twisted-based parallel tools. Using this, Min got a notebook prototype working using an SQL/SQLAlchemy backend.&amp;nbsp; We had the opportunity to work on many of these ideas during a workshop on &lt;a href="http://www.msri.org/web/msri/scientific/show/-/event/Wm422" target="_blank"&gt;Interactive Parallel Computation&lt;/a&gt; that William and I co-organized (along with others).&amp;nbsp; Like Sage, this prototype used a browser for the client but it tried to retain the 'IPython experience', something the Sage notebook didn't provide.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Keeping the IPython experience in the notebook&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
This is a key difference of our approach and the Sage notebook, so it' worth clarifying what I mean, the key point being the execution model and its relation to the filesystem.&amp;nbsp; The Sage notebook took the route of using the filesystem for notebook operations, so you can't meaningfully use 'ls' in it or move around the filesystem yourself with 'cd', because Sage will always execute your code in hidden directories with each cell actually being a separate subdirectory. &amp;nbsp;This is a perfectly valid approach and has a number of very good consequences for the Sage notebook, but it is also very different from the IPython model where we always keep the user very close to the filesystem and OS. &amp;nbsp;For us, it's really important that you can access local scripts, use %run, see arbitrary files conveniently, etc., as these are routine needs in data analysis and numerical simulation. &lt;br /&gt;
&lt;br /&gt;
Furthermore, we wanted a notebook that would provide the &lt;i&gt;entire&lt;/i&gt; IPython experience, meaning that magics, aliases, syntax extensions and all other special IPython features worked the same in the notebook and terminal. &amp;nbsp;The Sage notebook reimplemented some of these things in its own way: they reused the % syntax but it has a different meaning, they took some of the IPython introspection code and built their own x?/?? object introspection system, etc. In some cases it's almost like IPython but in others the behavior is fairly different; this is fine for Sage but doesn't work for us.&lt;br /&gt;
&lt;br /&gt;
So we continued with our own efforts, even though by then the Sage notebook was fairly mature. &amp;nbsp;For a number of reasons (I honestly don't recall all the details), Min's browser-based notebook prototype also never reached production quality.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Breaking through our bottleneck and ZeroMQ&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Eventually, in the summer of 2009 we were able to fund Brian to work full-time on IPython, thanks to &lt;a href="http://matthew.dynevor.org/"&gt;Matthew Brett&lt;/a&gt; and &lt;a href="http://jarrodmillman.com/"&gt;Jarrod Millman&lt;/a&gt;, with resources from the &lt;a href="http://nipy.sourceforge.net/"&gt;NiPy project&lt;/a&gt;.&amp;nbsp; Brian could then dig into the heart of the beast, and attack the fundamental problem that made IPython development so slow and hard: the fact that the main codebase was an outgrowth of that original merge from 2001 of my hack, IPP and LazyPython, by now having become an incomprehensible and terribly interconnected mess with barely any test suite. &amp;nbsp;Brian was able to devote a summer full-time to dismantling these pieces and reassembling them so that they would continue to work as before (with only minimal regressions), but now in a vastly more approachable and cleanly modularized codebase.&lt;br /&gt;
&lt;br /&gt;
This is where early 2010 found us, and then zerendipity struck: while on a month-long teaching trip to Colombia I read &lt;a href="http://lwn.net/Articles/370307"&gt;an article about ZeroMQ&lt;/a&gt; and talked to Brian about it, as it seemed to provide the right abstractions for us with a simpler model than Twisted. &amp;nbsp;Brian then blew me away, coming back in &lt;i&gt; two days&lt;/i&gt; with a new set of &lt;a href="https://github.com/zeromq/pyzmq"&gt;clean Cython-based bindings&lt;/a&gt;: we now had pyzmq! It became clear that we had the right tools to build a two-process implementation of IPython that could give us the 'real IPython' but communicating with a different frontend, and this is precisely what we wanted for cleaner parallel computing, multiprocess clients and a notebook. &lt;br /&gt;
&lt;br /&gt;
When I returned from Colombia I had a free weekend and drove down from Berkeley to San Luis Obispo.&amp;nbsp; Upon arriving at Brian's place I didn't even have zeromq installed nor 
had I read any docs about it.&amp;nbsp; I installed it, and Brian simply told me 
what to type in IPython to import the library and open a socket, while 
he had another one open on his laptop.&amp;nbsp; We then started exchanging 
messages from our IPython sessions.&amp;nbsp; The fact that we could be up and running this fast was a good sign that the library was exactly what we wanted.&amp;nbsp; We coded frantically in parallel: one of us wrote the kernel and the other the client, and we'd debug one of them while leaving the other running in the meantime.&amp;nbsp; It was  the perfect blend of pair programming and simultaneous development, and in just two days we had a prototype of a python shell over zmq working, proving that we could indeed build everything we needed.&amp;nbsp; Incidentally, that code may still be useful to someone wanting to understand our basic ideas or how to build an interactive client over ZeroMQ, so I've posted it for reference as a &lt;a href="https://github.com/fperez/zmq-pykernel"&gt;standalone github repository&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Shortly thereafter, we had discussions with Eric Jones and Travis Oliphant at &lt;a href="http://enthought.com/"&gt;Enthought&lt;/a&gt;, who offered to support Brian and I to work in collaboration with &lt;a href="https://github.com/epatters" target="_blank"&gt;Evan Patterson&lt;/a&gt;, and build a Qt console for IPython using this new design. Our little weekend prototype had been just a proof of concept, but their support allowed us to spend the time necessary to apply the same ideas to the real IPython. Brian and I would build a zeromq kernel with all the IPython functionality, while Evan built a Qt console that would drive it using our communications protocol. &amp;nbsp;This worked extremely well, and by late 2010 we had a more or less complete Qt console working:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://ipython.org/ipython-doc/rel-0.11/_static/qtconsole.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://ipython.org/ipython-doc/rel-0.11/_static/qtconsole.png" width="183" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Over the summer of 2010, &lt;a href="http://ipythonzmq.blogspot.com/" target="_blank"&gt;Omar Zapata&lt;/a&gt; and &lt;a href="http://ipythonqt.blogspot.com/" target="_blank"&gt;Gerardo Gutierrez&lt;/a&gt; worked 
as part of the Google Summer of Code project and started building both 
terminal- and Qt-based clients for IPython on top of ZeroMQ.&amp;nbsp; Their task
 was made much harder because we hadn't yet refactored all of IPython to
 use zmq, but the work they did provided critical understanding of the 
problem at this point, and eventually by 0.12 much of it has been 
finally merged.&lt;br /&gt;
&lt;br /&gt;
The value and correctness of this architecture became clear when Brian, Min and I met with the Enthought folks and  Shahrokh Mortazavi and &lt;a href="http://blogs.msdn.com/b/dinoviehland/" target="_blank"&gt;Dino Viehland&lt;/a&gt; from Microsoft.&amp;nbsp; After a single session explaining to Dino and Shahrokh our design and pointing them to our github repository, they were able to build support for IPython into the new &lt;a href="http://pytools.codeplex.com/" target="_blank"&gt;Python Tools for Visual Studio&lt;/a&gt;, &lt;i&gt;without ever asking us a single question&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://i.imgur.com/LCE2Z.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://i.imgur.com/LCE2Z.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
In October 2010 James Gao (a Berkeley neuroscience graduate student) wrote up a quick prototype of a web notebook, demonstrating again that this design really worked well and could be easily used by a completely different client:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-98ABLIXffl0/TwoVhrhHUBI/AAAAAAAAG00/iC66KOIA1xo/s1600/ipython-http.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://4.bp.blogspot.com/-98ABLIXffl0/TwoVhrhHUBI/AAAAAAAAG00/iC66KOIA1xo/s320/ipython-http.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
And finally, in the summer of 2011 Brian took James' prototype and built up a fully working system, this time using websockets, the Tornado web server, JQuery for Javascript, CodeMirror for code editing, and MathJax for LaTeX rendering.&amp;nbsp; Ironically, we had looked at Tornado in early 2010 along with ZeroMQ as a candidate for our communications, but dismissed it as it wasn't really the tool for that job;  it now turned out to be the perfect fit for an asynchronous http server with Websockets support.&lt;br /&gt;
&lt;br /&gt;
We merged Brian's work in late August while working on IRC from a boarding room at the San Francisco airport,  just in time for me to present it at the &lt;a href="http://www.euroscipy.org/talk/4022" target="_blank"&gt;EuroSciPy 2011 conference&lt;/a&gt;.&amp;nbsp; We&amp;nbsp; then polished it over the next few months to finally release it as part of IPython 0.12:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://ipython.org/ipython-doc/rel-0.12/_images/notebook_specgram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://ipython.org/ipython-doc/rel-0.12/_images/notebook_specgram.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Other differences with the Sage notebook&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We deliberately wrote the IPython notebook to be a lightweight, single-user program that feels like any other local application.&amp;nbsp; The Sage notebook draws many parallels with the google docs model, by default requiring a login and showing all of your notebooks together, kept in a location separate from the rest of your files. &amp;nbsp;In contrast, we want the notebook to just start like any other program and for the ipynb files to be part of your normal workflow, ready to be version-controlled just like any other, stored in your normal folders and easy to manage on their own. &lt;i&gt;Update:&lt;/i&gt; as noted by&amp;nbsp;&lt;a href="http://groups.google.com/group/sage-notebook/browse_thread/thread/5f0ccc2f65df59fb"&gt;Jason Grout&lt;/a&gt;, the Sage notebook was designed from the start to scale to big centralized multi-user servers (&lt;a href="http://sagenb.org/"&gt;sagenb.org&lt;/a&gt;, with  about 76,000 accounts, is a good example).&amp;nbsp; The notebook that runs in the local user's computer is the same as the one in these large public servers.&lt;br /&gt;
&lt;br /&gt;
There are other deliberate differences of interface and workflow:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;We keep our In/Out prompts explicit because we have an entire system of caching variables that uses those numbers, and because those numbers give the user a visual clue of the execution order of cells, which may differ from the document's order.&lt;/li&gt;
&lt;li&gt;We deliberately chose a structured JSON format for our documents. It's clear enough for human reading while allowing easy and powerful machine manipulation without having to write our own parsing. &amp;nbsp;So writing utilities like a reStructuredText or LaTeX converter  is very easy, &lt;a href="https://gist.github.com/1569580"&gt;as we recently showed&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Our move to zmq allowed us (thanks to &lt;a href="https://plus.google.com/116141806100272241943/about" target="_blank"&gt;Thomas Kluyver's&lt;/a&gt; tireless work) to ship the notebook working both on Python2 and Python3 out of the box. &amp;nbsp;The current version of the&amp;nbsp; Sage notebook only works on Python2, in part due to its use of Twisted.&amp;nbsp; &lt;i&gt;Update:&lt;/i&gt; William &lt;a href="http://groups.google.com/group/sage-notebook/browse_thread/thread/5f0ccc2f65df59fb" target="_blank"&gt;pointed out to me&lt;/a&gt; that the upcoming 5.0 version of the notebook will have a vastly reduced dependency on Twisted, so this will soon be less of an issue for Sage.&lt;/li&gt;
&lt;li&gt;Because our notebook works in the normal filesystem, and lets you create .py files right next to the .ipynb just by passing --script at startup, you can reuse your notebooks like normal scripts, import one notebook from another or a normal python script, etc. &amp;nbsp;I'm not sure how to import a Sage notebook from a normal python file, or if it's even possible.&lt;/li&gt;
&lt;li&gt;We have a long list of plans for the document format: multi-sheet capabilities, LaTeX-style preamble, per-cell metadata, structural cells to allow outline-level navigation and manipulation such as in LyX, improved literate programming and validation/reproducibility support, ... For that, we need to control the document format ourselves so we can evolve it according to our needs and ideas.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
As you see, there are indeed a number of key differences between our notebook and the sage one, but there are very good technical reasons for this.&amp;nbsp; The notebook integrates with our architecture and leverages it; you can 
for example use the interactive debugger via a console or qtconsole 
against a notebook kernel, something not possible with the sage 
notebook.&lt;br /&gt;
&lt;br /&gt;
In addition, Sage is GPL licensed while IPython is BSD licensed.&amp;nbsp; This means we can not directly reuse their code, though when we have asked them to relicense specific pieces of code to us, they have always agreed to do so. But large-scale reuse of Sage code in IPython is not really viable.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;The value of being the slowest in the race&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
As this long story shows, it has taken us a very long time to get
 here. But what we have now makes a lot of sense for us, even considering 
the existence of the Sage notebook and how good it is for many use 
cases. Our notebook is just one particular aspect of a 
large and rich architecture built around the concept of a Python 
interpreter abstracted over a JSON-based, explicitly defined &lt;a href="http://ipython.org/ipython-doc/rel-0.12/development/messaging.html" target="_blank"&gt;communications protocol&lt;/a&gt;.&amp;nbsp;
 Even considering purely http clients, the notebook is still just one of
 many possible: you can easily build an interface that only evaluates a 
single cell with a tiny bit of javascript like the Sage single cell 
server, for example.&lt;br /&gt;
&lt;br /&gt;
Furthermore, since Min also reimplemented our &lt;a href="http://ipython.org/ipython-doc/rel-0.12/parallel/index.html" target="_blank"&gt;parallel machinery&lt;/a&gt;
 completely with pyzmq, now we have one truly common codebase for all of
 IPython. We still need to finish up a bit of integration between the 
interactive kernels and the parallel ones, but we plan to finish that 
soon.&lt;br /&gt;
&lt;br /&gt;
In many ways, our slow pace of development paid off:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;We had multiple false starts that helped us much to better understand the hard parts of the problem and where the dead ends would lie.&lt;/li&gt;
&lt;li&gt;We were still thinking about this all the time: even when we couldn't spare the time to actively work on it, we had no end of discussions on these things over the years (esp. Brian, Min and I, but also with others at meetings and conferences).&lt;/li&gt;
&lt;li&gt;The Sage notebook was a great trailblazer showing both what could be done, and also how there were certain decisions that we wanted to make differently.&lt;/li&gt;
&lt;li&gt;The technology of some critical third-party tools caught up in an amazing way: ZeroMQ, Tornado, WebSockets, MathJax, and the  fast and capable Javascript engines in modern browsers along with good JS libraries. Without these tools we couldn't possibly have implemented what we have now.&lt;/li&gt;
&lt;/ul&gt;
As much as we would have loved to have a solid notebook years ago in IPython, I'm actually happy at how things turned out.&amp;nbsp; We have now a very nice mix of our own implementation for the things that are really within our scope, and leveraging third party tools for critical parts that we wouldn't want to implement ourselves.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;What next?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We have a lot of ideas for the notebook, as we want it to be the best possible environment for modern computational work (scientific work is our focus, but not its only use), including research, education and publication, with consistent support for clean and reproducible practices throughout.&amp;nbsp; We are fairly confident that the core design and architecture are extremely solid, and we already have a &lt;a href="https://github.com/ipython/ipython/issues/977" target="_blank"&gt;long list of ideas and improvements&lt;/a&gt; we want to make.&amp;nbsp; We are limited only by manpower and time, so please &lt;a href="https://github.com/ipython/ipython" target="_blank"&gt;join us on github and pitch in&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
Since this post was motivated by questions about Sage, I'd like to emphasize that we have had multiple, productive collaborations with William and other Sage developers in the past, and I expect that to continue to be the case. &amp;nbsp;On certain points that collaboration has already led to convergence; e.g. the new Sage single cell server uses the IPython messaging protocol, after we worked closely with &lt;a href="http://artsci.drake.edu/grout/doku.php/home"&gt;Jason Grout&lt;/a&gt; during &lt;a href="http://wiki.sagemath.org/days29"&gt;Sage Days 29&lt;/a&gt; in March 2011 thanks to William's invitation.&amp;nbsp; Furthermore, William's invitations to several Sage Days events, as well as the workshops we have organized together over the years, offered multiple opportunities for collaboration and discussion that proved critical on the way to today's results.&lt;br /&gt;
&lt;br /&gt;
In the future we may find other areas where we can reuse tools or approaches common to Sage and IPython. &amp;nbsp;It is clear to us that the Sage notebook is a fantastic system, it just wasn't the right fit for IPython. I hope this very long post illustrates why, as well as providing some insights into our vision for scientific computing.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Last, but not least&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
From this post it should be obvious that what  today's IPython is the result of the work of many talented people over the years, and I would like to thank all the developers and users who contribute to the project.&amp;nbsp; But it's especially important to recognize the stunning quality &lt;i&gt;and&lt;/i&gt; quantity of work that Brian Granger and Min Ragan-Kelley have done for this to be possible.&amp;nbsp; Brian and I did our PhDs together at CU and we have been close friends since then. Min was an undergraduate student of Brian's while he was a professor at U. Santa Clara and the first IPython parallel implementation using Twisted was his senior thesis project; he is now a PhD student at Berkeley (where I work) so we continue to be able to easily collaborate.&amp;nbsp; Building a project like IPython with  partners of such talent, dedication, tenacity and generous spirit is a wonderful experience. Thanks, guys!&lt;br /&gt;
&lt;br /&gt;
Please notify me in the comments of any inaccuracies in the above, especially if I failed to credit someone.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-6712526932591474288?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2012/01/ipython-notebook-historical.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-98ABLIXffl0/TwoVhrhHUBI/AAAAAAAAG00/iC66KOIA1xo/s72-c/ipython-http.png' height='72' width='72'/><thr:total>12</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-2860531467667482856</guid><pubDate>Thu, 19 May 2011 07:00:00 +0000</pubDate><atom:updated>2011-05-19T00:04:09.692-07:00</atom:updated><title>Austin trip: IPython at TACC and DataArray summit at Enthought</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;

&lt;h2&gt;TACC Software Days&lt;/h2&gt;

I recently had the chance to speak at the UT Austin &lt;a href="http://www.tacc.utexas.edu/"&gt;Texas Advanced Computing Center&lt;/a&gt;, during their &lt;a href="http://www.tacc.utexas.edu/news/events/110502-scientific-software-days/"&gt;Fifth Annual Scientific Software Day&lt;/a&gt; thanks to a kind invitation by &lt;a href="http://www.beg.utexas.edu/personnel_ext.php?id=30"&gt;Sergey Fomel&lt;/a&gt; and &lt;a href="http://tacc-web.austin.utexas.edu/staff/home/veijkhout/public_html/"&gt;Victor Eijkhout&lt;/a&gt;.&amp;nbsp; Since the audience wasn't specifically composed of Python users, I gave a general introduction to Python's role in scientific computing, but then spent most of my time presenting some of the recent work we've been doing on IPython, extending the model of basic interactive computing in what I think are interesting directions with multiple client models and new parallel computing interfaces. Sergey had asked me to provide a somewhat personal account, so the presentation is fairly biased towards my own path (and therefore IPython) through the scipy effort.&amp;nbsp; Since the foucs of TACC is high-performance computing, I hope some of our new functionality on the IPython front will be useful to such users.&lt;br /&gt;
&lt;br /&gt;
There were some very interesting presentations about the &lt;a href="http://z.cs.utexas.edu/wiki/flame.wiki/FrontPage"&gt;FLAME&lt;/a&gt; linear algebra library. I did my best to convince &lt;a href="http://z.cs.utexas.edu/wiki/flame.wiki/Team/RobertVanDeGeijn"&gt; Robert van de Geijn&lt;/a&gt; of the interest there would be in the scientific Python community for exposing FLAME to Python, possibly as an alternative backend for the linear algebra machinery in scipy.&amp;nbsp; Since FLAME uses a fair amount of code generation, I think the dynamic properties of Python would make it a great fit for the FLAME paradigm.&amp;nbsp; We had some interesting discussions on this, we'll see where this develops...&lt;br /&gt;

&lt;h2&gt;Datarray summit at Enthought&lt;/h2&gt;

In conjunction with this visit, we had been trying to organize a meeting at Enthought to make some progress on the &lt;a href="https://github.com/fperez/datarray"&gt;datarray&lt;/a&gt; effort that was started after last year's scipy conference.&amp;nbsp; I'd like to thank Sergey for kindly allowing my UT-funded visit to extend into the datarray summit.&amp;nbsp; Enthought brought a large contingent of their in-house team (developers and interns like Mark Wiebe of numpy fame), and invited Wes Mc Kinney (&lt;a href="http://code.google.com/p/pandas/"&gt;pandas&lt;/a&gt;) and Matthew Brett (&lt;a href="http://nipy.sourceforge.net/"&gt;nipy&lt;/a&gt;) to participate (as well as others who couldn't make it).&amp;nbsp; In all we had roughly 15 people, with Travis Oliphant, Eric Jones, Robert Kern, Peter Wang and Corran Webster --all very experienced numpy users/developers-- participating for most of the meeting, which was both a lot of fun and very productive.&amp;nbsp; The datarray effort has continued to progress but fairly slowly, mostly due to my being timesliced into oblivion.&amp;nbsp; But I remain convinced it's a really important piece of the puzzle for scientific python to really push hard into high-level data analysis, and I'm thrilled that Enthought is putting serious resources into this.&lt;br /&gt;
&lt;br /&gt;
We spent a lot of time on the first day going over use cases coming from many different fields, and then dove into the API design questions, using the current code in the &lt;a href="https://github.com/fperez/datarray"&gt;datarray repository&lt;/a&gt; as a starting point.&amp;nbsp; It has become very clear that one key piece of functionality we can't ignore is allowing for axis labels to be integers (without any assumption of ordering, continuity or monotonicity). This proves to be surprisingly tricky to accomodate, because the assumption that integers are indices for array ranging from 0 to n-1 in any dimension goes very deep in all slicing operations, so allowing for integers with different semantics requires a fair amount of API gymnastics.&lt;br /&gt;
&lt;br /&gt;
Not everything is fully settled (and I missed some of the details because I could not stay until the very end), but it's clear that we will have integer labels, and that the main entry point for all axis slicing will be a .axes attribute. This will likely provide the basic named axis attribute-based access, as well as dictionary-style access to computed axes.&amp;nbsp; We will also probably have one method ('slice' was the running name when I left) for slicing with more elaborate semantics, so that we can resolve the ambiguities of integer labeling without resorting to obscure magic overloads (numpy already has enough of those with things like ogrid[10:20:3j], where that "complex slice step" is always fun to explain to newcomers).&lt;br /&gt;
&lt;br /&gt;
We just completed &lt;a href="http://inscight.org/2011/05/18/episode_13/"&gt;an episode&lt;/a&gt; of the &lt;a href="http://inscight.org/"&gt;inSCIght podcast&lt;/a&gt; that contains some more discussion about this with Travis and Wes.&amp;nbsp; I really hope we won't lose the momentum we seem to have picked up and that over the next few months this will start taking shape into production code.&amp;nbsp; I know we need it, badly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-2860531467667482856?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2011/05/austin-trip-ipython-at-tacc-and.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>6</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-6150146107438498319</guid><pubDate>Wed, 06 Apr 2011 06:37:00 +0000</pubDate><atom:updated>2011-04-05T23:37:34.571-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><title>Python goes to Reno: SIAM CSE 2011</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-CsAvluL4mWk/TZuoxLlWQ4I/AAAAAAAAGIw/vysUbgWjjZU/s1600/img_4033.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-CsAvluL4mWk/TZuoxLlWQ4I/AAAAAAAAGIw/vysUbgWjjZU/s200/img_4033.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
In what's becoming a bit of a &lt;a href="http://blog.fperez.org/2009/03/python-at-siam-cse09-meeting.html"&gt;tradition&lt;/a&gt;, Simula's &lt;a href="http://simula.no/people/hpl"&gt;Hans-Petter Langtangen&lt;/a&gt;, U. Washington's &lt;a href="http://www.amath.washington.edu/%7Erjl/"&gt;Randy LeVeque&lt;/a&gt; and I co-organized yet another minisymposium on Python for Scientific computing at a SIAM conference.&lt;br /&gt;
&lt;br /&gt;
At the &lt;a href="http://www.siam.org/meetings/cse11"&gt;Computational Science and Engineering 2011 meeting&lt;/a&gt;, held in Reno February 28-March 4, we had 2 sessions with 4 talks each (&lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=11706"&gt;part I&lt;/a&gt; and &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=11707"&gt;II&lt;/a&gt;).&amp;nbsp; I have put together &lt;a href="http://fperez.org/events/2011_siam_cse/"&gt;a page&lt;/a&gt; with all the slides I got from the various speakers, that also includes slides from python-related talks in other minisymposia.&amp;nbsp; I have also posted &lt;a href="https://picasaweb.google.com/fdo.perez/SIAMCSE2011InReno"&gt;some pictures&lt;/a&gt; from our sessions and from the &lt;span id="goog_512552003"&gt;&lt;/span&gt;&lt;a href="http://jarrodmillman.com/events/siam2011.html"&gt;minisymposium on reproducible research&lt;span id="goog_512552004"&gt;&lt;/span&gt;&lt;/a&gt; that my friend and colleague Jarrod Millman organized during the same conference.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cTVlPL5QBcw/TZuoyUHOZwI/AAAAAAAAGJA/41tQiHVjWuk/s1600/img_4043.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-cTVlPL5QBcw/TZuoyUHOZwI/AAAAAAAAGJA/41tQiHVjWuk/s200/img_4043.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
We had great attendance, with a standing-room-only crowd for the first session, something rather unusual during the parallel sessions of a SIAM conference.&amp;nbsp; But more importantly, this year there were three other sessions entirely devoted to Python in scientific computing at the conference, organized completely independently from ours.&amp;nbsp; One focused on PDEs and the other on optimization.&amp;nbsp; Furthermore, there were scattered talks at several other sessions where Python was explicitly discussed in the title or abstract.&amp;nbsp; For all of these, &lt;a href="http://fperez.org/events/2011_siam_cse/"&gt;I have collected&lt;/a&gt; the slides I was able to get; if you have slides for one such talk I failed to include, please &lt;a href="mailto:fernando.perez@berkeley.edu"&gt;contact me&lt;/a&gt; and I'll be happy to post them there.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Unfortunately for our audience, we had last-minute logistical complications that prevented Robert Bradshaw and John Hunter from attending, so I had to deliver the Cython and matplotlib talks (in addition to my IPython one).&amp;nbsp; Having a speaker give three back-to-back talks isn't ideal, but both of them kindly prepared all the materials and "delivered" them to me over skype the day before, so hopefully the audience got a reasonable simile of their original intent. It's a shame, since I know first-hand how good both of them are as speakers, but canceling talks on these two key tools would really have been a disservice to everyone; my thanks go to the SIAM organizers who  were flexible enough to allow for this to happen.&amp;nbsp; Given how packed the room was, I'm sure we made the right choice.&lt;br /&gt;
&lt;br /&gt;
It's now abundantly clear from this level of interest that Python is being very successful in solving real problems in scientific computing.&amp;nbsp; We've come a long way from the days when some of us (I have painful memories of this) had to justify to our colleagues/advisors why we wanted to 'play' with this newfangled 'toy' instead of just getting on with our job using the existing tools (in my case it was IDL, a hodgepodge of homegrown shell/awk/sed/perl scripting, custom C and some Gnuplot thrown in the mix for good measure).&amp;nbsp; Things are by no means perfect, and there's plenty of problems to solve, but we have a great foundation, a number of good quality tools that continue to improve as well as our most important asset: a rapidly growing community that is solving new problems, creating new libraries and coming up with innovative approaches to computational and mathematical questions, often facilitated by Python's tremendous flexibility. It's been a fun ride so far, but I suspect the next decade is going to be even more interesting.&amp;nbsp; If you missed this, try to make it to &lt;a href="http://conference.scipy.org/scipy2011/"&gt;SciPy 2011&lt;/a&gt; or &lt;a href="http://www.euroscipy.org/conference/euroscipy2011"&gt;EuroSciPy 2011&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Link summary&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;a href="http://fperez.org/events/2011_siam_cse/"&gt; Slides for all Python talks at the conference. &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://picasaweb.google.com/fdo.perez/SIAMCSE2011InReno"&gt;Pictures&lt;/a&gt; from our MS and the reproducible research one.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jarrodmillman.com/events/siam2011.html"&gt;Slides for the reproducible research MS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-4VzxpaEhJhc/TZuoyMGDQkI/AAAAAAAAGI8/5suh20lqTmk/s1600/img_4040.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-4VzxpaEhJhc/TZuoyMGDQkI/AAAAAAAAGI8/5suh20lqTmk/s320/img_4040.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-6150146107438498319?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2011/04/python-goes-to-reno-siam-cse-2011.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-CsAvluL4mWk/TZuoxLlWQ4I/AAAAAAAAGIw/vysUbgWjjZU/s72-c/img_4033.jpg' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-6511530217000784521</guid><pubDate>Wed, 30 Mar 2011 08:22:00 +0000</pubDate><atom:updated>2011-03-30T01:24:47.372-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>IPython and scientific Python go to Sage Days 29</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Last week I was in Seattle, attending part of of the &lt;a href="http://wiki.sagemath.org/days29/"&gt;Sage Days 29&lt;/a&gt; workshop, which had a strong focus on the more numerical/applied topics and the 'scipy ecosystem', as it's funded by William Stein's &lt;a href="http://modular.math.washington.edu/grants/compmath09/"&gt;Sage: Unifying Mathematical Software for Scientists, Engineers, and Mathematicians&lt;/a&gt; grant.&lt;br /&gt;
&lt;br /&gt;
I gave a talk that covered topics that are fairly familiar to many in the scipy community, about using Python for numerical work, but was intended to address many from the Sage group who come from a pure mathematics/number theory background.&amp;nbsp; I have posted the &lt;a href="http://fperez.org/talks/1103_uwashington.pdf"&gt;PDF of my slides&lt;/a&gt;; William recorded the talk and posted it online, as well as posting
&lt;a class="reference external" href="http://www.facebook.com/album.php?aid=296597&amp;amp;id=504538681&amp;amp;l=399cb27a8c"&gt;some pictures from the last day&lt;/a&gt; (the anecdote
about how I unplugged Colombia from the internet when I was a physics
undergrad is from 0:11:20 to 0:14:12):&lt;br /&gt;
&lt;br /&gt;
&lt;div align="center"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="283" src="http://www.youtube.com/embed/1j_HxD4iLn8" title="YouTube video player" width="450"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
For me, the bulk of the workshop's focus was to make progress on IPython.&amp;nbsp; &lt;a href="http://takluyver.wordpress.com/"&gt;Thomas Kluyver&lt;/a&gt;, a new core IPython developer, was able to take a week off from his studies and attend from his home in Sheffield; it was great to meet Thomas in person, given the fantastic work he has done on the project in the recent months.&amp;nbsp; He's been extremely productive and got us out from a number of areas were we had been somewhat stuck, so I'm looking forward to a lot more collaboration with him in the future.&amp;nbsp; &lt;a href="https://github.com/minrk"&gt;Min Ragan-Kelley&lt;/a&gt; was also present, and &lt;a href="http://www.calpoly.edu/%7Ephys/faculty_pages/bgranger.html"&gt;Brian Granger&lt;/a&gt; unfortunately couldn't make it but joined us for a number of long skype-based discussions.&amp;nbsp; &lt;a href="http://pirsquared.org/"&gt;Paul Ivanov&lt;/a&gt;, who was officially on matplotlib duty, also helped us a lot with a number of bugs and new pull requests.&lt;br /&gt;
&lt;br /&gt;
In the end, we had a &lt;i&gt;tremendously&lt;/i&gt; productive three days.&amp;nbsp; We &lt;a href="http://wiki.sagemath.org/days29/bugs"&gt;closed 66 tickets&lt;/a&gt; in total.&amp;nbsp; Many of these were triage work, but that's still very useful, and we also did major code review to merge most of the outstanding pull requests, as well as having detailed design discussions on the newparallel branch that will provide zeromq-based high-level parallel tools.&amp;nbsp;&amp;nbsp; We now see light at the end of the tunnel, and I think we'll be able to release the massive amount of work we've been calling IPython 0.11 in a matter of weeks.&amp;nbsp; I'll write in more detail later on that topic, but at least I think those willing to run code from git master can start playing with it now.&amp;nbsp; Things are shaping up quickly, and we'd love to get feedback from early adopters to solidify the APIs.&lt;br /&gt;
&lt;br /&gt;
I'm extremely pleased with this workshop: for IPython the progress was massive, and I think the outcome was similar for numpy, matplotlib and the others.&amp;nbsp; These highly focused development meetings, when held in a good environment (and&amp;nbsp; the UW facilities we had, in their gorgeous new PACCAR hall, were spectacular), can really be amazingly productive.&amp;nbsp; A big thank you to William for the funding and all the organization/logistical work!&lt;br /&gt;
&lt;br /&gt;
Now I just have to get caught up with the other million things that piled up on my inbox/todo in the meantime...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-6511530217000784521?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2011/03/ipython-and-scientific-python-go-to.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/1j_HxD4iLn8/default.jpg' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-734996727988286759</guid><pubDate>Sun, 20 Feb 2011 07:45:00 +0000</pubDate><atom:updated>2011-04-03T00:15:01.621-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Reproducible Research at the AAAS 2011 meeting in Washington, DC</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;a href="http://3.bp.blogspot.com/-zcO5vp5KCvI/TWDFe_gnpaI/AAAAAAAAF-4/77eJP1JZRDU/s1600/img_3956.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-zcO5vp5KCvI/TWDFe_gnpaI/AAAAAAAAF-4/77eJP1JZRDU/s320/img_3956.jpg" style="cursor: move;" width="240" /&gt;&lt;/a&gt;&lt;b&gt;Update:&lt;/b&gt; added links to other related posts, significantly expanded the
section on Git and Github for scientific work.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Link summary:&lt;/b&gt; &lt;a href="http://www.stanford.edu/%7Evcs/AAAS2011/"&gt;Page with abstracts and slide links&lt;/a&gt;, &lt;a href="http://blog.stodden.net/2011/02/20/my-symposium-at-the-aaas-annual-meeting-the-digitization-of-science/"&gt;Victoria Stodden's blog&lt;/a&gt;, &lt;a href="http://languagelog.ldc.upenn.edu/nll/?p=2976"&gt;Mark Liberman's blog&lt;/a&gt;,&amp;nbsp;&lt;a class="reference external" href="http://fperez.org/talks/1102_aaas_reproducibility_fperez_slides.pdf"&gt;my slides&lt;/a&gt; and &lt;a class="reference internal" href="http://fperez.org/talks/1102_aaas_reproducibility_fperez_extabs.pdf"&gt;extended abstract&lt;/a&gt;, &lt;a href="http://www.stanford.edu/%7Evcs/AAAS2011/DigitizationOfScience_AAAS2011.mp4"&gt;audio&lt;/a&gt; (my talk is at time &lt;span style="font-size: 1em;"&gt;&lt;span style="font-size: 1em;"&gt;&lt;span style="font-size: 1em;"&gt;53:25 to 1:10:47).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
At this year's AAAS meeting, currently taking place in DC (in unseasonably warm
and sunny weather), &lt;a class="reference external" href="http://www.stanford.edu/%7Evcs"&gt;Victoria Stodden&lt;/a&gt; from the statistics department at
Columbia, organized a &lt;a class="reference external" href="http://aaas.confex.com/aaas/2011/webprogram/Session3166.html"&gt;symposium&lt;/a&gt; titled &lt;i&gt;The Digitization of Science:
Reproducibility and Interdisciplinary Knowledge Transfer&lt;/i&gt; that was very well
attended.&lt;br /&gt;
&lt;div class="section" id="lessons-from-the-open-source-software-world"&gt;
&lt;h1&gt;








Lessons from the Open Source software world&lt;/h1&gt;
I have tagged this post with "Python" because my take on the matter was to
contrast the world of classic research/academic publishing with the practices
of open source software development, and what little I know about that (as well
as some specific tools I mentioned, like &lt;a class="reference external" href="http://sphinx.pocoo.org/"&gt;Sphinx&lt;/a&gt;), I picked up from the world
of open source scientific Python projects I'm involved with, from &lt;a class="reference external" href="http://ipython.scipy.org/"&gt;IPython&lt;/a&gt;
onwards.  My argument is that the tools and practices from the open source
community in fact come much closer to the scientific ideals of reproducibility
than much of what is published in scientific journals today.&lt;br /&gt;
&lt;br /&gt;
The OSS world is basically forced to do this, because people across the world
are collaborating on developing a project from different computing
environments, operating systems, library versions, compilers, etc.  Without
very strong systems for provenance tracking (aka version control), automatic
testing and good quality documentation, this task would be simply impossible.
But many of these tools can be adapted for use in everyday scientific work; for
some use cases they work extremely well, for others there's still room for
improvement, but overall we can and should take these lessons into everyday
scientific practice.&lt;br /&gt;
&lt;br /&gt;
In my talk, I spent a fair amount of time discussing the Git version control
system, not in terms of its technical details, but rather trying to point out
how it should not be viewed just as a tool for software development, but
instead as something that can be an integral part of all aspects of the
research process.  Git is a powerful and sophisticated system for provenance
tracking that automatically validates data integrity by design: Linus Torvalds
wanted to ensure that every commit operation is signed with a hash of its
contents &lt;i&gt;plus&lt;/i&gt; the hash of its dependencies (for details on this, his
sometimes abrasive &lt;a class="reference external" href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;Google Tech Talk about Git&lt;/a&gt; is an excellent reference).
This simple idea ensures that a single byte change &lt;i&gt;anywhere&lt;/i&gt; in the entire
repository can be detected automatically.&amp;nbsp; I keep an informal page of &lt;a href="http://fperez.org/py4science/git.html"&gt;Git resources&lt;/a&gt; for those looking tot get started.&lt;br /&gt;
&lt;br /&gt;
I use Git for just about all my activities at the computer that require
manually creating content, with repositories not only for research projects
that involve writing standalone libraries, but also for papers, grant
proposals, data analysis research, and even teaching.  Its distributed nature
(every copy of the repository has all the project's history) makes it
automatically much more resilient to failures than a more limited legacy tool
like Subversion and its strong branching and merging capabilities make it great
for exploratory work (something that is painful to achieve with SVN).  Git is
also the perfect way to collaborate on projects: all members have full
versioning control, can commit work as they need it, and can make visible to
collaborators only what they deem ready for sharing (this is impossible to do
with SVN).  Writing a multiauthor paper or grant proposal with Git is a far
saner, more efficient and less error prone process than the common madness of
emailing dozens or hundreds of attachments every which way between multiple
people (for those who think Dropbox suffices for collaborative writing: it's
like using a wood saw for brain surgery; Dropbox is great for many things and I
love it, but it's not the tool for this problem).  I have also used Git for
teaching, by creating a public repository for all course content and individual
repositories for each student that only the student, the teaching assistants
and myself can access.  This enables students to fetch all new class content
with a simple:&lt;br /&gt;
&lt;pre class="literal-block"&gt;git pull
&lt;/pre&gt;
instead of clicking on tens of files in some web-based interface (the typical
system used by many universities).  A single clone operation can reconstruct
the entire class repository on another computer if they need to use it in more
than one place or lose their old copy.  And when it's time to submit the
homework, instead of emailing or uploading anything, all they need to do is:&lt;br /&gt;
&lt;pre class="literal-block"&gt;git push
&lt;/pre&gt;
and the TAs have immediate access to all their work, including its development
history.  In this manner, not only is the process vastly smoother and simpler
for all involved, but the students learn to use version control as a natural
tool that is simply part of their daily workflow.&lt;br /&gt;
&lt;br /&gt;
I also tried to highlight the role played by the &lt;a class="reference external" href="http://github.com/"&gt;GitHub&lt;/a&gt; service as an enabler
of collaboration.  While Git can be used (and it is extremely useful in this
mode) on a single computer without any server support, the moment several
people want to share their repositories for collaborative work, some kind of
persistent server is the best solution.  GitHub, a service that is free for
Open Source projects and that offers paid plans for non-public work, has a
number of brilliant features that make the collaboration process amazingly
useful.  Github makes it trivial for new contributors to begin participating in
a project by &lt;i&gt;forking&lt;/i&gt; it (i.e. getting their personal copy to work on), and if
they want their work to be incorporated into the project, they can make a &lt;i&gt;pull
request&lt;/i&gt;.  The original authors then review the proposed changes, comment on
them (including making line-specific comments with a single click), and once
all are satisfied with the outcome, integrate them.  This is effectively a
public peer review system that, while created for software development, can be
equally useful for collaborative authorship of a research project.&lt;br /&gt;
&lt;br /&gt;
I should add, however, that I think there's still room for improvement
regarding Git as a tool for pervasive use in the scientific workflow. As much
as I absolutely love Git, it's a tool tailored for &lt;i&gt;source code&lt;/i&gt; tracking and
its atomic unit of change is the line of code.  As such, it doesn't work as
conveniently when tracking for example changes in a paper (even if written in
TeX), where a small change can reflow a whole paragraph, showing a diff that is
much larger than the real change.  In this case, the "track changes" features
of word processors actually work better at showing the specific changes made
(despite the fact that I think they make for a horrible interface for the
overall workflow) [&lt;i&gt;Note&lt;/i&gt;: in the comments below, a reader indicates that the
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--word-diff&lt;/span&gt;&lt;/tt&gt; option solves this problem, though I think it requires a very
new version of Git, 1.7.2 at least.  But it's fantastic to see this kind of
improvement being already available].  And for tracking changes to binary
files, there's simply no meaningful diff available.  It would be interesting to
see new ideas for improving something like git for these kinds of use cases.&lt;br /&gt;
&lt;br /&gt;
I wrapped things up with a short mention of the new &lt;a class="reference external" href="http://www.openresearchcomputation.com/"&gt;Open Research
Computation&lt;/a&gt; journal, where Victoria and I are members of the editorial board,
as well as several well-known contributors to the scientific Python ecosystem,
including Titus Brown, Hans-Petter Langtangen, Jarrod Millman, Prabhu
Ramachandran and Gaël Varoquaux.&lt;br /&gt;
&lt;span class="target" id="extended-abstract"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="section" id="other-presentations"&gt;
&lt;h1&gt;








Other presentations&lt;/h1&gt;
I spoke after &lt;a class="reference external" href="http://odin.mdacc.tmc.edu/%7Ekabaggerly"&gt;Keith Baggerly&lt;/a&gt; and Victoria.  Keith presented an amazing
dissection of the (ongoing) scandal with the Duke University &lt;a class="reference external" href="http://bioinformatics.mdanderson.org/Supplements/ReproRsch-All"&gt;cancer clinical
trials&lt;/a&gt; that has seen extensive media coverage.  This case is a bone-chilling
example of the worst that can happen when unreproducible research is used as
the base for decisions that impact the health and lives of human beings.  Yet,
despite the rather dark subject, Keith's talk was one of the most lively and
entertaining presentations I've seen at a conference in a long time.  Victoria
discussed the legal framework in which we can begin considering the problem of
reproducible computational research; she was instrumental in the NSF's new
grant guidelines now having a mandatory data management plan section.  She has
the unique combination of both a computational and a legal background, which is
very necessary to tackle this problem in a meaningful way (since licensing,
copyright and other legal issues are central to the discussion).&lt;br /&gt;
&lt;br /&gt;
Afterwards, Michael Reich from the Broad Institute presented the &lt;a class="reference external" href="http://genepattern.org/"&gt;GenePattern&lt;/a&gt;
project, an impressive genomic analysis platform that includes provenance
tracking and workflow execution, as well as a plug-in for Microsoft Word to
connect documents with the execution engine.  While the Word graphical user
interface would likely not be my environment of use, the GenePattern system
seems to be very well thought out and useful.  The last three talks were by
Robert Gentleman of &lt;a class="reference external" href="http://www.bioconductor.org/"&gt;BioConductor&lt;/a&gt; fame, David Donoho --Victoria's PhD advisor
and a pioneer in posing the problem of reproducibility in computational work
together with Jon Claerbout, and finally Mark Liberman of U. Penn (see &lt;a class="reference external" href="http://languagelog.ldc.upenn.edu/nll/?p=2976"&gt;Mark's
blog&lt;/a&gt; for his take on the symposium).&lt;br /&gt;
&lt;br /&gt;
I think the symposium went very well; there was lively discussion with the
audience and good attendance.  A journalist made a good point on how
improvements on the reproducibility front are important for them, when they are
trying to do their job of reporting to a sometimes skeptical public the results
of scientific work.  If our work is made available with strong, credible
guarantees of reproducibility, it will be that much more easily presented to a
society which ultimately decides whether to support the scientific endeavor (or
not).&lt;br /&gt;
&lt;br /&gt;
There is a lot of room for improvement, as Keith Baggerly's talk painfully
reminded us.  But I think that finally the climate is changing, and in this
case in the right direction: the tools are improving, people are interested,
funding agencies are modifying their policies and so are journals.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-734996727988286759?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2011/02/reproducible-research-at-aaas-2011.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-zcO5vp5KCvI/TWDFe_gnpaI/AAAAAAAAF-4/77eJP1JZRDU/s72-c/img_3956.jpg' height='72' width='72'/><thr:total>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-7151444569405456869</guid><pubDate>Wed, 16 Dec 2009 07:12:00 +0000</pubDate><atom:updated>2009-12-16T09:16:46.241-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Scientific Python tools use rising in education</title><description>It's pretty clear to me that Python is rapidly growing in acceptance as a
computational platform at universities everywhere.  I recently heard from &lt;a class="reference external" href="http://astro.berkeley.edu/%7Ejbloom/"&gt;Josh
Bloom&lt;/a&gt; at UC Berkeley astronomy that his proposal for a short 'boot camp'
course at the beginning of the Fall semester was approved.  This is excellent
news, last year I taught &lt;a class="reference external" href="http://fperez.org/py4science/workshop_berkeley_2008.html"&gt;something similar&lt;/a&gt; for neuroscience students and
postdocs, and I'm glad to see the campus adopting python further as a key
component of the computational training the science students receive.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_GrnE9RsNeYQ/SyiGdYdGjGI/AAAAAAAAE9s/wrfimOWkZMk/s1600-h/img_0443.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GrnE9RsNeYQ/SyiGdYdGjGI/AAAAAAAAE9s/wrfimOWkZMk/s320/img_0443.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://matplotlib.sf.net/"&gt;John Hunter&lt;/a&gt; and I just completed a few days ago teaching another such workshop
at the Claremont Colleges, supported by an NSF grant that &lt;a class="reference external" href="http://faculty.jsd.claremont.edu/jmilton/"&gt;John Milton&lt;/a&gt;,
(J. Hunter's PhD advisor) has for exposing undergraduates to a number of
research-related experiences.  This grant supports summer research internships
where two undergrads visit together a research lab away from their home campus to work
independently on a project, as well as our teaching of scientific python tools (we were also
there in 2008 and hopefully will continue next year).&lt;br /&gt;
&lt;br /&gt;
I have to say that I really enjoy teaching this type of workshop, especially
now that the core tools are fairly mature, installation isn't the problem it
used to be, and we have a chance of presenting interesting examples to the
students from the very beginning.  By now we've taught a number of these at various labs and universities, and I think we've found a good workflow.&amp;nbsp; John is a phenomenal lecturer, with a
real knack for illustrating interesting concepts on the fly, in a very natural
manner that is honestly similar to how exploratory work is &lt;i&gt;actually&lt;/i&gt; done in
real research, where you run a bit of code, plot some results, print a few
things, code some more, etc.  In the picture above, he was working through some
of the &lt;a class="reference external" href="http://matplotlib.sourceforge.net/users/image_tutorial.html"&gt;matplotlib image tutorial&lt;/a&gt;, which gave us
an opportunity to find and fix a small bug in how the luminance histogram was
being computed (the current form is correct).  Every one of these students
probably has a digital camera these days (if nothing else, in a cell phone), so
an example like this is a great way to connect something they are used to with
mathematical and programming concepts.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_GrnE9RsNeYQ/SyiHLs2-PmI/AAAAAAAAE-M/RrcsZOTEkeY/s1600-h/img_0444.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GrnE9RsNeYQ/SyiHLs2-PmI/AAAAAAAAE-M/RrcsZOTEkeY/s320/img_0444.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Here, John gave a great illustration of random numbers and simple statistics.
He built up interactively a simulation of random walks, working up from a
single (one-dimensional) walker to a group of them, comparing the simulation
results with the analytical predictions for various quantities (like mean and
variance), and also explaining to the students how these squiggly lines could
be considered a model of price fluctuations over time.  In this manner, he
connected the somewhat abstract statistical concepts to something the students
could relate to, namely the risk of an investment making a profit or a loss
after a certain period.&lt;br /&gt;
&lt;br /&gt;
We also talked about FFTs, dynamical systems, error analysis, data formats, and
a few other things.  It was very encouraging to have most of the students
return on the second day, considering how this was a completely optional
activity for them, covering an entire weekend (with morning lectures both days)
right before they had to start diving into their finals.  But they were a smart
and enthusiastic bunch, and I hope that the workshop gave them some useful
starting points they can then develop on their own as they get involved in
research projects.&lt;br /&gt;
&lt;br /&gt;
These are just two examples of how we are now seeing Python's acceptance in
university computing growing.  We have a lot of work still ahead of us, but
it's really encouraging to see how far we've come from the days when building
scipy was a black art, IPython was little more than a different prompt for the
python shell and matplotlib could only do basic line plots in a GTK window.  We
now have tools that provide a complete computational environment for teaching
and research, and things are only getting better...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-7151444569405456869?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/12/scientific-python-tools-use-rising-in.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GrnE9RsNeYQ/SyiGdYdGjGI/AAAAAAAAE9s/wrfimOWkZMk/s72-c/img_0443.jpg' height='72' width='72'/><thr:total>6</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-2124691533353949790</guid><pubDate>Fri, 06 Nov 2009 11:46:00 +0000</pubDate><atom:updated>2009-11-08T22:27:55.405-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Guido van Rossum at UC Berkeley's Py4Science</title><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Quick links&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.archive.org/details/ucb_py4science_2009_11_04_Guido_van_Rossum"&gt;Video&lt;/a&gt; of the entire session. The talks cover the first 50 minutes, and
Guido's part starts at the 54 minute mark.&lt;/li&gt;
&lt;li&gt;A &lt;a class="reference external" href="http://fperez.org/py4science/2009_guido_ucb"&gt;page with all the slides&lt;/a&gt; on my site.&lt;/li&gt;
&lt;li&gt;Guido also &lt;a class="reference external" href="http://neopythonic.blogspot.com/2009/11/python-in-scientific-world.html"&gt;blogged&lt;/a&gt; his impressions.&lt;/li&gt;
&lt;li&gt;Blog posts by &lt;a class="reference external" href="http://jarrodmillman.blogspot.com/2009/11/visit-from-guido-van-rossum.html"&gt;Jarrod Millman&lt;/a&gt; and &lt;a class="reference external" href="http://nipyworld.blogspot.com/2009/11/guido-van-rossum-talks-about-python-3.html"&gt;Matthew Brett&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;On November 4 2009, we had a special session of our informal &lt;a class="reference external" href="https://cirl.berkeley.edu/view/Py4Science"&gt;Py4Science&lt;/a&gt;
seminar where Guido van Rossum visited for an open discussion regarding the
uses of the Python language in scientific research. Guido had expressed his
interest in discussing the work that various scientists do with Python but
mentioned that instead of a formal talk, he would prefer a format that allowed
for more interaction with the audience.  We agreed that a good plan would be
for us to present a rapid-fire sequence of very short talks highlighting
multiple projects so that he could get a good &amp;quot;high altitude&amp;quot; view of the
scientific python landscape, leaving then ample time for discussions with the
audience.&lt;/p&gt;
&lt;p&gt;Guido has already posted &lt;a class="reference external" href="http://neopythonic.blogspot.com/2009/11/python-in-scientific-world.html"&gt;his impressions&lt;/a&gt; of the visit, and so have my
colleagues &lt;a class="reference external" href="http://jarrodmillman.blogspot.com/2009/11/visit-from-guido-van-rossum.html"&gt;Jarrod Millman&lt;/a&gt; and &lt;a class="reference external" href="http://nipyworld.blogspot.com/2009/11/guido-van-rossum-talks-about-python-3.html"&gt;Matthew Brett&lt;/a&gt;, so I'll try to provide a
complementary view here without too much repetition.&lt;/p&gt;
&lt;p&gt;We gathered for lunch first with a small group and had a very interesting
discussion on various topics; we had a chance to talk in some detail about the
transition to Python 3 for Numpy, something a number of people have started to
think about seriously.  Numpy is pretty much a 'root dependency' for so many
scientific projects, that until it makes the jump it will be very difficult for
anyone else in science to seriously consider Python 3.  Understandably, Guido
would like to see some movement from our community in this direction, and he
offered useful guidance.  In particular, he said that in the core Python-dev
team there might be enough interest that if we ask for help there, we might
find developers willing to pitch in and provide some assistance.  He also
expressed some disappointment that &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3118"&gt;PEP 3118&lt;/a&gt;, which was accepted with our
interests in mind, still hadn't been fully implemented.  Limited manpower is
the simple reason for this situation, but fortunately Jarrod mentioned that
there's a good plan to address this in the near future.&lt;/p&gt;
&lt;p&gt;I had a chance to quiz Guido about something I've wondered for a while: Python
has unusually good number types in its core (arbitrary length integers,
extended precision decimals and complex numbers), but the integers divide
either into the integers (the truncating behavior of Python 2.x) or into the
floats (in 3.x).  While the 3.x division is an improvement, I would have really
liked to see Python go to native rationals; for one thing, this would make the
Sage 'language' (by which I mean the extensions Sage makes to pure Python)
behave like Python in algorithms involving integers, eliminating a recurring
source of confusion between the two.  I also happen to think it would be a
'better' behavior, though there are valid reasons also for someone to expect a
more 'calculator-like' answer to divisions like 1/2, who might be annoyed if
they get 1/2 back instead of 0.5.  While obviously such changes will not be on
the table for a long while (and I should say here that I am very happy with the
planned moratorium to core language changes, as I hope that will allow a more
focused effort on the needs of the standard library), it was interesting to
hear Guido's approach to this question as one that could be handled via
overloadable literals rather than a change of integer semantics.  I'd never
thought of that, but it's an intriguing idea... Something to think about for
when we start looking at Python 4000 :)&lt;/p&gt;
&lt;p&gt;We then headed over to the official presentation, where we managed to cram 14
talks in 50 minutes and then had a full hour of open conversation with Guido,
where the audience asked him questions on a number of topics.  You can see a
complete &lt;a class="reference external" href="http://www.archive.org/details/ucb_py4science_2009_11_04_Guido_van_Rossum"&gt;video&lt;/a&gt; of the entire session: after 50 minutes of talks we have a
transition, and Guido's section starts at the 54 minute mark. On my website I
have &lt;a class="reference external" href="http://fperez.org/py4science/2009_guido_ucb/index.html"&gt;posted&lt;/a&gt; a page with all the slides for these mini-talks.&lt;/p&gt;
&lt;p&gt;I presented an &lt;a class="reference external" href="http://fperez.org/py4science/2009_guido_ucb/fperez_py4science_overview.pdf"&gt;overview&lt;/a&gt; introduction and material on behalf of 4 others who
were not present locally, but coincidentally, &lt;a class="reference external" href="http://wstein.org"&gt;William Stein&lt;/a&gt; of &lt;a class="reference external" href="http://sagemath.org"&gt;Sage&lt;/a&gt; fame
was on campus to give a talk in the same building almost at the same time, and
he could present the Sage slides directly. &lt;a class="reference external" href="http://ondrejcertik.blogspot.com/"&gt;Ondrej Certik&lt;/a&gt; from &lt;a class="reference external" href="http://code.google.com/p/sympy"&gt;SymPy&lt;/a&gt; was
able to make the trip from Reno, completing our out-of-town speakers.  The
other 7 presentations were from a number of local speakers (from various
departments at UC Berkeley and Lawrence Berkeley National Laboratory, just up
the hill from us).&lt;/p&gt;
&lt;p&gt;I have received very good feedback from several people, and I am really
thankful to all the speakers for being so attentive to the time constraints,
which let us pack a lot of material while leaving ample time for the discussion
with Guido.  My intention with this was to really provide Guido with a broad
understanding of how significant Python's penetration has been in scientific
computing, where many different projects from disciplines ranging from computer
science to astronomy are relying heavily on his creation.  I wanted both to
thank him for creating and shepherding such a high-quality language for us
scientists, and to establish a good line of communication with him (and
indirectly the core python development group) so that he can understand better
what are some of the use patterns, concerns and questions we may have regarding
the language.&lt;/p&gt;
&lt;p&gt;I have the impression that in this we were successful, especially as we had
time after the open presentations for a more detailed discussion of how we use
and develop our tools.  Most of us in scientific computing end up spending an
enormous amount of time with open interpreter sessions, typically &lt;a class="reference external" href="http://ipython.scipy.org"&gt;IPython&lt;/a&gt; ones
(I started the project in the first place because I wanted a &lt;em&gt;very good&lt;/em&gt;
interactive environment, beyond Python's default one), and in this work mode
the key source of understanding for code are good docstrings.  This is an area
where I've always been unhappy about the standard library, whose docstrings are
typically not very good (and often they are non-existent).  We showed Guido the
fabulous Numpy/Scipy &lt;a class="reference external" href="http://docs.scipy.org/numpy/Front%20Page/"&gt;docstring editor&lt;/a&gt; by Pauli Virtanen and Emmanuelle
Gouillart, as well as the fact that Numpy has an actual &lt;a class="reference external" href="http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines#docstring-standard"&gt;docstring standard&lt;/a&gt;
that is easy to read yet fairly complete.  I hope that this may lead in the
future to an increase in the quality of the Python docstrings, and perhaps even
to the adoption of a more detailed docstring standard as part of &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-0008"&gt;PEP 8&lt;/a&gt;,
which I think would be very beneficial to the community at large.&lt;/p&gt;
&lt;p&gt;In the end, putting all this together took me a lot more time than I'd
originally planned (I think I've had this same problem before...), but I am
very pleased with the results.  Python has become a central tool for the work
many of us do, and I am really happy to establish a good dialogue with Guido
(and hopefully other core developers), which I'm sure will have benefits in
both directions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-2124691533353949790?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/11/guido-van-rossum-at-uc-berkeleys.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-441484445484223410</guid><pubDate>Mon, 07 Sep 2009 08:30:00 +0000</pubDate><atom:updated>2009-09-07T20:18:18.739-07:00</atom:updated><title>CSE'09 article in SIAM News</title><description>&lt;h1 class="title"&gt;CSE'09 article in SIAM News&lt;/h1&gt;&lt;br /&gt;
This isn't fresh-off-the-oven news, but it's still on the main SIAM News page, so I'll mention it as I am trying to do a better job of keeping up with this blog...&lt;br /&gt;
&lt;br /&gt;
As I mentioned on a &lt;a class="reference external" href="http://fdoperez.blogspot.com/2009/03/python-at-siam-cse09-meeting.html"&gt;previous post&lt;/a&gt;, our &lt;a class="reference external" href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8044"&gt;three&lt;/a&gt; &lt;a class="reference external" href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8045"&gt;part&lt;/a&gt; &lt;a class="reference external" href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8046"&gt;minisymposium&lt;/a&gt; on Python at the SIAM &lt;a class="reference external" href="http://www.siam.org/meetings/cse09/"&gt;CSE09 conference&lt;/a&gt; was fairly well received.  But even better, SIAM asked us to write up an article for publication in the &lt;a class="reference external" href="http://www.siam.org/news/news.php"&gt;SIAM News bulletin&lt;/a&gt;.  I was really pleased with this, as SIAM News reaches a very broad international audience and is actually read by people.  I often find very interesting material in it, as the publication hits a very good balance of quality and not being overly specialized (as we all drown in work, we tend to focus only on very narrow publication lists for everyday reading,&lt;br /&gt;
unfortunately).&lt;br /&gt;
&lt;br /&gt;
Randy, Hans-Petter and I drafted up an article, and we received great feedback from all of the presenters at the minisymposium, including figure contributions by &lt;a class="reference external" href="http://matplotlib.sf.net/"&gt;John Hunter&lt;/a&gt; and &lt;a class="reference external" href="http://www.lbl.gov/cs/CSnews/CSnews073109c.html"&gt;Hank Childs&lt;/a&gt; (who was at LLNL at the time, and I'm delighted to see is just up the hill from me at LBL).&lt;br /&gt;
&lt;br /&gt;
Our article is now available in HTML &lt;a class="reference external" href="http://www.siam.org/news/news.php?id=1595"&gt;online at the SIAM site&lt;/a&gt;, and I also have a &lt;a class="reference external" href="https://cirl.berkeley.edu/fperez/papers/siam_news_py4science.pdf"&gt;PDF version&lt;/a&gt; that is more suitable for printing in case you are interested (note that my version is missing the very last corrections from the SIAM editor, but the differences should be minor).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-441484445484223410?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/09/cse09-article-in-siam-news.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-1617765342070199265</guid><pubDate>Wed, 01 Jul 2009 06:35:00 +0000</pubDate><atom:updated>2009-09-07T01:03:33.199-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><title>Scipy advanced  tutorials results</title><description>We recently conducted a poll on Doodle, soliciting feedback on the preferred topics for the advanced track, which is meant to contain 2 days with 8 2-hour sessions focusing on one specific topic at a time.  The table below shows the complete results, which I've only sorted for convenient viewing and anonymized (the raw Doodle output contains the names given by each person voting).  If anyone would like the raw spreadsheet, just drop me a line.&lt;br /&gt;
&lt;br /&gt;
The score was computed as #yes-#no (i.e., yes=+1, neutral=0, no=-1), from a total of 30 responses, and the results are in the table below, ranked from highest to lowest score.  In my &lt;span style="font-style: italic;"&gt;personal&lt;/span&gt; opinion, all the topics offered would have made for very good and interesting tutorials, but the point of asking for feedback is obviously to follow it to some degree, which we will now do.&lt;br /&gt;
&lt;br /&gt;
I think it's worth noting --though not particularly surprising-- that the ranking roughly follows the generality of the tools: matplotlib and numpy are at the top, with finite elements and graph theory at the bottom.  While I personally use NetworkX and love it, it's a specialized tool that for many probably offers no compelling reason to learn it, while pretty much every single numerical python user needs numpy and matplotlib.  We are now in the process of contacting possible speakers for the top topics, and will communicate on the mailing list a final list of topics once we have confirmed speakers for all.  &lt;span style="font-weight: bold;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;table cellspacing="0" dir="ltr" id="Sheet17Ctable" style="border-collapse: separate; border-spacing: 0pt; margin-bottom: 0pt; margin-top: 0pt; table-layout: fixed; white-space: nowrap;"&gt;&lt;tbody&gt;
&lt;tr style="height: 17.7216px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; font-weight: bold; text-align: left; vertical-align: bottom; width: 364.405px;"&gt;&lt;div style="font-size: 1px; margin: 0pt;"&gt;&lt;/div&gt;&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; font-weight: bold; text-align: left; vertical-align: bottom; width: 36.0576px;"&gt;Yes&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; font-weight: bold; text-align: left; vertical-align: bottom; width: 56.9184px;"&gt;Neutral&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; font-weight: bold; text-align: left; vertical-align: bottom; width: 30.384px;"&gt;No&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; font-weight: bold; text-align: left; vertical-align: bottom; width: 48.4128px;"&gt;Score&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; font-weight: bold; text-align: left; vertical-align: bottom; width: 43.6016px;"&gt;Rank&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Advanced topics in matplotlib use&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;18&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;10&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;2&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;16&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;1&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Advanced numpy&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;18&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;10&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;2&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;16&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;2&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Designing scientific interfaces with Traits&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;15&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;11&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;4&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;11&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;3&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Mayavi/TVTK&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;13&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;11&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;7&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;4&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Cython&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;14&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Symbolic computing with sympy&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;15&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;6&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Statistics with Scipy&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;15&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;3&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;7&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Using GPUs with PyCUDA&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;13&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;7&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;10&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;3&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;8&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Testing strategies for scientific codes&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;11&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;11&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;3&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;9&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Parallel computing in Python and mpi4py&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;12&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;10&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;2&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;10&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Sparse Linear Algebra with Scipy&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;12&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;0&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;11&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Structured and record arrays in numpy&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;14&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;0&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;12&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Design patterns for efficient iterator-based scientific codes&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;7&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;14&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;-5&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;13&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Sage&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;6&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;16&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;-8&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;14&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;The TimeSeries scikit&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;4&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;13&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;13&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;-9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;15&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Hermes: high order Finite Element Methods&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;6&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;15&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;-9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;16&lt;/td&gt;  &lt;/tr&gt;
&lt;tr style="height: 17.2704px;"&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color rgb(0, 0, 0) rgb(0, 0, 0); border-style: solid none solid solid; border-width: 1px medium 1px 1px; text-align: left; vertical-align: bottom; white-space: normal; width: 364.405px;"&gt;Graph theory with NetworkX&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: green; text-align: left; vertical-align: bottom; white-space: normal; width: 36.0576px;"&gt;5&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: left; vertical-align: bottom; white-space: normal; width: 56.9184px;"&gt;9&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; color: maroon; text-align: left; vertical-align: bottom; white-space: normal; width: 30.384px;"&gt;16&lt;/td&gt;    &lt;td class="Default" style="border-color: rgb(0, 0, 0) -moz-use-text-color; border-style: solid none; border-width: 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 48.4128px;"&gt;-11&lt;/td&gt;     &lt;td class="Default" style="border-color: rgb(0, 0, 0) rgb(0, 0, 0) rgb(0, 0, 0) -moz-use-text-color; border-style: solid solid solid none; border-width: 1px 1px 1px medium; text-align: right; vertical-align: bottom; white-space: normal; width: 43.6016px;"&gt;17&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-1617765342070199265?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/06/scipy-advanced-tutorials-results.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-2809648736956861499</guid><pubDate>Mon, 09 Mar 2009 20:48:00 +0000</pubDate><atom:updated>2009-09-07T01:05:32.114-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Python at the SIAM CSE'09 meeting</title><description>&lt;a href="http://1.bp.blogspot.com/_GrnE9RsNeYQ/SbW0yF0FuEI/AAAAAAAAEQc/Zx0mKG-9ll4/s1600-h/img_2451.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5311350108200482882" src="http://1.bp.blogspot.com/_GrnE9RsNeYQ/SbW0yF0FuEI/AAAAAAAAEQc/Zx0mKG-9ll4/s320/img_2451.jpg" style="cursor: pointer; float: left; height: 203px; margin: 0pt 10px 10px 0pt; width: 270px;" /&gt;&lt;/a&gt;After the &lt;a href="http://fdoperez.blogspot.com/2008/07/python-tools-for-science-go-to-siam.html"&gt;success&lt;/a&gt; of last year's Python minisymposium at the annual SIAM meeting, this year we had a repeat: Simula's Hans-Petter Langtangen (author of the well-known &lt;a href="http://www.amazon.com/Python-Scripting-Computational-Science-Engineering/dp/3540435085/ref=sr_11_1?ie=UTF8&amp;amp;qid=1236642434&amp;amp;sr=11-1"&gt;Python Scripting for Computational Science&lt;/a&gt;), U. Washington's &lt;a href="http://www.amath.washington.edu/%7Erjl/"&gt;Randy LeVeque&lt;/a&gt; and I co-organized another minisymposium on Python for Scientific computing.&lt;br /&gt;
&lt;br /&gt;
At the &lt;a href="http://www.siam.org/meetings/cse09"&gt;Computational Science and Engineering 2009 meeting&lt;/a&gt;, held in downtown Miami March 2-6, we had again 3 sessions with 4 talks each (&lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8044"&gt;part I&lt;/a&gt;, &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8045"&gt;II&lt;/a&gt; and &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=8046"&gt;III&lt;/a&gt;), with a different mix of speakers and focus than last year.  While last year we spent some effort introducing the language and to a certain extent justyfing its use in real-world scientific work, we felt that this time, the growth of the many python projects out there speaks for itself and that we should instead turn our attention to actual tools and projects useful for specific work.  Thus, we had no 'why python for science' talk, although obviously most speakers spent some time providing this kind of information in the context of their own projects.&lt;br /&gt;
&lt;br /&gt;
I think that this is the right path to follow: for a number of years, many of us have been developing tools and justyfing Python as a viable alternative to tools such as Matlab or IDL, but we need to start moving away from that mode.  There is no doubt in my mind now that, while still immature in certain areas, Python is a credible, production alternative to said packages.  In many contexts it can actually be far superior to its propietary and expensive counterparts, as many of us have found in practice.  So hopefully as we move forward, we will do less of  'you can use python for scientific work' and more of 'here is a great scientific project/tool that happens to be implemented using Python'.  Eventually, I hope we will not have &lt;span style="font-style: italic;"&gt;any&lt;/span&gt; Python-specific sessions at scientific meetings, just like we don't see any "Fortran for scientific computing" special sessions.&lt;br /&gt;
&lt;br /&gt;
This was a smaller meeting than the annual one, but attendance for our sessions was good.  There were interesting discussions and questions from audience members who were obviously new to the tools and curious to learn more.  Personally, I had a great time both catching up with some familiar faces and meeting some new ones, all of whom I hope will become more regular contributors to the greater ecosystem of scientific python tools.  Ondrej Certik, always full of energy, promptly &lt;a href="http://ondrejcertik.blogspot.com/2009/03/siam-2009-conference-in-miami-part-i.html"&gt;posted his own report&lt;/a&gt;, along with some video from where we were staying.&lt;br /&gt;
&lt;br /&gt;
An aside: when I tried to book the conference hotel all available rooms at the conference rates were taken, so a plan B was in order.  I found online a room across the street that was cheaper than the Miami Hilton's conference rate and rented it. It turned out to be a great condo on the 50th floor of &lt;a href="http://www.operasuitesandmarina.com/"&gt;this tower&lt;/a&gt;, with free high quality internet, lots of work space we could use and a gorgeous view.  Lesson learned: in this economic crisis, shop around: we got a great place and still saved money over the normal conference rate...  The conference hotel is just barely visible, in the lower right hand corner of this shot:  &lt;a href="http://2.bp.blogspot.com/_GrnE9RsNeYQ/SbW1bp44MqI/AAAAAAAAEQs/WVcd04PGgvE/s1600-h/img_2459.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5311350822258881186" src="http://2.bp.blogspot.com/_GrnE9RsNeYQ/SbW1bp44MqI/AAAAAAAAEQs/WVcd04PGgvE/s320/img_2459.jpg" style="cursor: pointer; display: block; height: 224px; margin: 0px auto 10px; text-align: center; width: 299px;" /&gt;&lt;/a&gt; I am currently in the process of collecting &lt;a href="https://cirl.berkeley.edu/fperez/py4science/2009_siam_cse"&gt;slides from the speakers&lt;/a&gt;; check that page later if you are interested in any talk for which I haven't posted them yet: I'll continue to update it as I receive them.  Until the next meeting...  &lt;a href="http://1.bp.blogspot.com/_GrnE9RsNeYQ/SbW1NPGRY8I/AAAAAAAAEQk/hPcIk-HiccU/s1600-h/img_2482.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5311350574549132226" src="http://1.bp.blogspot.com/_GrnE9RsNeYQ/SbW1NPGRY8I/AAAAAAAAEQk/hPcIk-HiccU/s320/img_2482.jpg" style="cursor: pointer; display: block; height: 188px; margin: 0px auto 10px; text-align: center; width: 250px;" /&gt;&lt;/a&gt; [ Image credits: John D. Hunter and F.P.,  &lt;a href="http://picasaweb.google.com/fdo.perez/SIAMCSE09InMiami"&gt;full album available here&lt;/a&gt; ]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-2809648736956861499?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/03/python-at-siam-cse09-meeting.html</link><author>noreply@blogger.com (Fernando Perez)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GrnE9RsNeYQ/SbW0yF0FuEI/AAAAAAAAEQc/Zx0mKG-9ll4/s72-c/img_2451.jpg' height='72' width='72'/><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-3519996441219426192</guid><pubDate>Mon, 09 Mar 2009 19:06:00 +0000</pubDate><atom:updated>2009-09-07T01:06:48.737-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Book review: Expert Python Programming</title><description>&lt;b&gt;Update&lt;/b&gt;: I've slightly modified the language of this review, which as my wife correctly pointed out to me, was unnecessarily harsh.  While I stand by my previous evaluation of the book, I think the same things can be said in a more constructive tone.&lt;br /&gt;
&lt;br /&gt;
While this isn't strictly a SciPy post, I've already have a few questions about this book, so I guess I'll tag it as 'scipy' as well, for those interested.  I recently reviewed the book &lt;a class="reference" href="http://www.packtpub.com/expert-python-programming/book"&gt;Expert Python Programming&lt;/a&gt; by Tarek Ziadé.  While not aimed at a scientific audience, the book covers a number of topics that we frequently discuss on the Numpy and Scipy lists (such as documentation and testing, workflows, API decisions, etc).  Since I really prefer to write longer text in reST using Emacs than in a blog editor, I've posted the review over at my static site.  Feel free to head over there if you are interested in the &lt;a href="https://cirl.berkeley.edu/fperez/py4science/expert_python_programming_review.html"&gt;full review&lt;/a&gt;, I've only reproduced here the summary:&lt;br /&gt;
&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 100%;"&gt;&lt;a href="" id="summary" name="summary"&gt;&lt;/a&gt;&lt;/span&gt;  &lt;span style="font-weight: bold;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;  &lt;span style="font-style: italic;"&gt;Expert Python Programming&lt;/span&gt; covers a list of very interesting topics regarding real-world development using Python.  It assumes a reader who already knows the basics of the language and covers a number of important topics, both in the more advanced parts of the language and in terms of developing applications using Python.  There is a strong emphasis on agile development practices, testing, documentation, application life cycle management and other aspects of 'real world' work.  The list of topics covered is excellent, and the book is well printed and bound.&lt;br /&gt;
&lt;br /&gt;
However, unfortunately it suffers from rather poor editing throughout, with a broken idea flow that makes for choppy reading.  Very few ideas are properly developed, as the book relies excessively on code snippets, bullet lists and stand-out info boxes.  Ultimately, this gives it more the feel of a set of notes than that of a coherent volume.  This should not be read as an indictment of the book: the table of contents alone is a list of 'right things to do' when using Python, and there is a great deal of useful material in all of the chapters.&lt;br /&gt;
&lt;br /&gt;
If you are looking for reference material, links and starting points for further reading, &lt;span style="font-style: italic;"&gt;Expert Python Programming&lt;/span&gt; can be an excellent resource and well worth your investment.  However, if you are searching for a text that develops complex concepts at length, delving into details and subtleties, it might not be the ideal tool for you.  I hope this provides a useful picture of the qualities of this book.  &lt;br /&gt;
&lt;div class="section"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-3519996441219426192?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2009/03/book-review-expert-python-programming.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-1681180618805260536</guid><pubDate>Mon, 28 Jul 2008 19:22:00 +0000</pubDate><atom:updated>2009-09-07T01:08:17.799-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>scipy</category><category domain='http://www.blogger.com/atom/ns#'>python</category><title>Python tools for science go to SIAM: a trip report</title><description>&lt;span style="font-weight: bold;"&gt;Update (2008.08.06):&lt;/span&gt; I have &lt;a href="https://cirl.berkeley.edu/fperez/py4science/2008_siam/"&gt;posted&lt;/a&gt; the slides I have available from the minisymposium described below.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://www.siam.org/meetings/an08/"&gt;2008 SIAM annual meeting&lt;/a&gt; was held July 7-11 in San Diego, and we had a healthy presence of Python-based tools for scientific computing.  &lt;a href="http://www.amath.washington.edu/%7Erjl/"&gt;Randy LeVeque&lt;/a&gt; from U. Washington and I co-organized a 3-part minisymposium entitled &lt;span style="font-style: italic;"&gt;Python and Sage: Open Source Scientific Computing.&lt;/span&gt; You can see the list of talks for parts &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=7369"&gt;I&lt;/a&gt;, &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=7370"&gt;II&lt;/a&gt; and &lt;a href="http://meetings.siam.org/sess/dsp_programsess.cfm?SESSIONCODE=7447"&gt;III&lt;/a&gt; online. I should add that for the talks where we had cancellations, we ended up with excellent impromptu replacements by &lt;a href="http://www.cs.sandia.gov/%7Ewehart/Main/Home.html"&gt;Bill Hart&lt;/a&gt; from Sandia National Labs and &lt;a href="http://www.enthought.com/company/executive-team.php"&gt;Travis Oliphant&lt;/a&gt; from Enthought.&lt;br /&gt;
&lt;br /&gt;
Our sessions were well attended (especially considering the very large number of parallel sessions at the conference) and generated lively discussion.  There's clearly a need in the scientific and mathematical community for &lt;span style="font-style: italic;"&gt;open source&lt;/span&gt;, high level tools that integrate well with existing high performance codes written in Fortran, C or C++, while providing interactivity, visualization, access to the network, etc.  This is the kind of idea that many of us in the SciPy and Sage worlds have been preaching for a while, but now the response from the wider community is much more positive than before (admittedly, years ago the tools were immature enough that they were very much of the "user assembly required" variety).&lt;br /&gt;
&lt;br /&gt;
I am extremely pleased to report that we were chosen for the &lt;a href="http://www.ams.org/ams/siam-2008.html#python"&gt;conference highlights&lt;/a&gt; page (many thanks to John Hunter, of &lt;a href="http://matplotlib.sf.net/"&gt;matplotlib&lt;/a&gt; fame, for the great screenshot)!  Given that this page mostly lists the invited plenaries and other special events, I am very happy about this (SIAM had literally hundreds of talks from parallel sessions to choose from and only two of those were highlighted).  I think it is both a recognition of the work done by all our speakers, and of the relevance of the topic today.  Thanks again to all who contributed.  We should take this level of interest as both a recognition an a challenge: as more scientists become interested in these tools for their everyday research, the pressure on high quality documentation, easy installation and deployment, good tutorials, etc, will only increase.&lt;br /&gt;
&lt;br /&gt;
Everyone is working hard on this, and in particular it's worth mentioning the excellent work that is being done this summer as part of the &lt;a href="http://scipy.org/Developer_Zone/DocMarathon2008"&gt;NumPy/SciPy &lt;i&gt;Documentation Marathon 2008&lt;/i&gt;&lt;/a&gt;, where a lot of new documentation has been added to NumPy.  This is an effort where &lt;span style="font-style: italic;"&gt;anyone&lt;/span&gt; can contribute!  The infrastructure is just a wiki where you can register to edit docs, and developers will later review and merge your contributions into the core project for the next release.  &lt;a href="http://scipy.org/Developer_Zone/DocMarathon2008"&gt;&lt;i&gt;&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So let's all keep up the momentum going, and I hope to see many more interested faces, both new and old, at the upcoming &lt;a href="http://conference.scipy.org/"&gt;SciPy 2008 conference&lt;/a&gt; at Caltech in August!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-1681180618805260536?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2008/07/python-tools-for-science-go-to-siam.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-462991820843482154.post-5527795195089325215</guid><pubDate>Mon, 28 Jul 2008 18:46:00 +0000</pubDate><atom:updated>2008-07-28T11:52:34.236-07:00</atom:updated><title>Starting off...</title><description>Well, at some point I suppose I had to get a blog...  This will be mostly a way to post occasional updates on projects I'm involved with for others to pick up via aggregators.  This blog is registered as part of &lt;a href="http://planet.scipy.org"&gt;Planet SciPy&lt;/a&gt;, and I'll also keep updates here on &lt;a href="http://ipython.scipy.org"&gt;IPython&lt;/a&gt;, &lt;a href="http://neuroimaging.scipy.org"&gt;neuroimaging in Python&lt;/a&gt;, and we'll see what else develops.

So, welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/462991820843482154-5527795195089325215?l=blog.fperez.org' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.fperez.org/2008/07/starting-off.html</link><author>noreply@blogger.com (Fernando Perez)</author><thr:total>0</thr:total></item></channel></rss>
