<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-6568744196982634289</id><updated>2009-12-24T06:09:06.108-08:00</updated><title type='text'>Ondřej Čertík</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/-/scipy'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/search/label/scipy'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-591932810092875210</id><published>2009-12-13T19:38:00.000-08:00</published><updated>2009-12-13T20:49:51.310-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>ESCO 2010 conference</title><content type='html'>An interesting conference &lt;a href="http://hpfem.org/events/esco-2010/"&gt;2nd European Seminar on Coupled Problems&lt;/a&gt; (ESCO) will be held on June 28 — July 2, 2010 in Pilsen, Czech Republic.&lt;br /&gt;Among the &lt;a href="http://hpfem.org/events/esco-2010/topics/"&gt;topics&lt;/a&gt; are solving PDEs and applications and using Python for scientific computing. In particular, &lt;a href="http://gael-varoquaux.info/"&gt;Gaël Varoquaux&lt;/a&gt; is the keynote speaker.&lt;br /&gt;&lt;br /&gt;Unfortunately, it was later &lt;a href="http://blog.jarrodmillman.com/2009/11/scipy-2010-coming-to-austin-tx-628-74.html"&gt;announced&lt;/a&gt; that the SciPy 2010 conference is going to be at the same time, which is really unfortunate. But here are some reasons why you should consider going to ESCO 2010 instead:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you like numerical calculations (finite elements, differences, volumes, ...) and solving partial differential equations and other problems and also programming in Python, together with C/C++ or Fortran, you will have a chance to meet some of the top people in the field. SciPy conference usually has people who solve PDEs (e.g. SciPy 09 had about 6), but ESCO 2010 will have about 60. So ESCO wins.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ntc.zcu.cz/en/staff/cimrman_r.html"&gt;Robert Cimrman&lt;/a&gt;, who you probably know from the scipy and numpy mailinglists, also the author of the &lt;a href="http://code.google.com/p/sfepy/"&gt;sfepy&lt;/a&gt; FEM package in Python, lives in Pilsen, so he'll gladly show you some good Pilsen pubs. SciPy 2010 is going to be in Austin and while Austin has cool pubs too, I must be fair and I liked that (I was there at the &lt;a href="http://ondrejcertik.blogspot.com/2008/03/sage-days-8.html"&gt;Sage 08 days&lt;/a&gt;), but it's just not comparable, the beer is better in Pilsen, it's a historic city and there are more pubs.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pilsen is close to Prague, so you will have the chance to visit it. You should walk in the old town, have couple beers etc. Here you can see some photos that &lt;a href="http://gael-varoquaux.info/journal/prague/index.html"&gt;Gaël took&lt;/a&gt; when we met in Prauge. Again, this is incomparable with &lt;a href="http://www.smallplanetguide.com/rentals/images/austin/soco_view.jpg"&gt;Austin&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is held in the &lt;a href="http://www.prazdroj.cz//en/come-and-visit/pilsen-brewery/lease-of-premises"&gt;Pilsner Urquell Brewery&lt;/a&gt;. When &lt;a href="http://hpfem.math.unr.edu/people/pavel/"&gt;Pavel Šolín&lt;/a&gt; announced that at the SciPy 09 conference, &lt;a href="http://blog.jarrodmillman.com/"&gt;Jarrod&lt;/a&gt; asked "Ah, in a beer pub?". So let me be clear. The word &lt;a href="http://en.wikipedia.org/wiki/Pilsener"&gt;pilsner&lt;/a&gt; (type of the beer) is coming from the Czech city Pilsen (Plzeň in Czech). Pilsner Urquell is not some beer pub (e.g. even Reno where I live now has a beer pub), it's The Brewery. Austin is a cool place (and Texas steaks are really good), but as you can see now, it absolutely cannot compete with Pilsen.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;If you have time, I can fully recommend to go to ESCO 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-591932810092875210?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/591932810092875210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=591932810092875210' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/591932810092875210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/591932810092875210'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/12/esco-2010-conference.html' title='ESCO 2010 conference'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8868115479758396441</id><published>2009-08-24T22:18:00.001-07:00</published><updated>2009-08-24T23:04:31.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>SciPy 2009 Conference</title><content type='html'>I attended the &lt;a href="http://conference.scipy.org/"&gt;SciPy 2009&lt;/a&gt; conference last week at Caltech. &lt;br /&gt;&lt;br /&gt;When I first presented about &lt;a href="http://sympy.org/"&gt;SymPy&lt;/a&gt; at the scipy 07 conference exactly 2 years ago, it was just something that we started, so noone really used that. Last week, there were already 6 other people at the conference who contributed one or more patches to SymPy: Robert Kern, Andrew Straw, Pauli Virtanen, Brian Granger, Bill Flynn, Luke Peterson.&lt;br /&gt;&lt;br /&gt;I gave a SymPy &lt;a href="http://www.archive.org/details/scipy09_advancedTutorialDay1_4"&gt;tutorial&lt;/a&gt;, &lt;a href="http://www.archive.org/details/scipy09_day1_13-Ondrej_Certik"&gt;main presentation&lt;/a&gt; and &lt;a href="http://dlpeterson.com/blog/"&gt;Luke&lt;/a&gt; gave a &lt;a href="http://pydy.org"&gt;PyDy&lt;/a&gt; + SymPy &lt;a href="http://www.archive.org/details/scipy09_day1_17-Lightning_talks_5-8"&gt;lightning talk&lt;/a&gt; (seek to 16:04).&lt;br /&gt;&lt;br /&gt;I also gave my experience with designing a traits GUI for FEM &lt;a href="http://www.archive.org/details/scipy09_day1_18-Lightning_talks_9-13"&gt;lightning talk&lt;/a&gt; (seek to 5:35).&lt;br /&gt;&lt;br /&gt;My advisor &lt;a href="http://hpfem.math.unr.edu/people/pavel/"&gt;Pavel Solin&lt;/a&gt; gave a &lt;a href="http://www.archive.org/details/scipy09_day2_03-Pavel_Solin"&gt;talk&lt;/a&gt; about &lt;a href="http://hpfem.org/main/hermes.php"&gt;Hermes&lt;/a&gt; and &lt;a href="http://femhub.org/"&gt;FEMhub&lt;/a&gt; and other things that we do in &lt;a href="http://hpfem.org/"&gt;our group in Reno&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Besides that, it was awesome to meet all the guys from the scientific Python community, meet old friends and also get to know other people that I only knew from the lists. I was pleased to meet there people who solve PDE using Python, we had many fruitful discussions together, and as a result, I already created FEMhub spkg packages for &lt;a href="http://www.ctcms.nist.gov/fipy/"&gt;FiPy&lt;/a&gt;, other will follow. Our aim is to create a nice interface to all of them, so that we can easily test a problem in any PDE package and see how it performs.&lt;br /&gt;&lt;br /&gt;Overall, my impression is very positive. I am very glad I chose Python as my main language many years ago, all the essential parts are now getting there, e.g. numerics (numpy, scipy, ...), symbolic (sympy, Sage, ...), 2d plotting (matplotlib, ...), 3d plotting (mayavi), GUI (traits UI, which supports both GTK, QT on linux and native widgets on Mac and Windows, and Sage notebook for web), excellent documentation tool with equations support (Sphinx), lots of supporting libraries, like sparse solvers and then very easy way to wrap C/C++ code using Cython and to speed up critical parts of the Python code using Cython. It's not that each of those libraries is the best in the world --- in fact, not a single one is --- but together as an ecosystem, plus the high level of (free) support on the lists for all of those libraries, this in my opinion makes Python a number one choice for scientific computing, together with C, C++ and sometimes Fortran for CPU intensive tasks and/or legacy libraries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8868115479758396441?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8868115479758396441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8868115479758396441' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8868115479758396441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8868115479758396441'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/08/scipy-2009-conference.html' title='SciPy 2009 Conference'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5237137112747209803</id><published>2009-08-22T19:08:00.001-07:00</published><updated>2009-08-22T23:51:04.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>SymPy on the google phone</title><content type='html'>Here is a proof that sympy works on the google phone:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Cb7_IVMD3C4/SpCk-CqE5QI/AAAAAAAAD6E/pdt3F_g51tA/s1600-h/p2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_Cb7_IVMD3C4/SpCk-CqE5QI/AAAAAAAAD6E/pdt3F_g51tA/s400/p2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372975741225198850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to Rae S. Yip from Caltech and Nicolas Pinto for taking the picture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5237137112747209803?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5237137112747209803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5237137112747209803' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5237137112747209803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5237137112747209803'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/08/sympy-on-google-phone.html' title='SymPy on the google phone'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Cb7_IVMD3C4/SpCk-CqE5QI/AAAAAAAAD6E/pdt3F_g51tA/s72-c/p2.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-135720760494490474</id><published>2009-08-15T16:32:00.001-07:00</published><updated>2009-08-16T16:42:58.827-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Los Alamos Sprint</title><content type='html'>Last weekend, &lt;a href="http://dlpeterson.com/blog/"&gt;Luke&lt;/a&gt; and &lt;a href="http://asmeurersympy.wordpress.com/"&gt;Aaron&lt;/a&gt; came to visit me here in Los Alamos and we accomplished the following:&lt;br /&gt;&lt;br /&gt;* documentation doctests fixed&lt;br /&gt;* pexpect wrappers to maxima&lt;br /&gt;* couple match bugs fixed&lt;br /&gt;* lots of patches reviewed and pushed in&lt;br /&gt;* made pydy simplify trig expressions&lt;br /&gt;* pexpect wrappers to autolev&lt;br /&gt;* work on the odes module&lt;br /&gt;* visited hot springs&lt;br /&gt;&lt;br /&gt;Pictures of the last item were requested, so Aaron (left), Luke:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SodGWb7VYVI/AAAAAAAAD50/x2yosnq4Wsk/s1600-h/Ondrej+Visit+007.jpg"&gt;&lt;img style="cursor: pointer; width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SodGWb7VYVI/AAAAAAAAD50/x2yosnq4Wsk/s400/Ondrej+Visit+007.jpg" alt="" id="BLOGGER_PHOTO_ID_5370338431930294610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aaron, Ondrej:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SodGVmZOygI/AAAAAAAAD5s/N5B2UNhVFlE/s1600-h/Ondrej+Visit+006.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SodGVmZOygI/AAAAAAAAD5s/N5B2UNhVFlE/s400/Ondrej+Visit+006.jpg" alt="" id="BLOGGER_PHOTO_ID_5370338417560177154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ondrej, Aaron:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SodGVGpP-uI/AAAAAAAAD5k/gWIfNat1_8A/s1600-h/Ondrej+Visit+001.jpg"&gt;&lt;img style="cursor: pointer; width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SodGVGpP-uI/AAAAAAAAD5k/gWIfNat1_8A/s400/Ondrej+Visit+001.jpg" alt="" id="BLOGGER_PHOTO_ID_5370338409037429474" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-135720760494490474?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/135720760494490474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=135720760494490474' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/135720760494490474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/135720760494490474'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/08/los-alamos-sprint.html' title='Los Alamos Sprint'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Cb7_IVMD3C4/SodGWb7VYVI/AAAAAAAAD50/x2yosnq4Wsk/s72-c/Ondrej+Visit+007.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5063369088540210715</id><published>2009-05-10T12:14:00.000-07:00</published><updated>2009-05-10T12:47:29.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>My experience with running an opensource project</title><content type='html'>Nir Aides, the author of the excellent &lt;a href="http://winpdb.org/"&gt;winpdb&lt;/a&gt; debugger, sent me the following email on September 21, 2008, so I asked him if I can copy his email and reply in form of a blog post (so that other people can comment and join the discussion) and he agreed. It took me almost a year to reply, but I made it. :)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hi Ondrej,&lt;br /&gt;&lt;br /&gt;How are you?&lt;br /&gt;&lt;br /&gt;I am about to publish a new free software project, a new simple PHP framework, and I am interested in your advice.&lt;br /&gt;&lt;br /&gt;You started &lt;a href="http://sympy.org/"&gt;SymPy&lt;/a&gt; and were able to make other people join you and develop it with you.&lt;br /&gt;How did you do it?&lt;br /&gt;How did it happen?&lt;br /&gt;Did you actively call for other people or they spontaneously showed interest and joined you?&lt;br /&gt;Are the other major contributor people who were your friends before you started the project?&lt;br /&gt;Did you need to create or manage the project in a particular way to make it attractive to other people?&lt;br /&gt;Are there things you are aware of that promote collaboration or demote it?&lt;br /&gt;&lt;br /&gt;I was never successful in doing the same with Winpdb, which while it became reasonably popular, no one has ever joined me to develop it, except for a notable tutorial contribution by Chris Lasher which was developed independently.&lt;br /&gt;&lt;br /&gt;Now with the new project, I am wondering what are my chances of making other people try it and take it on. On the one hand it is a new and fresh code base in an interesting field, on the other hand, why would anyone bother to spend their energy on this new project when they have Symfony or Drupal?&lt;br /&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;br /&gt;BTW, Ohloh believes you have a median of 19,000 lines of changed code per month since the start of their log. Can this be true? Is this humanly possible? According to it SymPy has over 1,000,000 lines of code? I can't understand these numbers. Winpdb has about 25,000 lines after 3 years of development. And from my experience 1,000,000 lines of code projects need about 20-50 full time developers to work on for 2-5 years which is about 40-250 man years. And as if this is not enough you are listed as owner in a dozen other projects in Google code and have enough time to become an awarded scientist. How is this possible?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ohloh.net/p/sympy/contributors/"&gt;http://www.ohloh.net/p/sympy/contributors/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BTW2, do you still use Winpdb? If you find yourself using it less, can you say what are the reasons, or what it would take to make it more useful?&lt;br /&gt;&lt;br /&gt;BTW3, How is SymPy doing?&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Nir&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So my most honest answer how to run a successful opensource project is: I don't know.&lt;br /&gt;&lt;br /&gt;But nevertheless I tried to summarize some of my ideas and experience and some guidelines that I try to follow, maybe it will be useful to you Nir, or anyone else.&lt;br /&gt;&lt;br /&gt;First of all, there has to be a public mailinglist (easily accessible), public bug tracker, nice webpage, easy to find downloads, frequent releases (once a month is good, but in the worst case at least 4 times a year) and a set of guidelines to follow in order to contribute. So that's a must, if the project doesn't have the above, it's almost impossible to become successful. However, that is just a start, just a playground. There are still many projects that have the above and yet they totally fail to attract developers.&lt;br /&gt;&lt;br /&gt;So I think the most important principle is that I always think how to employ other people in what I do. If I have some plan in my head how to do something, e.g. how to move some things forward, I always create exact steps and put it to issues, or our mailinglist, so that each step can be done by someone who is completely new to sympy. So I try to look at things from other people's perspective and think -- ok, I quite like this SymPy project and I'd like to get this done (for example a new release, or something fixed, or implemented), but I have no idea how to start and what exactly needs to be done.&lt;br /&gt;&lt;br /&gt;So what I try to do if someone comes to our list and asks for something, is that I create a new issue for it and think how I would fix it if I had time.  Then write the necessary steps in the issue and invite the submitter to fix it and I offer help with explaining anything and guiding. Now there are two things that can happen. Either the submitter has time and a will to go forward and in this case he starts wrestling with it and whenever he has some code or a question, I need to find time, review it and offer some way out. Or the submitter is too busy, in which case the instructions simply rest in the issues and the next time someone asks for the feature, the instructions are already there. I don't have estimates how frequent either case is.&lt;br /&gt;&lt;br /&gt;When I am working on something myself, I try not to code privately, but also put up issues first and put the steps needed in the issues, so that it's easy for other people to join in.&lt;br /&gt;&lt;br /&gt;In general, the most precious value for me is the fact that someone else had to sit down at his computer and wrote the patch. So I do everything possible to get new (or more) people interested in the development. Some people think that only super programmers can do a decent job and it's useless to invest time in people that may just have started with Python. They are wrong. Among the SymPy developers (around 65 people total have contributed patches so far at the time of writing this post), we have all kinds of people. We have people from high school, we have a retired US army engineer, we have physicists, mathematicians, biologists, engineers, teachers, or just hobbyists, who do it for fun.  Unfortunately, we do not have many women (I think no patch that made it into sympy was contributed by a woman, but I may be wrong), so if anyone has any ideas how to get more women involved, let me know (I know we have several women fans, so that's a good start:). We have people whose first open source project they ever contributed to was sympy and people who are new to Python.&lt;br /&gt;&lt;br /&gt;Many times the first patch that a new potential developer submits is not perfect, usually it's faster for me to write it myself, than to help with the first patch, however my rule is to always help the submitter do that. Sometimes he sends a second patch, or a third, and usually it needs less and less work on my side and it already pays off, because he is then able to fix things himself, if he discovers a bug and sympy has just won a one more contributor.&lt;br /&gt;&lt;br /&gt;So I came to the conclusion that all that is needed is an enthusiasm. You don't even have to know Python (as you can learn all these things on the way) and you can still do useful things for us and really spare our time.&lt;br /&gt;&lt;br /&gt;To answer another question from Nir's email, SymPy has about 130000 lines of code and another about 20000 lines of tests, so I think those stats are wrong. Also the changed lines of code is in my opinion wrong, we usually have about 250 new patches per release (this depends how often we release and other things).&lt;br /&gt;&lt;br /&gt;Yes, I am involved in couple other projects, e.g. Debian, Sage, ipython, scipy, &lt;a href="http://hpfem.org/"&gt;hpfem.org&lt;/a&gt; (and couple more), basically everything that has to do with numeric simulation and Python, but my activity there varies. The most time consuming thing in the last couple years was definitely school, I was finishing my master in Theoretical Physics in Prague and then moved to the Nevada/Reno and I just finished my first semester here at PhD in Chemical Physics, and sometimes it was just crazy, e.g. I finished teaching at 7pm and instead of going home and sleep, I stayed in my office, fixed 10 sympy issues that were holding off a release, finished at 1am, went home (by bike, since I don't have a car yet), slept couple hours and then did just school again for a week, other people reviewed the issues in the meantime, and then I made the release (instead of sleeping again). In the last semester it was not unusual that I got home at 1am every week day, then slept most of Saturday to catch up, on Sunday I did some laundry and shopping, and the rest of time I did grading and homeworks for all my classes and teaching, no time for anything else (e.g. no friends, no girls, no rest, no hobby, no opensource stuff, nothing). So sometimes one has to work pretty hard to get through it, but fortunately it's behind me finally, if all goes well, I should be just doing research from now on and have a real life too. Also I am sorry I didn't manage to reply sooner. :)&lt;br /&gt;&lt;br /&gt;To answer the other questions: &lt;blockquote&gt;Are the other major contributor people who were your friends before you started the project?&lt;/blockquote&gt; No, not a single major contributor was my friend before I started the project. Every single one of them become a developer using the procedure I described above, e.g. first showed on the list or in the issues, and maybe even the very first patch was not a high quality one (and if I was stupid and arrogant, or didn't see the big potential, I would just ignore them). But when given a chance, they became extremely good developers and sympy would simply just not be here without them.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Did you actively call for other people or they spontaneously showed interest and joined you?&lt;/blockquote&gt; I very much encourage everyone to contribute, but the initial interest must be in them, e.g. they at least have to show around the mailinglist/issues, so that I know about them. But once I know they are interested in some issue, yes, I try to invite them to fix it, with my help.&lt;br /&gt;&lt;br /&gt;One observation I made is that I have to always think in the spirit "how to earn new money, not how to spare the money I already have", e.g. when applied to sympy, how to get new developers, how to develop the new great things etc.  Even if I am super busy as I was, I still have to think this way. Once I start thinking how to conserve and preserve what we already have, I am done, finished and that's the road to hell.&lt;br /&gt;&lt;br /&gt;If I am open, positive, full of energy, I can see people joining me and we can do great things together. It probably sounds obvious, but it was not for me, when for example some people I worked with, started their own projects, when I got busy, and started to compete, instead of helping sympy out. And I felt betrayed, after so much work that I invested into it and started to become protective. And then I realised that's wrong. I can never stop other people do what they want to do. If they want to have their own project, they will have it. If they don't want to help sympy out, they won't (and what is more important, there is nothing wrong with either of that). It's that simple and being protective only makes things worse.&lt;br /&gt;&lt;br /&gt;There is also a question of the license that you use for the project, e.g. one should basically only choose between BSD (maybe also MIT or Apache), LGPL and GPL (there are also several versions of the GPL licenses). Unfortunately the fact is, that there are people who will never contribute a code under a permissive BSD license (because it's not protecting their work enough) and there are also other people who really want to code to be BSD (or other permissive license) so they can sell it and they don't need to consult with lawyers what they are or aren't allowed to do and also so that they can combine it with any other code (opensource or not). It also depends if one wants to combine (and distribute) other codes together. So choosing a license is also important. I believe that for sympy BSD is the best and for other projects (like Sage) GPL is the best and one has to decide on a case by case basis.  For Winpdb, I would make it BSD too, since you can get more people using it.&lt;br /&gt;&lt;br /&gt;To conclude, SymPy is a little more than 2 years old, and it has been a great ride so far and more things are coming, e.g. this summer we have 5 Google Summer of Code students and people are starting it to use in their research and we plan to use it in our codes at &lt;a href="http://hpfem.math.unr.edu/"&gt;our group&lt;/a&gt; here in Reno too, so things look promising. I am really glad, we managed to build such a community, so that when I am busy, as I was the last semester, other people help out with patches, reviews and other things, so that the project doesn't stall and when I got rid of my school duties now, we can move things forward a lot.&lt;br /&gt;&lt;br /&gt;So maybe you can get inspired by some of the ideas above. I am also interested in any discussion about this (feel free to post a comment below, or send me an email, or just write to a sympy list about what you think).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5063369088540210715?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5063369088540210715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5063369088540210715' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5063369088540210715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5063369088540210715'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/05/my-experience-with-running-opensource.html' title='My experience with running an opensource project'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8675675387893435673</id><published>2009-03-17T14:12:00.000-07:00</published><updated>2009-03-17T16:32:53.008-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Newtonian Mechanics with SymPy</title><content type='html'>&lt;a href="http://dlpeterson.com/"&gt;Luke Peterson&lt;/a&gt; from UC Davis came to visit me in Reno and we spent the last weekend hacking on the Python Dynamics package that uses &lt;a href="http://sympy.org/"&gt;SymPy&lt;/a&gt; to calculate equations of motion for basically any rigid body system.&lt;br /&gt;&lt;br /&gt;On Friday we did some preliminary work, mostly on the paper, Luke showed me his rolling torus demo that he did with the proprietary &lt;a href="http://www.autolev.com/"&gt;autolev&lt;/a&gt; package. We set ourselves a goal to get this implemented in SymPy by the time Luke leaves and then we went to the &lt;a href="http://www.atlantiscasino.com/"&gt;Atlantis casino&lt;/a&gt; together with my boss Pavel and other guys from the &lt;a href="http://www.dri.edu/"&gt;Desert Research Institute&lt;/a&gt; and I had my favourite meal here, a big burger, fries and a beer.&lt;br /&gt;&lt;br /&gt;On Saturday we started to code and had couple lines of the autolev torus script working. Then we went on the bike ride from Reno to California. I took some pictures with Luke's iphone:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATobQ4XKI/AAAAAAAADzM/g-rYJPpsB9M/s1600-h/Lukes+iPhone+pics+041.jpg"&gt;&lt;img style="cursor: pointer; width: 182px; height: 136px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATobQ4XKI/AAAAAAAADzM/g-rYJPpsB9M/s400/Lukes+iPhone+pics+041.jpg" alt="" id="BLOGGER_PHOTO_ID_5314269145531440290" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATn30Gt1I/AAAAAAAADy8/x5KPHZlz6B0/s1600-h/Lukes+iPhone+pics+034.jpg"&gt;&lt;img style="cursor: pointer; width: 183px; height: 137px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATn30Gt1I/AAAAAAAADy8/x5KPHZlz6B0/s400/Lukes+iPhone+pics+034.jpg" alt="" id="BLOGGER_PHOTO_ID_5314269136015505234" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScATZe1PaLI/AAAAAAAADy0/I2N-OzBf7bs/s1600-h/Lukes+iPhone+pics+031.jpg"&gt;&lt;img style="cursor: pointer; width: 183px; height: 137px;" src="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScATZe1PaLI/AAAAAAAADy0/I2N-OzBf7bs/s400/Lukes+iPhone+pics+031.jpg" alt="" id="BLOGGER_PHOTO_ID_5314268888791214258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those mountains are in California and we went roughly to the snow line level and back:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScAToOfsBwI/AAAAAAAADzE/jKhlUeHB-W0/s1600-h/Lukes+iPhone+pics+036.jpg"&gt;&lt;img style="cursor: pointer; width: 189px; height: 234px;" src="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScAToOfsBwI/AAAAAAAADzE/jKhlUeHB-W0/s400/Lukes+iPhone+pics+036.jpg" alt="" id="BLOGGER_PHOTO_ID_5314269142103885570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is Nevada side:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATZUZAgMI/AAAAAAAADys/t-R-ML1keWQ/s1600-h/Lukes+iPhone+pics+028.jpg"&gt;&lt;img style="cursor: pointer; width: 195px; height: 258px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATZUZAgMI/AAAAAAAADys/t-R-ML1keWQ/s400/Lukes+iPhone+pics+028.jpg" alt="" id="BLOGGER_PHOTO_ID_5314268885988442306" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/ScATYwZT8-I/AAAAAAAADyc/5CwVAQEKC1k/s1600-h/Lukes+iPhone+pics+010.jpg"&gt;&lt;img style="cursor: pointer; width: 345px; height: 259px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/ScATYwZT8-I/AAAAAAAADyc/5CwVAQEKC1k/s400/Lukes+iPhone+pics+010.jpg" alt="" id="BLOGGER_PHOTO_ID_5314268876326040546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That was fun. Then we worked hard and by the evening we had a dot product and a cross product working, so we went to an Irish pub to have couple beers and I had my burger as usual.&lt;br /&gt;&lt;br /&gt;On Sunday we spent the whole day and evening coding and we got the equations of motion working. On Monday we worked very hard again:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScATYa3Cm-I/AAAAAAAADyU/uw0A2JoWiwA/s1600-h/Lukes+iPhone+pics+007.jpg"&gt;&lt;img style="cursor: pointer; width: 286px; height: 381px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScATYa3Cm-I/AAAAAAAADyU/uw0A2JoWiwA/s400/Lukes+iPhone+pics+007.jpg" alt="" id="BLOGGER_PHOTO_ID_5314268870545152994" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScATop1Z4qI/AAAAAAAADzU/jzz9uQW3HIA/s1600-h/Lukes+iPhone+pics+056.jpg"&gt;&lt;img style="cursor: pointer; width: 287px; height: 382px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScATop1Z4qI/AAAAAAAADzU/jzz9uQW3HIA/s400/Lukes+iPhone+pics+056.jpg" alt="" id="BLOGGER_PHOTO_ID_5314269149442728610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and fixed some remaining nasty bugs. I taught Luke to use git, so our code is at: &lt;a href="http://github.com/hazelnusse/pydy"&gt;http://github.com/hazelnusse/pydy&lt;/a&gt;, for the time being we call it pydy and after we polish everything, we'll probably put it into sympy/physics/pydy.py. If you run rollingtorus.py, you get this plot of the trajectory of the torus in a plane:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScAqjxPa84I/AAAAAAAADzc/LZCuNBmwL0s/s1600-h/rollingtorus-xy.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScAqjxPa84I/AAAAAAAADzc/LZCuNBmwL0s/s400/rollingtorus-xy.png" alt="" id="BLOGGER_PHOTO_ID_5314294354298991490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's basically if you throw a coin on the table, e.g. this model takes into account moments of inertia, yaw (heading), lean, spin and the x-y motion in the plane. Depending on the initial conditions, you can get many different trajectories, e.g for example:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScAr_BejUrI/AAAAAAAADzk/rELiBoSVlAc/s1600-h/rollingtorus-xy2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/ScAr_BejUrI/AAAAAAAADzk/rELiBoSVlAc/s400/rollingtorus-xy2.png" alt="" id="BLOGGER_PHOTO_ID_5314295922025517746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;or:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScAr_HzohMI/AAAAAAAADzs/ek0gDwTWPzU/s1600-h/rollingtorus-xy3.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_Cb7_IVMD3C4/ScAr_HzohMI/AAAAAAAADzs/ek0gDwTWPzU/s400/rollingtorus-xy3.png" alt="" id="BLOGGER_PHOTO_ID_5314295923724551362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is very exciting, as the code is very short, and most of the things that Luke needs are needed for all the other applications of sympy, e.g. a good printing of equations and vectors (both in the terminal and in latex), C code generation, fast handling of expressions, nice ipython terminal for experimentation, plotting, etc.&lt;br /&gt;&lt;br /&gt;Together with the atomic physics package that we &lt;a href="http://ondrejcertik.blogspot.com/2008/10/google-mentor-summit-iii.html"&gt;started to develop&lt;/a&gt; with Brian sympy will soon be able to cover some basic areas of physics. Other areas are general relativity (there is some preliminary code in examples/advanced/relativity.py) and quantum field theory and Feynman diagrams - for that we need someone enthusiastic that needs this for his/her research --- if you are interested, drop me an email, you can come to Reno (or work remotely) and we can get it done.&lt;br /&gt;&lt;br /&gt;My vision is that sympy should be able to handle all areas of physics, e.g. it needs good assumptions (if you want to help out, please help us test Fabian's patches &lt;a href="http://groups.google.com/group/sympy-patches/browse_thread/thread/0b6fd5402e729f58"&gt;here&lt;/a&gt;), then faster core, we have a pretty good optional &lt;a href="http://ondrejcertik.blogspot.com/2008/08/sympy-core-in-cython-general-cas-design.html"&gt;Cython core&lt;/a&gt; here, so we'll be merging it after the new assumptions are in place. Then sympy should have basic modules for most areas in physics so that one can get started really quickly. From our experience so far in sympy/physics, those modules will not be big, as most of the functionality is not module specific.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8675675387893435673?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8675675387893435673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8675675387893435673' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8675675387893435673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8675675387893435673'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/03/newtonian-mechanics-with-sympy.html' title='Newtonian Mechanics with SymPy'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Cb7_IVMD3C4/ScATobQ4XKI/AAAAAAAADzM/g-rYJPpsB9M/s72-c/Lukes+iPhone+pics+041.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7892841286044962920</id><published>2009-03-05T20:35:00.000-08:00</published><updated>2009-03-05T20:46:55.473-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>SIAM 2009 conference in Miami, part I</title><content type='html'>I am at the SIAM Conference on Computational Science and Engineering (&lt;a href="http://www.siam.org/meetings/cse09/index.php"&gt;CSE09&lt;/a&gt;) and it is awesome. Right now, I am writing from the 50th floor with &lt;a href="http://www.youtube.com/watch?v=Jp0RCdYtl3Y"&gt;Pearu Peterson&lt;/a&gt; (f2py), &lt;a href="http://www.youtube.com/watch?v=2SryFlCdFY0"&gt;Brian Granger&lt;/a&gt; (ipython), &lt;a href="http://www.youtube.com/watch?v=Vs3FiyXyD14"&gt;Fernando Perez&lt;/a&gt; (ipython) and &lt;a href="http://www.youtube.com/watch?v=Vs3FiyXyD14"&gt;John Hunter&lt;/a&gt; (matplotlib), I took videos of them and with their permission, posted to youtube. The &lt;a href="http://www.youtube.com/watch?v=KYy_VKTQiB4"&gt;view from the balcony&lt;/a&gt; is spectacular. My own room used to be in the 15 floor in the Hilton hotel and I thought man, this is high, but then I visited Fernando and John in the 50th floor in their apartment and our 20 story hotel looks like a small hut.&lt;br /&gt;&lt;br /&gt;As usual, I met lots of old friends and made some new ones. I liked the electronic structure section on Wednesday and a Python section today. I was also working very hard to get &lt;a href="http://code.enthought.com/projects/mayavi/"&gt;mayavi2&lt;/a&gt; working in &lt;a href="http://sagemath.org"&gt;Sage&lt;/a&gt; to be ready for my presentation and it seems I just finally &lt;a href="http://groups.google.com/group/sage-devel/browse_thread/thread/acb94dd501b9a90f"&gt;made it&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-7892841286044962920?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7892841286044962920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7892841286044962920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7892841286044962920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7892841286044962920'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2009/03/siam-2009-conference-in-miami-part-i.html' title='SIAM 2009 conference in Miami, part I'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3002107371080259380</id><published>2008-10-28T08:23:00.000-07:00</published><updated>2008-10-28T08:28:05.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Google Mentor Summit III</title><content type='html'>On Sunday I checked out from the hotel and enjoyed the breakfast, basically the same as the first picture &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sunday-morning.html"&gt;here&lt;/a&gt;. Which is cool, the best way to start a day is with a good breakfast in the morning.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SQcjnhiombI/AAAAAAAADqo/kzNm0IT7rp0/s1600-h/00007.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SQcjnhiombI/AAAAAAAADqo/kzNm0IT7rp0/s400/00007.jpg" alt="" id="BLOGGER_PHOTO_ID_5262213851531221426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At Google I finally met with &lt;a href="http://web.cecs.pdx.edu/%7Ebart/"&gt;Bart Massey&lt;/a&gt;, who works at the Portland State University where I was an intern (in 2005) and also he was sponsoring one SymPy GSoC student in 2007.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjofL-b2I/AAAAAAAADqw/hJc6uqzmvqo/s1600-h/00024.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjofL-b2I/AAAAAAAADqw/hJc6uqzmvqo/s400/00024.jpg" alt="" id="BLOGGER_PHOTO_ID_5262213868079181666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Then we started to port SymPy to Jython with Philip Jenvey. I first installed openjdk-6, which is in Debian main, then checked out Jython svn, typed "ant" and it just worked. This is so awesome, that we finally have a truly opensource and fully working java implementation in Debian. Philip fixed some bugs already, so SymPy imports just fine. Most of the tests run, but also quite a lot still fail.&lt;br /&gt;&lt;br /&gt;We managed to isolate two bugs: &lt;a href="http://bugs.jython.org/issue1158"&gt;issue 1158&lt;/a&gt; and &lt;a href="http://bugs.jython.org/issue1159"&gt;1159&lt;/a&gt;. Then there was an annoying recursion bug, that took us several hours to dig into and I then had to leave at 6pm without a clue. But Philip kept saying, I just need to look more at the java stacktraces that Jython was generating and I'll figure it out. And he did! The next morning he filed an &lt;a href="https://codespeak.net/issue/pypy-dev/issue412"&gt;issue 412&lt;/a&gt; in the PyPy tracker, because they seem to have the same problem. There are subtle differences in how to handle __mul__ and __rmul__ methods that are not well documented, so it works in CPython but fails in Jython/PyPy. I think we can fix that in SymPy too in the meantime, so I am very excited, because it seems SymPy will work on top of Jython soon.&lt;br /&gt;&lt;br /&gt;There was also a git vs hg session with both hg and git developers. Since I recently switched from hg to git for all stuff where I can choose the vcs, it was very interesting for me. And I must say I am glad I switched. Mercurial works fine enough and with the recent rebase feature I think it is usable, but git just has a bigger momentum at the moment and it just doesn't get in my way.&lt;br /&gt;&lt;br /&gt;During the day Steve sent an email to the GSoC list that Dirk forgot his jacket in the hotel room, so I said to myself, haha, that's a pity. And then I realized, oh shit, I left my jacket there as well. They didn't have it in the evening when I stopped there, but fortunately they sent me an email yesterday that they found it, so I'll stop there on my way back.&lt;br /&gt;&lt;br /&gt;We also took couple of group pictures, here is just my lame attempt (I am sure people will soon post better ones):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjpa6mKmI/AAAAAAAADq4/vXgcMj-HC6I/s1600-h/00025.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjpa6mKmI/AAAAAAAADq4/vXgcMj-HC6I/s400/00025.jpg" alt="" id="BLOGGER_PHOTO_ID_5262213884112415330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Monday morning I met with Fernando Perez, the author of ipython, he know works with Jarrod. Then I rented a car and came to visit &lt;a href="http://www.calpoly.edu/%7Ephys/faculty_pages/bgranger.html"&gt;Brian Granger&lt;/a&gt; and his family in San Luis Obispo.&lt;br /&gt;&lt;br /&gt;We went to the beach in the evening:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjqOhHatI/AAAAAAAADrA/R_wj3h4x6qg/s1600-h/00033.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQcjqOhHatI/AAAAAAAADrA/R_wj3h4x6qg/s400/00033.jpg" alt="" id="BLOGGER_PHOTO_ID_5262213897964186322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQcjqszuL9I/AAAAAAAADrI/rHMjZ2hseOU/s1600-h/00040.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQcjqszuL9I/AAAAAAAADrI/rHMjZ2hseOU/s400/00040.jpg" alt="" id="BLOGGER_PHOTO_ID_5262213906095288274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQckO3sIHdI/AAAAAAAADrQ/dMYsAJiDuCE/s1600-h/00046.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQckO3sIHdI/AAAAAAAADrQ/dMYsAJiDuCE/s400/00046.jpg" alt="" id="BLOGGER_PHOTO_ID_5262214527491513810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And had a dinner together. Brian showed me his options pricing example he did with SymPy, so I made him create an &lt;a href="http://code.google.com/p/sympy/issues/detail?id=1175"&gt;issue 1175&lt;/a&gt; with the code.&lt;br /&gt;Then we played with the &lt;a href="http://ipython.scipy.org/doc/rel-0.9.1/html/parallel/index.html"&gt;parallel stuff&lt;/a&gt; that Brian contributed to ipython and we tried sympy with it and to our disappointment, we found pickling bugs in sympy, it works with protocol 0, but not protocol 2, see the &lt;a href="http://code.google.com/p/sympy/issues/detail?id=1176"&gt;issue 1176&lt;/a&gt; and &lt;a href="http://code.google.com/p/sympy/issues/detail?id=1177"&gt;1177&lt;/a&gt;. This almost smells like a bug in Python itself, but I need to investigate that later more deeply.&lt;br /&gt;&lt;br /&gt;Today is Tuesday and we'll work on doing atomic physics calculations with sympy. See also Brian's &lt;a href="http://groups.google.com/group/sympy/msg/fa1908231383f533"&gt;email&lt;/a&gt; to the sympy list about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3002107371080259380?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3002107371080259380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3002107371080259380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3002107371080259380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3002107371080259380'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/10/google-mentor-summit-iii.html' title='Google Mentor Summit III'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Cb7_IVMD3C4/SQcjnhiombI/AAAAAAAADqo/kzNm0IT7rp0/s72-c/00007.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7824484286731951254</id><published>2008-10-26T08:47:00.000-07:00</published><updated>2008-10-26T09:31:10.380-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Google Mentor Summit II</title><content type='html'>On Saturday morning I met &lt;a href="http://www.einval.com/%7Esteve/"&gt;Steve McIntyre&lt;/a&gt; and &lt;a href="http://dirk.eddelbuettel.com/"&gt;Dirk Eddelbuettel&lt;/a&gt;, Steve took us by car to Google. Well, it was overwhelming.&lt;br /&gt;&lt;br /&gt;For example we met there two other Debian developers, &lt;a href="http://jbailey.livejournal.com/"&gt;Jeff Bailey&lt;/a&gt; and &lt;a href="http://algebraicthunk.net/%7Edburrows/"&gt;Daniel Burrows&lt;/a&gt;. There are developers from all the famous projects, like git, Wine, Turbogears, Jython, ... There are still people I wanted to meet but didn't manage yesterday, need to fix that today. My plan is to get SymPy running on top of Jython, or at least do some more progress to take the advantage, that Philip Jenvey from Jython is here. Also I wanted to fix some RC bugs in Debian when Steve is here, to make some progress on my NM finally. We'll see how it goes.&lt;br /&gt;&lt;br /&gt;There was also an excellent presentation from people behind Android. One thing I was curious if it's going to run native C applications, like Python and it seems it will happen eventually, all the sources are out there, so someone just needs to push it forward. Another very cool thing they did that I was always looking for is &lt;a href="http://android.git.kernel.org/?p=tools/gerrit.git;a=shortlog"&gt;Gerrit&lt;/a&gt; for reviewing patches (see &lt;a href="http://review.source.android.com/"&gt;review.source.android.com&lt;/a&gt; for example how it looks like) -- basically a fork of Guido's codereview, but it has many nice features, like automatically applying the patch to the git repository as a new topic branch and one can then easily pull it, as well as review it over the web interface. When I get back to Prague I am going to install this for SymPy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-7824484286731951254?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7824484286731951254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7824484286731951254' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7824484286731951254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7824484286731951254'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/10/google-mentor-summit-ii.html' title='Google Mentor Summit II'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-456666326953190004</id><published>2008-10-25T07:24:00.000-07:00</published><updated>2008-10-25T08:23:18.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Google Mentor Summit I</title><content type='html'>I flew via Atlanta and had only about an hour to my next flight to San Francisco, so after my last &lt;a href="http://ondrejcertik.blogspot.com/2008/03/sage-days-8.html"&gt;experience&lt;/a&gt;, when I went to the immigration, got stuck in the line for more than an hour and then had to run to catch my flight, I decided to try a different strategy this time: first run to the immigration and then walk to my gate. Unfortunately I was sitting near the back of the plane and I got out among the last ones. Fortunately, it was several hundreds meters to the immigration, so I run as fast as I could and I managed to get there as the first one and everything took about 5 minutes. That was just awesome, I finally figured this out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jarrodmillman.blogspot.com/"&gt;Jarrod&lt;/a&gt; was waiting for me at the airport, went to his place. Here's his cat:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwx1gxhTI/AAAAAAAADp4/Ihs7yI3i6JU/s1600-h/00022.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwx1gxhTI/AAAAAAAADp4/Ihs7yI3i6JU/s400/00022.jpg" alt="" id="BLOGGER_PHOTO_ID_5261102422435136818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Friday we did some work and then went to the Golden Gate, the traffic was quite dense:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwyQuTSnI/AAAAAAAADqA/rKnF4VlSz40/s1600-h/00045.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwyQuTSnI/AAAAAAAADqA/rKnF4VlSz40/s400/00045.jpg" alt="" id="BLOGGER_PHOTO_ID_5261102429739633266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SQMwyj1EwaI/AAAAAAAADqI/QrJDT6-3mrA/s1600-h/00056.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://4.bp.blogspot.com/_Cb7_IVMD3C4/SQMwyj1EwaI/AAAAAAAADqI/QrJDT6-3mrA/s400/00056.jpg" alt="" id="BLOGGER_PHOTO_ID_5261102434868314530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alcatraz:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQMw0CGb07I/AAAAAAAADqY/Fm6Rymz4vIY/s1600-h/00060.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/SQMw0CGb07I/AAAAAAAADqY/Fm6Rymz4vIY/s400/00060.jpg" alt="" id="BLOGGER_PHOTO_ID_5261102460174062514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;San Francisco:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwzZ6LZ7I/AAAAAAAADqQ/RnjgUXhtyog/s1600-h/00058.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwzZ6LZ7I/AAAAAAAADqQ/RnjgUXhtyog/s400/00058.jpg" alt="" id="BLOGGER_PHOTO_ID_5261102449385236402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Cb7_IVMD3C4/SQMyCfMkVAI/AAAAAAAADqg/k2FcuKELOO8/s1600-h/00065.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://3.bp.blogspot.com/_Cb7_IVMD3C4/SQMyCfMkVAI/AAAAAAAADqg/k2FcuKELOO8/s400/00065.jpg" alt="" id="BLOGGER_PHOTO_ID_5261103808014210050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then we had a cofee in San Francisco and went to Silicon Valey, Jarrod drove me around a little bit to see SLAC, Stanford campus and other things. In the evening we went to the common pub with other mentors and Google guys, where we for example met with &lt;a href="http://www.math.washington.edu/%7Erobertwb/"&gt;Robert Bradshaw&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today I am looking forward to meet with all the people I know from mailinglists, Debian and other places.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-456666326953190004?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/456666326953190004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=456666326953190004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/456666326953190004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/456666326953190004'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/10/google-mentor-summit-i.html' title='Google Mentor Summit I'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Cb7_IVMD3C4/SQMwx1gxhTI/AAAAAAAADp4/Ihs7yI3i6JU/s72-c/00022.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5145625403849564581</id><published>2008-10-01T12:19:00.000-07:00</published><updated>2008-10-01T13:51:11.306-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Gael and Emmanuelle in Prague</title><content type='html'>Last weekend &lt;a href="http://gael-varoquaux.info/"&gt;Gaël Varoquaux&lt;/a&gt; together with &lt;a href="http://www.saint-gobain-recherche.com/svi/en/emmanuelle_gouillart.html"&gt;Emmanuelle&lt;/a&gt; came to Prague, so it was really awesome to meet again (we first met with Gaël at the &lt;a href="http://www.scipy.org/SciPy2007"&gt;SciPy 2007&lt;/a&gt; conference at Caltech).&lt;br /&gt;&lt;br /&gt;Because I recently &lt;a href="http://ondrejcertik.blogspot.com/2008/09/master-studies.html"&gt;finished&lt;/a&gt; my master, I was basically visiting pubs each evening, so we first met on Friday at 10pm and just had couple Pilsens (I already had some beers that evening with other friends), then I had to go, as I was doing &lt;a href="http://www.toefl.org/"&gt;TOEFL&lt;/a&gt; on Saturday. At the exam I met a very beautiful girl and other interesting people, so we went to lunch together and as a result I arrived half an our later than we agreed with Gaël and Emmanuelle, but I think they understood my situation. :) Then we went around Vyšehrad, came to I.P.Pavlova, had some Czech meal and beers, then went on foot pass the &lt;a href="http://en.wikipedia.org/wiki/Church_of_Saints_Cyril_and_Methodius"&gt;Church of Saints Cyril and Methodius&lt;/a&gt;, where the Heydrich attackers were cornered (there is still the &lt;a href="http://en.wikipedia.org/wiki/Operation_Anthropoid#Attempted_capture_of_the_assassins"&gt;bullet-scarred window&lt;/a&gt; visible from the street), then continued over the bridge to the hotel, Emmanuelle went in, I then came with Gaël to another pub for couple of more beers.&lt;br /&gt;&lt;br /&gt;The Python scientific community is very cool and I always enjoy meeting people from it and discussing things like &lt;a href="http://cython.org"&gt;cython&lt;/a&gt;, &lt;a href="http://www.scipy.org/"&gt;scipy&lt;/a&gt;, &lt;a href="http://ipython.scipy.org"&gt;ipython&lt;/a&gt;, &lt;a href="http://code.enthought.com/projects/mayavi/"&gt;mayavi&lt;/a&gt;, &lt;a href="http://code.google.com/p/sympy/"&gt;sympy&lt;/a&gt;, &lt;a href="http://matplotlib.sourceforge.net/"&gt;matplotlib&lt;/a&gt;, &lt;a href="http://www.sagemath.org/"&gt;sage&lt;/a&gt;, what license is best for each project, etc. in Prague pubs. Python has a lot of high quality libraries and tools for scientific computing, so things look very promising.&lt;br /&gt;&lt;br /&gt;It was fun I really enjoyed that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5145625403849564581?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5145625403849564581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5145625403849564581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5145625403849564581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5145625403849564581'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/10/gael-and-emmanuelle-in-prague.html' title='Gael and Emmanuelle in Prague'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8917746428950329956</id><published>2008-09-22T08:59:00.000-07:00</published><updated>2008-09-22T09:34:36.492-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>master studies</title><content type='html'>I did it! :) I defended my thesis and passed master finals from theoretical physics at &lt;a href="http://www.mff.cuni.cz/toISO-8859-2.en/"&gt;Charles University&lt;/a&gt; in Prague couple hours ago.&lt;br /&gt;&lt;br /&gt;After almost dropping out of my school exactly a year ago for not having enough credits to go to the next year, I gave myself an obligation to finish my school on time. I worked very hard the last year, I had to do 8 exams, some of them very hard, requiring more than a week of thorough learning and 9 seminars, requiring a lot of work too and also a master thesis, for which I had to had working finite element solvers and together with &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt; it took all my time and energy. I even had to cancel my trip to Austin and Caltech for the SciPy conference. But I finished my school after all, I am very happy about it.&lt;br /&gt;&lt;br /&gt;Last year, two of my friends bet $100 between themselves that I will not finish on time. Jarda, who believed in me is now at Princeton doing his Ph.D. &lt;a href="http://www.facebook.com/people/Matous_Ringel/720476546"&gt;Matouš&lt;/a&gt;, who didn't believe in me, will now pay $100 to Jarda. I think that life is fair.:)&lt;br /&gt;&lt;br /&gt;Now I'll be visiting pubs quite often and then I'll fix some long standing issues in SymPy, hopefully finish my Debian task &amp; skills (to finally become a Developer couple months after that) and finally do useful stuff for my research with a fresh head now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8917746428950329956?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8917746428950329956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8917746428950329956' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8917746428950329956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8917746428950329956'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/09/master-studies.html' title='master studies'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1566818854130033380</id><published>2008-08-16T23:14:00.000-07:00</published><updated>2008-08-16T23:45:41.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>I am switching from Mercurial to git</title><content type='html'>After a long night of debugging and while preparing, reviewing and pushing final patches before a &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt; release, I got this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ hg qpush &lt;br /&gt;applying 1645.diff&lt;br /&gt;Unable to read 1645.diff&lt;br /&gt;** unknown exception encountered, details follow&lt;br /&gt;** report bug details to http://www.selenic.com/mercurial/bts&lt;br /&gt;** or mercurial@selenic.com&lt;br /&gt;** Mercurial Distributed SCM (version 1.0.1)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "/usr/bin/hg", line 20, in &lt;module&gt;&lt;br /&gt;    mercurial.dispatch.run()&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 20, in run&lt;br /&gt;    sys.exit(dispatch(sys.argv[1:]))&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 29, in dispatch&lt;br /&gt;    return _runcatch(u, args)&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 45, in _runcatch&lt;br /&gt;    return _dispatch(ui, args)&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 364, in _dispatch&lt;br /&gt;    ret = _runcommand(ui, options, cmd, d)&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 417, in _runcommand&lt;br /&gt;    return checkargs()&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 373, in checkargs&lt;br /&gt;    return cmdfunc()&lt;br /&gt;  File "/var/lib/python-support/python2.5/mercurial/dispatch.py", line 356, in &lt;lambda&gt;&lt;br /&gt;    d = lambda: func(ui, repo, *args, **cmdoptions)&lt;br /&gt;  File "/var/lib/python-support/python2.5/hgext/mq.py", line 1942, in push&lt;br /&gt;    mergeq=mergeq)&lt;br /&gt;  File "/var/lib/python-support/python2.5/hgext/mq.py", line 833, in push&lt;br /&gt;    top = self.applied[-1].name&lt;br /&gt;IndexError: list index out of range&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I am using:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ hg --version &lt;br /&gt;Mercurial Distributed SCM (version 1.0.1)&lt;br /&gt;&lt;br /&gt;Copyright (C) 2005-2008 Matt Mackall &lt;mpm@selenic.com&gt; and others&lt;br /&gt;This is free software; see the source for copying conditions. There is NO&lt;br /&gt;warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And I just got pissed off and I am switching to git for good. I've been using mercurial every day since about November 2007, and I think I am quite proficient in it. But we were missing some features, like recording a patch by hunks (git add -p), so &lt;a href="http://wiki.sympy.org/wiki/Kirill_Smelkov"&gt;Kirill Smelkov&lt;/a&gt; (another SymPy developer) just implemented this to mercurial queues, it is now included in hg 1.0. But I am constantly beaten by stupid bugs, mercurial broke into pieces several times already (&lt;a href="http://www.selenic.com/pipermail/mercurial/2008-July/020438.html"&gt;last time&lt;/a&gt; with hg bisect, before it with mercurial queues and file renaming), that just should not happen in a production version. Another problem is that hgweb is constantly using 100% of CPU on my server whenever someone clicks to see the contents of the README file. Again I can spend time debugging it, but I will just use git and if it works, I'll stay with it.&lt;br /&gt;&lt;br /&gt;I started learning git recently and it is just better in every aspect. Bigger community, it has all the features that I was always missing in mercurial (like rebase, hunks recording, diff diff --color-words, better gitk). And it's superfast. &lt;br /&gt;&lt;br /&gt;Unless I find some showstopper bugs in git too, I don't think I am coming back.&lt;br /&gt;&lt;br /&gt;We'll have to create a live mercurial mirror of SymPy, so that people can continue using mercurial, but I'll myself just be using git. We wrote a simple translation table for anyone using mercurial to get started:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.sympy.org/wiki/Git_hg_rosetta_stone"&gt;http://wiki.sympy.org/wiki/Git_hg_rosetta_stone&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love Python and I like that Mercurial is just a small C core and the rest is in Python, but for some reason, it still has the baby bugs, that should have been fixed years ago and why should we spend our time fixing and improving Mercurial, if other people have already done the job for us (and usually a better job than I could do) in git?&lt;br /&gt;&lt;br /&gt;Another reason for switching is that in Debian, mercurial is not used for packages, while git is used a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1566818854130033380?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1566818854130033380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1566818854130033380' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1566818854130033380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1566818854130033380'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/08/i-am-switching-from-mercurial-to-git.html' title='I am switching from Mercurial to git'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-469558586110418189</id><published>2008-08-14T14:47:00.000-07:00</published><updated>2008-08-14T16:18:02.772-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>SymPy core in Cython, general CAS design thoughts</title><content type='html'>We managed to write a new core of &lt;a href="http://sympy.org/"&gt;SymPy&lt;/a&gt; that is an order of magnitude faster than the current sympy, but contrary to sympycore (which is &lt;a href="http://wiki.sympy.org/wiki/Pearu_Peterson"&gt;Pearu&lt;/a&gt;'s attempt to write a fast core), it uses the same architecture as sympy, so we can now merge it back and speedup everything.&lt;br /&gt;&lt;br /&gt;It started like this: I was unsatisfied with the current sympy speed, and also with the fact, that it was only Kirill and sometimes Mateusz who were submitting speedup patches to sympy, but unfortunately noone was doing any effort to get sympycore merged. I (and I think many people too) hoped that when sympycore got started, the aim was to get it merged back. That was not happening. So I said to myself, ok, noone does the job for you, you need to get your hands dirty and gets things moving yourself. &lt;br /&gt;&lt;br /&gt;I came with my thoughts 3 years back, when it was a rainy weekend in Portland, Oregon, I was sitting in my office at the university, just finished playing with &lt;a href="http://swiginac.berlios.de/"&gt;swiginac&lt;/a&gt; that we wrote with Ola Skavhaug, and said to myself then -- no, there must be a better way. First all this bloated swig thing, but this could be fixed by hand (today we just use Cython). But especially with how things were done in GiNaC internally. Too many classes, too difficult to write new functions. So I wrote my own cas in pure Python just to see if things can be done better. Then a year later at the Space Telescope Science Institute, I was again wondering, ok, a good CAS in Python is really needed. &lt;br /&gt;&lt;br /&gt;So I &lt;a href="http://www.ginac.de/pipermail/ginac-list/2006-July/000882.html"&gt;wrote&lt;/a&gt; to ginac developers saying my concerns and exchanging ideas how to do it better. I read this email from July 2006 now again and it seems I was right. Citing &lt;blockquote&gt;"I think there are people, who would implement for example the factorization (you can copy it from &lt;a href="http://eigenmath.net/"&gt;eigenmath&lt;/a&gt; for example) and other stuff like limits and integration, if the code weren't so&lt;br /&gt;complex (or am I wrong?)."&lt;/blockquote&gt;I was right, except limits (that I wrote myself), all of the above was implemented by someone else in SymPy (Mateusz, but others too, did a stellar job here). It's actually pretty amusing for me to read my other emails from the ginac list, for example &lt;a href="http://www.ginac.de/pipermail/ginac-list/2006-August/000906.html"&gt;this&lt;/a&gt;. I basically said the design of SymPy in that email. As one of replies, I was &lt;a href="http://www.ginac.de/pipermail/ginac-list/2006-August/000922.html"&gt;told&lt;/a&gt; to consider education in C++. As I also found &lt;a href="http://www.ginac.de/pipermail/ginac-list/2008-January/001302.html"&gt;later&lt;/a&gt;, ginac developers get very easily attacking me over nothing. But if one ignores it, I had &lt;a href="http://www.ginac.de/pipermail/ginac-list/2006-August/000929.html"&gt;several&lt;/a&gt; &lt;a href="http://www.ginac.de/pipermail/ginac-list/2006-August/000938.html"&gt;interesting&lt;/a&gt; discussions with them about a CAS design (we also discussed something later, but I cannot find it now). But anyway, flaming people is something I would never tolerate on a sympy list, because this is exactly what drives people away. And I am not interested in any flame. I just want to get things done. Anyway, I did exactly what I said in those emails on the ginac list with sympy and it seems it worked really well. One remainging piece of the puzzle is speed though. As I watched one Linus &lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;talk&lt;/a&gt; today, he said "well, maybe 30s is not much for you, but if people are used to do the same thing in 0.1s, trust me, it is way too slow." He's of course 100% right. So we need to speed sympy up drastically if we want to be competitive. &lt;br /&gt;&lt;br /&gt;So those were my thoughts recently. So I wrote a SymPy core in pure C over the last weekend, see my &lt;a href="http://groups.google.com/group/sympy/browse_thread/thread/8362465daafbd4dc"&gt;emails&lt;/a&gt; to the sympy list. I achieved some pretty competitive benchmarks, but there was one "minor" issue -- memory management.  I wasn't freeing any memory as I thought I could fix that later easily. And it turned out to be a night mare. I hoped I could use &lt;a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/"&gt;boehm-gc&lt;/a&gt;, but it doesn't work with &lt;a href="http://library.gnome.org/devel/glib/"&gt;glib&lt;/a&gt; (it gives nasty segfaults), that I was using for dictionaries and string management. So I hacked up reference counting just like in Python, but I didn't manage to make it work without segfaults. Segfaults can be debugged, but it's a lot of effort, especially if it fails deeply in some libc function, far away from the code that actually breaks it. &lt;a href="http://valgrind.org/"&gt;Valgrind&lt;/a&gt; helps here too, but I want to spend my time on other things than debugging segfaults. Then &lt;a href="http://www.math.washington.edu/~robertwb/"&gt;Robert Bradshaw&lt;/a&gt; told me: why not to use &lt;a href="http://cython.org/"&gt;Cython&lt;/a&gt;? BTW, &lt;a href="http://wiki.sympy.org/wiki/Kirill_Smelkov"&gt;Kirill&lt;/a&gt; was telling me this from the beginning. But I am stubborn, if I believe in something, I want to try it. So I tried and failed. Anyway, I must say I really enjoyed coding in C, it's a very good language.&lt;br /&gt;&lt;br /&gt;So then I threw the code away and started from scratch. I think this was the 4th time I wrote the "x+y+x -&gt; 2*x + y" simplification algorithm. For the first time 2 years ago it took me maybe a week to get it right. In the C (3rd time) it took me just maybe an hour. And now (4th time) in Python it was just couple minutes. So it makes me feel good if I can see that I am improving after all. Anyway, so I wrote a core in pure Python, but using all my 2 years experience and a know-how after discussing with Kirill, Mateusz, Fredrik, Pearu and many others how to do things. So our new core, we call it sympyx, is less than 600 lines long, it uses the same architecture as sympy and it is amazingly fast.&lt;br /&gt;&lt;br /&gt;Then we reserved couple evenings with Kirill and cythonized it (neither of us has time during the day, I need to work on my thesis and Kirr works). We logged into one machine, setup screen so that we could see each other typing and also type to each other's terminal and started cythonizing. Kirr is very good at it, he submitted couple patches to Cython and he's just much better developer than I am. So he used his approach of rewriting everything directly to Cython, while I used my iterative approach of always trying to satisfy tests. So when he completely broke the core in the middle and I saw on his terminal something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;In [1]: x+x&lt;br /&gt;[huge stacktrace with Cython errors]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and then I saw the cursor stopped moving, I write to his terminal "haha" and was laughing. Probably a minute later I screwed something up in my terminal and I saw that my cursor wrote haha.&lt;br /&gt;Actually very good moment was that I managed to get all tests run first. So I got hold of his terminal and wrote in his vim session "look at my terminal". And there he saw:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ py.test&lt;br /&gt;============================= test process starts ==============================&lt;br /&gt;executable:   /usr/bin/python  (2.5.2-final-0)&lt;br /&gt;using py lib: /usr/lib/python2.5/site-packages/py &lt;rev unknown=""&gt;&lt;br /&gt;&lt;br /&gt;test_basic.py[13] .............&lt;br /&gt;test_basic2.py[4] ....&lt;br /&gt;&lt;br /&gt;================== tests finished: 17 passed in 0.04 seconds ===================&lt;br /&gt;&lt;/rev&gt;&lt;/pre&gt;&lt;br /&gt;You know, all tests run, with the core in Cython! And then I saw how my cursor started to move and it was typing "git diff" and "git cherry -v origin" and "git log" and other things, as Kirr was checking that what he sees is correct. But I haven't cdefed the classes, just make it work (there were problems with the __new__ method not yet supported in Cython and other minor things). We both came home from our work and continued, so I continued bringing more and more classes and methods to Cython, but then I got this message from Kirr on my jabber: "all tests pass. Speedup is 3x". So I said to myself -- yes! So he beated me and he did it. I pulled his changes and indeed, everything was cythonized and it was superfast. So his approach provided faster results after all.&lt;br /&gt;&lt;br /&gt;We polished things, did couple benchmarks and &lt;a href="http://groups.google.com/group/sympy/browse_thread/thread/aa3f4263bc3f7e23"&gt;announced&lt;/a&gt; it on sympy and sage-devel lists.&lt;br /&gt;&lt;br /&gt;GiNaC is still faster, but not 100x faster, depending on the benchmark usually 2x to 10x faster (but sometimes also slower). There is still a lot of room for both design and technical optimizations, so I think we'll improve for sure. I very strongly believe it is possible to be simple in design, maintainable and fast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-469558586110418189?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/469558586110418189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=469558586110418189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/469558586110418189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/469558586110418189'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/08/sympy-core-in-cython-general-cas-design.html' title='SymPy core in Cython, general CAS design thoughts'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1936047392014325233</id><published>2008-03-25T18:21:00.000-07:00</published><updated>2008-03-25T18:23:31.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>SymPy accepts Google Summer of Code applications</title><content type='html'>&lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt; is a pure Python library for symbolic mathematics. Last year SymPy had 5 excellent students and this year we are &lt;a href="http://code.google.com/p/sympy/wiki/GSoC2008"&gt;accepting&lt;/a&gt; students again.&lt;br /&gt;Why should you apply? And why to SymPy?&lt;br /&gt;&lt;br /&gt;Well, let me give you some reasons:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First of all, it's fun. To get some idea, read the &lt;a href="http://code.google.com/p/sympy/wiki/GSoC2007"&gt;GSoC2007 SymPy page&lt;/a&gt;, where you can find out what the last year students did and especially read their reports, where they describe their impressions from the summer, how they tackled problems and their overall conclusions.&lt;/li&gt;&lt;li&gt;It's not just about coding, we enjoy the social part too. There is a great community around numpy, scipy, ipython, matplotlib, Sage and similar tools and if you do scientific computing with Python, you gain a lot just being part of it, because you learn new things from the others.&lt;/li&gt;&lt;li&gt;I currently live in &lt;a href="http://en.wikipedia.org/wiki/Prague"&gt;Prague&lt;/a&gt; (most people say it's a beautiful city, but I actually like Los Angeles, or the Bay Area:), if there are enough interested people, we can make a coding sprint here (plus of course some sightseeing+pubs). Anyone with a good commit history is welcome to stay at my apartment. :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You earn $4500, some of which I suggest to spend on travelling to conferences/workshops, here are some tips: &lt;a href="http://www.scipy.org/SciPy2008"&gt;SciPy2008&lt;/a&gt; (see also &lt;a href="http://www.scipy.org/SciPy2007"&gt;SciPy2007&lt;/a&gt;), &lt;a href="http://www.scipy.org/EuroSciPy2008"&gt;EuroSciPy2008&lt;/a&gt;, Sage Days (you can read my impressions from &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sage-days-6.html"&gt;SD6&lt;/a&gt; and &lt;a href="http://ondrejcertik.blogspot.com/2008/03/sage-days-8.html"&gt;SD8&lt;/a&gt;), watch the numpy/scipy mailinglists for announcement of other meetings.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Read also the &lt;a href="http://groups.google.com/group/sympy/browse_thread/thread/c5b1a293802e2e25"&gt;current status and motivation&lt;/a&gt; of SymPy and it's relation to Sage. If you want to apply, all the necessary information is on our &lt;a href="http://code.google.com/p/sympy/wiki/GSoC2008"&gt;wiki page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nevertheless, if you decide SymPy is not for you, but still you'd like to do GSoC project in a similar area, there are other good options too - one is &lt;a href="http://scipy.org/"&gt;SciPy/NumPy&lt;/a&gt;, the other is &lt;a href="http://sagemath.org/"&gt;Sage&lt;/a&gt;. Unfortunately Sage &lt;a href="http://mabshoff.blogspot.com/2008/03/sage-vs-gsoc-2008.html"&gt;was not accepted&lt;/a&gt; as a mentorship organization, but it has several good projects too, some of which you can do for example under the umbrella of the Python Software Foundation.&lt;br /&gt;&lt;br /&gt;One of them is &lt;a href="http://groups.google.com/group/sage-devel/browse_thread/thread/445135eab8ccd3af/"&gt;improving the Sage notebook&lt;/a&gt;. If you've never seen that - download Sage, start it (./sage), type "notebook()" and a nice Mathematica like notebook will popup in the browser. It allows collaborative editing ala Google Docs and many other things. If you'd like to work on it, reply to the &lt;a href="http://groups.google.com/group/sage-devel/browse_thread/thread/445135eab8ccd3af/"&gt;email&lt;/a&gt; on sage-devel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1936047392014325233?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1936047392014325233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1936047392014325233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1936047392014325233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1936047392014325233'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/03/sympy-accepts-google-summer-of-code.html' title='SymPy accepts Google Summer of Code applications'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1537381263302933590</id><published>2008-03-06T14:50:00.000-08:00</published><updated>2008-03-06T14:51:40.982-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>Sage Days 8</title><content type='html'>Between February 29 and March 4, 2008 I attended the &lt;a href="http://wiki.sagemath.org/days8"&gt;Sage Days 8&lt;/a&gt;, hosted at the &lt;a href="http://www.enthought.com/"&gt;Enthought&lt;/a&gt; headquarters in Austin, Texas. This was my 5th time in the USA and it was a marvelous experience, as with all my visits in the states.&lt;br /&gt;&lt;br /&gt;As usual, I had some adventures in Atlanta, that interested readers can find at the end of this post. Anyway, on the Austin's airport I met Peter and his wife Crystal, Fernando, Benjamin, Jarrod, Eric and Clement. We went to have a dinner and then me and Clement were staying at Peter's house:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R895uRQ6tRI/AAAAAAAACk8/VeoVe0hlOXI/s1600-h/29022008331.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R895uRQ6tRI/AAAAAAAACk8/VeoVe0hlOXI/s400/29022008331.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5174488332687291666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see the neighbor's cat and Peter's dog Trinity behind the window. The next day we went to Enthought, that was providing us with a breakfast and a lunch each day - and it was delicious. After the breakfast, we gathered in the room and introduced ourselves. Enthought rents 3/4 of the 21th floor in the Bank of America building, so when I looked left I saw:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/R897sBQ6tSI/AAAAAAAAClE/K6D2Mc1esb4/s1600-h/29022008333.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/R897sBQ6tSI/AAAAAAAAClE/K6D2Mc1esb4/s400/29022008333.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5174490493055841570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When I looked behind I saw:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R897sRQ6tTI/AAAAAAAAClM/uirNSJsim90/s1600-h/29022008332.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R897sRQ6tTI/AAAAAAAAClM/uirNSJsim90/s400/29022008332.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5174490497350808882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and in front of me, I saw all the participants (I took &lt;a href="http://picasaweb.google.com/ondrej.certik/SageDays8"&gt;photos&lt;/a&gt; of all participants together with names). As you can see, there were really good people in there, like Travis (creator of NumPy), William (main author of Sage), Eric (CEO of Enthought), Fernando (author of IPython), Jarrod (the release manager of SciPy), Michael (the release manager of Sage) etc. See also the Fernando's &lt;a href="http://video.google.com/videoplay?docid=-3122487088315342993&amp;hl=en"&gt;welcome speech&lt;/a&gt; and the &lt;a href="http://video.google.com/videoplay?docid=-5264024938148088338&amp;hl=en"&gt;video&lt;/a&gt; of each of us introducting himself.&lt;br /&gt;&lt;br /&gt;The views from the windows are terrific. I enjoyed working on each of the 4 sides of the skyscraper with completely different scenery, or when the sun is going down, that's also very cool. &lt;br /&gt;&lt;br /&gt;We spent the whole Friday doing presentations, some of which you can find &lt;a href="http://wiki.sagemath.org/days8/schedule"&gt;here&lt;/a&gt;. Then we went to Eric's house to have a big dinner together.&lt;br /&gt;&lt;br /&gt;On Saturday, Sunday and Monday we were all hacking on many different things. I joined Fernando, Benjamin, Brian and Stefan on ipython1, Travis was implementing a new type (gmp integer) in NumPy, William wrote a manipulate command in Sage, Eric did the same in Traits, Gary and Michael implemented parallel testing of Sage, ...&lt;br /&gt;&lt;br /&gt;On Tuesday we had final status reports and people left in the afternoon. In the evening we went with Clement to have a dinner and then we visited some bars on the 6th street, having a beer in each.&lt;br /&gt;&lt;br /&gt;On Wednesday I visited John and Roy from the &lt;a href="http://www.cfdlab.ae.utexas.edu/"&gt;Computational Fluid Dynamics Lab&lt;/a&gt; at the University of Texas, Austin, who wrote the &lt;a href="http://libmesh.sourceforge.net/"&gt;libMesh&lt;/a&gt; library, that I extensively used and also created a Debian &lt;a href="http://packages.debian.org/source/sid/libmesh"&gt;package&lt;/a&gt; of. It was very influential to see the libMesh "from behind", also John and Roy are cool people (not mentioning the Debian tradition of having good relations with upstream:). Then I visited some professors at the same campus, after which I went into the &lt;a href="http://en.wikipedia.org/wiki/Texas_State_Capitol"&gt;Capitol&lt;/a&gt; and then I took the bus to the &lt;a href="http://www.simon.com/mall/default.aspx?ID=223"&gt;Barton Creek Square Mall&lt;/a&gt; to buy some &lt;a href="http://www.apple.com/ipodshuffle/"&gt;ipods&lt;/a&gt; and jeans, so that I can say I have jeans from Texas. BTW, the ipod works excellent in Debian - I plugged it in and it just shows on my Gnome desktop. It's true that naively dragging mp3 files on it didn't make it play, but these &lt;a href="http://www.geocities.com/kymacpherson/ipod/linux_ipod.html"&gt;instructions&lt;/a&gt; made it work.&lt;br /&gt;&lt;br /&gt;On Thursday I fixed the remaining release blockers in SymPy and made a new release. In the evening, I am going to meet &lt;a href="http://www.ph.utexas.edu/~aswin/"&gt;Aswin&lt;/a&gt;, he also uses SciPy and also is a friend of &lt;a href="http://linuxgazette.net/authors/appaiah.html"&gt;Kumar&lt;/a&gt;, who is now maintaining python-numpy and python-scipy Debian packages with me (Kumar also knows &lt;a href="http://www.aero.iitb.ac.in/~prabhu/"&gt;Prabhu&lt;/a&gt;, the author of &lt;a href="http://code.enthought.com/mayavi2/"&gt;Mayavi2&lt;/a&gt; hosted at Enthought, so it's all connected). &lt;br /&gt;&lt;br /&gt;Anyway, the whole workshop was an excellent experience for me. I learned a lot of new things and being able to speak with people who wrote tools that I use almost everyday is important. We also extensively discussed the future of all the projects (Sage, SciPy, NumPy, IPython, Cython, SymPy). See my summarizing &lt;a href="http://groups.google.com/group/sympy/browse_thread/thread/c5b1a293802e2e25/"&gt;email&lt;/a&gt; to the SymPy mailinglist.&lt;br /&gt;&lt;br /&gt;Another thing, that I find very interesting is that Microsoft is financing the windows port of Sage, that will make basically anything that uses Python/Cython/C/Fortran very easy to install on windows (just a spkg package in sage). I find it really cool that MS is not only supporting but even financing a truly opensource project.&lt;br /&gt;&lt;br /&gt;Finally the promised adventure in Atlanta: we took off the Prague airport on February 28th with a 2 hours delay (due to some paperwork as we were told by the captain). As I had 3 hours in Atlanta for the connection to Austin and I had to go through immigration, it was clear that I'll miss it. But I was not surprised, last time I was flying through Atlanta, they canceled my flight to LA completely. We arrived in Atlanta an hour and a half before my departure, then I was waiting for about an hour at immigration, it was incredibly slow. When I had around 20 min to departure, I had to ask people standing in front of me if they let me in, they were very nice and did. I was leaving immigration 10 min to my departure, then I was running to get my luggage and myself through customs and screening, it was 5 min to my departure when I ran down to the display with departure times. Then I was sprinting like hell to the terminal D to only see the clerk doing some final paperwork with all the people already boarded and the jetway door shut. After a little persuading he let me in too, fortunately there was still one seat left, so I made it. You can imagine my pleasant surprise in Austin when I discovered, that my luggage made it too, considering that I handed it to the Atlanta's airport personnel exactly 10 min prior the departure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1537381263302933590?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1537381263302933590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1537381263302933590' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1537381263302933590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1537381263302933590'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/03/sage-days-8.html' title='Sage Days 8'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Cb7_IVMD3C4/R895uRQ6tRI/AAAAAAAACk8/VeoVe0hlOXI/s72-c/29022008331.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1235142580208531361</id><published>2008-01-03T07:40:00.000-08:00</published><updated>2008-01-03T11:05:50.709-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='scipy'/><title type='text'>SymPy/sympycore (pure Python) up to 5x faster than Maxima (future of Sage.calculus?)</title><content type='html'>According to &lt;a href="http://groups.google.com/group/sympycore/browse_thread/thread/8062076c7bc8807d"&gt;this&lt;/a&gt; test, &lt;a href=http://code.google.com/p/sympycore/&gt;sympycore&lt;/a&gt; is from 2.5x to 5x faster than Maxima. This is an absolutely fantastic result and also a perfect certificate for Python in scientific computing. Considering that we compare pure Python to LISP.&lt;br /&gt;&lt;br /&gt;Ok, this made us excited, so we dugg deeper and ran more benchmarks. But first, let me say a few general remarks. I want a fast CAS (Computer Algebra System) in Python. General CAS, that people use, that is useful, that is easily extensible (!), that is not missing anything, that is comparable to Mathematica and Maple -- and most importantly -- I want it now and I don't care about 30 years horizons (I won't be able to do any serious programming in 30 years anyway). All right. How to do that? Well, many people tried... And failed. The only opensource CAS system, that has any chance of becoming the opensource CAS, in my own opinion, is &lt;a href="http://sagemath.org/"&gt;Sage&lt;/a&gt;. You can read more about my impressions form Sage &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sage-days-6.html"&gt;here&lt;/a&gt;. I am actually only interested in mathematical physics, so basically Sage.calculus. Currently Sage uses Maxima, because Maxima is old, proven, working system and it's reasonably fast and quite reliable, but written in LISP. Some people like LISP. I don't and I find it extremely difficult to extend Maxima. Also even though Maxima is in LISP, it uses it's own language for interacting with the user (well, that's not the way). I like python, so I want to use Python. Sage has written Python wrappers to Maxima, so Sage can do almost everything that Maxima can, plus many other things. Now. But the Sage.calculus has issues.&lt;br /&gt;&lt;br /&gt;First, I don't know how to extend the wrappers with some new things, see my &lt;a href="http://groups.google.com/group/sage-devel/msg/906f9b991c68de06"&gt;post&lt;/a&gt; in the sage-devel for details, it's almost 2 months old with no reaction, which shows that it's a difficult issue (or nonsense:)).&lt;br /&gt;&lt;br /&gt;And second, it's slow. For some examples that Sage users have found out, even &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt;, as it is now, is 7x &lt;a href="http://groups.google.com/group/sage-support/msg/8f1a7ed5a49df1a0"&gt;faster&lt;/a&gt; than Sage and sympycore 23x faster and with the recent speed improvements 40x faster than Sage.&lt;br /&gt;&lt;br /&gt;So let's improve Sage.calculus. How? Well, no one knows for sure, but&lt;br /&gt;I believe in my original idea of pure Python CAS (SymPy), possibly with some parts rewritten in C. Fortunately, quite a lot of us believe that this is the way.&lt;br /&gt;&lt;br /&gt;What is this sympycore thing? In sympy, we wanted to have something now, instead of tomorrow, so we were adding a lot of features, not looking too much on speed. But then Pearu Peterson came and said, guys, we need speed too. So he rewrote the core (resulting in 10x to 100x speedup) and we moved to the new core. But first, the speed isn't sufficient, and second it destabilized SymPy a lot (there are still some problems with caching and assumptions half a year later). So with the next package of speed improvements, we decided to either port them to the current sympy, or wait until the new core stabilizes enough. So the new new core is called sympycore now, currently it only has the very basic arithmetics (and derivatives and simple integrals), but it's very fast. It's mainly done by Pearu. But for example the latest speed improvement using sexpressions was invented by Fredrik Johansson, another SymPy developer and the author of &lt;a href="http://code.google.com/p/mpmath/"&gt;mpmath&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;OK, let's go back to the benchmarks. First thing we realized is that Pearu was using CLISP 2.41 (2006-10-13) and compiled Maxima by hand in the above timings, but when I tried Maxima in Debian (which is compiled with GNU Common Lisp (GCL) GCL 2.6.8), I got different results, Maxima did beat sympycore.&lt;br /&gt;&lt;br /&gt;SymPyCore:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;In [5]: %time e=((x+y+z)**100).expand()&lt;br /&gt;CPU times: user 0.57 s, sys: 0.00 s, total: 0.57 s&lt;br /&gt;Wall time: 0.57&lt;br /&gt;&lt;br /&gt;In [6]: %time e=((x+y+z)**20 * (y+x)**19).expand()&lt;br /&gt;CPU times: user 0.25 s, sys: 0.00 s, total: 0.25 s&lt;br /&gt;Wall time: 0.25&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Maxima:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(%i7) t0:elapsed_real_time ()$ expand ((x+y+z)^100)$ elapsed_real_time ()-t0;&lt;br /&gt;(%o9)                                0.41&lt;br /&gt;(%i16) t0:elapsed_real_time ()$ expand ((x + y+z)^20*(x+z)^19)$ elapsed_real_time ()-t0;&lt;br /&gt;(%o18)                         0.080000000000005&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So when expanding, Maxima is comparable to sympycore (0.41 vs 0.57), but for general arithmetics, Maxima is 3.5x faster. We also compared GiNaC (resp. swiginac):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; %time e=((x+y+z)**20 * (y+x)**19).expand()&lt;br /&gt;CPU times: user 0.03 s, sys: 0.00 s, total: 0.03 s&lt;br /&gt;Wall time: 0.03&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then we compared just the (x+y+z)**200:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sympycore:&lt;br /&gt;&gt;&gt;&gt; %time e=((x+y+z)**200).expand()&lt;br /&gt;CPU times: user 1.80 s, sys: 0.06 s, total: 1.86 s&lt;br /&gt;Wall time: 1.92&lt;br /&gt;swiginac:&lt;br /&gt;&gt;&gt;&gt; %time e=((x+y+z)**200).expand()&lt;br /&gt;CPU times: user 0.52 s, sys: 0.02 s, total: 0.53 s&lt;br /&gt;maxima:&lt;br /&gt;(%i41) t0:elapsed_real_time ()$ expand ((x + y+z)^200)$ elapsed_real_time ()-t0;&lt;br /&gt;(%o43)                         2.220000000000027&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Where GiNaC still wins, but sympycore beats Maxima, but the timings really depend on the algorithm used, sympycore uses Millers algorithm which is the most efficient.&lt;br /&gt;&lt;br /&gt;So then we tried a fair comparison: compare expanding x * y where x and y are expanded powers (to make more terms):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;pearu&gt; sympycore:&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; from sympy import *&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; x,y,z=map(Symbol,'xyz')&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; xx=((x+y+z)**20).expand()&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; yy=((x+y+z)**21).expand()&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; %time e=(xx*yy).expand()&lt;br /&gt;&lt;pearu&gt; CPU times: user 2.21 s, sys: 0.10 s, total: 2.32 s&lt;br /&gt;&lt;pearu&gt; Wall time: 2.31&lt;br /&gt;&lt;pearu&gt; swiginac:&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; xx=((x+y+z)**20).expand()&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; yy=((x+y+z)**21).expand()&lt;br /&gt;&lt;pearu&gt; &gt;&gt;&gt; %time e=(xx*yy).expand()&lt;br /&gt;&lt;pearu&gt; CPU times: user 0.30 s, sys: 0.00 s, total: 0.30 s&lt;br /&gt;&lt;pearu&gt; Wall time: 0.30&lt;br /&gt;&lt;pearu&gt; maxima:&lt;br /&gt;&lt;pearu&gt; (%i44) xx:expand((x+y+z)^20)$&lt;br /&gt;&lt;pearu&gt; (%i45) yy:expand((x+y+z)^21)$&lt;br /&gt;&lt;pearu&gt; (%i46) t0:elapsed_real_time ()$ expand (xx*yy)$ elapsed_real_time ()-t0;&lt;br /&gt;&lt;pearu&gt; (%o48)                         0.57999999999993&lt;br /&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pearu&gt;&lt;/pre&gt;&lt;br /&gt;So, sympycore is 7x slower than swiginac and 3x slower than maxima. We are still using pure Python, so that's very promising. &lt;br /&gt;&lt;br /&gt;When using sexpr functions directly then 3*(a*x+..) is 4-5x faster than Maxima in Debian/Ubuntu. So, the headline of this post is justified. :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's build the car. Sage has the most features and it is the most complete car. It has issues, some wheels need to be improved (Sage.calculus). Let's change them then. Maybe SymPy could be the new wheel, maybe not, we'll see. SymPy is quite a reasonable car for calculus (it has plotting, it has exports to latex, nice, simple but powerfull command line with ipython and all those bells and whistles and it can also be used as a regular python library). But it also has issues, one wheel should be improved. That's the sympycore project.&lt;br /&gt;&lt;br /&gt;All those smaller and smaller wheels show, that this is indeed the way to go, but very important thing is to put them back in the car. I.e. sympycore back to sympy and sympy back to Sage and integrate them well. While also leaving them as separate modules, so that users, that only need one particular wheel, can use them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1235142580208531361?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1235142580208531361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1235142580208531361' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1235142580208531361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1235142580208531361'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/01/sympysympycore-pure-python-up-to-5x.html' title='SymPy/sympycore (pure Python) up to 5x faster than Maxima (future of Sage.calculus?)'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04851390159600551835'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>