<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6568744196982634289</id><updated>2012-01-29T22:58:18.725-08:00</updated><category term='debian'/><category term='sympy'/><category term='sage'/><category term='python'/><category term='scipy'/><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?max-results=100'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/'/><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><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7047400964210180833</id><published>2012-01-29T22:55:00.000-08:00</published><updated>2012-01-29T22:58:18.760-08:00</updated><title type='text'>Discussion about global warming</title><content type='html'>I have read the text &lt;a href="http://www.thegwpf.org/images/stories/gwpf-reports/happer-the_truth_about_greenhouse_gases.pdf"&gt;The Truth About Greenhouse Gases&lt;/a&gt; by &lt;a href="http://www.princeton.edu/physics/people/display_person.xml?netid=happer"&gt;William Happer&lt;/a&gt;, a physicist at Princeton. I liked it, so I &lt;a href="https://plus.google.com/u/0/104039945248245758823/posts/AZeLqgLkh5J"&gt;posted&lt;/a&gt; it to my Google+.I was surprised by so many emotional responses. The post also made Michael Tobis to write a &lt;a href="http://init.planet3.org/2011/08/truth-about-truth-about-greenhouse-gases.html"&gt;blog post&lt;/a&gt; with his opinion.&lt;br/&gt;&lt;br/&gt;I was not satisfied about the overall tone of the discussion. I am really just interested in factual arguments. As such,I browsed through all the arguments against William's paper from the above discussion, and chose one well formulated question, that I think represents the most important objection: "In your paper you state at several places, that doubling the CO2 concentrations will only increase the temperature by 1 C. However, it is claimed (see for example Michael's post above)that the increase will be around 2.5 C. Which number is correct and where is it coming from?" I wrote to William and askedwhether he would be willing to answer it. With his permission I am posting his answer here.&lt;br/&gt;&lt;br/&gt;Answer: &lt;a href="https://gist.github.com/raw/1702909/beb2244208bab8edb83481575647789975fd6af6/sensitivity.pdf"&gt;sensitivity.pdf&lt;/a&gt;&lt;br/&gt;Images referenced in the answer: &lt;a href="https://gist.github.com/raw/1702909/cb44d1731be2a66626976a8f1468556c9a66f427/image001.png"&gt;image001.png&lt;/a&gt;, &lt;a href="https://gist.github.com/raw/1702909/b81174acf0394d50651157b55a05bc4e4ae7a730/image002.png"&gt;image002.png&lt;/a&gt;.&lt;br/&gt;Link referenced in the answer: &lt;a href="http://www.thegwpf.org/best-of-blogs/4247-steve-mcintyre-closing-thoughts-on-best.html"&gt;http://www.thegwpf.org/best-of-blogs/4247-steve-mcintyre-closing-thoughts-on-best.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-7047400964210180833?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7047400964210180833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7047400964210180833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7047400964210180833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7047400964210180833'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2012/01/discussion-about-global-warming.html' title='Discussion about global warming'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7881611169286097799</id><published>2012-01-26T10:49:00.000-08:00</published><updated>2012-01-26T10:51:28.645-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'>When double precision is not enough</title><content type='html'>I was doing some finite element (FE) calculation and I needed the sum of the lowest 7 eigenvalues of a symmetric matrix (that comes from the FE assembly) to converge to at least 1e-8 accuracy (so that I can check calculation done by some other solver of mine, that calculates the same but doesn't use FE). In reality I wanted the rounded value to 8 decimal digits to be correct, so I really needed 1e-9 accuracy (but it's ok if it is let's say 2e-9, but not ok if it is 9e-9). With my FE solver, I couldn't get it to converge more than to roughly 5e-7 no matter how hard I tried. Now what?&lt;br /&gt;&lt;br /&gt;When doing the convergence, I take a good mesh and keep increasing "p" (the polynomial order) until it converges. For my particular problem, it is fully converged for about p=25 (the solver supports the order up to 64). Increasing "p" further will not increase the accuracy anymore, and the accuracy stays at the level 5e-7 for the sum of the lowest 7 eigenvalues. For optimal meshes, it converges at p=25, for not optimal meshes, it converges for higher "p", but in all cases, it doesn't get below 5e-7.&lt;br /&gt;&lt;br /&gt;I know from experience, that for simpler problems, the FE solver can easily converge to 1e-10 or more using double precision. So I know it is doable, now the question is what the problem is: there&lt;br /&gt;are a few possible reasons:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The FE quadrature is not accurate enough&lt;/li&gt;&lt;li&gt;The condition number of the matrix is high, thus LAPACK doesn't return very accurate eigenvalues&lt;/li&gt;&lt;li&gt;Bug in the assembly/solver (like single/double corruption in Fortran, or some other subtle bug)&lt;/li&gt;&lt;/ul&gt;When using the same solver for simpler potential, it converged nicely to 1e-10. So this suggests there is no bug in the assembly or solver itself. It is possible that the quadrature is not accurate enough, but again, if it converges for simple problem, it's probably not it. So it seems it is the ill conditioned matrix, that causes this. So I printed the residuals (that I simply calculated in Fortran using the matrix and the eigenvectors returned by LAPACK), and it only showed 1e-9. For simpler problems, it can go to 1e-14 easily. So that must be it. How do we fix it?&lt;br /&gt;&lt;br /&gt;Obviously by making the matrix less ill conditioned, which is caused by the mesh for the problem (the ratio of the longest/shortest elements is 1e9) but for my problem I really needed such a mesh. So the other option is to increase the real number accuracy.&lt;br /&gt;&lt;br /&gt;In Fortran all real variables are defined as real(dp), where dp is an integer defined at a single place in the project. There are several ways to define it, but it's value is 8 for gfortran and it means double precision.So I increased it to 16 (quadruple precision), recompiled. Now the whole program calculates in quadruple precision (more than 30 significant digits). I had to recompile LAPACK using the "-fdefault-real-8" gfortran option, that promotes all double precision numbers to quadruple precision, and I used the "d" versions (double precision, now promoted to quadruple) of LAPACK routines.&lt;br /&gt;&lt;br /&gt;I rerun the calculation ---- and suddenly LAPACK residuals are around 1e-13, and the solver converges to 1e-10 easily (for the sum of the lowest 7 eigenvalues). Problem solved.&lt;br /&gt;&lt;br /&gt;Turning my Fortran program to quadruple precision is as easy as changing one variable and recompiling. Turning LAPACK to quadruple precision is easy with a single gfortran flag (LAPACK uses the old f77 syntax for double precision, if it used real(dp), then I would simply change it as for my program). The whole calculation got at least 10x slower with quadruple. The reason is that gfortran runtime uses the libquadmath library, that simulates quadruple precision (as current CPUs only support double precision natively).&lt;br /&gt;&lt;br /&gt;I actually discovered a few bugs in my program (typically some constants in older code didn't use the "dp" syntax, but had the double precision hardwired). Fortran warns about all such cases, when the real variables have incompatible precision.&lt;br /&gt;&lt;br /&gt;It is amazing how easy it is to work with different precision in Fortran (literally just one change and recompile). How could this be done with C++? This wikipedia &lt;a href="http://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format"&gt;page&lt;/a&gt; suggests, that "long double" is only 80bit in most cases (quadruple is 128bit), but gcc offers __float128, so it seems I would have to manually change all "double" to "__float128" in the whole C++ program (this could be done with a single "sed" command).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-7881611169286097799?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7881611169286097799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7881611169286097799' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7881611169286097799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7881611169286097799'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2012/01/when-double-precision-is-not-enough.html' title='When double precision is not enough'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6825008418537862044</id><published>2010-11-18T18:10:00.000-08:00</published><updated>2010-11-18T18:52:55.589-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'>Google Code vs GitHub for hosting opensource projects</title><content type='html'>&lt;a href="http://cython.org/"&gt;Cython&lt;/a&gt; is now considering options where to move the main (mercurial) repository, and &lt;a href="http://www.math.washington.edu/~robertwb/"&gt;Robert Bradshaw&lt;/a&gt; (one of the main Cython developers) has asked me about my experience with regards to &lt;a href="http://code.google.com/hosting/"&gt;Google Code&lt;/a&gt; and &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;, since we use both with &lt;a href="http://sympy.org/"&gt;SymPy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Google Code is older, and it was the first service that provided free (virtually unlimited) number of projects that you could easily and immediately setup. At that time (4 years ago?) that was something unheard of. However, the GitHub guys in the meantime not only made this available too, but also implemented features, that (as far as I know) no one offers at all, in particular hosting your own pages at your own domain (but at GitHub's servers, some examples are &lt;a href="http://sympy.org"&gt;sympy.org&lt;/a&gt; and &lt;a href="http://docs.sympy.org/"&gt;docs.sympy.org&lt;/a&gt;), commenting on git branches and pull requests &lt;span style="font-style:italic;"&gt;before&lt;/span&gt; the code gets merged in (I am 100% convinced that this is the right approach, as opposed to comment on the code &lt;span style="font-style:italic;"&gt;after&lt;/span&gt; it gets in), allow to easily fork the repository and it has simply more social features, that the Google Code doesn't have.&lt;br /&gt;&lt;br /&gt;I believe that managing an opensource project is mainly a social activity, and GitHub's social features really make so many things easier. From this point of view, GitHub is clearly the best choice today.&lt;br /&gt;&lt;br /&gt;I think there is only one (but potentially big) problem with GitHub, that its issue tracker is very bad, compared to the Google Code one. For that reason (and also because we already use it), we keep our issues at Google Code with SymPy.&lt;br /&gt;&lt;br /&gt;The above are the main things to consider. Now there are some little things to keep in mind, that I will briefly touch below: Google Code doesn't support git and blocks access from Cuba and other countries, when you want to change the front page, you need to be an admin, while at GitHub I simply add push access to all sympy developers, so anyone just pushes a patch to this repository: &lt;a href="https://github.com/sympy/sympy.github.com"&gt;https://github.com/sympy/sympy.github.com&lt;/a&gt;, and it automatically appears on our front page (&lt;a href="http://sympy.org/"&gt;sympy.org&lt;/a&gt;), with Google Code we had to write long pages (in our docs) about how to send patches, with GitHub we just say, send us a pull request, and point to: &lt;a href="http://help.github.com/pull-requests/"&gt;http://help.github.com/pull-requests/&lt;/a&gt;. In other words, GitHub takes care of teaching people how to use git and figure out how to send patches, and we can concentrate on reviewing the patches and pushing them in. &lt;br /&gt;&lt;br /&gt;Wikipages at github are maintained in git, and they provide the webfrontend to it as &lt;a href="https://github.com/github/gollum"&gt;opensource&lt;/a&gt;, so there is no vendor lock-in. Anyone with github account can modify our wiki pages, while the Google Code pages can only be modified by people that I add to the Google Code project, which forced us to install mediawiki on my linode server (hosted at &lt;a href="http://linode.com/"&gt;linode.com&lt;/a&gt;, which by the way is an excellent VPS hosting service, that I have been using for couple of years already and I can fully recommend it), and I had to manage it all the time, and now we are moving our pages to the github wiki, so that I have one less thing to worry about.&lt;br /&gt;&lt;br /&gt;So as you can see, I, as admin, have less things to worry about, as github manages everything for me now, while with Google Code, I had to manage lots of things on my linodes.&lt;br /&gt;&lt;br /&gt;One other thing to consider is that GitHub is only for git, but they also provide svn and hg access (both push and pull, they translate the repository automatically between git and svn/hg), I never really used it much, so I don't know how stable this is. As I wrote &lt;a href="http://ondrejcertik.blogspot.com/2010/10/git-has-won.html"&gt;before&lt;/a&gt;, I think that git is the best tool now for maintaining a project, and I think that github is now the best choice to host it (except the issue tracker, where Google Code is better).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6825008418537862044?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6825008418537862044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6825008418537862044' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6825008418537862044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6825008418537862044'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/11/google-code-vs-github-for-hosting.html' title='Google Code vs GitHub for hosting opensource projects'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8933668259195859462</id><published>2010-10-31T00:26:00.000-07:00</published><updated>2010-10-31T00:40:59.989-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'>git has won</title><content type='html'>I switched to git from mercurial about two years ago. See here why I &lt;a href="http://ondrejcertik.blogspot.com/2008/08/i-am-switching-from-mercurial-to-git.html"&gt;switched&lt;/a&gt; and here my experience &lt;a href="http://ondrejcertik.blogspot.com/2008/12/experience-with-git-after-4-months.html"&gt;after 4 months&lt;/a&gt;. Back then I was unsure, whether git will win, but I thought it has a bigger momentum. Well, I think that now it's quite clear that git has already won. Pretty much everybody that I collaborate with is using git now.&lt;br /&gt;&lt;br /&gt;I use github everyday, and now thanks to github &lt;a href="http://help.github.com/pull-requests/"&gt;pull requests&lt;/a&gt;, I think it's the best collaboration platform out there (compared to Google Code, Sourceforge, Bitbucket or Launchpad).&lt;br /&gt;&lt;br /&gt;I think it's partly because the github guys have a clear vision of what has to be done in order to make collaboration more easier and they do it, but more importantly that git branches is the way to go, as well as other git features, that are "right" from the beginning (branches, interactive rebase, and so on), while other VCS like bzr and mercurial simply either don't have them, or are getting them, but it's hard to get used to it (for example mercurial uses the "mercurial queues", and I think that is the totally wrong approach to things).&lt;br /&gt;&lt;br /&gt;Anyway, this is just my own personal opinion. I'll be happy to discuss it in the comments, if you disagree.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8933668259195859462?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8933668259195859462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8933668259195859462' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8933668259195859462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8933668259195859462'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/10/git-has-won.html' title='git has won'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7325250334673304185</id><published>2010-08-13T20:46:00.000-07:00</published><updated>2010-08-13T21:05:47.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week Aug 9 - 13</title><content type='html'>On Monday I learned &lt;a href="http://fwrap.sourceforge.net/"&gt;fwrap&lt;/a&gt; (excellent piece of software btw), there were a few minor technical issues, that I communicated with Kurt on the fwrap mailinglist and I also send him a simple patch, so that it works fine for my fortran code (functions returning the value itself, instead of a tuple of length 1).&lt;br /&gt;&lt;br /&gt;Then I took my old fortran based shooting method solvers that I wrote couple years ago and wrapped them using fwrap and run couple simulations against my FE solver.&lt;br /&gt;&lt;br /&gt;On Tuesday we had a lunch with all the advisors and students and the llnl director and a little presentation about what we did.&lt;br /&gt;&lt;br /&gt;On Wednesday I run shooting method calculations for 50 states of silver, both for selfconsistent DFT potential and Z/r potential. I then also run the FE solver for the same DFT potential and compared results. There are lots of small technical issues, for example I had to use cubic splines to interpolate the potential, play with the mesh for the shooting method and so on.&lt;br /&gt;&lt;br /&gt;However, the shooting method and FE agrees to every single printed digit, after making sure that the mesh is ok for both methods. For all potentials that I tried. That's very cool.&lt;br /&gt;&lt;br /&gt;In the process of it, I also wrote a patch to SymPy to calculate exact energies for the Hydrogen atom, both from Schroedinger and Dirac equations. I still need to polish it a bit.&lt;br /&gt;&lt;br /&gt;On Thursday I run couple more calculations and setup a poster and had a poster session, it was two hours, and I think around 7 people (not counting other students and people from our group) stopped by and talked with me about it, so I was very happy. Being able to solve radial Schroedinger and especially Dirac equations robustly is something that several people in the lab would really need.&lt;br /&gt;&lt;br /&gt;Today I talked little bit (finally) about some Green functions in QM and QFT with a postdoc in the Quantum Simulations group, that I always wanted to, but didn't have time before, then packed my things and went back to Reno.&lt;br /&gt;&lt;br /&gt;My plan for the next week(s) is to wrap up what I did and put it into articles. I already have enough material for some articles, so it has to be done. In parallel, I'd like to finish the FE Dirac solver, the coding is done, but now I need to play with adaptivity and also investigate if we are getting the spurious states, that other people are getting when using b-splines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-7325250334673304185?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7325250334673304185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7325250334673304185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7325250334673304185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7325250334673304185'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/08/week-aug-9-13.html' title='Week Aug 9 - 13'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-2896505029722157566</id><published>2010-08-06T18:02:00.000-07:00</published><updated>2010-08-06T18:27:19.024-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'>Week Aug 2 - 6</title><content type='html'>This week I essentially only worked on my LLNL poster, which I finally finished about two hours ago. I have created a web page for it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://certik.github.com/ccms-10-poster/"&gt;http://certik.github.com/ccms-10-poster/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;where you can download pdf, sources, I also put there some relevant info and links.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It turned out to be a lot more work than I expected (well, as usual), but we were very thorough with John and in the process I discovered several bugs in my program, so I am glad we did it. I used to generate all the plots by hand, by manually adjusting all the parameters in the Python script (like atomic number, mesh parameters, element orders, adaptivity parameters, error tolerance and so on). Essentially I had to remember all these parameters for each of the plots (about 10 of them). Then I settled to have a Python dictionary, that holds all the parameters, and then I just pass them to a radial_schroedinger_equation_adapt(params, error_tol=1e-8) function.&lt;br /&gt;&lt;br /&gt;Here are example of the parameters:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    params_hydrogen_p_L = dict(l=0, Z=1, a=0, b=100, el_num=4, el_order=1,&lt;br /&gt;            eig_num=3, mesh_uniform=False, mesh_par1=20, adapt_type="p",&lt;br /&gt;            eqn_type="R")&lt;br /&gt;    params_hydrogen_p_U = dict(l=0, Z=1, a=0, b=100, el_num=4, el_order=2,&lt;br /&gt;            eig_num=3, mesh_uniform=True, adapt_type="p", eqn_type="R")&lt;br /&gt;    params_hydrogen_hp_U = dict(l=0, Z=1, a=0, b=100, el_num=4, el_order=2,&lt;br /&gt;            eig_num=3, mesh_uniform=True, adapt_type="hp", eqn_type="R")&lt;br /&gt;    params_hydrogen_h_U = dict(l=0, Z=1, a=0, b=100, el_num=4, el_order=6,&lt;br /&gt;            eig_num=3, mesh_uniform=True, adapt_type="romanowski",&lt;br /&gt;            eqn_type="rR")&lt;br /&gt;&lt;br /&gt;    params_silver_p_L = dict(l=0, Z=47, a=0, b=150, el_num=4, el_order=13,&lt;br /&gt;            eig_num=50, mesh_uniform=False, mesh_par1=35, adapt_type="p",&lt;br /&gt;            eqn_type="R")&lt;br /&gt;    params_silver_hp_L = dict(l=0, Z=47, a=0, b=150, el_num=4, el_order=13,&lt;br /&gt;            eig_num=50, mesh_uniform=False, mesh_par1=35, adapt_type="hp",&lt;br /&gt;            eqn_type="R")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I mean, this is kind of obvious if you think about it, but for some reason I didn't do that at all at the beginning, because I thought --- I'll just run this once and I am done with it. But I had to run it like 20x, e.g. regenerating he plots, then creating a table about meshes, then redoing the table after changing the error tolerance, and so on.&lt;br /&gt;&lt;br /&gt;Besides that I also got permission to release my code, so I'll go over it in the coming days and generate nice patches against Hermes1D.&lt;br /&gt;&lt;br /&gt;Also in the process of creating the poster, I played a lot with p-FEM, uniform-p-FEM, hp-FEM and h-FEM and I will keep playing with that. It's clear to me now, that our current Hermes1D is not optimal. Especially the convergence of hp-FEM and p-FEM (as it is implemented right now) greatly depends on the initial mesh.&lt;br /&gt;&lt;br /&gt;Nevertheless, even with the above limitations, hp-FEM seems to be really good if you don't a-priori know anything about the problem/mesh. One should not make any deep conclusions in 1D (it might be a bit different in 2D and 3D, and also I only did couple test problems), but from my experience so far, hp-FEM is a really good choice, if you just want to solve the problem and get a decent convergence (way better than h-FEM, and in general about the same as uniform-p-FEM with optimized mesh).&lt;br /&gt;&lt;br /&gt;Another conclusion is that uniform-p-FEM (also called spectral element method), if you optimize the mesh for the problem, is very fast. All you have to do is increase the polynomial order and it goes very straight on the convergence graphs, it's very hard to beat. Also, and that I would like to write in the coming days, the algorithm for optimizing the mesh is really simple: just solve it with high "p", then play with the mesh parameters (for logarithmic mesh, there are only 2 parameters --- number of elements, and a ratio of first vs. last element), so that the eigenvalues (that one is interested in) are converged (with given accuracy) and optimize it wrt DOFs. The algorithm can also "look" at the convergence graphs and make sure it's steep enough. For atomic problems, my experience shows that the logarithmic mesh is good enough (as long as you optimize it). The advantage is that you do this once, and then (for close enough potentials in the Schroedinger equation), you just increase "p", and it's very robust and fast (no need for reference mesh, or trial refinements and so on).&lt;br /&gt;&lt;br /&gt;When I get back to Reno, we'll do more research on hp-FEM with Pavel and I think this is not the last word to say. We need to review how we choose the candidates for eigenvectors, especially "p" vs "hp" and make it more robust. We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-2896505029722157566?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/2896505029722157566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=2896505029722157566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2896505029722157566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2896505029722157566'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/08/week-aug-2-6.html' title='Week Aug 2 - 6'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6122266783960777317</id><published>2010-07-31T00:39:00.000-07:00</published><updated>2010-07-31T00:49:27.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week July 26 - 30</title><content type='html'>This week I have been wrapping up my work at LLNL and trying to generate some comparisons between different approaches to adapt to multiple eigenvectors at once.&lt;br /&gt;&lt;br /&gt;It turns out that most of the issues are in the way we create the new mesh for the next adaptivity iteration, in particular, how do we choose which candidates to refine. I have tried to converge to the lowest eigenvector (as well as to any other eigenvector too), to the sum of the eigenvectors, to each eigenvector individually and taking the union of the meshes and so on. I have also implemented the uniform p-FEM as well as tried p-FEM and hp-FEM using the approaches I mentioned above.&lt;br /&gt;&lt;br /&gt;It seems to be crucial to have a good initial mesh, at least for p-FEM. If I use a good mesh and p-adaptivity, I am able to get the best results so far. In principle hp adaptivity should be at least as good, but our current approach doesn't show it yet. Hopefully we'll manage to make it work.&lt;br /&gt;&lt;br /&gt;Besides that I have also implemented H1 norms for the Function class (based on Fekete points) by calculating coefficients with regards to a FE basis and some other little things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6122266783960777317?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6122266783960777317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6122266783960777317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6122266783960777317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6122266783960777317'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/week-july-26-30.html' title='Week July 26 - 30'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-274396393864768585</id><published>2010-07-23T19:06:00.000-07:00</published><updated>2010-07-23T19:27:53.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week July 19 - 23</title><content type='html'>This week I have learned how projections work in detail and wrote it up here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://theoretical-physics.net/dev/src/math/la.html"&gt;http://theoretical-physics.net/dev/src/math/la.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;including all proofs (that orthogonal projection finds the closest vector and so on). At the end of the notes I have calculated some examples in 1D, so that one can see that indeed it doesn't depend on the basis and that the basis doesn't even have to be orthogonal. Then one has to use this approach to calculate the coefficients:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://theoretical-physics.net/dev/src/math/la.html#nonorthogonal-basis"&gt;http://theoretical-physics.net/dev/src/math/la.html#nonorthogonal-basis&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have then implemented it in h1d. Due to the lack of time, I am now developing everything in my private branch. I'll obtain the permission in about 2 or 3 weeks, so then I'll push it into the master.&lt;br /&gt;&lt;br /&gt;Besides that I have implemented Chebyshev points for orders greater than 48, for which I don't have exact Fekete points anymore (it'd be just a matter of running my sympy script longer, but I was hitting some accuracy issues when solving those large polynomials numerically -- one needs to obtain all roots, so Chebyshev points are ok for now). So I can now represent arbitrary polynomials in 1D. &lt;br /&gt;&lt;br /&gt;I have implemented powering of the discrete function, it automatically determines which polynomial order it has to use and creates a new discrete function (the power) on the new mesh. I wrote lots of tests for that, and I hit an interesting bug, that my naive comparison code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;assert abs(x-y) &lt; eps&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;was not good enough anymore for larger numbers and I had to read some documentation, and implement the following function:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@vectorize(0, 1)&lt;br /&gt;def feq(a, b, max_relative_error=1e-12, max_absolute_error=1e-12):&lt;br /&gt;    a = float(a)&lt;br /&gt;    b = float(b)&lt;br /&gt;    # if the numbers are close enough (absolutely), then they are equal&lt;br /&gt;    if abs(a-b) &lt; max_absolute_error:&lt;br /&gt;        return True&lt;br /&gt;    # if not, they can still be equal if their relative error is small&lt;br /&gt;    if abs(b) &gt; abs(a):&lt;br /&gt;        relative_error = abs((a-b)/b)&lt;br /&gt;    else:&lt;br /&gt;        relative_error = abs((a-b)/a)&lt;br /&gt;    return relative_error &lt;= max_relative_error&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then I implemented the global H1 and L2 projections, so far the projected function is hardwired, I still need to allow the user to specify any discrete function to be projected. I need to precalculate it and so on.&lt;br /&gt;&lt;br /&gt;I wrote bunch of tests for the projections and powers and I always discovered some bugs by writing more tests, so the progress is slow, but at least I can trust the code that is tested.&lt;br /&gt;&lt;br /&gt;I also helped Pavel to fix couple segfaults, as well as some other things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-274396393864768585?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/274396393864768585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=274396393864768585' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/274396393864768585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/274396393864768585'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/week-july-19-23.html' title='Week July 19 - 23'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1161744002548885483</id><published>2010-07-19T22:57:00.000-07:00</published><updated>2010-07-20T00:00:39.254-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='python'/><title type='text'>Theoretical Physics Reference Book</title><content type='html'>Today I fulfilled my old dream --- I just created my first book! Here is how it looks like:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Cb7_IVMD3C4/TEU-J9prDNI/AAAAAAAAFA0/swgnbniTbok/s1600/Jul_19_2010_3169.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_Cb7_IVMD3C4/TEU-J9prDNI/AAAAAAAAFA0/swgnbniTbok/s400/Jul_19_2010_3169.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495867261164653778" /&gt;&lt;/a&gt;&lt;img src="http://1.bp.blogspot.com/_Cb7_IVMD3C4/TEU-JWQ0SaI/AAAAAAAAFAs/mBDPcIzx0ZY/s400/Jul_19_2010_914.jpg" style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5495867250591418786" /&gt;&lt;br /&gt;More images&lt;br /&gt;&lt;a href="http://picasaweb.google.com/ondrej.certik/TheoreticalPhysicsReference"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the source code of the book: &lt;a href="http://github.com/certik/theoretical-physics"&gt;http://github.com/certik/theoretical-physics&lt;/a&gt;, the repository contains a branch 'master' with the code and 'gh-pages' with the generated html pages, that are hosted at github, at the url &lt;a href="http://theoretical-physics.net"&gt;theoretical-physics.net&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then I published the book at Lulu: &lt;a href="http://www.lulu.com/product/hardcover/theoretical-physics-reference/11612144"&gt;http://www.lulu.com/product/hardcover/theoretical-physics-reference/11612144&lt;/a&gt;, I wanted a hardcover book, so I setup a project at Lulu, used some Lulu templates for the cover and that was it. Lulu's price for the book is $19.20 (166 black &amp; white pages, hardcover), then I can set my own price and the rest of the money probably goes to me. I set the price to $20, because Lulu has free shipping for orders $20 or more. You can also download the pdf (for free) at the above link (or just use my git repository). So far this didn't cost me anything.&lt;br /&gt;&lt;br /&gt;I have then ordered the book myself (just like anybody else would, at the above address) and it arrived today. It's a regular hardcover book. Beautiful, you can browse the pictures above. It smells deliciously (that you have to believe me). And all that it cost me was $19.20.&lt;br /&gt;&lt;br /&gt;As for the contents itself, you can browse it online at &lt;a href="http://theoretical-physics.net"&gt;theoretical-physics.net&lt;/a&gt;, essentially it's most of my physics notes, that I collected over the years. I'd like to treat books like software --- release early release often. This is my first release and I would call it beta. The main purpose of it was to see if everything goes through, how long it takes (the date inside the book is July 4, 2010, I created and ordered it on July 5, got the physical book on July 19) and what the quality is (excellent). I also wanted to see how the pages correspond to the pdf (you can see for yourself on the photos, click on the picasa link above).&lt;br /&gt;&lt;br /&gt;Now I need to improve the first pages a bit, as well as the last pages, improve the index, write some foreword and so on. I also need to think how to better organize the contents itself and generally improve it. I also need to figure out some versioning scheme, so far this is version 0.1. I think I'll do edition 1, edition 2, edition 3, and so on. And whenever I feel that I have added enough new content, I'll just publish it as a new edition. So if you want to buy it, I suggest to wait for my 1.0 version, that will have the mentioned improvements.&lt;br /&gt;&lt;br /&gt;It'd be also cool to have all the editions online somehow and create nice webpages for it (currently theoretical-physics.net points directly to the book html itself).&lt;br /&gt;&lt;br /&gt;So far the book is just text. I still need to figure out how to handle pictures and also whether or not to use program examples (in Python, using sympy, scipy, etc.). So far I am inclining not to put there any program codes, as then I don't need to maintain them.&lt;br /&gt;&lt;br /&gt;Overall I am very pleased with the quality, up to some minor issues that I mentioned above, everything else end up just fine. I think we have come a long way from the discovery of the &lt;a href="http://en.wikipedia.org/wiki/Printing_press"&gt;printing press&lt;/a&gt;. Anybody can now create a book for free, and if you want to hold the hardcopy in your hands, it costs around $20. You don't need to order certain amounts of books, nor partner with some publisher etc. I think that's just awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1161744002548885483?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1161744002548885483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1161744002548885483' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1161744002548885483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1161744002548885483'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/theoretical-physics-reference-book.html' title='Theoretical Physics Reference Book'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Cb7_IVMD3C4/TEU-J9prDNI/AAAAAAAAFA0/swgnbniTbok/s72-c/Jul_19_2010_3169.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-109730538400656817</id><published>2010-07-16T22:06:00.000-07:00</published><updated>2010-07-16T22:16:38.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week June 12 -- July 16</title><content type='html'>This week I was implementing hp-adaptivity based on H1 projections first for the ground state and later for other states.&lt;br /&gt;&lt;br /&gt;It took me the whole week to debug things and I am still not done. There were issues with normalizing vectors and other problems. I am now able to converge any individual vector and that seems to work fine, but I am still not able to converge multiple vectors somehow.&lt;br /&gt;&lt;br /&gt;I spent also some time with speeding up my implementation of fekete points, and I have implemented the fast evaluation based on Lagrange interpolation polynomials. In general, I made for example the l2_norm() method about 10x faster. I think it's about as fast now as if it was written in C++ directly. The main loops are now optimized C without any Python C/API calls.&lt;br /&gt;&lt;br /&gt;My plan is now to implement taking squares of the solutions (exactly), and so on, and projecting it back to the original mesh. I'll try converging to that. At the same time, I'll try to converge to multiple eigenvalues. Hermes1d needs some improvements, that take me quite some time to implement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-109730538400656817?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/109730538400656817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=109730538400656817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/109730538400656817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/109730538400656817'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/week-june-12-july-16.html' title='Week June 12 -- July 16'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5722577677835437155</id><published>2010-07-10T12:48:00.000-07:00</published><updated>2010-07-10T13:01:39.907-07:00</updated><title type='text'>Week June 5 -- July 9</title><content type='html'>This week I have learned how to use the new C++ support in Cython, and posted a demo project at github (&lt;a href="http://github.com/certik/cpp_test"&gt;http://github.com/certik/cpp_test&lt;/a&gt;), then I have refactored the Python wrappers in hermes1d and I think things are now way cleaner.&lt;br /&gt;&lt;br /&gt;Then I have finished my reimplementation of Romanowski's algorithm for adapting eigenvalues for the radial Schroedinger equation, I've extracted his values from the graphs, calculated the same thing myself and it agrees perfectly.&lt;br /&gt;&lt;br /&gt;I am now polishing the h1 adaptivity in h1d, I essentially reimplemented it myself, so that I can consider more candidates (all possible combinations of "p" and "h", and also soon I'll consider bisecting, trisecting and so on of the interval).&lt;br /&gt;&lt;br /&gt;I've implemented hydrogen wavefunctions in sympy and use it to project onto a very fine mesh (12 order, lots of elements), convert to Fekete points and use it for the adaptivity. It's in pure Python, as I need to develop very fast to get some results and see what approach is the best. Everything is fast, except the selection of candidates, which I'll now rewrite into Cython and try to use hermes1d whenever possible.&lt;br /&gt;&lt;br /&gt;Next week I'll try to merge my adaptivity with hermes1d adaptivity and make it fast. And see how it converges.&lt;br /&gt;&lt;br /&gt;I've also spent about 10 hours with improving Pavel's hermes2d branch, as well as implementing the Vector class in hermes_common.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5722577677835437155?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5722577677835437155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5722577677835437155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5722577677835437155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5722577677835437155'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/week-june-5-july-9.html' title='Week June 5 -- July 9'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8540072466926166250</id><published>2010-07-03T01:41:00.000-07:00</published><updated>2010-07-03T01:53:56.612-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week June 28 -- July 2</title><content type='html'>On Saturday I flew to Prague, then to Pilsen to the &lt;a href="http://hpfem.org/events/esco-2010/"&gt;ESCO2010&lt;/a&gt; conference. I had to presentations there and I met lots of awesome people.&lt;br /&gt;&lt;br /&gt;I discussed with &lt;a href="http://www.mathematik.uni-dortmund.de/~kuzmin/"&gt;Dmitri&lt;/a&gt; how to solve the Euler equations using FEM and I think I know how to implement it now in hermes2d. I will try to give it a shot at the end of the summer, as this is something that was bothering me a lot.&lt;br /&gt;&lt;br /&gt;I have made a progress in my fekete points code, I also wrote analytic solutions for the hydrogen atom in sympy. I'll wrap it up over the weekend and push to h1d.&lt;br /&gt;&lt;br /&gt;I have investigated how to use github for collaboration using git, here is how it looks like for sympy: &lt;a href="http://github.com/sympy"&gt;http://github.com/sympy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have figured out how to host any domain at github, in particular this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://theoretical-physics.net/"&gt;http://theoretical-physics.net/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;now runs at github. I think this is really awesome.&lt;br /&gt;&lt;br /&gt;Besides that, I spent some time discussing how to do hp-adaptivity in h1d with Pavel and other people, as well as I helped couple people with hermes2d and so on.&lt;br /&gt;&lt;br /&gt;My plan for the next week is to implement hp-adaptivity in h1d for eigenproblems, as well as finish my fekete machinery and make it fast using cython and use it in conjunction with the h1d adaptivity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8540072466926166250?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8540072466926166250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8540072466926166250' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8540072466926166250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8540072466926166250'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/07/week-june-28-july-2.html' title='Week June 28 -- July 2'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5588950029542841021</id><published>2010-06-25T22:49:00.000-07:00</published><updated>2010-06-25T23:12:05.078-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Week June 20 -- June 25</title><content type='html'>This week I implemented a Dirac solver in 1D, I have it in my private branch and I'll get a permission at the end of the summer to get it opensourced. Originally it didn't work at all, but then I've found a bug and it seems to be working now.&lt;br /&gt;&lt;br /&gt;Before it I've implemented an example for the y''+k^2*y=0 equation in hermes1d by writing it as two coupled first order equations and solving the eigenproblem for "k".&lt;br /&gt;&lt;br /&gt;I also started to implement a Function class that represents a function in 1D using Fekete points and I plan to implement orthogonal projections and adaptive algorithms for refining the mesh, so that I can play with adaptivity in 1D.&lt;br /&gt;&lt;br /&gt;Besides that I studied couple articles about using b-splines to solve the radial Dirac equation and also about using variational formulation for FEM.&lt;br /&gt;&lt;br /&gt;I helped fix hermes_common and did lots of administration at the lab (10 online courses and other things). We also got an awesome &lt;a href="https://lasers.llnl.gov/"&gt;NIF&lt;/a&gt; tour.&lt;br /&gt;&lt;br /&gt;Hermes1D patches:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Ondrej Certik (26):&lt;br /&gt;      Remove the autogenerated Makefile&lt;br /&gt;      hermes_common updated&lt;br /&gt;      Dirac solver added&lt;br /&gt;      Plot only 10 eigenfunctions&lt;br /&gt;      Fix the number of equations bug&lt;br /&gt;      Generate the Gauss Lobatto points&lt;br /&gt;      Add the autogenerated file&lt;br /&gt;      Don't use strings as dict keys&lt;br /&gt;      Fekete points manipulation implemented&lt;br /&gt;      fekete: solve the coefficients, tests pass&lt;br /&gt;      More tests added&lt;br /&gt;      system_sin_eigen example added&lt;br /&gt;      Add a comment about the Lagrange interpolation&lt;br /&gt;      Function.project_onto() implemented&lt;br /&gt;      Function.plot() implemented&lt;br /&gt;      Comparisons implemented&lt;br /&gt;      Fix precision problems&lt;br /&gt;      Improve tests&lt;br /&gt;      Start implementing the adaptivity&lt;br /&gt;      fekete: add a debug code&lt;br /&gt;      Removing the Dirac solver for now&lt;br /&gt;      Use smaller basis, while still getting reasonable results&lt;br /&gt;      Add harmonic oscillator option&lt;br /&gt;      hermes_common updated&lt;br /&gt;      Use jsplot if it is available&lt;br /&gt;      Better demo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;hermes_common patches:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Ondrej Certik (6):&lt;br /&gt;      Revert "fixed pxd"&lt;br /&gt;      Update the generated .cpp file&lt;br /&gt;      Increase the precision in tests to 10^-10&lt;br /&gt;      Add tests for solve_linear_system_dense_lu()&lt;br /&gt;      Enable scipy tests&lt;br /&gt;      Test for solve_linear_system_cg() added&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5588950029542841021?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5588950029542841021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5588950029542841021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5588950029542841021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5588950029542841021'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/06/week-june-20-june-25.html' title='Week June 20 -- June 25'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3568878882490642810</id><published>2010-06-18T21:04:00.000-07:00</published><updated>2010-06-18T21:26:21.026-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>June 12 -- June 18</title><content type='html'>This week I have implemented a JSPlot library, which allows to use matplotlib API, but plot into your web browser:&lt;br /&gt;&lt;a href="http://github.com/certik/jsplot"&gt;http://github.com/certik/jsplot&lt;/a&gt;&lt;br /&gt;(Scroll down a little bit to see the screenshots and examples.)&lt;br /&gt;&lt;br /&gt;This was the last missing piece to be able to develop with FEMhub (I don't have a root access to my computer, running RHEL5). Now I have the full Python stack working (scipy, all the solvers, mayavi, ...), plus nice plotting in the browser. &lt;br /&gt;&lt;br /&gt;I have spent several days investigating how to write weak forms for the radial Dirac equation as well as how to derive the action for it. It turns out, that one takes the Lagrangian from quantum electrodynamics (QED), converts it to spherical coordinates (which you can imagine is a hell of a job) and then integrates over angles and what remains is the Lagrangian (resp. action) for the radial Dirac equation. People used that in the literature a lot, but I just could not figure out where they take the functional from. So that part is clear and then I went to coding.&lt;br /&gt;&lt;br /&gt;Here are the commits for JSPlot:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Ondrej Certik (38):&lt;br /&gt;      Initial commit&lt;br /&gt;      Make index.html work&lt;br /&gt;      README added&lt;br /&gt;      Hook up raphael&lt;br /&gt;      Serve raphael-min.js locally&lt;br /&gt;      Plot simpler stuff&lt;br /&gt;      Works fine&lt;br /&gt;      plots work&lt;br /&gt;      Download all the raphael stuff locally&lt;br /&gt;      raphael.html added&lt;br /&gt;      Use {% url %}&lt;br /&gt;      Use simpler urls&lt;br /&gt;      Typo fix&lt;br /&gt;      Flotr demo added&lt;br /&gt;      Use flotr in the index page&lt;br /&gt;      Don't recalculate&lt;br /&gt;      Add data by hand&lt;br /&gt;      Generate the data in Python&lt;br /&gt;      Add another flotr demo&lt;br /&gt;      Example mpl plot added&lt;br /&gt;      jsplot example added&lt;br /&gt;      runserver.py added&lt;br /&gt;      Hook it up with jsplot&lt;br /&gt;      Add a screenshot&lt;br /&gt;      Better README added&lt;br /&gt;      README improved&lt;br /&gt;      Show some testing data&lt;br /&gt;      Use better testing data&lt;br /&gt;      License added&lt;br /&gt;      setup.py added&lt;br /&gt;      Use testing data if data == []&lt;br /&gt;      Just return from the function on CTRL-C&lt;br /&gt;      spkg-install added&lt;br /&gt;      prepend the .. path, instead of append&lt;br /&gt;      Use the proper local files in ./manage.py&lt;br /&gt;      Turn off points&lt;br /&gt;      Fix a bug&lt;br /&gt;      Add grid and legend&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I fixed some scipy warnings in hermes2d:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ondrej@crow:~/repos/hermes2d(master)$ git weekreport &lt;br /&gt;Ondrej Certik (4):&lt;br /&gt;      hermes_common updated&lt;br /&gt;      Fix the other SciPy warning in Python wrappers&lt;br /&gt;      Update the generated .cpp file&lt;br /&gt;      update hermes_common&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have fixed Python wrappers in hermes1d, made the Schroedinger example work again:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ondrej@crow:~/repos/hermes1d(master)$ git weekreport &lt;br /&gt;Ondrej Certik (19):&lt;br /&gt;      Use jsplot if available&lt;br /&gt;      Build everything for now&lt;br /&gt;      Make the Python wrappers work again&lt;br /&gt;      Fix the lhs/rhs/residual to build properly&lt;br /&gt;      Polish the forms a little bit&lt;br /&gt;      Enable assembling&lt;br /&gt;      Implement c2py_Mesh&lt;br /&gt;      Use c2py_Mesh in the schroedinger example&lt;br /&gt;      Update insert_matrix in Schroedinger&lt;br /&gt;      Fixed the rest in Schroedinger&lt;br /&gt;      copy_mesh_to_vector() and copy_vector_to_mesh() added to the Mesh class&lt;br /&gt;      Use JSPlot&lt;br /&gt;      Linearizer.get_xy() fixed&lt;br /&gt;      Implement Mesh.copy_vector_to_mesh() and use it from get_xy()&lt;br /&gt;      Use CooMatrix to assemble&lt;br /&gt;      Implement pysparse solver&lt;br /&gt;      Polish the numpy solver&lt;br /&gt;      Polish the printing a little bit&lt;br /&gt;      Rename assemble_jacobian() to assemble_matrix()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I fixed some build issues with FEMhub:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ondrej@crow:~/repos/femhub(master)$ git weekreport &lt;br /&gt;Ondrej Certik (3):&lt;br /&gt;      Add gnutls dependency for Python&lt;br /&gt;      opencdk added&lt;br /&gt;      Fix libgpg_error to build in parallel&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and I have some more patches to the build system in my "pu" branch at github:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;* 44398d8 (github/pu) Use absolute paths in "femhub -i"&lt;br /&gt;* 2b17bf0 Fix "femhub --devel-install" to normalize the paths&lt;br /&gt;* 3b41261 Make "femhub --shell" stay in the current directory&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I still need to test that femhub builds fine with those (it always takes quite some testing to make sure it builds properly).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3568878882490642810?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3568878882490642810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3568878882490642810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3568878882490642810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3568878882490642810'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/06/june-12-june-18.html' title='June 12 -- June 18'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1632398134396169220</id><published>2010-06-11T23:44:00.000-07:00</published><updated>2010-06-12T00:06:15.414-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>week June 5 -- June 11</title><content type='html'>On Sunday I moved to Livermore.&lt;br /&gt;&lt;br /&gt;On Monday I rebased my patches for Euler Equations, DG and FVM for hermes2d, sent for review. Unfortunately it took till Friday until they got reviewed, but they are now in.&lt;br /&gt;I couldn't sleep, so at around midnight I turned on my computer and rewrote the build system for femhub, it took me about 1.5h. Then I could finally sleep well.&lt;br /&gt;&lt;br /&gt;On Tuesday I had my new hire orientation. During it I wrote couple more patches for femhub.&lt;br /&gt;&lt;br /&gt;On Wednesday I got my badge and spent the rest of the day with paperwork. They didn't manage to get my computer setup, so I studied a bit of Quantum Field Theory from a book that I found in our room and then spent the rest of the night figuring out the weak formulation for the radial Dirac equation. So far no luck, but at least I wrote it in many different forms in my hand written notes. Sometimes it's not bad to be cut off the internet and computers.&lt;br /&gt;&lt;br /&gt;On Thursday I got my computer account setup and spent most of the day with paperwork.&lt;br /&gt;&lt;br /&gt;On Friday I finally did some real work. Then we got to a pub, got home and drank the rest of my Budvars (Czechvar) and Plzeňs (Pilsner Urquell).&lt;br /&gt;&lt;br /&gt;The FEMhub build system is really cool. It's written in Python and I totally got rid of the old Sage build system. Some features of the new one:&lt;br /&gt;&lt;br /&gt;  * dependencies&lt;br /&gt;  * automatically uses all your processors (unless told otherwise)&lt;br /&gt;  * simple Python script (414 lines) that handles everything, plus sage-env, sage-spkg and sage-make_relative scripts (the rest I simply deleted)&lt;br /&gt;  * allows you to install just some packages, for example "./femhub -i python" just installs python and it's dependencies&lt;br /&gt;  * allows you to unpack any package into the devel/ directory and then build it&lt;br /&gt;&lt;br /&gt;I will not use it to develop hermes1d+schroedinger and dirac solvers over the summer, so it will likely get improved in the coming weeks. (I have to use it, because my computer is some old RHEL5, and I don't have a root access. With FEMhub, I have all the Python libraries plus cmake and similar stuff right there. It's really awesome.)&lt;br /&gt;&lt;br /&gt;In total, I wrote 52 patches for FEMhub, 3 for hermes_common, 9 for hermes2d, 8 for hermes1d and 1 for sympy:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;FEMHUB:&lt;br /&gt;Ondrej Certik (52):&lt;br /&gt;      scipy and python upgraded&lt;br /&gt;      Remove the old buildsystem&lt;br /&gt;      New Python based buildsystem implemented&lt;br /&gt;      Install hermes2d by default&lt;br /&gt;      Compile in parallel&lt;br /&gt;      Let CmdException propagate&lt;br /&gt;      Handle dependencies&lt;br /&gt;      Fix the PYTHONPATH issue&lt;br /&gt;      Add a check that IPython is installed&lt;br /&gt;      Add Cython dependency to hermes2d&lt;br /&gt;      Add matplotlib to hermes2d deps&lt;br /&gt;      Keep track of installed packages&lt;br /&gt;      Add the -j option&lt;br /&gt;      Add the rest of the packages&lt;br /&gt;      Disable sphinx for now&lt;br /&gt;      Add a todo item&lt;br /&gt;      Disable mayavi for now&lt;br /&gt;      Add pysparse to fipy deps&lt;br /&gt;      Change the banner&lt;br /&gt;      Fix a typo&lt;br /&gt;      Remove old .hg files&lt;br /&gt;      setuptools added into fipy's deps&lt;br /&gt;      lab() implemented&lt;br /&gt;      Don't let other import errors to pass silently&lt;br /&gt;      Build bzip2 before Python&lt;br /&gt;      Simplify the makefile&lt;br /&gt;      Add the jinja2 package&lt;br /&gt;      Remove one forgotten " from a message&lt;br /&gt;      --shell and -s/--script options implemented&lt;br /&gt;      Fix cmake so that it builds if old cmake is present&lt;br /&gt;      expandvars() added to cmd()&lt;br /&gt;      Remove the rest of old buildsystem files&lt;br /&gt;      Move spd imports to femhub imports&lt;br /&gt;      Move download_packages into the femhub buildsystem&lt;br /&gt;      Remove a forgotten file from the old buildsystem&lt;br /&gt;      Create the standard directory if it doesn't exists&lt;br /&gt;      Polish the banner appearance&lt;br /&gt;      femhub-run: little refactoring&lt;br /&gt;      Use proper ipythonrc and matplotlibrc&lt;br /&gt;      Wrap lab(), add debugging statements&lt;br /&gt;      Don't import lab() in the ipythonrc&lt;br /&gt;      Fix the missing "-p" when creating the standard directory&lt;br /&gt;      Fix the problem with ambiguous names&lt;br /&gt;      cpu_count refactored&lt;br /&gt;      hermes1d added&lt;br /&gt;      -f/--force option added&lt;br /&gt;      --unpack added&lt;br /&gt;      --pack option implemented&lt;br /&gt;      --devel-install option implemented&lt;br /&gt;      Use MAKEFLAGS instead of MAKE env variable&lt;br /&gt;      Improve the FEMhub shell prompt&lt;br /&gt;      Print info when unpacking&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;hermes2d:&lt;br /&gt;Ondrej Certik (9):&lt;br /&gt;      Removing the old-code directory&lt;br /&gt;      hermes_common update&lt;br /&gt;      Reformat the documentation in the Geom class&lt;br /&gt;      Python wrappers updated&lt;br /&gt;      Regenerate the _hermes2d.cpp&lt;br /&gt;      plot.py: ScalarView updated&lt;br /&gt;      Element orientation exported&lt;br /&gt;      Sanity checks and docs&lt;br /&gt;      Add all shapefunctions to the space L2&lt;br /&gt;&lt;br /&gt;hermes1d:&lt;br /&gt;Ondrej Certik (8):&lt;br /&gt;      spkg-install added&lt;br /&gt;      "make install" implemented&lt;br /&gt;      Make it build on the Mac&lt;br /&gt;      Allow to turn off examples&lt;br /&gt;      Use std::max(), fixed several warnings&lt;br /&gt;      hermes_common updated&lt;br /&gt;      Fix h1_polys.py to work with FEMhub's SymPy&lt;br /&gt;      Fix the new line warning&lt;br /&gt;&lt;br /&gt;hermes_common:&lt;br /&gt;Ondrej Certik (3):&lt;br /&gt;      Add numpy2c_double_inplace() to _hermes_common.pxd&lt;br /&gt;      Update the generated cpp file&lt;br /&gt;      Fix a small double -&gt; int bug/warning&lt;br /&gt;&lt;br /&gt;sympy:&lt;br /&gt;Ondrej Certik (1):&lt;br /&gt;      pyglet: fix string exceptions&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1632398134396169220?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1632398134396169220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1632398134396169220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1632398134396169220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1632398134396169220'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/06/week-june-5-june-11.html' title='week June 5 -- June 11'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5117003549630618616</id><published>2010-06-04T14:59:00.000-07:00</published><updated>2010-06-04T15:57:57.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>week May 30 -- June 4</title><content type='html'>Over the weekend and Monday I went to Livermore, CA to rent a room to live. On Monday and Tuesday my uncle visited me from Prague so I showed him Virginia City and Lake Tahoe, that was lots of fun.&lt;br /&gt;&lt;br /&gt;Then I tried to debug hermes1d and some matrix issues in there for couple hours, but failed so far.&lt;br /&gt;&lt;br /&gt;I've helped Sameer to fix h5py to compile with FEMhub.&lt;br /&gt;&lt;br /&gt;Yesterday I spent 12h setting up &lt;a href="http://progit.org/book/ch4-7.html"&gt;gitosis&lt;/a&gt; on our server and finally got it done, here is the web interface:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://git.hpfem.org/"&gt;http://git.hpfem.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I had to patch the gitosis repository itself, here are my changes: &lt;a href="http://github.com/certik/gitosis"&gt;http://github.com/certik/gitosis&lt;/a&gt; (I've also sent them to Tommi Virtanen, the gitosis author, but I haven't heard back yet.)&lt;br /&gt;In case you wanted to install it as well, I've posted instructions &lt;a href="http://groups.google.com/group/hpfem-group/browse_thread/thread/d3e8da571c11d0d&lt;br /&gt;"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've figured out how to use msysgit with windows and use ssh keys to login to a linux box. It turns out it's not so trivial, see this &lt;a href="http://code.google.com/p/msysgit/issues/detail?id=261#c41"&gt;issue&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I submitted the following patches to our projects at &lt;a href="http://hpfem.org"&gt;hpfem.org&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ondrej@raven:~/repos/hermes1d(master)$ git weekreport &lt;br /&gt;Ondrej Certik (3):&lt;br /&gt;      Reverting the change dfa8580&lt;br /&gt;      hermes_common updated&lt;br /&gt;      hermes_common updated&lt;br /&gt;&lt;br /&gt;ondrej@raven:~/repos/hermes2d(master)$ git weekreport &lt;br /&gt;Ondrej Certik (5):&lt;br /&gt;      Fix "make install" to work again&lt;br /&gt;      hermes_common updated&lt;br /&gt;      remove hermes_common/doc/Makefile from .gitignore&lt;br /&gt;      Remove _XOPEN_SOURCE and _POSIX_C_SOURCE hacks&lt;br /&gt;      Fix the compilation warning&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Btw, my "git weekreport" alias is defined as:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[alias]&lt;br /&gt;    weekreport = shortlog --since=1.weeks --author=ondrej&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next week I am moving to Livermore, and my summer internship will get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5117003549630618616?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5117003549630618616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5117003549630618616' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5117003549630618616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5117003549630618616'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/06/week-may-30-june-4.html' title='week May 30 -- June 4'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3690273612226576081</id><published>2010-05-26T17:15:00.000-07:00</published><updated>2010-05-26T17:20:51.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>SymPy GSoC has started</title><content type='html'>This summer SymPy got 5 students, you can see their proposals and blogs here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/sympy/wiki/GSoC2010"&gt;http://code.google.com/p/sympy/wiki/GSoC2010&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All are required to blog once a week, the deadline is Friday night PST, and I'll do so too. &lt;br /&gt;&lt;br /&gt;This summer I will be at the &lt;a href="http://www.llnl.gov/"&gt;Lawrence Livermore National Laboratory&lt;/a&gt;, applying hp-FEM to radial Schroedinger and Dirac equations as well as 1D Density Functional Theory. I need to check with the management there how much I am allowed to blog about it. If I am, I'll keep blogging once a week too about it. If not, then only about sympy. I am super excited about the job, as it is in the electronic structure field, which is what I always wanted to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3690273612226576081?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3690273612226576081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3690273612226576081' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3690273612226576081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3690273612226576081'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2010/05/sympy-gsoc-has-started.html' title='SymPy GSoC has started'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><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='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=591932810092875210' title='4 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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6909976927915525075</id><published>2008-12-23T17:03:00.000-08:00</published><updated>2008-12-23T17:15:14.955-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Experience with git after 4 months</title><content type='html'>I &lt;a href="http://ondrejcertik.blogspot.com/2008/08/i-am-switching-from-mercurial-to-git.html"&gt;switched&lt;/a&gt; to git from mercurial about 4 months ago. As Matt Mackall (the main author of mercurial) has &lt;a href="http://selenic.com/pipermail/mercurial/2008-August/020876.html"&gt;pointed&lt;/a&gt; out, my arguments were partially just excuses for the switch, because everything could be fixed in mercurial as well (eventually). On the other hand, I really wasn't expecting to switch when I invested time and energy to learn mercurial. Also because I thought that git doesn't have such a nice documentation, has a steep learning curve and the community is hostile, because it is developed by the kernel people who are famous for sometimes being not so nice on the mailinglists (as I now found out, none of these are true). I was getting annoyed by small things one by one, after finally I said to myself enough is enough, let's just switch. &lt;br /&gt;&lt;br /&gt;So as to the steep learning curve --- it took me a day or two to being able to do what I want, so it seems to me it's really easy to learn once you know some distributed vcs. I found out the documentation is much better than in mercurial --- in git one just types "git help command" and a full man page fires up with lot's of information and examples. In mercurial, one just gets a couple lines (compared to git) of help in the terminal, without examples. Also the first (actually second) thing I noticed is that "git log" (and other commands like "git diff") doesn't scroll out my terminal, but uses "less" automatically -- that's just great. The first thing I noticed is that git &lt;span style="font-style:italic;"&gt;is&lt;/span&gt; superfast for almost every operation, especially it's noticeable with "git diff". As to the community, I only had a chance to send a few emails to the git list, so I cannot really say, but so far it's very responsive and friendly.&lt;br /&gt;&lt;br /&gt;However, those are just little things that can (and I am sure they will) be fixed in mercurial as well. What is a big thing are branches, especially remote branches. One just fetches a remote repository and then works with it like with any other local branch, e.g. one can switch to it, or just "git log some_remote_branch" to see what is in there. One can easily compare them etc. With mercurial, I was using "hg out" and "hg in" commands to see what changes I will pull or push, but those commands require internet connection, so it really sucks and it's slow. In mercurial, I was using different directories for different branches, but that's just extremely inconvenient and also slow (creating a new branch is just a matter of adding one file, not copying the whole repository --- for example with the &lt;a href="http://code.google.com/p/sympy/"&gt;sympy&lt;/a&gt; hg repository, I often had to wait several seconds to clone a repo, while with the git repository it's just instant) and big (in terms of megabytes).&lt;br /&gt;&lt;br /&gt;The bible of Mercurial, the hgbook &lt;a href="http://hgbook.red-bean.com/hgbookch8.html#x12-1650008.5"&gt;says&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;In most instances, isolating branches in repositories is the right approach.&lt;/blockquote&gt;&lt;br /&gt;But I think it's the wrong approach. The only argument for doing this that I accept is that sometimes you are not sure which branch you are in in git --- well, I use &lt;a href="http://log.damog.net/2008/12/two-git-tips/"&gt;this&lt;/a&gt; trick (actually, just read the documentation of __git_ps1 in /etc/bash_completion.d/git), so my bash line always says which branch I am in using the red color. I never do any mistakes with this.&lt;br /&gt;&lt;br /&gt;Anyways, I could continue like this (e.g. check out "git svn", "git rebase -i" and many other things), but you can read why git is better for example &lt;a href="http://whygitisbetterthanx.com/"&gt;here&lt;/a&gt;, no need to repeat here. I am very happy now and I can only recommend to learn git.&lt;br /&gt;&lt;br /&gt;So let me also say some things that are worse in git --- one thing that could be improved are URLs of the gitweb (hgweb urls are neat, gitweb urls use "?id=..." stuff). Another thing is that the debian package git is not git! You need to install git-core to get git (but this seems to be getting fixed). &lt;br /&gt;&lt;br /&gt;There is also an interesting &lt;a href="http://lists.debian.org/debian-python/2008/12/msg00000.html"&gt;discussion&lt;/a&gt; happening right now in the debian-python mailinglist about switching the &lt;a href="http://wiki.debian.org/Teams/PythonModulesTeam"&gt;DPMT&lt;/a&gt; repositories to git. I think almost all opinions (for and against) were already stated, but if you have some opinion that wasn't yet said, please do so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6909976927915525075?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6909976927915525075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6909976927915525075' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6909976927915525075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6909976927915525075'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/12/experience-with-git-after-4-months.html' title='Experience with git after 4 months'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=456666326953190004' title='1 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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>1</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6905315338736730777</id><published>2008-05-24T12:48:00.000-07:00</published><updated>2008-05-24T15:27:18.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Ubuntu Developer Summit in Prague</title><content type='html'>Last weekend &lt;a href="http://ondrejcertik.blogspot.com/2008/05/fosscamp-friday.html"&gt;I was&lt;/a&gt; at FOSSCamp. Since I live in Prague I wanted to go to &lt;a href="https://wiki.ubuntu.com/UDS-Intrepid"&gt;Ubuntu Developer Summit&lt;/a&gt; (UDS) each day, but unfortunately I had some exams, so I only went on Wednesday and Friday.&lt;br /&gt;&lt;br /&gt;On Wednesday I first met &lt;a href="http://liw.fi/"&gt;Lars Wirzenius&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/SDhzXAU4dTI/AAAAAAAACrc/DmLVVmom3BI/s1600-h/21052008356.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/SDhzXAU4dTI/AAAAAAAACrc/DmLVVmom3BI/s400/21052008356.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204036208488379698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;we agreed to go to pub in the evening. Then I did a little work, there was quite a nice view from the window (&lt;a href="http://en.wikipedia.org/wiki/Prague_Castle"&gt;Prague castle&lt;/a&gt; on the horizon):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/SDh1IwU4dYI/AAAAAAAACsE/6GXBGsThfxA/s1600-h/21052008357.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/SDh1IwU4dYI/AAAAAAAACsE/6GXBGsThfxA/s400/21052008357.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204038162698499458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and I went to the #ubuntu-devel-summit IRC channel and pinged &lt;a href="https://wiki.ubuntu.com/ScottKitterman"&gt;Scott Kitterman&lt;/a&gt;, whom I new from the &lt;a href="http://wiki.debian.org/Teams/PythonModulesTeam"&gt;Debian Python Modules Team&lt;/a&gt; (DPMT), but didn't know how he looks like. We met and once I knew Scott, it was easy to get around, so he introduced me to &lt;a href="http://www.youtube.com/watch?v=a-GXOHhCu2U"&gt;Steve Langasek&lt;/a&gt; (pronounced Langášek). We agreed to go to pub as well. Steve lives in Portland, OR, where I spent the summer 2005 and Scott is from Baltimore where I spent the summer 2006.&lt;br /&gt;Then I also met Riku Voipio, &lt;a href="http://mhb.ath.cx/"&gt;Martin Böhm&lt;/a&gt;, &lt;a href="http://www.async.com.br/~kiko/"&gt;Christian Reis&lt;/a&gt; (whom I asked if it's possible to support Debian unstable on &lt;a href="https://launchpad.net/ubuntu/+ppas"&gt;Ubuntu Personal Package Archives&lt;/a&gt; and he said that it will probably happen, so that's really cool -- I also offered my help with this) and others, so in the end, there were 14 of us going to the pub, so I chose again the same pub as with the FOSSCamp people and it seems it tasted good again:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/SDhzXQU4dUI/AAAAAAAACrk/ZgwuBdwqT4E/s1600-h/21052008360.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/SDhzXQU4dUI/AAAAAAAACrk/ZgwuBdwqT4E/s400/21052008360.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204036212783347010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/SDhzXQU4dVI/AAAAAAAACrs/qdb5rYVCzYg/s1600-h/21052008359.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/SDhzXQU4dVI/AAAAAAAACrs/qdb5rYVCzYg/s400/21052008359.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204036212783347026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notice the &lt;a href="http://ekucharka.net/vsechny-video-recepty/svickova-na-smetane/"&gt;svíčková na smetaně&lt;/a&gt; above, my favourite meal. Good choice Scott. :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/SDhzXwU4dXI/AAAAAAAACr8/ZA7ZaRPVBZk/s1600-h/21052008362.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/SDhzXwU4dXI/AAAAAAAACr8/ZA7ZaRPVBZk/s400/21052008362.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204036221373281650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/SDhzXgU4dWI/AAAAAAAACr0/lqXgj70Ty5E/s1600-h/21052008361.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/SDhzXgU4dWI/AAAAAAAACr0/lqXgj70Ty5E/s400/21052008361.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204036217078314338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/SDh1ZAU4daI/AAAAAAAACsU/chCZQi9Jf1o/s1600-h/21052008363.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/SDh1ZAU4daI/AAAAAAAACsU/chCZQi9Jf1o/s400/21052008363.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204038441871373730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok, that was on Wednesday. On Friday I arrived at around 3pm, looked at the schedule table and noticed that &lt;a href="https://launchpad.net/~doko"&gt;Matthias Klose&lt;/a&gt; should be at UDS too, so I started IRC and pinged him. Fortunately, &lt;a href="http://emilio.pozuelo.org/"&gt;Emilio Pozuelo Monfort&lt;/a&gt;, whom I know from DPMT as well, replied first so we met, it was cool and he showed where Matthias is. I am very glad I met him, so we discussed python-central and python-support packages and why we have them both, also with Scott later on.&lt;br /&gt;&lt;br /&gt;When I was waiting for Matthias, I sat next to &lt;a href="https://wiki.ubuntu.com/Nxvl"&gt;Nicolas Valcárcel&lt;/a&gt;, started my laptop and begun looking at some &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt; bugs and Nicolas noticed that and said -- "You are developing SymPy?", I said "Yes.", flattered. And he showed me a bug with plotting and Compiz, so we immediately &lt;a href="http://code.google.com/p/pyglet/issues/detail?id=296"&gt;reported&lt;/a&gt; that to pyglet. &lt;br /&gt;&lt;br /&gt;In the evening people continued to some kind of a party, but unfortunately, I was already going to some other pub. &lt;br /&gt;&lt;br /&gt;Overall, even though I was there for only two afternoons, it was just awesome and I utterly enjoyed meeting all the people I knew from mailinglists and IRC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6905315338736730777?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6905315338736730777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6905315338736730777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6905315338736730777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6905315338736730777'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/05/ubuntu-developer-summit-in-prague.html' title='Ubuntu Developer Summit in Prague'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/SDhzXAU4dTI/AAAAAAAACrc/DmLVVmom3BI/s72-c/21052008356.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-549427274907049205</id><published>2008-05-20T08:25:00.000-07:00</published><updated>2008-05-20T08:25:46.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Installing a printer in Debian</title><content type='html'>I finally bought a new toner to my old &lt;a href="http://www.minolta-qms.com/products/monochrome/pp1250E/index.asp"&gt;Minolta 1250e&lt;/a&gt; that I didn't use for a few years (because I was lazy to fix it) and I was surprised how easy it is to install it these days:&lt;br /&gt;&lt;br /&gt;1. plugged the USB cable from the printer to my laptop&lt;br /&gt;2. wajig install cupsys foomatic-db-engine&lt;br /&gt;3. sudo ln -s /usr/bin/foomatic-ppdfile /usr/lib/cups/driver&lt;br /&gt;4. On http://localhost:631/ I added the new printer in cupsys, it showed my printer over USB, I selected it and then I chose the correct PPD.&lt;br /&gt;&lt;br /&gt;And everything just works. The only nontrivial part is the step 3, that was suggested in /usr/share/doc/foomatic-db-engine/USAGE.gz:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;If the printers of the Foomatic database do not appear, check whether the&lt;br /&gt;link to foomatic-ppdfile is in /usr/lib/cups/driver:&lt;br /&gt;&lt;br /&gt;lrwxrwxrwx  1 root root 25 Apr 19 18:13 foomatic -&gt; /usr/bin/foomatic-ppdfile&lt;br /&gt;&lt;br /&gt;If not, create it manually.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Without it, I didn't see the right PPD in the step 4. Maybe it'd be a nice idea to do this automatically (either when installing foomatic-db-engine or cupsys), or am I missing something?&lt;br /&gt;&lt;br /&gt;As to the PPDs, one can get all printer IDs by:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ foomatic-ppdfile -A&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and the PPD for my printer by&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ foomatic-ppdfile -p Minolta-PagePro_1250E&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;However, it's not necessary in the above howto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-549427274907049205?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/549427274907049205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=549427274907049205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/549427274907049205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/549427274907049205'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/05/installing-printer-in-debian.html' title='Installing a printer in Debian'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-2397737365739323363</id><published>2008-05-16T16:16:00.000-07:00</published><updated>2008-05-16T16:17:02.880-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>FOSSCamp, Friday</title><content type='html'>Since I live in Prague, it's basically compulsory to go to &lt;a href="http://www.fosscamp.org/"&gt;FOSSCamp&lt;/a&gt;. Yesterday I went with &lt;a href="http://lucas-nussbaum.net/"&gt;Lucas&lt;/a&gt; to some pubs + sightseeing, today we went in a larger group to this pub:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/SC4RC6DJc_I/AAAAAAAACqo/lZ9kAetlqqY/s1600-h/16052008355.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/SC4RC6DJc_I/AAAAAAAACqo/lZ9kAetlqqY/s400/16052008355.jpg" alt="" id="BLOGGER_PHOTO_ID_5201113361299370994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;and we had a couple of good Czech meals with &lt;a href="http://en.wikipedia.org/wiki/Pilsner_Urquell"&gt;Plzeň beer&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/SC4RDaDJdAI/AAAAAAAACqw/yKgIzN47Nf4/s1600-h/16052008349.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/SC4RDaDJdAI/AAAAAAAACqw/yKgIzN47Nf4/s400/16052008349.jpg" alt="" id="BLOGGER_PHOTO_ID_5201113369889305602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/SC4RDaDJdBI/AAAAAAAACq4/2erBwfj37rs/s1600-h/16052008350.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/SC4RDaDJdBI/AAAAAAAACq4/2erBwfj37rs/s400/16052008350.jpg" alt="" id="BLOGGER_PHOTO_ID_5201113369889305618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/SC4RDqDJdCI/AAAAAAAACrA/-g_UZ_6I7rg/s1600-h/16052008351.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/SC4RDqDJdCI/AAAAAAAACrA/-g_UZ_6I7rg/s400/16052008351.jpg" alt="" id="BLOGGER_PHOTO_ID_5201113374184272930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seems it tasted good:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/SC4RD6DJdDI/AAAAAAAACrI/8wvVeUIfbxQ/s1600-h/16052008354.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/SC4RD6DJdDI/AAAAAAAACrI/8wvVeUIfbxQ/s400/16052008354.jpg" alt="" id="BLOGGER_PHOTO_ID_5201113378479240242" 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-2397737365739323363?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/2397737365739323363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=2397737365739323363' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2397737365739323363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2397737365739323363'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/05/fosscamp-friday.html' title='FOSSCamp, Friday'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Cb7_IVMD3C4/SC4RC6DJc_I/AAAAAAAACqo/lZ9kAetlqqY/s72-c/16052008355.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3160704495135829656</id><published>2008-05-07T01:38:00.000-07:00</published><updated>2008-05-07T01:38:08.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>snapshot.debian.net saved me again</title><content type='html'>On one computer I am taking care of, I suddenly started getting:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ps2pdf fa_808.ps fa_808.pdf&lt;br /&gt;/usr/bin/ps2pdfwr: line 45: exec: gs: not found&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What's wrong? &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls /usr/bin/gs&lt;br /&gt;ls: cannot access /usr/bin/gs: No such file or directory&lt;br /&gt;$ wajig find-file /usr/bin/gs&lt;br /&gt;ghostscript: /usr/bin/gs&lt;br /&gt;$ wajig list ghostscript&lt;br /&gt;ii  ghostscript                                             8.61.dfsg.1-1               The GPL Ghostscript PostScript/PDF interpret&lt;br /&gt;ii  ghostscript-x                                           8.61.dfsg.1-1               The GPL Ghostscript PostScript/PDF interpret&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That is really weird, the file /usr/bin/gs is simply missing, even though I have the ghostscript package installed. Ok, let's reinstall it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wajig reinstall ghostscript&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree       &lt;br /&gt;Reading state information... Done&lt;br /&gt;The following packages were automatically installed and are no longer required:&lt;br /&gt;  libwine-capi libstdc++5 libopenal0a xgnokii libglut3 libcapi20-3&lt;br /&gt;  libggi-target-x lib64gfortran2 libsvg1 lib64gomp1 libggi2 libgii1&lt;br /&gt;  libgii1-target-x libxine1-gnome cups-pdf lib64objc2&lt;br /&gt;Use 'apt-get autoremove' to remove them.&lt;br /&gt;The following extra packages will be installed:&lt;br /&gt;  akregator gs kaddressbook kaddressbook-plugins kalarm kandy kappfinder karm&lt;br /&gt;  kate kcontrol kdebase-bin kdebase-data kdelibs-data kdelibs4c2a&lt;br /&gt;  kdepim-kfile-plugins kdepim-kio-plugins kdepim-kresources kdepim-wizards&lt;br /&gt;  kdesktop kghostview kicker kitchensync kleopatra kmplayer kmplayer-common&lt;br /&gt;  kpersonalizer ksplash libarts1c2a libgnutls26 libgs8 libilmbase6 libkcal2b&lt;br /&gt;  libkdepim1a libkleopatra1 libkmime2 libkonq4 libkpimidentities1 libktnef1&lt;br /&gt;  libopenexr6&lt;br /&gt;Suggested packages:&lt;br /&gt;  kdeaddons-doc-html ntpdate ntp-simple perl-suid egroupware ffmpeg xawtv&lt;br /&gt;  gnutls-bin&lt;br /&gt;The following packages will be REMOVED:&lt;br /&gt;  digikam kde-amusements kde-core kdeaddons kdebase kdebase-kio-plugins kdepim&lt;br /&gt;  kmail kmailcvt kmplayer-plugin knights konq-plugins konqueror&lt;br /&gt;  konqueror-nsplugins korn smb4k&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;  gs libgnutls26 libilmbase6 libopenexr6&lt;br /&gt;The following packages will be upgraded:&lt;br /&gt;  akregator ghostscript kaddressbook kaddressbook-plugins kalarm kandy&lt;br /&gt;  kappfinder karm kate kcontrol kdebase-bin kdebase-data kdelibs-data&lt;br /&gt;  kdelibs4c2a kdepim-kfile-plugins kdepim-kio-plugins kdepim-kresources&lt;br /&gt;  kdepim-wizards kdesktop kghostview kicker kitchensync kleopatra kmplayer&lt;br /&gt;  kmplayer-common kpersonalizer ksplash libarts1c2a libgs8 libkcal2b&lt;br /&gt;  libkdepim1a libkleopatra1 libkmime2 libkonq4 libkpimidentities1 libktnef1&lt;br /&gt;36 upgraded, 4 newly installed, 16 to remove and 683 not upgraded.&lt;br /&gt;Need to get 53.1MB of archives.&lt;br /&gt;After this operation, 42.9MB disk space will be freed.&lt;br /&gt;Do you want to continue [Y/n]? n&lt;br /&gt;Abort.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Oops, unstable is broken at the moment. Ok, what now? Well,  &lt;a href="http://snapshot.debian.net"&gt;snapshot.debian.net&lt;/a&gt; comes to rescue again. Find "ghostcript", version "8.61.dfsg.1-1" and here we are:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wget http://snapshot.debian.net/archive/2008/03/02/debian/pool/main/g/ghostscript/ghostscript_8.61.dfsg.1-1_i386.deb&lt;br /&gt;$ wajig install ./ghostscript_8.61.dfsg.1-1_i386.deb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And all is fine now:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls /usr/bin/gs&lt;br /&gt;/usr/bin/gs&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3160704495135829656?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3160704495135829656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3160704495135829656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3160704495135829656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3160704495135829656'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/05/snapshotdebiannet-saved-me-again.html' title='snapshot.debian.net saved me again'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6869286122500602234</id><published>2008-02-26T17:00:00.000-08:00</published><updated>2008-02-26T09:10:32.415-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>XFS is 20x slower than ext3 (with default settings)</title><content type='html'>Is XFS that bad? Well, at least with default settings, XFS on Debian seems to be blown away by ext3 completely in terms of speed. I don't mind 1.5x slowdown, maybe even 2x, but 20x is a show stopper. I am already using ext3 for any pbuilder builds, because it's a difference to wait for 30s with XFS, compared to 3s with ext3 to extract the base image. And I'll probably switch to ext3 completely, unless someone finds a way how to fix this.&lt;br /&gt;&lt;br /&gt;I recently got burned by this when running &lt;a href="http://sagemath.org"&gt;Sage&lt;/a&gt; on my computer, because it compiles a lot of Python files when started for the first time. Normally it should take roughly 15s, but instead it took 6 minutes on my comp and then it triggered a so far undiscovered bug in Sage, that I &lt;a href="http://groups.google.com/group/sage-support/browse_thread/thread/f7a874e6762467e3"&gt;reported&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mabshoff.blogspot.com/"&gt;Michael Abshoff&lt;/a&gt;, the release manager of Sage, &lt;a href="http://groups.google.com/group/sage-support/msg/96896d266c89f331"&gt;suggested&lt;/a&gt; that something is &lt;a href="http://en.wikipedia.org/wiki/FUBAR"&gt;FUBAR&lt;/a&gt; (Fucked Up Beyond Any Recognition) on my shiny Debian amd64 sid system running on &lt;a href="http://www.intel.com/products/processor/core2quad/index.htm"&gt;Intel Core Quad&lt;/a&gt;, so I said no way, because I really care about this machine, as I use it for larger finite elements calculations and other stuff (like compiling huge deb packages in parallel, like &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=462631"&gt;paraview&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;So I &lt;a href="http://groups.google.com/group/sage-support/msg/41ad72703a3163cf"&gt;offered&lt;/a&gt; a bet, that I give him an access to this compter, he finds the problem and if it's a problem in my Debian configuration, I'll write to this blog that I am lame, while if it's a problem in Sage, he will write to his blog that he is lame. And I was smiling to myself, how good I am and that I will have some fun too reading &lt;a href="http://planet.sagemath.org/"&gt;planet.sagemath.org&lt;/a&gt; with the top post from Michael saying that he is lame.&lt;br /&gt;&lt;br /&gt;But then I remembered my old struggle with cowbuilder and XFS and I stopped smiling. See e.g. this &lt;a href="http://wiki.debian.org/cowbuilder_benchmark"&gt;wiki&lt;/a&gt; I created half a year ago. Something is FUBAR with XFS and Debian. I also asked on the Czech server &lt;a href="http://root.cz"&gt;Root&lt;/a&gt;, that is famous for having a lot of experts willing to share their knowledge, and it was quickly revealed, that the problem is with the "nobarrier" option of XFS (my post is &lt;a href="http://www.root.cz/diskuse/2321/"&gt;here&lt;/a&gt;, but it's in Czech).&lt;br /&gt;&lt;br /&gt;First, on that amd64 machine, the above problem was fixed after issuing this command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mount -o remount,rw,nobarrier /dev/sda3 /home/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(notice the "nobarrier" option). You can &lt;a href="http://lkml.org/lkml/2006/5/22/278"&gt;read&lt;/a&gt; some background behind this on the lkml list. Unfortunately, I also have my laptop, and there I already use this "nobarrier" option, and it doesn't help at all. I just created a new ext3 partition and verified that on my laptop, ext3 is around 10x faster than XFS with nobarrier (that was supposed to fix this). I use the latest 2.6.24 kernel from unstable on both.&lt;br /&gt;&lt;br /&gt;Time to move from XFS to ext3 on my laptop? Seems like that. I'll leave XFS on the other machine, because I know some other peole have good experience with XFS and the "nobarrier" option seems to fix the problem there.&lt;br /&gt;&lt;br /&gt;But as to the bet, yeah, I am lame and I should still learn a lot from Michael. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6869286122500602234?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6869286122500602234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6869286122500602234' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6869286122500602234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6869286122500602234'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/02/xfs-is-20x-slower-than-ext3-with.html' title='XFS is 20x slower than ext3 (with default settings)'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3664956037615466991</id><published>2008-01-01T12:47:00.000-08:00</published><updated>2008-01-01T12:58:47.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>R.&lt;a,b,c&gt; = QQ[] what is that?</title><content type='html'>While playing with Jaap's &lt;a href="http://groups.google.com/group/sage-forum/browse_thread/thread/983af547c34932ea"&gt;wish&lt;/a&gt;, I finally got fedup and decided to study what the funny syntax "R.&amp;lt;a,b,c&amp;gt; = QQ[]" really means. So I did:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R.&lt;a,b,c&gt; = QQ[]&lt;br /&gt;sage: preparse("R.&lt;a,b,c&gt; = QQ[]")&lt;br /&gt;"R = QQ['a, b, c']; (a, b, c,) = R._first_ngens(Integer(3))"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now everything is crystal clear! Let's study what QQ is:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: QQ?   &lt;br /&gt;Type:  RationalField&lt;br /&gt;Base Class: &lt;class 'sage.rings.rational_field.RationalField'&gt;&lt;br /&gt;String Form: Rational Field&lt;br /&gt;Namespace: Interactive&lt;br /&gt;Docstring:&lt;br /&gt;    &lt;br /&gt;        The class class{RationalField} represents the field Q of&lt;br /&gt;        rational numbers.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cool, why not. So what is the _first_ngens method doing? Let's find out:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R._first_ngens?&lt;br /&gt;Type:  builtin_function_or_method&lt;br /&gt;Base Class: &lt;type 'builtin_function_or_method'&gt;&lt;br /&gt;String Form: &lt;built-in method _first_ngens of sage.rings.polynomial.multi_polynomial_libsingular.MPolynomialRing_libsingular object at 0x9c7b02c&gt;&lt;br /&gt;Namespace: Interactive&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hm, not really useful. Let's push harder:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R._first_ngens??&lt;br /&gt;Type:  builtin_function_or_method&lt;br /&gt;Base Class: &lt;type 'builtin_function_or_method'&gt;&lt;br /&gt;String Form: &lt;built-in method _first_ngens of sage.rings.polynomial.multi_polynomial_libsingular.MPolynomialRing_libsingular object at 0x9c7b02c&gt;&lt;br /&gt;Namespace: Interactive&lt;br /&gt;Source:&lt;br /&gt;    def _first_ngens(self, n):&lt;br /&gt;        v = self.gens()&lt;br /&gt;        return v[:n]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So the equivalent code is this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R.gens()&lt;br /&gt;(a, b, c)&lt;br /&gt;sage: R.gens()[:3]&lt;br /&gt;(a, b, c)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cool, why not. So what is the R.gens() doing?&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sage: R.gens? &lt;br /&gt;Type:  builtin_function_or_method&lt;br /&gt;Base Class: &lt;type 'builtin_function_or_method'&gt;&lt;br /&gt;String Form: &lt;built-in method gens of sage.rings.polynomial.multi_polynomial_libsingular.MPolynomialRing_libsingular object at 0x9c7b02c&gt;&lt;br /&gt;Namespace: Interactive&lt;br /&gt;Docstring:&lt;br /&gt;    &lt;br /&gt;            Return the tuple of variables in self.&lt;br /&gt;    &lt;br /&gt;            EXAMPLES:&lt;br /&gt;                sage: P.&lt;x,y,z&gt; = QQ[]&lt;br /&gt;                sage: P.gens()&lt;br /&gt;                (x, y, z)&lt;br /&gt;    &lt;br /&gt;                sage: P = MPolynomialRing(QQ,10,'x')&lt;br /&gt;                sage: P.gens()&lt;br /&gt;                (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9)&lt;br /&gt;    &lt;br /&gt;                sage: P.&lt;SAGE,SINGULAR&gt; = MPolynomialRing(QQ,2) # weird names&lt;br /&gt;                sage: P.gens()&lt;br /&gt;                (SAGE, SINGULAR)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ah, that's the answer we want. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3664956037615466991?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3664956037615466991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3664956037615466991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3664956037615466991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3664956037615466991'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2008/01/r-qq-what-is-that.html' title='R.&amp;lt;a,b,c&amp;gt; = QQ[] what is that?'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-2922770466610897364</id><published>2007-12-25T16:53:00.000-08:00</published><updated>2007-12-25T17:05:10.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='sympy'/><title type='text'>Some timings of startups</title><content type='html'>I did some tests (I always start the program and then immediatelly hit ctrl-D):&lt;br /&gt;&lt;br /&gt;$ time ipython &lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;real 0m0.305s&lt;br /&gt;user 0m0.112s&lt;br /&gt;sys 0m0.024s&lt;br /&gt;&lt;br /&gt;$ time bin/isympy &lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;real 0m0.535s&lt;br /&gt;user 0m0.200s&lt;br /&gt;sys 0m0.040s&lt;br /&gt;&lt;br /&gt;$ time ./sage&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;real 0m1.398s&lt;br /&gt;user 0m0.916s&lt;br /&gt;sys 0m0.208s&lt;br /&gt;&lt;br /&gt;I did that repeatedly, so this is the usual time I get on my laptop. I think ipython is quite slow, because:&lt;br /&gt;&lt;br /&gt;In [1]: %time import sympy&lt;br /&gt;CPU times: user 0.08 s, sys: 0.01 s, total: 0.09 s&lt;br /&gt;Wall time: 0.09&lt;br /&gt;&lt;br /&gt;or if I import it in the python interpreter, it's immediate. &lt;br /&gt;&lt;br /&gt;The 0.3s is acceptable, 0.5s is quite a lot for me, and 1.4s is a lot. I am maybe too demanding, but it just annoys me to wait for 1.4s on the import time. I just get some idea to try, so I fire up Sage or SymPy and try it. I don't want to wait for 1.4s.&lt;br /&gt;&lt;br /&gt;This can be fixed, one just needs to find modules that slow things down, and late import them, or just fix them in some way. And usually, one does it several times  -- I think Sage did that twice, SymPy also I think did that twice already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-2922770466610897364?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/2922770466610897364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=2922770466610897364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2922770466610897364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2922770466610897364'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/12/some-timings-of-startups.html' title='Some timings of startups'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-3091579849910642682</id><published>2007-12-22T09:28:00.000-08:00</published><updated>2007-12-22T09:52:03.411-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'/><title type='text'>People still (and will) use windows</title><content type='html'>I sometimes look at the &lt;a href="http://code.google.com/p/sympy/downloads/list"&gt;download statistics&lt;/a&gt; of SymPy and the funny thing is that people download more the Windows installer, rather than the multiplatform source tarball. Part of this can be due to the fact, that SymPy is in Debian, Ubuntu and Sage, but still.&lt;br /&gt;&lt;br /&gt;So here is how to make a windows installer in Debian:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ./setup.py bdist_wininst&lt;br /&gt;[...]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and a file dist/sympy-0.5.9-hg.win32.exe is created. I only have regular python tools installed. So we just upload the exe to our site and that's it -- kind of scary, since I don't have means to test it.&lt;br /&gt;&lt;br /&gt;But one time I tried that on one of brother's computers with windows and not only it worked, but also the 3D plotting using &lt;a href="http://pyglet.org/"&gt;pyglet&lt;/a&gt; worked out of the box! If you are curious how it looks like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/R21Ooqc1naI/AAAAAAAACa4/6z85s21xQyk/s1600-h/sympy_plotting_module.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/R21Ooqc1naI/AAAAAAAACa4/6z85s21xQyk/s400/sympy_plotting_module.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5146856409651322274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So it has it's advantages to develop pure Python programs - they really run everywhere.&lt;br /&gt;&lt;br /&gt;I think installing things like Python and playing with SymPy on windows must be pain (maybe people just download SymPy for windows and then run away with disgust). But just the fact that they try means, that people doing science do use windows a lot. And I don't think this is going to change any time soon. I also fully agree with Michael Abshoff's &lt;a href="http://mabshoff.blogspot.com/2007/12/native-sage-on-windows.html"&gt;recent post&lt;/a&gt; about this issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-3091579849910642682?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/3091579849910642682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=3091579849910642682' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3091579849910642682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/3091579849910642682'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/12/people-still-and-will-use-windows.html' title='People still (and will) use windows'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/R21Ooqc1naI/AAAAAAAACa4/6z85s21xQyk/s72-c/sympy_plotting_module.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-2697645099727643052</id><published>2007-12-05T01:20:00.000-08:00</published><updated>2007-12-04T16:22:14.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Mérida - wrap up</title><content type='html'>From November 28 till December 2, 2007, I attended a Debian QA and release teams work session in &lt;a href="http://en.wikipedia.org/wiki/Extremadura"&gt;Extremadura&lt;/a&gt;, which is an autonomous community of western Spain, that managed to install Debian on 90000 computers in every school (technically a Debian based distribution called &lt;a href="http://www.linex.org/joomlaex/"&gt;gnuLinEx&lt;/a&gt;) and &lt;a href="http://www.juntaex.es/"&gt;Junta de Extremadura&lt;/a&gt; also &lt;a href="http://lists.debian.org/debian-devel-announce/2007/07/msg00002.html"&gt;sponsored&lt;/a&gt; this meeting.&lt;br /&gt;&lt;br /&gt;I took photos of all participants, see my &lt;a href="http://ondrejcertik.blogspot.com/2007/11/debian-meeting-in-merida-spain.html"&gt;first&lt;/a&gt;, &lt;a href="http://ondrejcertik.blogspot.com/2007/12/merida.html"&gt;second&lt;/a&gt; and &lt;a href="http://ondrejcertik.blogspot.com/2007/12/mrida-remaining-photo.html"&gt;third&lt;/a&gt; posts. When I arrived at the Madrid airport where we first met, I set myself a goal to remember all names and faces, so I used my blog to help me and I think I succeeded in the end. :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R1XYWqb3MtI/AAAAAAAACZc/K-cmi58l18A/s1600-h/slide_IMGP2655.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R1XYWqb3MtI/AAAAAAAACZc/K-cmi58l18A/s320/slide_IMGP2655.JPG" alt="" id="BLOGGER_PHOTO_ID_5140252433573163730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;See also our &lt;a href="http://wiki.debian.org/DebianQAExtremadura2007/"&gt;wiki&lt;/a&gt; page that we used prior and during the meeting.&lt;br /&gt;&lt;br /&gt;So what did we do besides throwing candies?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/R1XYXKb3MuI/AAAAAAAACZk/Q4I_LPSfLt8/s1600-h/slide_IMGP2828.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/R1XYXKb3MuI/AAAAAAAACZk/Q4I_LPSfLt8/s320/slide_IMGP2828.JPG" alt="" id="BLOGGER_PHOTO_ID_5140252442163098338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lucas Nussbaum will send a summary email soon about the meeting, so I'll just speak for &lt;a href="http://wiki.debian.org/OndrejCertik"&gt;myself&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R1Xabqb3MwI/AAAAAAAACZ0/Y9focC8IXXI/s1600-h/slide_imgp2421.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R1Xabqb3MwI/AAAAAAAACZ0/Y9focC8IXXI/s320/slide_imgp2421.jpg" alt="" id="BLOGGER_PHOTO_ID_5140254718495765250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I worked with Gonéri on &lt;a href="http://svnbuildstat.debian.net/"&gt;svnbuildstat&lt;/a&gt;, that is a service for building packages and show statistics about lintian/linda/piuparts checks. It for example contains all packages of the &lt;a href="http://wiki.debian.org/Teams/PythonModulesTeam"&gt;Debian Python Modules Team&lt;/a&gt; (that I am a member of) and many others. We discussed and started to work on how to create robust buildbots, that can be installed as a regular Debian package with zero (if possible) configuration, so that many people can just install them without pain, thus providing a huge scalability to the project.&lt;br /&gt;&lt;br /&gt;We wrote a preliminary &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453710"&gt;patch&lt;/a&gt; to pbuilder for killing the build if it exceeds given memory/disk usage. I had to learn the internals of pbuilder and I lost quite some time squashing some stupid bug I caused while writing the patch.&lt;br /&gt;&lt;br /&gt;I spent most of my time with svnbuildstat, mostly learning and discussing things. This will be important for the future, but to also have some real results, I also fixed some packages I comaintain:&lt;br /&gt;&lt;br /&gt;Together with &lt;a href="http://qa.debian.org/developer.php?login=akumar%40ee.iitm.ac.in"&gt;Kumar Appaiah&lt;/a&gt; we fixed the &lt;a href="http://packages.debian.org/sid/python-numpy"&gt;python-numpy&lt;/a&gt; package and I had it uploaded, then I learned how to work with quilt instead of dpatch to handle patches in Debian packages, thanks to Holger's &lt;a href="http://wiki.debian.org/HolgerLevsen"&gt;webpage&lt;/a&gt;, that contains a nice tutorial. Then I switched from dpatch to quilt in &lt;a href="http://packages.debian.org/unstable/python/python-scipy"&gt;python-scipy&lt;/a&gt; and backported a patch from upstream svn to fix a segfault &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=452991"&gt;bug&lt;/a&gt; and had the package uploaded.&lt;br /&gt;&lt;br /&gt;Then I finished the &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=451039"&gt;Cython&lt;/a&gt; package and had it uploaded. Cython is a marvelous package to speed up Python programs and interface C/C++ programs. I greatly recommend to try. If you don't like it, you can try some of at least &lt;a href="http://wiki.cython.org/WrappingCorCpp"&gt;10 other ways&lt;/a&gt; to wrap C code in Python. I also used quilt in there to backport a patch from the upstream Mercurial repository to implement parsing @classmethods. Quilt is really a pleasure to work with.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Impressions from the meeting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've been using Debian since 2001 as my only operating system on all of my computers, so I am not a complete beginner. But it never occured to me I could get involved in Debian more than a user and an occasional bug reporter. What a mistake.&lt;br /&gt;&lt;br /&gt;I started packaging new things and fixing packages that I need for my work and that didn't work. This got me involved quite a bit in Debian. But in Mérida it was the first time I could dring a beer (well, especially &lt;a href="http://loldebian.wordpress.com/2007/11/29/i-has-no-runin-dpl/"&gt;wine&lt;/a&gt;) with Debian Developers and I found out they are really cool people. They are all very skilled. Also something, that I love about Debian, is that the people involved in it   share two common features, that are very important for them - respect to democracy and personal freedom. When I think about it, those are probably the first two items on my presonal list of values. &lt;br /&gt;&lt;br /&gt;Of course, everytime there is a group of 1000+ people, there are good and bad people, more and less skilled, but important is the overall atmosphere - and that is as I described. I think Debian is truly unique. There is Gentoo, that has maybe 40 (?) active developers. There is Ubuntu, that has maybe 100 (?) developers, but it's basically a comercial distribution and there is not so many interesting work for non employees of Canonical. There is opensuse and fedora, where I am not sure about the numbers. The atmosphere in Debian can change in the future, one never knows, but as of the end of 2007, I think it's very cool to get involved. &lt;br /&gt;&lt;br /&gt;Maybe it's not for everyone, but it's the right place for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-2697645099727643052?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/2697645099727643052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=2697645099727643052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2697645099727643052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/2697645099727643052'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/12/mrida-wrap-up.html' title='Mérida - wrap up'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Cb7_IVMD3C4/R1XYWqb3MtI/AAAAAAAACZc/K-cmi58l18A/s72-c/slide_IMGP2655.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-9045884645448558535</id><published>2007-12-04T13:45:00.000-08:00</published><updated>2007-12-04T14:07:18.605-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Mérida - remaining photo</title><content type='html'>This post is dedicated to dato (&lt;a href="http://chistera.yi.org/~adeodato/blog/"&gt;blog&lt;/a&gt;), whose picture I forgot to take (thanks Cyril Brulebois for taking this one).&lt;br /&gt;&lt;br /&gt;From left to right: Gonéri Le Bouder, me, Lars Wirzenius, Holger Levsen and Adeodato "dato" Simó!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R1XKtqb3MsI/AAAAAAAACZU/TUydZOV06Yk/s1600-h/slide_IMGP2491.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R1XKtqb3MsI/AAAAAAAACZU/TUydZOV06Yk/s320/slide_IMGP2491.JPG" alt="" id="BLOGGER_PHOTO_ID_5140237435547366082" 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-9045884645448558535?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/9045884645448558535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=9045884645448558535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/9045884645448558535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/9045884645448558535'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/12/mrida-remaining-photo.html' title='Mérida - remaining photo'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Cb7_IVMD3C4/R1XKtqb3MsI/AAAAAAAACZU/TUydZOV06Yk/s72-c/slide_IMGP2491.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1310760552399309980</id><published>2007-12-01T04:36:00.000-08:00</published><updated>2007-12-04T14:20:24.507-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Merida</title><content type='html'>We spent the whole Friday hacking, Lucas will send a summary email soon. More people joined.&lt;br /&gt;&lt;br /&gt;Ana Guerrero:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/R1IO-qb3MrI/AAAAAAAACZM/iSY1oIjwez4/s1600-R/30112007268.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/R1IO-qb3MrI/AAAAAAAACZM/nyrCq_fVmEY/s320/30112007268.jpg" alt="" id="BLOGGER_PHOTO_ID_5139186594488988338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Amaya  Rodrigo:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R1FWMqb3MlI/AAAAAAAACYk/Y0ij961Ah8Y/s1600-R/01122007275.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R1FWMqb3MlI/AAAAAAAACYk/Nep1YKU4zUo/s320/01122007275.jpg" alt="" id="BLOGGER_PHOTO_ID_5138983425356018258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mark Purcell:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/R1FWM6b3MmI/AAAAAAAACYs/K6zuQzSmjK0/s1600-R/01122007277.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/R1FWM6b3MmI/AAAAAAAACYs/Fg12SbwJeZQ/s320/01122007277.jpg" alt="" id="BLOGGER_PHOTO_ID_5138983429650985570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kilian Krause and César Gómez Martín&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/R1FWNab3MnI/AAAAAAAACY0/Ka-VMxhh7Dg/s1600-R/01122007278.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/R1FWNab3MnI/AAAAAAAACY0/NfKuibxMy_o/s320/01122007278.jpg" alt="" id="BLOGGER_PHOTO_ID_5138983438240920178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and Holger Levsen with red hair:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R1FWNqb3MoI/AAAAAAAACY8/A1ukvrTqivY/s1600-R/29112007264.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R1FWNqb3MoI/AAAAAAAACY8/IG8DoHfXono/s320/29112007264.jpg" alt="" id="BLOGGER_PHOTO_ID_5138983442535887490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Saturday we were again working and in the late afternoon we took a walk in Mérida, visited the famous ancient &lt;a href="http://en.wikipedia.org/wiki/M%C3%A9rida,_Spain"&gt;Roman monuments&lt;/a&gt;. Now it's 3:30am and we will soon go to Madrid and back home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1310760552399309980?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1310760552399309980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1310760552399309980' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1310760552399309980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1310760552399309980'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/12/merida.html' title='Merida'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Cb7_IVMD3C4/R1IO-qb3MrI/AAAAAAAACZM/nyrCq_fVmEY/s72-c/30112007268.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-7297147739767928078</id><published>2007-11-29T03:01:00.000-08:00</published><updated>2007-11-29T03:36:45.192-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian meeting in Merida, Spain</title><content type='html'>Right now, some Debian Developers (and also not yet Developers, like me:), are on&lt;br /&gt;the &lt;a href="http://wiki.debian.org/WorkSessionsExtremadura2007"&gt;work sessions in Extremadura&lt;/a&gt;, I am on the &lt;a href="http://wiki.debian.org/DebianQAExtremadura2007/"&gt;QA and release teams meeting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We started in the morning with presentations (see also the &lt;a href="http://wiki.debian.org/DebianQAExtremadura2007/Schedule"&gt;schedule&lt;/a&gt;). Any comments and suggestions welcomed, please add comments below the post.&lt;br /&gt;&lt;br /&gt;Lucas Nussbaum presenting:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/R06eySWQdII/AAAAAAAACYc/7S2l8CWormY/s1600-h/29112007259.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/R06eySWQdII/AAAAAAAACYc/7S2l8CWormY/s320/29112007259.jpg" alt="" id="BLOGGER_PHOTO_ID_5138218811632153730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of us:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/R06d7SWQdCI/AAAAAAAACXs/BgkxITZ_Oio/s1600-h/29112007251.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/R06d7SWQdCI/AAAAAAAACXs/BgkxITZ_Oio/s320/29112007251.jpg" alt="" id="BLOGGER_PHOTO_ID_5138217866739348514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And in details, names from left to right. Cyril Brulebois, Gonéri Le Bouder:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/R06d7iWQdDI/AAAAAAAACX0/zqLfrxCCWoM/s1600-h/29112007253.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/R06d7iWQdDI/AAAAAAAACX0/zqLfrxCCWoM/s320/29112007253.jpg" alt="" id="BLOGGER_PHOTO_ID_5138217871034315826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luk Claes, Marc 'HE' Brockschmidt, Jörg Jaspert, Lars Wirzenius:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/R06d7yWQdEI/AAAAAAAACX8/zDogpd-DhJI/s1600-h/29112007254.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/R06d7yWQdEI/AAAAAAAACX8/zDogpd-DhJI/s320/29112007254.jpg" alt="" id="BLOGGER_PHOTO_ID_5138217875329283138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fabio Tranchitella, Bernd Zeimetz, Mario Iseli, Luk Claes:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/R06d8iWQdFI/AAAAAAAACYE/VAeAKDo-Mt4/s1600-h/29112007255.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/R06d8iWQdFI/AAAAAAAACYE/VAeAKDo-Mt4/s320/29112007255.jpg" alt="" id="BLOGGER_PHOTO_ID_5138217888214185042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Filippo Giunchedi, Stefano Zacchiroli,  Tzafrir Cohen,  Simon Richter,  Faidon Liambotis:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/R06d8yWQdGI/AAAAAAAACYM/TfWGO5rFqcM/s1600-h/29112007256.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/R06d8yWQdGI/AAAAAAAACYM/TfWGO5rFqcM/s320/29112007256.jpg" alt="" id="BLOGGER_PHOTO_ID_5138217892509152354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And again, so that Faidon is visible:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/R06eyCWQdHI/AAAAAAAACYU/Pe2anKix31c/s1600-h/29112007257.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/R06eyCWQdHI/AAAAAAAACYU/Pe2anKix31c/s320/29112007257.jpg" alt="" id="BLOGGER_PHOTO_ID_5138218807337186418" 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-7297147739767928078?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/7297147739767928078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=7297147739767928078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7297147739767928078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/7297147739767928078'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/debian-meeting-in-merida-spain.html' title='Debian meeting in Merida, Spain'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Cb7_IVMD3C4/R06eySWQdII/AAAAAAAACYc/7S2l8CWormY/s72-c/29112007259.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5826288288628585117</id><published>2007-11-28T04:09:00.000-08:00</published><updated>2007-11-28T04:34:24.912-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>How to connect to the internet using T-Mobile and bluetooth</title><content type='html'>I have a laptop with Debian, cell phone (Nokia N70) with bluetooth and this howto describes how to connect to the internet.&lt;br /&gt;&lt;br /&gt;Connect USB bluetooth dongle to the laptop and check it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ hciconfig&lt;br /&gt;hci0:   Type: USB&lt;br /&gt;    BD Address: 00:02:72:D2:23:12 ACL MTU: 310:10 SCO MTU: 64:8&lt;br /&gt;    UP RUNNING PSCAN ISCAN&lt;br /&gt;    RX bytes:686 acl:0 sco:0 events:22 errors:0&lt;br /&gt;    TX bytes:337 acl:0 sco:0 commands:21 errors:0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Scan for the phone:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ hcitool scan&lt;br /&gt;Scanning ...&lt;br /&gt;    00:19:79:86:EB:BC       Nokia N70&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Create a serial device for communicating with the modem in the phone:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ rfcomm connect /dev/rfcomm0 00:19:79:86:EB:BC 3&lt;br /&gt;Connected /dev/rfcomm0 to 00:19:79:86:EB:BC on channel 3&lt;br /&gt;Press CTRL-C for hangup&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(A dialog will popup on the phone asking me to allow the laptop to connect.)&lt;br /&gt;&lt;br /&gt;Connect using wvdial:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wvdial&lt;br /&gt;--&gt; WvDial: Internet dialer version 1.56&lt;br /&gt;--&gt; Cannot get information for serial port.&lt;br /&gt;--&gt; Initializing modem.&lt;br /&gt;--&gt; Sending: ATZ&lt;br /&gt;ATZ&lt;br /&gt;OK&lt;br /&gt;--&gt; Sending: ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;OK&lt;br /&gt;--&gt; Modem initialized.&lt;br /&gt;--&gt; Sending: ATDT*99***1#&lt;br /&gt;--&gt; Waiting for carrier.&lt;br /&gt;ATDT*99***1#&lt;br /&gt;CONNECT&lt;br /&gt;~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&amp;amp;} }*} } g}%~&lt;br /&gt;--&gt; Carrier detected.  Starting PPP immediately.&lt;br /&gt;--&gt; Starting pppd at Wed Nov 28 12:58:55 2007&lt;br /&gt;--&gt; Pid of pppd: 4378&lt;br /&gt;--&gt; Using interface ppp0&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; local  IP address 172.24.171.97&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; remote IP address 10.6.6.6&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; primary   DNS address 62.141.0.2&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;--&gt; secondary DNS address 213.162.65.1&lt;br /&gt;--&gt; pppd: �[08][06][08]�[10][06][08]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And that's it, I am connected.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prerequisities&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wajig install wvdial bluez-utils&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And setup the /etc/wvdial.conf file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cat /etc/wvdial.conf&lt;br /&gt;[Dialer Defaults]&lt;br /&gt;Init1 = ATZ&lt;br /&gt;Init2 = ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;Modem Type = USB Modem&lt;br /&gt;Baud = 460800&lt;br /&gt;New PPPD = yes&lt;br /&gt;Modem = /dev/rfcomm0&lt;br /&gt;ISDN = 0&lt;br /&gt;Phone = *99***1#&lt;br /&gt;Password = doesnt_matter&lt;br /&gt;Username = doesnt_matter&lt;br /&gt;Stupid Mode = 1&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5826288288628585117?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5826288288628585117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5826288288628585117' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5826288288628585117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5826288288628585117'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/how-to-connect-to-internet-using-t.html' title='How to connect to the internet using T-Mobile and bluetooth'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-6695915538306563936</id><published>2007-11-17T15:46:00.000-08:00</published><updated>2007-11-17T15:54:20.146-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>snapshot.debian.net rocks</title><content type='html'>Today during upgrade I got the gnome packages broken:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wajig install nautilus&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree       &lt;br /&gt;Reading state information... Done&lt;br /&gt;Some packages could not be installed. This may mean that you have&lt;br /&gt;requested an impossible situation or if you are using the unstable&lt;br /&gt;distribution that some required packages have not yet been created&lt;br /&gt;or been moved out of Incoming.&lt;br /&gt;&lt;br /&gt;Since you only requested a single operation it is extremely likely that&lt;br /&gt;the package is simply not installable and a bug report against&lt;br /&gt;that package should be filed.&lt;br /&gt;The following information may help to resolve the situation:&lt;br /&gt;&lt;br /&gt;The following packages have unmet dependencies:&lt;br /&gt;  nautilus: Depends: libexempi2 but it is not installable&lt;br /&gt;E: Broken packages&lt;br /&gt;$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I tried to download the source package of libexempi2, no luck (doesn't exist). Then I remembered I've heard about &lt;a href="http://snapshot.debian.net/"&gt;snapshot.debian.net&lt;/a&gt;, so I tried that and added:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;deb http://snapshot.debian.net/archive pool exempi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to my /etc/apt/sources.list and voilà - it works!&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wajig install nautilus&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree       &lt;br /&gt;Reading state information... Done&lt;br /&gt;The following packages were automatically installed and are no longer required:&lt;br /&gt;  libstdc++5 libpixman-1-0 libglut3 libsqlite0 lib64gfortran2 libqt4-sql&lt;br /&gt;  libntfs-3g4 libkdcraw1&lt;br /&gt;Use 'apt-get autoremove' to remove them.&lt;br /&gt;The following extra packages will be installed:&lt;br /&gt;  fam libexempi2 libtrackerclient0 nautilus-cd-burner&lt;br /&gt;Suggested packages:&lt;br /&gt;  tracker&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;  fam libexempi2 libtrackerclient0 nautilus nautilus-cd-burner&lt;br /&gt;0 upgraded, 5 newly installed, 0 to remove and 46 not upgraded.&lt;br /&gt;Need to get 1583kB of archives.&lt;br /&gt;After unpacking 5632kB of additional disk space will be used.&lt;br /&gt;Do you want to continue [Y/n]? &lt;br /&gt;WARNING: The following packages cannot be authenticated!&lt;br /&gt;  libexempi2&lt;br /&gt;Install these packages without verification [y/N]? y&lt;br /&gt;Get:1 http://ftp.cz.debian.org sid/main fam 2.7.0-13 [69.0kB]&lt;br /&gt;Get:2 http://ftp.cz.debian.org sid/main libtrackerclient0 0.6.3-3 [41.3kB]&lt;br /&gt;Get:3 http://ftp.cz.debian.org sid/main nautilus 2.20.0-1 [639kB]              &lt;br /&gt;Get:4 http://snapshot.debian.net pool/exempi libexempi2 1.99.4-1 [290kB]&lt;br /&gt;Get:5 http://ftp.cz.debian.org sid/main nautilus-cd-burner 2.20.0-1 [544kB]&lt;br /&gt;Fetched 1583kB in 7s (199kB/s)                                                 &lt;br /&gt;Selecting previously deselected package fam.&lt;br /&gt;(Reading database ... 210515 files and directories currently installed.)&lt;br /&gt;Unpacking fam (from .../archives/fam_2.7.0-13_i386.deb) ...&lt;br /&gt;Selecting previously deselected package libexempi2.&lt;br /&gt;Unpacking libexempi2 (from .../libexempi2_1.99.4-1_i386.deb) ...&lt;br /&gt;Selecting previously deselected package libtrackerclient0.&lt;br /&gt;Unpacking libtrackerclient0 (from .../libtrackerclient0_0.6.3-3_i386.deb) ...&lt;br /&gt;Selecting previously deselected package nautilus.&lt;br /&gt;Unpacking nautilus (from .../nautilus_2.20.0-1_i386.deb) ...&lt;br /&gt;dpkg: warning - unable to delete old directory `/usr/share/mime/application': Directory not empty&lt;br /&gt;Selecting previously deselected package nautilus-cd-burner.&lt;br /&gt;Unpacking nautilus-cd-burner (from .../nautilus-cd-burner_2.20.0-1_i386.deb) ...&lt;br /&gt;Setting up fam (2.7.0-13) ...&lt;br /&gt;Starting file alteration monitor: FAM.&lt;br /&gt;Setting up libexempi2 (1.99.4-1) ...&lt;br /&gt;Setting up libtrackerclient0 (0.6.3-3) ...&lt;br /&gt;Setting up nautilus (2.20.0-1) ...&lt;br /&gt;Setting up nautilus-cd-burner (2.20.0-1) ...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-6695915538306563936?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/6695915538306563936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=6695915538306563936' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6695915538306563936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/6695915538306563936'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/snapshotdebiannet-rocks.html' title='snapshot.debian.net rocks'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5384503931272655027</id><published>2007-11-14T15:40:00.000-08:00</published><updated>2007-11-16T10:34:53.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>SAGE Days 6</title><content type='html'>From November 9 till November 15 I attended &lt;a href="http://wiki.sagemath.org/days6/"&gt;SAGE Days 6&lt;/a&gt; in Bristol, UK. It was a conference and a coding sprint for the &lt;a href="http://www.sagemath.org/"&gt;SAGE&lt;/a&gt; project, which wants to build something comparable to Mathematica, Maple, Matlab and Magma built only from open source &lt;a href="http://www.sagemath.org/components.html"&gt;components&lt;/a&gt; without &lt;a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel"&gt;reinventing the wheel&lt;/a&gt;. Sage also provides excellent novel implementations for &lt;a href="http://wiki.sagemath.org/days6/talks?action=AttachFile&amp;amp;do=get&amp;amp;target=stein-albrecht.pdf"&gt;many&lt;/a&gt; mathematical algorithms (not found in Mathematica/Maple etc.).&lt;br /&gt;&lt;br /&gt;I was invited to give a talk about &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt;, which is a Python library for symbolic mathematics, that we are doing.&lt;br /&gt;&lt;br /&gt;Here are my notes from each day:&lt;br /&gt;&lt;br /&gt;Saturday: &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sage-days-6-friday-and-saturday-morning.html"&gt;one&lt;/a&gt;, &lt;a href="http://ondrejcertik.blogspot.com/2007/11/rest-of-saturday.html"&gt;two&lt;/a&gt;&lt;br /&gt;Sunday: &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sunday-morning.html"&gt;one&lt;/a&gt;, &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sunday-afternoon.html"&gt;two&lt;/a&gt;&lt;br /&gt;Monday, Tuesday, Wednesday: &lt;a href="http://ondrejcertik.blogspot.com/2007/11/monday-tuesday-wednesday.html"&gt;one&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Impressions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Very positive. I started SymPy two years ago, because I wanted to play with symbolic mathematics in Python, see for example my &lt;a href="http://sympy.googlecode.com/svn/materials/presentations/SD6.pdf"&gt;presentation&lt;/a&gt; I gave at this conference for details. SAGE at that time was just able to do some mathematics things, but it was very weak in calculus, which is the SymPy's main domain. This has changed last half a year, when SAGE people managed to wrap Maxima in Python (which I thought to be completely impossible), so I started to follow SAGE development more closely. After the SD6, I must say I became very excited about the project.&lt;br /&gt;&lt;br /&gt;One problem with mailinglists, IRC and other online interaction is that it's very difficult for me to get an impression about the people and the project. Being able to meet the developers and discuss with them face to face gives me the impression very quickly and very accurately.&lt;br /&gt;&lt;br /&gt;By far the biggest guarantee, why it is worthy for me to contribute to SAGE, is the project leader, William Stein. He is very rational and pragmatic (I like these two properties) and after many discussions with him, I came to realize that he has basically identical views on the important things as I do and were I on his place, I would do the same decisions as he did and does. That's very nice, because I can concentrate my energy on things that I like to improve and don't have to worry about other things, because I know he will do it right.&lt;br /&gt;&lt;br /&gt;The other SAGE developers are experts and with similar attitude as William has. It's enthusiastic to be among people who make things happen. For example one of the authors of Cython, Robert, implemented during SD6 a very nice HTML output, that shows Cython code, with colors according to how many Python API calls are called on that particular line, and by clicking that line it shows the corresponding C code.&lt;br /&gt;&lt;br /&gt;SAGE project has a high aim and it stricly goes for it, without looking too much to the right or left, and that's how it should be. And it does produce a lot of very useful and high quality stuff along the way, for example Cython (probably the best wrapper for C/C++ things now, only pypy could possibly beat it, but that's still more a research project) or the SAGE notebook, which looks like a Mathematica notebook, but better and in a browser (together with a revision history, sharing, SSL encryption, etc.).&lt;br /&gt;&lt;br /&gt;The only little problem is that currently SAGE developers are all mathematicians and as is well-known, mathematicians looks at mathematic from a very different prospective than physicists. :) And so I need calculus, advanced calculus and only when this is working, and working well, I can build on it some more advanced features. SAGE currently goes a little the other way - it has a lot of advanced features, from number theory, modular forms, elliptic curves, etc., but the basic calculus still needs a lot of improvements. SAGE wraps Maxima, because Maxima is quite fast, very well tested, so it works well. It's difficult to extend and written in LISP and that's very bad. That's where SymPy could help - it's in Python, very easy to extend, but currently slower than Maxima (rewriting parts of SymPy using Cython, or even C directly, will make it faster, hopefully as fast as Maxima or faster).&lt;br /&gt;&lt;br /&gt;It's not yet in Debian, but SAGE people are &lt;a href="http://wiki.sagemath.org/DebianSAGE"&gt;working&lt;/a&gt; on it. It's not an easy task unfortunately.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Conclusion&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;SAGE is a very promising young project and I think it will succeed to provide an open source alternative to Maple, Matlab, Mathematica and Magma.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5384503931272655027?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5384503931272655027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5384503931272655027' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5384503931272655027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5384503931272655027'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/sage-days-6.html' title='SAGE Days 6'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1875854536184359697</id><published>2007-11-14T14:47:00.001-08:00</published><updated>2007-11-16T07:21:18.189-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>Monday, Tuesday, Wednesday</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Monday&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On Monday we, as usual, had a breakfast in the Marriott Hotel:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/Rzt7oCkNAfI/AAAAAAAACWQ/fRrahCVXUAI/s1600-h/11112007223.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/Rzt7oCkNAfI/AAAAAAAACWQ/fRrahCVXUAI/s320/11112007223.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832128132514290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and went to the &lt;a href="http://www.maths.bris.ac.uk/research/labs/heilbronn/"&gt;Heilbronn Institute&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt7oikNAiI/AAAAAAAACWo/MbRKwAzdM5g/s1600-h/14112007237.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt7oikNAiI/AAAAAAAACWo/MbRKwAzdM5g/s320/14112007237.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832136722448930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;that is right across the highest point in Bristol:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt7oikNAjI/AAAAAAAACWw/ODqTd-LkasY/s1600-h/14112007238.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt7oikNAjI/AAAAAAAACWw/ODqTd-LkasY/s320/14112007238.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832136722448946" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/Rzt7oSkNAhI/AAAAAAAACWg/qGdUXIT0HgA/s1600-h/14112007236.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/Rzt7oSkNAhI/AAAAAAAACWg/qGdUXIT0HgA/s320/14112007236.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832132427481618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We had a presentation by Gregory Bard:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/Rzt7oSkNAgI/AAAAAAAACWY/MLGsRhAAzF4/s1600-h/12112007235.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/Rzt7oSkNAgI/AAAAAAAACWY/MLGsRhAAzF4/s320/12112007235.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832132427481602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then we had a discussion what things should be done in the following coding sprints. Then we coded and in the afternoon I had a presentation "&lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt;: A Python library for symbolic mathematics".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Tuesday&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the morning &lt;a href="http://wiki.sagemath.org/MichaelAbshoff"&gt;Michael Abshoff&lt;/a&gt; gave a presentation about valgrinding a Python/Cython/C/C++ library application like Sage (which adds complexity and its own set of problems because of python). We spent the whole day coding, in the afternoon we did a quick session of lightning talks and in the evening we went to a pub, then we again coded till 1am, some even later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Wednesday&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;In the morning we did a little coding and then had a wrap-up session:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt72ikNAkI/AAAAAAAACW4/nPX1odBp4oE/s1600-h/14112007241.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/Rzt72ikNAkI/AAAAAAAACW4/nPX1odBp4oE/s320/14112007241.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832377240617538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then William had a presentation "SAGE for number theorists" at the &lt;a class="http" href="http://www.maths.bris.ac.uk/events/seminars/series/index.php?id=7"&gt;Heilbronn Seminar&lt;/a&gt;, after which most of the people went to pub, but I with &lt;a href="http://www.jaapspies.nl/"&gt;Jaap Spies&lt;/a&gt;&lt;span class="HcCDpe"&gt; went to the Old City, as tourists. Then I visited a &lt;a href="http://www.bordersstores.co.uk/storefinder/store/StoreID/38/bristol/"&gt;bookstore&lt;/a&gt;&lt;/span&gt;, read some books and then we had a last coding evening:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/Rzt72ykNAlI/AAAAAAAACXA/CD8OGjiSSGw/s1600-h/14112007243.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/Rzt72ykNAlI/AAAAAAAACXA/CD8OGjiSSGw/s320/14112007243.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832381535584850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/Rzt73CkNAmI/AAAAAAAACXI/bNdksHnUtvI/s1600-h/14112007244.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/Rzt73CkNAmI/AAAAAAAACXI/bNdksHnUtvI/s320/14112007244.jpg" alt="" id="BLOGGER_PHOTO_ID_5132832385830552162" 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-1875854536184359697?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1875854536184359697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1875854536184359697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1875854536184359697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1875854536184359697'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/monday-tuesday-wednesday.html' title='Monday, Tuesday, Wednesday'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/Rzt7oCkNAfI/AAAAAAAACWQ/fRrahCVXUAI/s72-c/11112007223.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5424146603645406130</id><published>2007-11-11T14:25:00.001-08:00</published><updated>2007-11-11T16:07:42.823-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>Sunday afternoon</title><content type='html'>After a lunch we had a presentation by &lt;a href="http://www.cs.uwaterloo.ca/%7Ecpernet/"&gt;Clement Pernet&lt;/a&gt; about Fast Exact Linear Algebra, then  &lt;a href="http://www.ma.ic.ac.uk/%7Edl505/"&gt;David Loeffler&lt;/a&gt; talked about Computing Automorphic Forms for Unitary Groups using Sage:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzeBhdi4mXI/AAAAAAAACUk/aeqhdoa3MMk/s1600-h/11112007228.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzeBhdi4mXI/AAAAAAAACUk/aeqhdoa3MMk/s320/11112007228.jpg" alt="" id="BLOGGER_PHOTO_ID_5131712712278579570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and then Bill Hart gave a presentation about Algebraic Number Theory with &lt;a href="http://wiki.sagemath.org/FLINT"&gt;Flint&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/RzeBhti4mYI/AAAAAAAACUs/FYnZa2Xrtnw/s1600-h/11112007229.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/RzeBhti4mYI/AAAAAAAACUs/FYnZa2Xrtnw/s320/11112007229.jpg" alt="" id="BLOGGER_PHOTO_ID_5131712716573546882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the evening we went to an Indian restaurant and then we had a panel discussion&lt;br /&gt;"The Future of Open Source Mathematical Software", moderated by &lt;a href="http://www.warwick.ac.uk/staff/J.E.Cremona/"&gt;John Cremona&lt;/a&gt; with panelists &lt;a href="http://wstein.org/"&gt;William Stein&lt;/a&gt;, &lt;a href="http://www.debian.org/vote/2006/platforms/ballombe"&gt;Bill Allombert&lt;/a&gt;, &lt;a href="http://video.google.com/videoplay?docid=-2913379305263249139"&gt;Michael Abshoff&lt;/a&gt;, &lt;a href="http://cr.yp.to/djb.html"&gt;Dan Bernstein&lt;/a&gt; and me. Recording should be available after the conference.&lt;br /&gt;&lt;br /&gt;In the evening, we went to the usual code sprint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5424146603645406130?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5424146603645406130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5424146603645406130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5424146603645406130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5424146603645406130'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/sunday-afternoon.html' title='Sunday afternoon'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/RzeBhdi4mXI/AAAAAAAACUk/aeqhdoa3MMk/s72-c/11112007228.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-8145863862860317808</id><published>2007-11-11T02:17:00.000-08:00</published><updated>2007-11-11T04:01:16.948-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>Sunday morning</title><content type='html'>After fighting with the famous British separated hot and cold water taps in the morning, I had the traditional bacon and eggs:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/RzbZidi4mUI/AAAAAAAACUM/DryIrAzPkpE/s1600-h/11112007212.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/RzbZidi4mUI/AAAAAAAACUM/DryIrAzPkpE/s320/11112007212.jpg" alt="" id="BLOGGER_PHOTO_ID_5131528011504982338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And it was delicious. Then we had the first presentation by &lt;a href="http://www.mfo.de/organisation/institute/brickenstein/"&gt;Michael Brickenstein&lt;/a&gt; (see also the &lt;a href="http://wiki.sagemath.org/days6/talks"&gt;schedule&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzbZiti4mVI/AAAAAAAACUU/N41hfe_6W34/s1600-h/11112007213.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzbZiti4mVI/AAAAAAAACUU/N41hfe_6W34/s320/11112007213.jpg" alt="" id="BLOGGER_PHOTO_ID_5131528015799949650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After a break, we witnessed a marvelous presentation by &lt;a href="http://www.loria.fr/%7Ezimmerma/"&gt;Paul Zimmerman&lt;/a&gt; about &lt;a href="http://www.mpfr.org/"&gt;MPFR&lt;/a&gt;, used by default by gcc and gfortran:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzboWti4mWI/AAAAAAAACUc/jUrCCecGSOM/s1600-h/11112007222.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzboWti4mWI/AAAAAAAACUc/jUrCCecGSOM/s320/11112007222.jpg" alt="" id="BLOGGER_PHOTO_ID_5131544302315936098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And we went to lunch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-8145863862860317808?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/8145863862860317808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=8145863862860317808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8145863862860317808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/8145863862860317808'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/sunday-morning.html' title='Sunday morning'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Cb7_IVMD3C4/RzbZidi4mUI/AAAAAAAACUM/DryIrAzPkpE/s72-c/11112007212.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-1801344607291556749</id><published>2007-11-10T15:53:00.000-08:00</published><updated>2007-11-11T04:49:18.522-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>The rest of Saturday</title><content type='html'>We went to a common lunch at the institute, after which another 3 presentations followed. Robert Bradshaw on &lt;a href="http://www.cython.org/"&gt;Cython&lt;/a&gt;, James Davenport on simplification in CAS and Dan Bernstein about elliptic curves. (Most people here are mathematicians, for example working on modular forms, cryptography etc.)&lt;br /&gt;&lt;br /&gt;Then we had a conference dinner together, on which we discussed a lot of stuff - GPL2 vs GPL3 vs BSD pros and cons and problems and how to license SAGE and SymPy and whether "translating" something from C++ to Python is a derived work or not, I also asked &lt;a href="http://wstein.org/"&gt;William&lt;/a&gt;, the main author of &lt;a href="http://www.sagemath.org/"&gt;SAGE&lt;/a&gt; sitting on my left hand side, how SAGE has started and about his future plans with it. Basically, we exchanged our experiences with working on an opensource project and how to motivate people to work on it, and how to do and especially not to do things. On my right hand side was Bill Allombert, one of the two authors of &lt;a href="http://pari.math.u-bordeaux.fr/"&gt;PARI/GP&lt;/a&gt; and also a &lt;a href="http://www.debian.org/vote/2006/platforms/ballombe"&gt;Debian Developer&lt;/a&gt;, so we signed each other's gpg keys (that we use in Debian) earlier this afternoon. It's awesome, I am wearing my Debian &lt;a href="http://www.linuxemporium.co.uk/products/clothing/#pid4215"&gt;t-shirt&lt;/a&gt; today, but I didn't expect to meet any Debian people here.&lt;br /&gt;&lt;br /&gt;After a dinner we went to the math institute to have a coding sprint, some pictures using my cell phone from the sprint:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzZHwti4mPI/AAAAAAAACTk/Ghv-i1TFjgU/s1600-h/10112007207.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzZHwti4mPI/AAAAAAAACTk/Ghv-i1TFjgU/s320/10112007207.jpg" alt="" id="BLOGGER_PHOTO_ID_5131367727620462834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/RzZHw9i4mQI/AAAAAAAACTs/Fl-6a16qiNU/s1600-h/10112007208.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/RzZHw9i4mQI/AAAAAAAACTs/Fl-6a16qiNU/s320/10112007208.jpg" alt="" id="BLOGGER_PHOTO_ID_5131367731915430146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZHxNi4mRI/AAAAAAAACT0/PMOWcn9VLxw/s1600-h/10112007209.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZHxNi4mRI/AAAAAAAACT0/PMOWcn9VLxw/s320/10112007209.jpg" alt="" id="BLOGGER_PHOTO_ID_5131367736210397458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZHyNi4mSI/AAAAAAAACT8/6keZSH1yxc8/s1600-h/10112007210.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZHyNi4mSI/AAAAAAAACT8/6keZSH1yxc8/s320/10112007210.jpg" alt="" id="BLOGGER_PHOTO_ID_5131367753390266658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZIBNi4mTI/AAAAAAAACUE/WIruk1O3cPQ/s1600-h/10112007211.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/RzZIBNi4mTI/AAAAAAAACUE/WIruk1O3cPQ/s320/10112007211.jpg" alt="" id="BLOGGER_PHOTO_ID_5131368011088304434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;During the dinner and especially during the sprint I borrowed William's camera and recorded short interviews with conference participants. I am going to do more interviews tomorrow. I'll put the link to them later, when William puts them on the internet after the conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-1801344607291556749?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/1801344607291556749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=1801344607291556749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1801344607291556749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/1801344607291556749'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/rest-of-saturday.html' title='The rest of Saturday'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/RzZHwti4mPI/AAAAAAAACTk/Ghv-i1TFjgU/s72-c/10112007207.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-4856850311843317918</id><published>2007-11-10T03:31:00.000-08:00</published><updated>2007-11-10T03:37:09.633-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Downloading images from Nokia N70 over bluetooth in GNOME</title><content type='html'>is actually very easy. I connect the bluetooth dongle to the USB port on my laptop and:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ wajig install gnome-bluetooth&lt;br /&gt;$ gnome-obex-server&lt;br /&gt;conn_request:   bdaddr 00:19:79:86:EB:BC&lt;br /&gt;conn_complete:  status 0x00&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Device 00:19:79:86:EB:BC is about to send an object.&lt;br /&gt;** Message: File arrived from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Filename '09112007196.jpg' Length 297132&lt;br /&gt;** Message: Saving to '/home/ondra/Desktop/Downloads/09112007196.jpg'&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;conn_request:   bdaddr 00:19:79:86:EB:BC&lt;br /&gt;conn_complete:  status 0x00&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Device 00:19:79:86:EB:BC is about to send an object.&lt;br /&gt;** Message: File arrived from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Filename '10112007197.jpg' Length 289214&lt;br /&gt;** Message: Saving to '/home/ondra/Desktop/Downloads/10112007197.jpg'&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;conn_request:   bdaddr 00:19:79:86:EB:BC&lt;br /&gt;conn_complete:  status 0x00&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Device 00:19:79:86:EB:BC is about to send an object.&lt;br /&gt;** Message: File arrived from 00:19:79:86:EB:BC&lt;br /&gt;** Message: Filename '10112007198.jpg' Length 287449&lt;br /&gt;** Message: Saving to '/home/ondra/Desktop/Downloads/10112007198.jpg'&lt;br /&gt;** Message: Incoming connection from 00:19:79:86:EB:BC&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And then I just click on the image on my phone and say "send over bluetooth", it finds my computer, I say yes, and that's it. It ends up in my Downloads folder on the desktop.&lt;br /&gt;&lt;br /&gt;Then I just upload the images to my blog, see an &lt;a href="http://ondrejcertik.blogspot.com/2007/11/sage-days-6-friday-and-saturday-morning.html"&gt;example&lt;/a&gt; how it looks like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-4856850311843317918?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/4856850311843317918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=4856850311843317918' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/4856850311843317918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/4856850311843317918'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/downloading-images-from-nokia-n70-over.html' title='Downloading images from Nokia N70 over bluetooth in GNOME'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-5962443394323218477</id><published>2007-11-10T03:09:00.000-08:00</published><updated>2007-11-10T03:25:19.784-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><title type='text'>SAGE Days 6 - Friday and Saturday morning</title><content type='html'>Right now I am at the &lt;a href="http://wiki.sagemath.org/days6"&gt;SAGE Days 6&lt;/a&gt; conference.&lt;br /&gt;&lt;br /&gt;On Friday, I took the plane&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzWSW9i4mII/AAAAAAAACSs/I1nok__5lWI/s1600-h/09112007196.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzWSW9i4mII/AAAAAAAACSs/I1nok__5lWI/s320/09112007196.jpg" alt="" id="BLOGGER_PHOTO_ID_5131168273634203778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;from Prague to Bristol, where we accomodated in the Marriott Hotel:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/RzWSyti4mKI/AAAAAAAACS8/XSHLmnLLD5I/s1600-h/10112007198.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/RzWSyti4mKI/AAAAAAAACS8/XSHLmnLLD5I/s320/10112007198.jpg" alt="" id="BLOGGER_PHOTO_ID_5131168750375573666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And went to have a dinner together in a Thai restaurant. On Staturday morning we went to our first session&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Cb7_IVMD3C4/RzWSgdi4mJI/AAAAAAAACS0/6qVddm0SBwk/s1600-h/10112007197.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Cb7_IVMD3C4/RzWSgdi4mJI/AAAAAAAACS0/6qVddm0SBwk/s320/10112007197.jpg" alt="" id="BLOGGER_PHOTO_ID_5131168436842961042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;to the math department:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Cb7_IVMD3C4/RzWTS9i4mLI/AAAAAAAACTE/d9OfinxQAt8/s1600-h/10112007199.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_Cb7_IVMD3C4/RzWTS9i4mLI/AAAAAAAACTE/d9OfinxQAt8/s320/10112007199.jpg" alt="" id="BLOGGER_PHOTO_ID_5131169304426354866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;where William:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Cb7_IVMD3C4/RzWU6Ni4mNI/AAAAAAAACTU/EcEQbL4w64s/s1600-h/10112007201.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Cb7_IVMD3C4/RzWU6Ni4mNI/AAAAAAAACTU/EcEQbL4w64s/s320/10112007201.jpg" alt="" id="BLOGGER_PHOTO_ID_5131171078247848146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and Martin:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Cb7_IVMD3C4/RzWTbti4mMI/AAAAAAAACTM/iR1IFYe73OI/s1600-h/10112007200.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Cb7_IVMD3C4/RzWTbti4mMI/AAAAAAAACTM/iR1IFYe73OI/s320/10112007200.jpg" alt="" id="BLOGGER_PHOTO_ID_5131169454750210242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;gave an introductory talk about SAGE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-5962443394323218477?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/5962443394323218477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=5962443394323218477' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5962443394323218477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/5962443394323218477'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/11/sage-days-6-friday-and-saturday-morning.html' title='SAGE Days 6 - Friday and Saturday morning'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_Cb7_IVMD3C4/RzWSW9i4mII/AAAAAAAACSs/I1nok__5lWI/s72-c/09112007196.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6568744196982634289.post-4902720575850192556</id><published>2007-10-29T15:53:00.000-07:00</published><updated>2007-11-09T01:29:10.567-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Mercurial vs git for managing Debian packages</title><content type='html'>I was used to managing all my packages in a Subversion repository, but now when we moved from Subversion to Mercurial in &lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt;, I somehow prefer Mercurial for all my work now. :) We chose Mercurial, because I found it a little more polished than git, also the commands are the same as in Subversion. &lt;br /&gt;&lt;br /&gt;I like the git-buildpackage, that it manages everything in one repository and that's it, and also that it's written in Python. One would expect that when Mercurial is written in Python, that hg-buildpackage would be too, but it's written in Haskell, so I cannot easily fix it. I filed a &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=448444"&gt;wishlist&lt;/a&gt; against the hg-buildpackage, whether it is a good idea to provide the same interface as git-buildpackage. &lt;br /&gt;&lt;br /&gt;So for now I am going to try git for packaging things in Debian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6568744196982634289-4902720575850192556?l=ondrejcertik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ondrejcertik.blogspot.com/feeds/4902720575850192556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6568744196982634289&amp;postID=4902720575850192556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/4902720575850192556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6568744196982634289/posts/default/4902720575850192556'/><link rel='alternate' type='text/html' href='http://ondrejcertik.blogspot.com/2007/10/mercurial-vs-git-for-managing-debian.html' title='Mercurial vs git for managing Debian packages'/><author><name>Ondřej Čertík</name><uri>http://www.blogger.com/profile/02845032202161204018</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
