<?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-32263162</id><updated>2012-02-17T03:02:31.195Z</updated><category term='install'/><category term='articles'/><category term='symbol table'/><category term='flash'/><category term='cheat sheet'/><category term='installation'/><category term='cli'/><category term='doxygen'/><category term='computational biology'/><category term='custom-bib'/><category term='tex'/><category term='plots'/><category term='lsd06'/><category term='C'/><category term='tikz'/><category term='latex'/><category term='carriage return'/><category term='tri'/><category term='printing'/><category term='folding'/><category term='alignment'/><category term='GNU'/><category term='roxygen'/><category term='bioinformatics'/><category term='Stirling numbers'/><category term='texshade'/><category term='Cambridge'/><category term='C++'/><category term='latitude C640'/><category term='academia'/><category term='metapost'/><category term='reftex'/><category term='content management'/><category term='kslowd'/><category term='diviser pour régner'/><category term='biology'/><category term='pgf'/><category term='bibtex'/><category term='Dell'/><category term='keyboard'/><category term='grub2'/><category term='elisp'/><category term='code'/><category term='bison'/><category term='review'/><category term='BIOS'/><category term='Video'/><category term='crontab'/><category term='CS'/><category term='laptop'/><category term='algorithmes'/><category term='linux'/><category term='Steve Yegge'/><category term='yacc'/><category term='computer science'/><category term='cvs'/><category term='emacs'/><category term='mathematica'/><category term='récursif'/><category term='kubuntu'/><category term='howto'/><category term='graphics'/><category term='FOSS'/><category term='CGH'/><category term='tr'/><category term='memory'/><category term='font'/><category term='hp 6710b'/><category term='flex'/><category term='FOSS license'/><category term='tips&apos;n tricks'/><category term='life'/><category term='lax'/><category term='color palette'/><category term='lecture'/><category term='nombre de Stirling'/><category term='Agilent'/><category term='administration'/><category term='kernel'/><category term='typechecking'/><category term='mathematics'/><category term='stats'/><category term='lex'/><category term='ess'/><category term='statistics'/><category term='command line'/><category term='ubuntu'/><category term='microarray'/><category term='pstrick'/><category term='org-mode'/><category term='university'/><category term='hp'/><category term='compiler'/><category term='subversion'/><category term='google'/><category term='R'/><title type='text'>lost in cyberspace</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32263162.post-7589443386244044306</id><published>2012-01-06T13:48:00.001Z</published><updated>2012-01-06T13:48:25.542Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cli'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>googlecli rediscovered</title><content type='html'>Yesterday, I rediscovered &lt;a hrev="http://code.google.com/p/googlecl/"&gt;googlecl&lt;/a&gt;, a command line tools for the Google Data APIs. I had it in my delicious bookmarks, but had forgotten about it. I think it might prove useful to edit google documents with emacs when at my computer (with &lt;code&gt;google docs edit "mydoc" --editor emacs&lt;/code&gt;) and the web interface when on the road. &lt;br /&gt;&lt;br /&gt;And by the way, this post has been uploaded with &lt;code&gt;google blogger post --tags "google, emacs, cli" --title "googlecli rediscovered" post.html&lt;/code&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-7589443386244044306?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/7589443386244044306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=7589443386244044306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7589443386244044306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7589443386244044306'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2012/01/googlecli-rediscovered_06.html' title='googlecli rediscovered'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-4940215071053802490</id><published>2012-01-05T23:31:00.001Z</published><updated>2012-01-06T13:49:04.575Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cli'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='bibtex'/><title type='text'>Bibtex database management - there is an emacs mode for that</title><content type='html'>Bibliographic management has always been a sensible issue. My only requirement is that whatever I use must support &lt;a href="http://www.bibtex.org/"&gt;bibtex&lt;/a&gt;&amp;nbsp;for optimal &lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt;&amp;nbsp;experience. I use/have used &lt;a href="http://jabref.sourceforge.net/"&gt;JabRef&lt;/a&gt;, referencer, &lt;a href="http://www.citeulike.org/"&gt;CiteULike&lt;/a&gt;&amp;nbsp;and tested &lt;a href="http://www.mendeley.com/"&gt;Mendeley &lt;/a&gt;(on Linux), but have never been totally convinced. Today, I discovered &lt;a href="http://ebib.sourceforge.net/"&gt;Ebib&lt;/a&gt;, which looks like a very promising candidate for at least some of my requirements. It seems that it misses an DOI or PMID [1] import feature, though.&lt;br /&gt;&lt;br /&gt;[1] update: here it is, &lt;a href="http://pubmode.sourceforge.net/"&gt;PubMode - A PubMed interface for Emacs&lt;/a&gt;&amp;nbsp;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-4940215071053802490?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/4940215071053802490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=4940215071053802490' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4940215071053802490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4940215071053802490'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2012/01/bibtex-database-management-there-is.html' title='Bibtex database management - there is an emacs mode for that'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-2817054091372124133</id><published>2011-11-07T10:31:00.000Z</published><updated>2011-11-07T10:31:06.284Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='printing'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Finally printing on our Epson Aculaser C1100 printer</title><content type='html'>Following&amp;nbsp;&lt;a href="http://marchiggins.com/index.html"&gt;Marc Higgins&lt;/a&gt; advices on this &lt;a href="http://ubuntuforums.org/showthread.php?t=915669"&gt;ubuntu forum thread&lt;/a&gt;&amp;nbsp;(January 2nd, 2010 post):&lt;br /&gt;&lt;br /&gt;&lt;code&gt; $ wget http://000it.com/files/epson_c1100/epson_c1100_install.tar.gz&lt;br /&gt;$ tar -zxvf epson_c1100_install.tar.gz&lt;/code&gt;&lt;br /&gt;&lt;code&gt;$ sudo dpkg -i *.deb&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-2817054091372124133?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/2817054091372124133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=2817054091372124133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2817054091372124133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2817054091372124133'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/11/finally-printing-on-our-epson-aculaser.html' title='Finally printing on our Epson Aculaser C1100 printer'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-8371452757383883936</id><published>2011-10-26T09:52:00.000+01:00</published><updated>2011-10-26T09:52:02.662+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FOSS license'/><title type='text'>Open Source Licenses</title><content type='html'>Although getting into the gory details about software licensing is probably out of reach (and scope) for those of us who are not lawyers that specialised in that topic, it is always good to have some basic understanding of licenses when writing and distributing programs. Here are two interesting reads by&amp;nbsp;Ed Burnette posted in 2006 on&lt;a href="http://www.zdnet.com/"&gt; ZDNet&lt;/a&gt;: How to pick an open source license &lt;a href="http://www.zdnet.com/blog/burnette/howto-pick-an-open-source-license-part-1/130"&gt;part 1&lt;/a&gt; and &lt;a href="http://www.zdnet.com/blog/burnette/how-to-pick-an-open-source-license-part-2/131"&gt;part 2&lt;/a&gt;. The &lt;a href="http://www.opensource.org/"&gt;Open Source Initiative&lt;/a&gt;&amp;nbsp;is also a good source of&amp;nbsp;information.&lt;br /&gt;&lt;br /&gt;These sources are most helpful when you use some third party free/open code and thus need to make sure that your software's license is compatible with its dependencies'.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #252525; line-height: 18px;"&gt;&lt;h1 class="h s-1" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-style: inherit; line-height: 1.08em; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-8371452757383883936?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/8371452757383883936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=8371452757383883936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8371452757383883936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8371452757383883936'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/10/open-source-licenses.html' title='Open Source Licenses'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Cambridge, UK</georss:featurename><georss:point>52.2025441 0.1312368000000106</georss:point><georss:box>52.1659486 0.0826198000000106 52.239139599999994 0.17985380000001058</georss:box></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-3308018629634160917</id><published>2011-10-25T15:52:00.000+01:00</published><updated>2011-10-25T15:52:38.455+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Using an R session from a different emacs process</title><content type='html'>Here is my use case. Imagine you are running one&amp;nbsp;(or several)&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;R&lt;/span&gt; session within &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emacs&lt;/span&gt; - many buffers open, with the R session(s), script and other files. You want to open another R code file, somewhat related to you current work in progress,&amp;nbsp;but not open yet another buffer. You want to open that other file in another &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emacs&lt;/span&gt; process, and then connect to the R session in the first &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emacs&lt;/span&gt; instance. Does that make sense...&lt;br /&gt;&lt;br /&gt;In brief, (1) start an &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emacs&lt;/span&gt; server in your first process and (2) use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;emacsclient&lt;/span&gt; to connect to the server's R process. (1) is done by typing &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;M-x server-start&amp;nbsp;&lt;/span&gt;and (2) &amp;nbsp;by opening a new emacs client process with&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; emacsclient -nw&lt;/span&gt; and connect to the R session with &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;M-x ess-request-process&lt;/span&gt;&amp;nbsp;(possibly specifying the session if several are available).&lt;br /&gt;&lt;br /&gt;This can also been done from different machines, although I have not investigated further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-3308018629634160917?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/3308018629634160917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=3308018629634160917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3308018629634160917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3308018629634160917'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/10/using-r-session-from-different-emacs.html' title='Using an R session from a different emacs process'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-5673068124439855375</id><published>2011-03-04T10:26:00.001Z</published><updated>2011-03-04T10:26:58.434Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='academia'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Postdoc's carreers, postdoc's laments... my 2 cents</title><content type='html'>An academic career is quite a bit of an odd path. It has some great unique aspects that come with a great deal of risks, incertitude and concessions (see for instance '&lt;a href="http://www.economist.com/economist-asks/doing_phd_waste_time"&gt;Is doing a PhD waste of time&lt;/a&gt;', '&lt;a href="http://blog.devicerandom.org/2011/02/18/getting-a-life/"&gt;Goodbye academia, I get a life&lt;/a&gt;', '&lt;a href="http://sciencecareers.sciencemag.org/career_magazine/previous_issues/articles/2011_02_04/caredit.a1100011"&gt;How not to succeed in Academia&lt;/a&gt;' for some recent examples). Jennifer Rohn suggests to &lt;a href="http://www.nature.com/news/2011/110302/full/471007a.html"&gt;get postdocs a real career path&lt;/a&gt;.&amp;nbsp;Derek Lowe &lt;a href="http://pipeline.corante.com/archives/2011/03/03/a_postdocs_lament.php"&gt;does not agree so.&lt;/a&gt;&lt;br /&gt;I think part of the problem could be tackled earlier:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;Value&lt;/b&gt; non-university studies. There are a lot of great opportunities out there for people who do not fancy university studies. Not going to university is not a failure, it's a choice. Studying and passing exams is not what suites every body. Just as being manually or artistically gifted is not equally shared among all of us.&lt;/li&gt;&lt;li&gt;For those who do make the choice and graduate, show that there are other alternatives than staying&lt;i&gt; at home&lt;/i&gt; in your university and do a PhD. These alternatives are at least as great, as interesting, as challenging. Doing a PhD is not what the 'best' grads do; its one of several opportunities, it's a choice. Academic authorities have a responsibility in this, as &lt;a href="http://pipeline.corante.com/archives/2011/03/03/a_postdocs_lament.php"&gt;highlighted by Derek Lowe&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I think that this is a possible way to self-regulate the number of PhD students and Postdocs.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-5673068124439855375?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/5673068124439855375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=5673068124439855375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/5673068124439855375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/5673068124439855375'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/03/postdocs-carreers-postdocs-laments-my-2.html' title='Postdoc&apos;s carreers, postdoc&apos;s laments... my 2 cents'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-828883191240924580</id><published>2011-02-07T20:25:00.000Z</published><updated>2011-02-07T20:25:46.253Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R -- feeling at home once again</title><content type='html'>Today, I once again stumbled on one of these unexpected (well, at least before understanding what's really going on) behaviours that &lt;i&gt;make you feel at home using R&lt;/i&gt;. You know,&amp;nbsp;these little things that make you dig deeper to understand what's going on. I thought I would write about this one, as a little souvenir.&lt;br /&gt;I was working on &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://sites.google.com/site/laurentgatto/r-bioconductor/msnbase"&gt;MSnbase&lt;/a&gt;&lt;/span&gt;, when one of the commands that &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;show()&lt;/span&gt;ed the content of a reasonable large object took unreasonably long time to be printed. Basically, I needed to print the range of a list of numerics. The issue can be illustrated like this:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; set.seed(123)&lt;br /&gt;&amp;gt; l1 &amp;lt;- replicate(20,rnorm(10000),simplify=FALSE)&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;gt; length(l1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;[1] 20&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;gt; sapply(l1,length)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt; [1] 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt; [13] 10000 10000 10000 10000 10000 10000 10000 10000&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My code was supposed to calculate the range of the list. As it is above, it is straight forward to efficiently get the expected result with&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; range(l1)&lt;br /&gt;[1] -4.382098  4.322815&lt;br /&gt;&amp;gt; system.time(range(l1))&lt;br /&gt;   user  system elapsed&lt;br /&gt;  0.004   0.000   0.006&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;However, in my case, the list was named:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; l2 &amp;lt;- l1&lt;br /&gt;&amp;gt; names(l2) &amp;lt;- paste("X",1:length(l1),sep="")&lt;br /&gt;&amp;gt; all.equal(l1,l2)&lt;br /&gt;[1] "names for current but not for target"&lt;br /&gt;&amp;gt; range(l1)==range(l2)&lt;br /&gt;[1] TRUE TRUE&lt;br /&gt;## but...&lt;br /&gt;&amp;gt; system.time(range(l2))&lt;br /&gt;   user  system elapsed&lt;br /&gt;   0.12    0.00    0.12&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Even though it now seems obvious, it was not the first time I came this. I realised that my range on named list was taking a lot of time, and that &lt;code&gt;range(sapply(l2,range))&lt;/code&gt; was much faster. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Rprof&lt;/span&gt; indicated that it was the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;c&lt;/span&gt; &lt;a href="http://cran.r-project.org/doc/manuals/R-ints.html#g_t_002eInternal-vs-_002ePrimitive"&gt;primitive&lt;/a&gt; that did account for the big different in time. Eventually, it was when looking at the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;range.default&lt;/span&gt; code that this got clear:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&amp;gt; range.default&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;function (..., na.rm = FALSE, finite = FALSE)&lt;br /&gt;{&lt;br /&gt;    x &amp;lt;- c(..., recursive = TRUE)&lt;br /&gt;    if (is.numeric(x)) {&lt;br /&gt;        if (finite)&lt;br /&gt;            x &amp;lt;- x[is.finite(x)]&lt;br /&gt;        else if (na.rm)&lt;br /&gt;            x &amp;lt;- x[!is.na(x)]&lt;br /&gt;        return(c(min(x), max(x)))&lt;br /&gt;    }&lt;br /&gt;    c(min(x, na.rm = na.rm), max(x, na.rm = na.rm))&lt;br /&gt;}&lt;br /&gt;&lt;environment: namespace:base=""&gt;&lt;/environment:&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The line that recursively concatenates the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;...&lt;/span&gt; arguments&amp;nbsp;transforms&amp;nbsp;the list in a numeric and names all individual elements, thus generating a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;numeric()&lt;/span&gt; of length 20 times 10000, which takes way too much time to be applicable on larger lists.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; nm &amp;lt;- names(c(l2,recursive=TRUE))&lt;br /&gt;&amp;gt; head(nm)&lt;br /&gt;[1] "X11" "X12" "X13" "X14" "X15" "X16"&lt;br /&gt;&amp;gt; tail(nm)&lt;br /&gt;[1] "X209995" "X209996" "X209997" "X209998" "X209999" "X2010000"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;## and...&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; system.time(c(l2,recursive=TRUE))&lt;br /&gt;   user  system elapsed&lt;br /&gt;  0.108   0.000   0.109&lt;br /&gt;&amp;gt; system.time(c(l1,recursive=TRUE))&lt;br /&gt;   user  system elapsed&lt;br /&gt;  0.004   0.000   0.001&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;My empirical solution of running &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;range &lt;/span&gt;on each element of the list through &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sapply &lt;/span&gt;did run much faster because only 10000 element had to be named 20 + 1 times. Now, I know why and that I better first un-name the list before calling range on it.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-828883191240924580?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/828883191240924580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=828883191240924580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/828883191240924580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/828883191240924580'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/02/r-feeling-at-home-once-again.html' title='R -- feeling at home once again'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-8116474429003354581</id><published>2011-01-26T21:34:00.002Z</published><updated>2011-01-26T21:35:21.922Z</updated><title type='text'>Coding Drunk - Guiness Press</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.angryduck.com/pictures/2010_11/Coding_Drunk.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" width="250" src="http://www.angryduck.com/pictures/2010_11/Coding_Drunk.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-8116474429003354581?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/8116474429003354581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=8116474429003354581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8116474429003354581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8116474429003354581'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/01/coding-drunk-guiness-press.html' title='Coding Drunk - Guiness Press'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-557009644338751064</id><published>2011-01-24T19:32:00.002Z</published><updated>2011-02-28T08:30:26.764Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><category scheme='http://www.blogger.com/atom/ns#' term='computational biology'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>The ten simple rules PLoS Comp Biol series</title><content type='html'>PLoS Computational Biology has a nice &lt;a href="http://www.ploscollections.org/article/browseIssue.action?issue=info:doi/10.1371/issue.pcol.v03.i01"&gt;ten simple rules&lt;/a&gt;&amp;nbsp;series&amp;nbsp;written the Editor-in-Chief Philip E. Bourne. One can download the complete set of articles in the collection (a&amp;nbsp;Chinese&amp;nbsp;translation also exists) or each article individually on the collection page link above. Some of my favourites are&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.1002001?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+ploscompbiol/NewArticles+(Ambra+-+Computational+Biology+New+Articles)"&gt;Ten Simple Rules for Getting Ahead as a Computational Biologist in Academia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.0010057"&gt;Ten Simple Rules for Getting Published&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ploscollections.org/article/info:doi/10.1371/journal.pcbi.1000517;jsessionid=01B276BF3858B453BF730D6DF122509A.ambra02"&gt;Ten Simple Rules for Chairing a Scientific Session&lt;/a&gt;&lt;/li&gt;&lt;li&gt;and many more...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Although not in the 10 simple rules&amp;nbsp;series, &lt;a href="http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.1000424"&gt;A Quick Guide to Organizing Computational Biology Projects&lt;/a&gt; published in the same journal.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-557009644338751064?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/557009644338751064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=557009644338751064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/557009644338751064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/557009644338751064'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2011/01/ten-simple-rules-plos-comp-biol-series.html' title='The ten simple rules PLoS Comp Biol series'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-2068950783583243849</id><published>2010-12-26T20:58:00.000Z</published><updated>2010-12-26T20:58:51.452Z</updated><title type='text'>Peter Norvig - The Unreasonable Effectiveness of Data</title><content type='html'>&lt;iframe width="480" height="295" src="http://www.youtube.com/embed/9vR8Vddf7-s?fs=1" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-2068950783583243849?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/2068950783583243849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=2068950783583243849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2068950783583243849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2068950783583243849'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/12/peter-norvig-unreasonable-effectiveness.html' title='Peter Norvig - The Unreasonable Effectiveness of Data'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/9vR8Vddf7-s/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-8139424367055510871</id><published>2010-11-05T21:58:00.005Z</published><updated>2011-10-22T00:31:17.021+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kslowd'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='grub2'/><title type='text'>tricks and treats: kslowd00* and grub2</title><content type='html'>I upgraded my ubuntu to version 10.10 yesterday and got hit by the nasty &lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/609113"&gt;&lt;code&gt;kslod&lt;/code&gt;&lt;/a&gt; kernel bug. Damned, should not have upgraded! I thought about reinstalling the system, although it was not the good time at all. Fortunately, I did not have a &lt;code&gt;ext&lt;/code&gt; or &lt;code&gt;ntfs&lt;/code&gt; external drive to backup a &lt;code&gt;virtualbox&lt;/code&gt; image (file's too large for &lt;code&gt;vfat&lt;/code&gt;). I hoped to still have an older kernel image that would had been kept back during the upgrade and found quite a few in the &lt;code&gt;/boot/&lt;/code&gt; directory, but could not find the &lt;code&gt;/boot/grub/menu.lst&lt;/code&gt;. Asking google &lt;code&gt;where is boot grub menu.lst&lt;/code&gt;, I learned about &lt;code&gt;grub2&lt;/code&gt;. These two &lt;a href="http://ubuntuforums.org/showthread.php?t=1195275"&gt;helpful&lt;/a&gt; &lt;a href="https://help.ubuntu.com/community/Grub2"&gt;links&lt;/a&gt; did come handy to get a grub menu display the alternatives and booting &lt;code&gt;2.6.32-25-generic&lt;/code&gt; instead of the most recent&amp;nbsp;&lt;code&gt;2.6.35-23&lt;/code&gt; solved my initial problem.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EDIT&lt;/b&gt;: This &lt;a href="http://souriguha.wordpress.com/2011/03/08/how-to-solve-problem-with-thinkpadkslowd-kworker-on-linux-kernel-2-35-2-36/"&gt;post&lt;/a&gt; ex&lt;span style="font-family: inherit;"&gt;plai&lt;/span&gt;ns how to fix it&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$echo N &amp;gt;&amp;nbsp; /sys/module/drm_kms_helper/parameters/poll&lt;/div&gt;&lt;br /&gt;To keep this option after reboots, add that line in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/rc.local&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-8139424367055510871?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/8139424367055510871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=8139424367055510871' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8139424367055510871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/8139424367055510871'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/11/tricks-and-treats-kslowd00-and-grub2.html' title='tricks and treats: kslowd00* and grub2'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-1164435655657235541</id><published>2010-10-22T18:24:00.004+01:00</published><updated>2011-02-01T10:09:06.340Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='stats'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Best/worst practices to get positive reviews</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://stats.stackexchange.com/questions/3814/how-to-annoy-a-statistical-referee"&gt;How to annoy a statistical referee&lt;/a&gt; and &lt;a href="http://stats.stackexchange.com/questions/3460/reviewing-statistics-in-papers"&gt;Reviewing statistics in papers&lt;/a&gt; -- on StackExchange.&lt;/li&gt;&lt;li&gt;&lt;a href="http://robjhyndman.com/researchtips/how-to-avoid-annoying-a-referee"&gt;How to avoid annoying a referee&lt;/a&gt; (and links therein) -- a summary/reply of the the former.&lt;/li&gt;&lt;li&gt;&lt;a href="http://onlinelibrary.wiley.com/doi/10.1111/j.1464-5491.2004.01443.x/abstract"&gt;How to ensure your paper is rejected by a statistical reviewer&lt;/a&gt; --  I. M. Stratton, A. Neil, 2004. My favourite: "&lt;i&gt;Graphics should be produced using Excel, and remember to use 3-D block charts where bar charts would do&lt;/i&gt;".&lt;/li&gt;&lt;li&gt;&lt;a href="http://pubs.acs.org/doi/pdf/10.1021/ac2000169"&gt;Skillful writing of an awful research paper&lt;/a&gt;, Analytical Chemistry, editorial.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-1164435655657235541?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/1164435655657235541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=1164435655657235541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1164435655657235541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1164435655657235541'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/10/bestworst-practices-to-get-positive.html' title='Best/worst practices to get positive reviews'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-3269660309739755762</id><published>2010-10-22T00:32:00.002+01:00</published><updated>2010-11-30T11:15:32.580Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='plots'/><category scheme='http://www.blogger.com/atom/ns#' term='tikz'/><category scheme='http://www.blogger.com/atom/ns#' term='pstrick'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='metapost'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='tex'/><category scheme='http://www.blogger.com/atom/ns#' term='pgf'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Programming your plots</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There is of course my favourite, &lt;/span&gt;&lt;a href="http://www.r-project.org/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;R&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, but other interesting alternatives exists:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/pgf/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;TikZ and PGF&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; -- Graphic systems for TeX (see also &lt;/span&gt;&lt;a href="http://www.texample.net/tikz/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;texample&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; page). There is also an R&amp;nbsp;&lt;/span&gt;&lt;a href="http://cran.r-project.org/web/packages/tikzDevice/index.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;tikzDevice&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; package and an nice &lt;/span&gt;&lt;a href="http://www.hackenberger.at/blog/ktikz-editor-for-the-tikz-language"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;KtikZ&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; editor.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnuplot.info/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;gnuplot&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;--&amp;nbsp;a portable command-line driven graphing utility, supporting&amp;nbsp;many types of plots in either 2D and 3D (see demo &lt;/span&gt;&lt;a href="http://gnuplot.sourceforge.net/demo_4.2/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/pgfplots.html"&gt;pgfplots&lt;/a&gt; -- a TeX package, based on &lt;a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/pgf.html"&gt;PGF/TikZ&lt;/a&gt;, to invoke gnuplot inside LaTeX documents.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Graphs can also be programmed in LaTeX, for instance with &lt;/span&gt;&lt;a href="http://pstricks.tug.org/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;pstricks&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tug.org/metapost.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;MetaPost&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; --&amp;nbsp;a powerful tool for creating graphics in scalable PostScript.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://glx.sourceforge.net/"&gt;GLE&lt;/a&gt; -- a graphics scripting language designed for creating publication quality graphs, plots, diagrams, figures and slides (suggested by &lt;a href="https://rafguns.myopenid.com/"&gt;Raf&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;&lt;a href="http://matplotlib.sourceforge.net/"&gt;matplotlib&lt;/a&gt; -- a python 2D plotting library which produces publication quality figure (suggested by &lt;a href="https://rafguns.myopenid.com/"&gt;Raf&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;[More updates]&lt;/div&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://www.processing.org/"&gt;Processing&lt;/a&gt; language, described (among others) in the &lt;a href="http://oreilly.com/catalog/9780596514556/"&gt;Visualizing Data&lt;/a&gt; book by Ben Fry.&lt;/li&gt;&lt;li&gt;The &lt;a href="http://vis.stanford.edu/protovis/"&gt;Protovis&lt;/a&gt;&amp;nbsp;graphical&amp;nbsp;toolkit&amp;nbsp;from Stanford.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And probably more I am not aware of. As usual, this list will be updated when I find new interesting links.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-3269660309739755762?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/3269660309739755762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=3269660309739755762' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3269660309739755762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3269660309739755762'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/10/programming-your-plots.html' title='Programming your plots'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-1894367536421545993</id><published>2010-10-08T22:32:00.003+01:00</published><updated>2010-10-22T23:49:18.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Cerebral Mastication -- PCA vs OLS Visual Explination</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Very&lt;/span&gt; nice comparison at Cerebral Mastication worth referencing: &lt;a href="http://www.cerebralmastication.com/2010/09/principal-component-analysis-pca-vs-ordinary-least-squares-ols-a-visual-explination/"&gt;Principal Component Analysis (PCA) vs Ordinary Least Squares (OLS): A Visual Explanation&lt;/a&gt;.&lt;br /&gt;And a similar visual demonstration here &lt;a href="http://zoonek2.free.fr/UNIX/48_R/09.html#7"&gt;Regression asymetry and PCA (Principal Component Analysis)&lt;/a&gt; by Vincent Zoonekynd, whose site is a very precious reference, by the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-1894367536421545993?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/1894367536421545993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=1894367536421545993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1894367536421545993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1894367536421545993'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/10/cerebral-mastication-blog-archive.html' title='Cerebral Mastication -- PCA vs OLS Visual Explination'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-6270950349140251013</id><published>2010-10-07T23:02:00.001+01:00</published><updated>2010-10-07T23:04:57.507+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU'/><category scheme='http://www.blogger.com/atom/ns#' term='FOSS'/><title type='text'>Revolution OS Video</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Revolution_OS"&gt;Revolution OS&lt;/a&gt; is a 2001 documentary which traces the history of GNU, Linux, and the open source and free software movements.&lt;br /&gt;&lt;br /&gt;&lt;embed id=VideoPlayback src=http://video.google.com/googleplayer.swf?docid=7707585592627775409&amp;hl=en&amp;fs=true style=width:400px;height:326px allowFullScreen=true allowScriptAccess=always type=application/x-shockwave-flash&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-6270950349140251013?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/6270950349140251013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=6270950349140251013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6270950349140251013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6270950349140251013'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/10/revolution-os-video.html' title='Revolution OS Video'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-29710596126918023</id><published>2010-10-07T11:20:00.001+01:00</published><updated>2010-10-07T11:21:21.644+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='biology'/><title type='text'>Prokaryotic organelles</title><content type='html'>In his &lt;a href="http://genomebiology.com/2010/11/9/136/abstract"&gt;Shadows on the wall&lt;/a&gt; comment, Gregory A Petsko pointed out the notion that prokaryotic cells are much less organized than eukaryotic cells as one of several paradigms that need to be challenged. This is indeed not the common view, at least as advertised in most (all?) text books. I was reminded of this &lt;b&gt;highly accessed&lt;/b&gt; comment while reading &lt;a href="http://www.nature.com/nchembio/journal/v5/n8/full/nchembio.186.html"&gt;Absolute metabolite concentrations and implied enzyme active site occupancy in &lt;i&gt;Escherichia coli&lt;/i&gt;&lt;/a&gt; by Bennett &lt;i&gt;et al.&lt;/i&gt;, in particular this sentence:&lt;br /&gt;&lt;blockquote&gt;Prokaryotic cells are particularly well suited to global thermodynamic analysis and to assessment of enzyme site saturation, because interpretation of absolute metabolite concentration data from eukaryotic cells is complicated by their extensive compartmentalization. In particular, in eukaryotic cells, flux directions and extent of enzyme saturation may vary between compartments.&lt;/blockquote&gt;I thought I might do some further digging about prokaryotic organelles and post it here as a quick reference. Some interesting papers I came across:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sciencemag.org/cgi/content/full/309/5736/936"&gt;Protein Structures Forming the Shell of Primitive Bacterial Organelles&lt;/a&gt; by Kerfeld &lt;i&gt;et al.&lt;/i&gt;, Science (2005).&lt;/li&gt;&lt;li&gt;&lt;a href="http://cshperspectives.cshlp.org/content/2/10/a000422.abstract"&gt;Cell Biology of Prokaryotic Organelles&lt;/a&gt; by Murat &lt;i&gt;et al.&lt;/i&gt;, Cold Spring Harb Perspect Biol (2010).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-29710596126918023?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/29710596126918023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=29710596126918023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/29710596126918023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/29710596126918023'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/10/prokaryotic-organelles.html' title='Prokaryotic organelles'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-6593805723867973721</id><published>2010-09-17T15:21:00.000+01:00</published><updated>2010-09-17T15:21:00.997+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ess'/><category scheme='http://www.blogger.com/atom/ns#' term='roxygen'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Getting the most out of ess</title><content type='html'>Emacs Speaks Statistics (&lt;a href="http://ess.r-project.org/"&gt;ESS&lt;/a&gt;) is an add-on package for emacs. It is extremely helpful for using &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt; within emacs. I tended to install it with &lt;code&gt;sudo apt-get install ess&lt;/code&gt; on my ubuntu 10.04 box, but I realised that the version is lacking quite behind. The feature that I was missing in the ess version 5.7.1-1 is &lt;code&gt;ess-roxy.el&lt;/code&gt;, introduced in version 5.8. More on that to follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-6593805723867973721?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/6593805723867973721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=6593805723867973721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6593805723867973721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6593805723867973721'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/09/getting-most-out-of-ess.html' title='Getting the most out of ess'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-1719736910882803468</id><published>2010-09-15T19:49:00.003+01:00</published><updated>2010-09-16T11:59:41.573+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='elisp'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='folding'/><title type='text'>Code folding in emacs</title><content type='html'>Code folding is very handy and readily available in &lt;a href="http://www.gnu.org/software/emacs/"&gt;emacs&lt;/a&gt;. The &lt;a href="http://www.emacswiki.org/emacs/HideShow"&gt;HideShow&lt;/a&gt; &lt;a href="http://www.gnu.org/software/emacs/manual/html_node/emacs/Minor-Modes.html"&gt;minor mode&lt;/a&gt;&amp;nbsp;is include in the since version 20. Either invoke it with &lt;code&gt;M-x hs-minor-mode&lt;/code&gt; or add &lt;code&gt;(load-library "hideshow")&lt;/code&gt; in your &lt;code&gt;~/.emacs&lt;/code&gt; file.&lt;br /&gt;&lt;br /&gt;To further add markers on foldable regions, it is possible to install &lt;code&gt;&lt;a href="http://www.emacswiki.org/emacs/hideshowvis.el"&gt;hideshowvis.el&lt;/a&gt;.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And to find out how to install an &lt;code&gt;.el&lt;/code&gt; file, and even automate its installation, read this &lt;a href="http://edward.oconnor.cx/2005/09/installing-elisp-files"&gt;great post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-1719736910882803468?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/1719736910882803468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=1719736910882803468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1719736910882803468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1719736910882803468'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/09/code-folding-in-emacs.html' title='Code folding in emacs'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-3245869604304265244</id><published>2010-09-13T09:27:00.006+01:00</published><updated>2010-09-15T19:49:01.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>From R patches to R future</title><content type='html'>Radford Neal&amp;nbsp;has posted his &lt;a href="http://radfordneal.wordpress.com/2010/08/15/two-surpising-things-about-r/"&gt;surprising&lt;/a&gt; &lt;a href="http://radfordneal.wordpress.com/2010/08/19/speeding-up-parentheses-and-lots-more-in-r/"&gt;findings&lt;/a&gt; about speed issues in R and ended up sending out &amp;nbsp;&lt;s&gt;14&lt;/s&gt;&amp;nbsp;&lt;a href="http://radfordneal.wordpress.com/2010/09/03/fourteen-patches-to-speed-up-r/"&gt;15 patches&lt;/a&gt; for R (&lt;a href="https://stat.ethz.ch/pipermail/r-devel/2010-September/058389.html"&gt;here&lt;/a&gt;, &lt;a href="https://stat.ethz.ch/pipermail/r-devel/2010-September/058384.html"&gt;here&lt;/a&gt; and &lt;a href="https://stat.ethz.ch/pipermail/r-devel/2010-September/058417.html"&gt;here&lt;/a&gt; on R-devel). Xi'an re-posted the &lt;a href="http://xianblog.wordpress.com/2010/09/06/insane/"&gt;parenthesis vs curly brackets effect on speed&lt;/a&gt;&amp;nbsp;thing, that triggered quite a few comments about R's speed issues and how to improve it.&amp;nbsp;&lt;a href="http://www.stat.auckland.ac.nz/~ihaka/"&gt;Ross Ihaka&lt;/a&gt;, co-founder of R, stepped in and gave his views on the future of R, or rather what a &lt;b&gt;new&lt;/b&gt; R should be. &lt;a href="http://twitter.com/johnmyleswhite/status/24289801207"&gt;Fascinating and&amp;nbsp;disconcerting&lt;/a&gt;&amp;nbsp;indeed. User comments have been posted as guest posts (&lt;a href="http://xianblog.wordpress.com/2010/09/08/julien-on-r-shortcomings/"&gt;here&lt;/a&gt; for &lt;a href="http://www.cs.ubc.ca/~cornebis/"&gt;Julien Cornebise&lt;/a&gt;'s &amp;nbsp;comment and &lt;a href="http://xianblog.wordpress.com/2010/09/13/simply-start-over-and-build-something-better/"&gt;here&lt;/a&gt; for Ross Ihaka's one), that have their own comments.&lt;br /&gt;&lt;br /&gt;Updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.stat.columbia.edu/~gelman"&gt;Andrew Gelman&lt;/a&gt;&amp;nbsp;has also &lt;a href="http://www.stat.columbia.edu/~cook/movabletype/archives/2010/09/ross_ihaka_to_r.html"&gt;posted &lt;/a&gt;Ross Ihaka and triggered several interesting comments.&lt;/li&gt;&lt;li&gt;&lt;a href="http://news.ycombinator.com/item?id=1687054"&gt;The future of R - pessimistic thoughts by R founder Ross Ihaka&lt;/a&gt;&amp;nbsp;on Hacker news.&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/3706990/is-r-that-bad-that-it-should-be-rewritten-from-scratch"&gt;Is R “that bad” that it should be rewritten from scratch?&lt;/a&gt;, asked on Stackoverflow, with more links to reposts and comments.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-3245869604304265244?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/3245869604304265244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=3245869604304265244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3245869604304265244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3245869604304265244'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/09/from-r-patches-to-r-future.html' title='From R patches to R future'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-7521926440474965839</id><published>2010-03-30T11:31:00.002+01:00</published><updated>2010-09-15T19:52:34.965+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='custom-bib'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='bibtex'/><title type='text'>The right BibTeX style</title><content type='html'>Reference management with BibTeX and LaTeX is a really nice way to go (see for instance this &lt;a href="http://foofish.blogspot.com/2010/01/references-and-labels-with-reftex.html"&gt;previous post&lt;/a&gt;). Unfortunately, some journals do not provide BibTeX&amp;nbsp;style&amp;nbsp;(or LaTeX templates). The&amp;nbsp;&lt;a href="http://bst.maururu.net/"&gt;LaTeX Bibliography Styles Database&lt;/a&gt;&amp;nbsp;provides many (2300 at the time of writing) BibTex styles to fit with the journal requirements. If the journal is not &amp;nbsp;listed in the database, it is still possible, and surprisingly easy, to create one that matches by using Patrick W. Daly's excellent &lt;a href="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=custom-bib"&gt;custom-bib&lt;/a&gt; package. The &lt;a href="http://tug.ctan.org/tex-archive/macros/latex/contrib/custom-bib/README"&gt;Readme&lt;/a&gt;&amp;nbsp;clearly describes how to proceed and no expert TeX knowledge is required. The most difficult part is actually to find the journal's&amp;nbsp;exact reference style&amp;nbsp;requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-7521926440474965839?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/7521926440474965839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=7521926440474965839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7521926440474965839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7521926440474965839'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/03/right-bibtex-style.html' title='The right BibTeX style'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-1888642845997986137</id><published>2010-03-26T20:04:00.001Z</published><updated>2010-09-15T19:53:18.061+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R (and S) names</title><content type='html'>&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Verdana, sans-serif; font-size: 13px; line-height: 20px;"&gt;This is a short summary of a&amp;nbsp;&lt;a href="http://n4.nabble.com/R-S-S-Plus-whence-comes-thy-name-tt1692090.html" rel="nofollow" style="color: #0033cc; text-decoration: underline;" target="_blank"&gt;thread&lt;/a&gt;&amp;nbsp;of the&amp;nbsp;&lt;a href="http://www.r-project.org/" rel="nofollow" style="color: #0033cc; text-decoration: underline;" target="_blank"&gt;R&lt;/a&gt;&amp;nbsp;mailing list. I found it interesting and thought that it might be helpful to keep track of it &lt;a href="https://sites.google.com/site/laurentgatto/r-bioconductor/tips-n-tricks/randsnames"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-1888642845997986137?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/1888642845997986137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=1888642845997986137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1888642845997986137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/1888642845997986137'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/03/r-and-s-names.html' title='R (and S) names'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-6561705146914271742</id><published>2010-02-23T22:06:00.001Z</published><updated>2010-09-15T19:53:45.375+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Cambridge'/><title type='text'>Alkis-Seraphim Lecture 2010</title><content type='html'>Today was the &lt;a href="http://www.bioc.cam.ac.uk/seminars/alkisseraphim.html"&gt;Alkis-Seraphim Lecture&lt;/a&gt;, at the Department of Biochemistry. The &lt;a href="http://talks.cam.ac.uk/talk/index/23325"&gt;lecture&lt;/a&gt;, entitled  'Deconstructing Cancer' was given by Prof. Gerard Evan and was literally enlightening. Cancer was put in it evolutionary context to highlight it's relative rareness at the level of the number of cell divisions that occur in a human life. The lecture was build upon the central role of &lt;a href="http://en.wikipedia.org/wiki/Myc"&gt;Myc&lt;/a&gt;, playing on one side a role in cell proliferation in mitogenesis and on the other side inducing senescence or apoptosis in case of mutation and cancer. Prof. Evans elaborated on the &lt;a href="http://www.nature.com/nature/journal/v455/n7213/abs/nature07260.html"&gt;modelling of Myc inhibition as a cancer therapy&lt;/a&gt;. Among the many impressing results that were presented, one was particularly striking in the current area of &lt;a href="http://en.wikipedia.org/wiki/Personalized_medicine"&gt;personalised medicine&lt;/a&gt;: it was the possibility to develop &lt;i&gt;broad spectrum&lt;/i&gt; cancer treatment, applicable to different types of cancer, different patients, that would act on the cancer itself and it's direct micro-environment. It was definitely a great lecture!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-6561705146914271742?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/6561705146914271742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=6561705146914271742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6561705146914271742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/6561705146914271742'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/02/alkis-seraphim-lecture-2010.html' title='Alkis-Seraphim Lecture 2010'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-731587713662665795</id><published>2010-01-25T16:52:00.003Z</published><updated>2010-09-15T19:54:26.328+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='org-mode'/><category scheme='http://www.blogger.com/atom/ns#' term='reftex'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>References and labels with RefTex</title><content type='html'>&lt;a href="http://www.gnu.org/software/auctex/reftex.html"&gt;RefTex&lt;/a&gt; is a &lt;i&gt;specialized package for support of labels, references, citations, and the indices in LaTeX&lt;/i&gt; inside emacs. It can be used to add the usual LaTeX tags inside any type of document, including of course tex files and also &lt;a href="http://orgmode.org/"&gt;org-mode&lt;/a&gt; files (that can later be &lt;a href="http://orgmode.org/manual/LaTeX_002fPDF-export-commands.html#LaTeX_002fPDF-export-commands"&gt;exported to tex&lt;/a&gt; documents). &lt;br /&gt;&lt;br /&gt;A minimal set up would be to (1) open a document with emacs (2) get into reftex mode with &lt;code&gt;M-x reftex-mode&lt;/code&gt;, (3) define your reference file &lt;code&gt;\bibliography{mybib}&lt;/code&gt; and (4) add a citation with &lt;code&gt;C-c [&lt;/code&gt;. This last command prompts for a regular expression which will be used to search through your bib file. &lt;br /&gt;&lt;br /&gt;By getting my grips with RefTex, I also learned about the &lt;code&gt;BIBINPUTS&lt;/code&gt;, &lt;code&gt;TEXBIB&lt;/code&gt; and &lt;code&gt;TEXINPUTS&lt;/code&gt; environmental variables. RefTex should know about them (if not, see &lt;a href="http://www.xemacs.org/Documentation/packages/html/reftex_6.html#SEC72"&gt;here&lt;/a&gt;), so that you do not need to give the full path of your bib reference as long as it is in your &lt;code&gt;BIBINPUTS&lt;/code&gt;/&lt;code&gt;TEXBIB&lt;/code&gt; path.&lt;br /&gt;&lt;br /&gt;More details of course in the respective manuals.&lt;br /&gt;&lt;br /&gt;Two posts that have been informative: &lt;a href="http://www.mfasold.net/blog/2009/02/using-emacs-org-mode-to-draft-papers/"&gt;Using Emacs Org-mode to Draft Papers&lt;/a&gt; by Marios Braindump and &lt;a href="http://article.gmane.org/gmane.emacs.orgmode/2406/match=bibliography"&gt;dealing with a bibliography&lt;/a&gt; by François Lagarde on the eamcs-orgmode mailing list.&lt;br /&gt;&lt;br /&gt;To automate the reftex-mode for latex and org files, add &lt;br /&gt;&lt;code&gt;(add-hook 'latex-mode-hook 'turn-on-reftex)&lt;br /&gt;(add-hook 'org-mode-hook 'turn-on-reftex)&lt;/code&gt;&lt;br /&gt;in your &lt;code&gt;.emacs&lt;/code&gt; file. &lt;br /&gt;&lt;br /&gt;A last issue pointed out on Joseph's Hall &lt;a href="http://josephhall.org/nqb2/index.php/2009/04/11/reftex-1"&gt;post&lt;/a&gt; about RefTex is that updates of the bib file are not taken into account while editing a document unless &lt;code&gt;(global-auto-revert-mode t)&lt;/code&gt; is set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-731587713662665795?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/731587713662665795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=731587713662665795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/731587713662665795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/731587713662665795'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2010/01/references-and-labels-with-reftex.html' title='References and labels with RefTex'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-245216413864936545</id><published>2009-11-26T18:06:00.003Z</published><updated>2009-12-14T13:51:57.991Z</updated><title type='text'>The Scientist - Right your Writing</title><content type='html'>A November 2009 article of &lt;a href="http://www.the-scientist.com/"&gt;The Scientist&lt;/a&gt; about '&lt;a href="http://www.the-scientist.com/2009/11/1/65/1/"&gt;how to sharpen your writing and make your manuscripts more engaging&lt;/a&gt;' caught my attention, and more specifically two advices: &lt;span style="font-weight: bold;"&gt;Start at the end&lt;/span&gt; and&lt;span style="font-weight: bold;"&gt; Write daily for 15 to 30 minutes&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;[14 Dec. 2009] Similar advices on writing in &lt;a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2242824/"&gt;&lt;b&gt;On the Process of Becoming a Great Scientist&lt;/b&gt;&lt;/a&gt; published in PLoS Computation Biology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-245216413864936545?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/245216413864936545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=245216413864936545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/245216413864936545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/245216413864936545'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2009/11/scientist-right-your-writing.html' title='The Scientist - Right your Writing'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-3998281438211216156</id><published>2008-11-25T09:54:00.002Z</published><updated>2008-11-25T09:59:56.006Z</updated><title type='text'>VMware keyboard troubles</title><content type='html'>Recently, some keys stopped to work in the VMware virtual OSes using VMware Infrastructure Web Access, version 2.0.0. Here is a easy fix:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo 'xkeymap.nokeycodeMap = true' &gt;&gt; /etc/vmware/config&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://forum.ubuntu-fr.org/viewtopic.php?id=264858&amp;p=2"&gt;http://forum.ubuntu-fr.org/viewtopic.php?id=264858&amp;p=2&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://communities.vmware.com/thread/177688?tstart=15"&gt;http://communities.vmware.com/thread/177688?tstart=15&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-3998281438211216156?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/3998281438211216156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=3998281438211216156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3998281438211216156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/3998281438211216156'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2008/11/vmware-keyboard-troubles.html' title='VMware keyboard troubles'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-389976831677519937</id><published>2008-05-27T12:17:00.011+01:00</published><updated>2008-05-27T16:32:44.390+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lax'/><category scheme='http://www.blogger.com/atom/ns#' term='Agilent'/><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><category scheme='http://www.blogger.com/atom/ns#' term='CGH'/><category scheme='http://www.blogger.com/atom/ns#' term='microarray'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Agilent's CGH Analytics on Linux</title><content type='html'>&lt;p&gt;&lt;a href="http://www.agilent.com"&gt;Agilent&lt;/a&gt;’s &lt;a href="http://www.opengenomics.com/CGHAnalytics.aspx?site=P4P"&gt;CGH analytics software&lt;/a&gt; offers a set of analytical tools for assessing and visualizing chromosomal variations results performed on their CGH arrays. The software and a 30 day trial license can be downloaded &lt;a href="http://www.chem.agilent.com/scripts/generic.asp?lpage=55694"&gt;here&lt;/a&gt;. The official OS requirements are Windows 2000/XP (it does not run out of the box on Vista), Max OS X (10.4.X or later, not tested) and Redhat Linux version 9.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I have never used and thus not followed the Redhat/Fedora evolution, but I think that Redhat Linux version 9 should be Fedora version 9. Anyway, CGH Analytics 3.5.14 installed and started without any glitch on Fedora 9 (running on &lt;a href="http://www.vmware.com/products/player/"&gt;VMWare player&lt;/a&gt;). It did not install on Kubuntu 7.10 outputting this message:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$ sh CGHAnalyticsInstaller.bin&lt;br /&gt;Preparing to install...&lt;br /&gt;Extracting the JRE from the installer archive...&lt;br /&gt;Unpacking the JRE...&lt;br /&gt;Extracting the installation resources from the installer archive...&lt;br /&gt;Configuring the installer for this system's environment...&lt;br /&gt;nawk: error while loading shared libraries: libm.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;dirname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;/bin/ls: error while loading shared libraries: librt.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;basename: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;dirname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;basename: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;hostname: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;&lt;br /&gt;Launching installer...&lt;br /&gt;&lt;br /&gt;grep: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory&lt;br /&gt;/tmp/install.dir.15186/Linux/resource/jre/bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that the cited libraries are properly installed at the same location on both linux systems.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The difference between the two systems is that on Fedora, &lt;code&gt;binutils&lt;/code&gt; is not installed, whereas it is on Kubuntu. In the ZeroG installation file, there is a &lt;code&gt;if&lt;/code&gt; statement that does some checking using &lt;code&gt;strings&lt;/code&gt; (installed with &lt;code&gt;binutils&lt;/code&gt;): &lt;br /&gt;&lt;code&gt;nptl="`strings /lib/libc.so.6 | grep -i nptl`"&lt;br /&gt;        if [ "$nptl" ]; then&lt;br /&gt;...&lt;/code&gt;&lt;br /&gt;More specifically, the line that creates the problem is &lt;code&gt;export LD_ASSUME_KERNEL=2.2.5&lt;/code&gt; (line 2098 in my case). This line should be modified using an editor in &lt;i&gt;binary mode&lt;/i&gt; (using &lt;code&gt;vim -b&lt;/code&gt; for example). Since the size of the installation script will be checked during installation, replace the 'e' with the '#' in the export statement. The installation should work fine now.&lt;/p&gt;&lt;p&gt;Among the set of files created during the installation, there is the ZeroG launcher script called &lt;code&gt;CGH_Analytics_3.5.14&lt;/code&gt;, that will suffer from the same problem than the installer file. Nevertheless, this time it won't work to comment the &lt;code&gt;export LD_ASSUME_KERNEL=2.2.5&lt;/code&gt; line. To get around this, I avoid to run the code in the if statement by modifying the condition (I changed the &lt;code&gt;nptl=...&lt;/code&gt; line to &lt;code&gt;nptl="`strings /lib/libc.so.6 | grep -i _nptl`"&lt;/code&gt;).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In brief, the installation does work on a fresh Fedora because &lt;code&gt;strings&lt;/code&gt; is not installed by default. To bypass the ZeroG lax installer problematic checks, (i) modify the installer shell script, (ii) install and (iii) modify the launcher script. This should allow to use Agilent's CGH Analytics application on Linux boxes where the default installation does not work.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-389976831677519937?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/389976831677519937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=389976831677519937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/389976831677519937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/389976831677519937'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2008/05/agilents-cgh-analystics-on-linux.html' title='Agilent&apos;s CGH Analytics on Linux'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-7982912022290881450</id><published>2007-10-14T11:13:00.009+01:00</published><updated>2011-01-30T16:21:56.714Z</updated><title type='text'>Short survey on Venn diagrams and plotting utilities</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Venn_diagram"&gt;Venn diagrams&lt;/a&gt; are useful ways of plotting how many common or unique items two or more sets have. &lt;a href="http://www.combinatorics.org/Surveys/ds5/VennEJC.html"&gt;Here&lt;/a&gt; is a nice place to read about &lt;i&gt; various facts and figures about Venn diagrams, particularly as they relate to combinatorial and geometric properties of the diagrams&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;One of the strong points of Venn diagrams for two or three sets is their simplicity and clarity. They are very intuitive and easy to interpret. They can be drawn by plotting two (or three) overlapping circle (see below). When you want to compare more than three sets, it is not possible to use circles anymore. The sets have to be represented by elipses or squares (or a combination of different shapes, see below), and the graphs become much more difficult to interpret.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_U_VO6np0UkI/RxH3VMLzugI/AAAAAAAAAAU/7t2NIATOp-Q/s1600-h/vennDiagram.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121146194717030914" src="http://3.bp.blogspot.com/_U_VO6np0UkI/RxH3VMLzugI/AAAAAAAAAAU/7t2NIATOp-Q/s320/vennDiagram.png" style="cursor: pointer; margin: 5px;" /&gt;&lt;/a&gt;&lt;br /&gt;I use them mainly to illustrate the differences in gene expression between a set of conditions. One of the packages that I use for the analyses of such (microarray) data is &lt;a href="http://bioinf.wehi.edu.au/limma/"&gt;limma&lt;/a&gt;, which also has capabilities for plotting Venn diagrams, as shown on the right. &lt;a href="http://faculty.ucr.edu/~tgirke/Documents/R_BioCond/My_R_Scripts/vennDia.R"&gt;Here&lt;/a&gt; is a handy fonction by Thomas Girke, that can also be used to plot Venn diagrams using your own lists as input.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_U_VO6np0UkI/RxH-jcLzuhI/AAAAAAAAAAc/EtHqct5cVKg/s1600-h/venn4elipses.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121154136111561234" src="http://4.bp.blogspot.com/_U_VO6np0UkI/RxH-jcLzuhI/AAAAAAAAAAc/EtHqct5cVKg/s320/venn4elipses.png" style="cursor: pointer; margin: 5px;" /&gt;&lt;/a&gt;&lt;br /&gt;As can be seen, three set Venn diagrams are easy to read and interpret. There are 7 distinct areas corresponding respectively to 3 areas with the elements unique to the input sets, 3 areas with elements that are shared between two input sets and 1 area with the elements that are common to the three input sets. When we have 4 input sets, there are in total 15 intersection: C(4,1)=4 unique items in each input set + C(4,2)=6 shared between two input sets + C(4,3)=4 areas common to 3 input sets + C(4,4)=1 with the items found in all the input sets. To represent this, it is necessary to use elipses, squares or a combination of different shapes (images from wikipedia and web tools, see below).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_U_VO6np0UkI/RxH-rcLzuiI/AAAAAAAAAAk/ZFm8lK5ID2U/s1600-h/venn4squares.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121154273550514722" src="http://4.bp.blogspot.com/_U_VO6np0UkI/RxH-rcLzuiI/AAAAAAAAAAk/ZFm8lK5ID2U/s320/venn4squares.gif" style="cursor: pointer; margin: 5px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_U_VO6np0UkI/RxIAwcLzukI/AAAAAAAAAA0/hmoeq4mgbRs/s1600-h/Edwards-Venn-four.svg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121156558473116226" src="http://1.bp.blogspot.com/_U_VO6np0UkI/RxIAwcLzukI/AAAAAAAAAA0/hmoeq4mgbRs/s320/Edwards-Venn-four.svg.png" style="cursor: pointer; display: block; margin: 5px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_U_VO6np0UkI/RxID0cLzunI/AAAAAAAAABM/4rmJKs_NezA/s1600-h/venn5elipses.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121159925727476338" src="http://1.bp.blogspot.com/_U_VO6np0UkI/RxID0cLzunI/AAAAAAAAABM/4rmJKs_NezA/s320/venn5elipses.png" style="cursor: pointer; margin: 5px;" /&gt;&lt;/a&gt;&lt;br /&gt;In case of five sets, we get a total of 51 different areas! I have not come across another way of representing this, except with five different shapes (images from wikipedia and from Liqun He, Karolinska Institute, Stockholm). But it really gets difficult to identify the different intersections...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_U_VO6np0UkI/RxIBe8LzumI/AAAAAAAAABE/QYtLCYhgU7w/s1600-h/Edwards-Venn-five.svg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5121157357337033314" src="http://3.bp.blogspot.com/_U_VO6np0UkI/RxIBe8LzumI/AAAAAAAAABE/QYtLCYhgU7w/s320/Edwards-Venn-five.svg.png" style="cursor: pointer; display: block; margin: 5px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are not that many tools that allow to generate Venn diagrams for more than 3 input sets. I came across three of them, also discussed in this &lt;a href="http://www.bioconductor.org/"&gt;Bioconductor&lt;/a&gt; &lt;a href="https://stat.ethz.ch/pipermail/bioconductor/2007-October/thread.html#19482"&gt;thread&lt;/a&gt;. These nice R &lt;a href="http://bioinfo-mite.crb.wsu.edu/Rcode/Venn.R"&gt;functions&lt;/a&gt; by Matt Settles can be used to generate nice Venn diagrams for 4 sets (similar to the 4 elipses above):&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;A &amp;lt;- round(rnorm(100),1)&lt;/span&gt;&lt;br /&gt;&lt;code&gt; B &amp;lt;- round(rnorm(100),1)&lt;br /&gt;C &amp;lt;- round(rnorm(100),1)&lt;br /&gt;D &amp;lt;- round(rnorm(100),1)&lt;br /&gt;M &amp;lt;- matrix(c(A,B,C,D),100,4)&lt;br /&gt;res &amp;lt;- vennCounts(M)&lt;br /&gt;vennDiagram(res) &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bioinfogp.cnb.csic.es/tools/venny/index.html"&gt;Venny&lt;/a&gt; by Oliveros, J.C. (2007) and this &lt;a href="http://www.pangloss.com/seidel/Protocols/venn4.cgi"&gt;4-way Venn Diagram Generator&lt;/a&gt; by Chris Seidel have been used to generate some of the figures above.&lt;br /&gt;&lt;br /&gt;[July 2010] &lt;b&gt;Update:&lt;/b&gt; I just discovered &lt;a href="https://r-forge.r-project.org/projects/vennerable/"&gt;Vennerable&lt;/a&gt;, which &lt;b&gt;IS&lt;/b&gt; really great!&lt;br /&gt;[January 2011] &lt;b&gt;Update:&lt;/b&gt; &lt;i&gt;VennDiagram: a package for the generation of highly-customizable Venn and Euler diagrams in R&lt;/i&gt; has just been &lt;a href="http://www.biomedcentral.com/1471-2105/12/35"&gt;published&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-7982912022290881450?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/7982912022290881450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=7982912022290881450' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7982912022290881450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/7982912022290881450'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/10/short-survey-on-venn-diagrams-and.html' title='Short survey on Venn diagrams and plotting utilities'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_U_VO6np0UkI/RxH3VMLzugI/AAAAAAAAAAU/7t2NIATOp-Q/s72-c/vennDiagram.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-5227626831902124466</id><published>2007-09-14T09:53:00.000+01:00</published><updated>2007-10-15T20:28:13.655+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cheat sheet'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='content management'/><title type='text'>subversion cheat sheet</title><content type='html'>In the series of the cheat sheets for the lazy ones, that don't want to rtfm, here a quick and dirty svn howto.&lt;br /&gt;&lt;br /&gt;Let's say that the file that we want to put in that repositary are in &lt;code&gt;/home/joe/myCode&lt;/code&gt; and that the svn repositary will be located in &lt;code&gt;/home/joe/svn/myProject&lt;/code&gt;. To create a repository on a server, type:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$ svnadmin create /home/joe/svn/myProject&lt;br /&gt;$ svn import /home/joe/myCode file:///home/joe/svn/myProject -m "Importing myCode into myProject"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On the same computer, you can create a working copy, and commit the changes back like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$ svn co file:///home/joe/svn/myProject&lt;br /&gt;$ cd myProject&lt;br /&gt;## now to modify file foo, delete file fish and add file bar&lt;br /&gt;$ svn add bar&lt;br /&gt;$ svn delete fish&lt;br /&gt;$ svn commit bar foo fish&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On another computer (&lt;code&gt;mySvnServer&lt;/code&gt; for example), it is really easy to use ssh tunneling (if there is an ssh deamon running on the server) and to proceed as shown above. Just use the following command to check out:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$ svn co svn+ssh://mySvnServer/home/joe/svn/myProject&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Unless you use ssh keys for automatic login, this configuration will need to provide your password. &lt;br /&gt;&lt;br /&gt;More details can be found by &lt;a href="http://svnbook.red-bean.com/"&gt;RingTFM&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-5227626831902124466?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/5227626831902124466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=5227626831902124466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/5227626831902124466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/5227626831902124466'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/09/subversion-cheat-sheet.html' title='subversion cheat sheet'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-4938863395801869459</id><published>2007-08-07T22:05:00.013+01:00</published><updated>2011-10-22T22:12:25.908+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cheat sheet'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='administration'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R installation cheat sheet</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Instead of looking for this information again and again, I thought I would rather post this small summary of my custom &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt; installation, including required packages for the (k)ubuntu distribution.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This should do it to meet the requirements for jpeg, png, lapack and blas support as well as the compiling of R itself and the dvi/pdf/info docs:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;code&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install build-essential gfortran f2c libpng12-dev libjpeg62-dev liblapack-dev libblas-dev libatlas-base-dev&amp;nbsp;libreadline6-dev libx11-dev texinfo texlive texlive-latex-extra  tcl8.5-dev tk8.5-dev libcairo2-dev libxt-dev libxt6 ttf-inconsolata&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;(Note that some of the above packages are not always required.)&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;Update [12 Aug 2008]: &lt;/b&gt;changed &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcl&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tk&lt;/span&gt; package versions from 8.4 to 8.5&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;Update [3 Oct 2008]: &lt;/b&gt;for the latest R-devel on ubuntu, I had to install &lt;code style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;libxt-dev libxt6&lt;/code&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;Update [14 Jan 2010]:&lt;/b&gt; updated to&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &lt;/span&gt;&lt;code style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;libblas-dev&lt;/code&gt; and &lt;code style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;liblapack-dev&lt;/code&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;Update [05 Jun 2010]:&lt;/b&gt; updated to &lt;code style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;libreadline6-dev&lt;/code&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;code style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;Update [22 Oct 2011]:&lt;/b&gt; added &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ttf-&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;inconsolata&lt;/span&gt; (see &lt;/span&gt;&lt;a href="http://developer.r-project.org/blosxom.cgi/R-devel/2011/10/04#n2011-10-04" style="font-family: Arial,Helvetica,sans-serif;"&gt;R-devel news - Tue, 04 Oct 2011&lt;/a&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;Once the sources are downloaded and uncompressed, the building can be done with:&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;./configure --with-jpeglib --with-libpng --with-lapack --with-blas --with-tcltk --with-recommended-packages --enable-R-profiling --enable-memory-profiling --with-cairo&amp;nbsp; --enable-R-shlib&amp;nbsp; --enable-R-static-lib&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; make&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;make check-devel&lt;br /&gt;make dvi pdf info&lt;br /&gt;sudo make install&lt;br /&gt;sudo make install-dvi install-pdf install-info&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;More details can be found with &lt;code style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;./configure --help&lt;/code&gt; and the &lt;a href="http://cran.us.r-project.org/doc/manuals/R-admin.html"&gt;R Installation and Administration&lt;/a&gt; manual.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-4938863395801869459?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/4938863395801869459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=4938863395801869459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4938863395801869459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4938863395801869459'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/08/r-installation-cheat-sheat.html' title='R installation cheat sheet'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-2911949502090809455</id><published>2007-08-07T19:15:00.000+01:00</published><updated>2007-10-15T20:33:27.129+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='hp 6710b'/><category scheme='http://www.blogger.com/atom/ns#' term='hp'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='administration'/><title type='text'>Installing kubuntu on an hp 6710b notebook</title><content type='html'>There have been several posts on users blogs and on the ubuntu forum about various issues with this labtop. The main problem seems to be the Mobile™ Intel® 965GM Express Chipset. The main references that have been useful to complete the installation are &lt;a href="http://blaise.ca/blog/?p=14"&gt;http://blaise.ca/blog/?p=14&lt;/a&gt; and &lt;a href="http://mytwu.blogspot.com/2007/07/how-i-installed-ubuntu-feisty-fawn-on.html"&gt;http://mytwu.blogspot.com/&lt;/a&gt; and references therein. In my case, the first link did the trick.&lt;br /&gt;In brief:&lt;br /&gt;- Install (k)ubuntu using the alternate cdrom&lt;br /&gt;- Update the linux kernel to version: &lt;br /&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install linux-image-2.6.20-16-generic&lt;/code&gt;&lt;br /&gt;- Reboot &lt;br /&gt;- Install the intel driver:&lt;br /&gt;&lt;code&gt;sudo apt-get install xserver-xorg-video-intel&lt;/code&gt;&lt;br /&gt;- Reconfigure xorg and take care to select 'intel' as driver:&lt;br /&gt;&lt;code&gt;sudo dpkg-reconfigure xserver-xorg&lt;/code&gt;&lt;br /&gt;- Add &lt;code&gt;piix&lt;/code&gt; to &lt;code&gt;/etc/modules&lt;/code&gt;&lt;br /&gt;- Reboot and enjoy.&lt;br /&gt;I expect further issues (wireless?), but the graphics work great now.&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: no problems with wireless :-). The only thing that I have not get working (but I have just quickly gave a try) is dual monitor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-2911949502090809455?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/2911949502090809455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=2911949502090809455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2911949502090809455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/2911949502090809455'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/08/installing-kubuntu-on-hp-6710b-notebook.html' title='Installing kubuntu on an hp 6710b notebook'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-4037575874035313874</id><published>2007-06-24T13:54:00.000+01:00</published><updated>2007-10-15T20:30:42.629+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stirling numbers'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='nombre de Stirling'/><title type='text'>Les nombres de Stirling de seconde espèce</title><content type='html'>Voici une &lt;a href="http://slashhome.be/files/Stirling2intro.pdf"&gt;petite intro&lt;/a&gt; sur les nombres de Strirling de seconde esp&amp;egrave;ce ainsi que deux d&amp;eacute;monstrations (&lt;a href="http://slashhome.be/files/Stirling2closed1.pdf"&gt;ici&lt;/a&gt; et &lt;a href="http://slashhome.be/files/Stirling2closed2.pdf"&gt;ici&lt;/a&gt;) de la formule ferm&amp;eacute;e permattant de les calculer directement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-4037575874035313874?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/4037575874035313874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=4037575874035313874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4037575874035313874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4037575874035313874'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/06/les-nombres-de-stirling-de-seconde.html' title='Les nombres de Stirling de seconde espèce'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-4057928499399672248</id><published>2007-01-05T21:40:00.000Z</published><updated>2012-01-06T19:12:51.531Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tri'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithmes'/><category scheme='http://www.blogger.com/atom/ns#' term='diviser pour régner'/><category scheme='http://www.blogger.com/atom/ns#' term='récursif'/><title type='text'>Algorithmes récursifs de tri</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * laurent.gatto&amp;lt;AT&amp;gt;gmail&amp;lt;DOT&amp;gt;com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * Les implementations recursives des ces quatres algotithmes &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * de tri sont bien evidemment fournies sans aucune garantie &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * quelle qu'elle soit.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #a020f0;"&gt;#include &lt;/span&gt;&lt;span style="color: magenta;"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #a020f0;"&gt;#define LMAX &lt;/span&gt;&lt;span style="color: magenta;"&gt;100&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;typedef&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; TAB[LMAX];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; printtab(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; l) {&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; i;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt; (i=&lt;span style="color: magenta;"&gt;0&lt;/span&gt;; i&amp;lt;l; i++ ) printf(&lt;span style="color: magenta;"&gt;"&lt;/span&gt;&lt;span style="color: slateblue;"&gt;%d&lt;/span&gt;&lt;span style="color: magenta;"&gt; "&lt;/span&gt;,a[i]);&lt;br /&gt;        printf(&lt;span style="color: magenta;"&gt;"&lt;/span&gt;&lt;span style="color: slateblue;"&gt;\n&lt;/span&gt;&lt;span style="color: magenta;"&gt;"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt;***********     tri par insertion     **********&lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt; DIVISER: tableau[0..l-1] = tableau[0..l-2] + a[l-1]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * REGNER: trier (par insertion) le tableau[0..l-2]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * COMBINER: inserer a[l-1] a sa place pour que a[0..l-1] soit trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas de base: si l&amp;lt;2, tableau est trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas recursif: si l&amp;gt;=2, trier tablean[0..l-2] et inserer a[l-1]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * Complexite: T(n) = T(n-1) + n = O(n²)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; inserer(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; pla, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; val) {&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; i=pla;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt; (i&amp;gt;&lt;span style="color: magenta;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; a[i-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;]&amp;gt;val) {&lt;br /&gt;                a[i]=a[i-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;];&lt;br /&gt;                i--;&lt;br /&gt;        }&lt;br /&gt;        a[i]=val;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; tri_insertion (TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; l) {&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;(l&amp;gt;&lt;span style="color: magenta;"&gt;1&lt;/span&gt;) {                   &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                l=l-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;;              &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                tri_insertion(a,l); &lt;span style="color: blue;"&gt;// T(n-1)&lt;/span&gt;&lt;br /&gt;                inserer(a,l,a[l]);  &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt;***********     tri par fusion     **********&lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt; DIVISER: tableau[bi..bs] = tab[bi..(bi+bs)/2] + tab[(bi+bs)/2+1..bs]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * REGNER: trier (par fusion) les deux tab&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * COMBINER: combiner les 2 tab de telle maniere que tableau reste trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas de base: si bs&amp;lt;=bi, tableau est trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas recursif: si bs&amp;gt;bi, trier et combiner&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * Complexite: T(n) = 2 T(n/2) + n = O(n log(n))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; fusionner(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bi, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; mid, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bs) { &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;        TAB res;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; i=bi;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; gauche=bi;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; droite=mid+&lt;span style="color: magenta;"&gt;1&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt; (i&amp;lt;=bs) {&lt;br /&gt;                &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; ((gauche&amp;lt;=mid &amp;amp;&amp;amp; a[gauche]&amp;lt;a[droite]) || droite&amp;gt;bs) {&lt;br /&gt;                        res[i]=a[gauche];&lt;br /&gt;                        gauche++;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: brown;"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/span&gt; {&lt;br /&gt;                        res[i]=a[droite];&lt;br /&gt;                        droite++;&lt;br /&gt;                }&lt;br /&gt;                i++;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt;(i=bi;i&amp;lt;=bs;i++) { a[i]=res[i]; }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; tri_fusion(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bi, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bs) {&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; (bi&amp;lt;bs) {&lt;br /&gt;                &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; m=(bi+bs)/&lt;span style="color: magenta;"&gt;2&lt;/span&gt;;         &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                tri_fusion(a,bi,m);      &lt;span style="color: blue;"&gt;// T(n/2)&lt;/span&gt;&lt;br /&gt;                tri_fusion(a,m+&lt;span style="color: magenta;"&gt;1&lt;/span&gt;,bs);    &lt;span style="color: blue;"&gt;// T(n/2)&lt;/span&gt;&lt;br /&gt;                fusionner(a,bi,m,bs);    &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt;***********     tri par selection     **********&lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt; DIVISER: trouver le max de tableau[0..l-1]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * REGNER: trier (par selection) les elements restants&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * COMBINER: placer la max en position finale&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas de base: si l&amp;lt;2, le tableau est trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas recursif: si l&amp;gt;=2, trouver le max, le permuter avec tab[l-1]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *                        trier tab[0..l-2]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * Complexite: T(n) = T(n-1) + n = O(n²)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; posmax(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; l) {  &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; res=&lt;span style="color: magenta;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; i;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt; (i=&lt;span style="color: magenta;"&gt;1&lt;/span&gt;;i&amp;lt;l;i++) { &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; (a[res]&amp;lt;a[i]) res=i; }&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; res;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; permuter(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; pos1, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; pos2) { &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; tmp=a[pos1];&lt;br /&gt;        a[pos1]=a[pos2];&lt;br /&gt;        a[pos2]=tmp;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; tri_selection(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; l) {&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; (l&amp;gt;&lt;span style="color: magenta;"&gt;1&lt;/span&gt;) {&lt;br /&gt;                &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; x = posmax(a,l);  &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;                permuter(a,l-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;,x);    &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                tri_selection(a,l-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;); &lt;span style="color: blue;"&gt;// T(n-1)&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt;***********     tri rapide     **********&lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt; DIVISER: partinner (rearranger) le tableau[bi..bs] en deux sous tableaux&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *          tab[bi..q-1] et tab[q+1..bs] (eventuellement vides) tels que&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *          pour tout k bi&amp;lt;=k&amp;lt;q: tab[k]&amp;lt;=tab[q] et pour tout k q&amp;lt;k&amp;lt;=bs: tab[q]&amp;lt;=tab[k]. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *          L'indice q est calcule durant le rearrangement.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * REGNER: trier (par tri rapide) les deux sous tableau&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * COMBINER: a[bi..q-1],a[q],a[q+1..bs] est trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas de base: si bs&amp;lt;=bi, le tableau est trie&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * cas recursif: si bs&amp;gt;bi, rearranger a[bi..bs] et trier a[bi..q-1] et a[q+1..bs]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; * Complexite: T(n) = T(n-k-1) + T(k) + n&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *             dans le pire des cas, k=0 ou k=n-1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *             T(n) = T(n-1) + n + a = O(n²)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *             Mais en moyenne: k=n/2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *             T(n) = 2 T(n/2) + n = O(n log(n))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; arranger(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bi, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bs) { &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; x = a[bs];                       &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; i = bi;                          &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; j = bi;                          &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt; (j&amp;lt;bs) {                       &lt;span style="color: blue;"&gt;// n fois&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; (a[j] &amp;lt;= x) {             &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                        permuter(a,i,j);     &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                        i++;                 &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;                }&lt;br /&gt;                j++;                         &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        permuter(a,i,bs);                    &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; i;                            &lt;span style="color: blue;"&gt;// O(1)&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; tri_rapide(TAB a, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bi, &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; bs) {&lt;br /&gt;        &lt;span style="color: brown;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; (bi&amp;lt;bs) {&lt;br /&gt;                &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; q=arranger(a,bi,bs);     &lt;span style="color: blue;"&gt;// O(n)&lt;/span&gt;&lt;br /&gt;                tri_rapide(a,bi,q-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;);        &lt;span style="color: blue;"&gt;// T(k)&lt;/span&gt;&lt;br /&gt;                tri_rapide(a,q+&lt;span style="color: magenta;"&gt;1&lt;/span&gt;,bs);        &lt;span style="color: blue;"&gt;// T(n-k-1)&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/*&lt;/span&gt;&lt;span style="color: blue;"&gt;****************************************&lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; main() {&lt;br /&gt;        TAB t={&lt;span style="color: magenta;"&gt;4&lt;/span&gt;,&lt;span style="color: magenta;"&gt;7&lt;/span&gt;,&lt;span style="color: magenta;"&gt;5&lt;/span&gt;,&lt;span style="color: magenta;"&gt;2&lt;/span&gt;,&lt;span style="color: magenta;"&gt;12&lt;/span&gt;,&lt;span style="color: magenta;"&gt;36&lt;/span&gt;,&lt;span style="color: magenta;"&gt;21&lt;/span&gt;,&lt;span style="color: magenta;"&gt;9&lt;/span&gt;,&lt;span style="color: magenta;"&gt;10&lt;/span&gt;,&lt;span style="color: magenta;"&gt;34&lt;/span&gt;};&lt;br /&gt;        &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; lt=&lt;span style="color: magenta;"&gt;10&lt;/span&gt;;&lt;br /&gt;        printtab(t,lt);&lt;br /&gt;        &lt;span style="color: blue;"&gt;//tri_insertion(t,lt);&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;//tri_fusion(t,0,lt-1);&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;//tri_selection(t,lt);&lt;/span&gt;&lt;br /&gt;        tri_rapide(t,&lt;span style="color: magenta;"&gt;0&lt;/span&gt;,lt-&lt;span style="color: magenta;"&gt;1&lt;/span&gt;);&lt;br /&gt;        printtab(t,lt);&lt;br /&gt;&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/32263162-4057928499399672248?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/4057928499399672248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=4057928499399672248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4057928499399672248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/4057928499399672248'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2007/01/algorithmes-rcursifs-de-tri.html' title='Algorithmes récursifs de tri'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-116144097327525449</id><published>2006-10-21T15:26:00.000+01:00</published><updated>2007-01-05T21:44:12.433Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='crontab'/><title type='text'>Crontab mini-howto</title><content type='html'>&lt;h3&gt;What is Crontab?&lt;/h3&gt;  &lt;p&gt;Crontab is a program that allows users to create jobs that will run at a given time.  Each individual user has their own crontab and the entire system has a crontab that can only be modified by those with root access.&lt;/p&gt;  &lt;h3&gt;Synopsis&lt;/h3&gt; &lt;div class="code"&gt; &lt;ul&gt;&lt;li&gt;crontab [file]&lt;/li&gt;&lt;li&gt;crontab -e [-u username]&lt;/li&gt;&lt;li&gt;crontab -r [-u username]&lt;/li&gt;&lt;li&gt;crontab -l [-u username]&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt;  &lt;p&gt;Use &lt;code&gt;crontab crontab_file&lt;/code&gt; to upload the instruction of crontab_file in your crontab.&lt;br /&gt;The &lt;code&gt;-e&lt;/code&gt; option edits a copy of the current users' crontab file or creates an empty file to edit if crontab does not exist.&lt;br /&gt;The &lt;code&gt;-r&lt;/code&gt; option removes a user's crontab from the crontab directory.&lt;br /&gt;The &lt;code&gt;-l&lt;/code&gt; options lists the crontab file for the invoking user.&lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Format&lt;/h3&gt;  &lt;p&gt;There are six fields to a file, each separated by a space.  The first five fields specify when the command is to be run; the sixth field is the command itself.&lt;/p&gt;  &lt;p&gt;minute hour day month weekday command&lt;/p&gt;&lt;p&gt;    &lt;span style="font-weight: bold;"&gt;Minute&lt;/span&gt;      Minutes after the hour (0-59)&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;Hour&lt;/span&gt;            24-hour format (0-23)&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;Day&lt;/span&gt;            Day of the month (1-31)&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;Month&lt;/span&gt;        Month of the year (1-12)&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;Weekday&lt;/span&gt;  Day of the week (0-6; 0 refers to Sunday)&lt;br /&gt;&lt;/p&gt;Asterisks (*) specify when commands are to be run in every instance of the value of the field.  For instance, an asterisk in the Month field would mean that the command should be run every month.  In addition, multiple events can be scheduled within a field by separating all instances with commas - with no space between.  &lt;p&gt;It is also possible to use ranges of time units like &lt;code&gt;0 8-20 * * 1-5 command&lt;/code&gt;, to execute &lt;code&gt;command&lt;/code&gt; from Monday to Friday, every hour, starting at 8:00 to 20:00.&lt;/p&gt;  &lt;p&gt;If you always forget the order of the five first fields, you may paste such a cheat sheet at the top of your contab file: &lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;#################################################################&lt;br /&gt;#minute (0-59),                                                 #&lt;br /&gt;#|      hour (0-23),                                            #&lt;br /&gt;#|      |       day of the month (1-31),                        #&lt;br /&gt;#|      |       |       month of the year (1-12),               #&lt;br /&gt;#|      |       |       |       day of the week (0-6 with 0=Sun)#&lt;br /&gt;#|      |       |       |       |       commands                #&lt;br /&gt;#################################################################&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/32263162-116144097327525449?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/116144097327525449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=116144097327525449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116144097327525449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116144097327525449'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/10/crontab-mini-howto.html' title='Crontab mini-howto'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-116144034535526672</id><published>2006-10-21T15:13:00.000+01:00</published><updated>2007-10-15T20:36:16.497+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cli'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematica'/><title type='text'>Using Mathematica on the cli</title><content type='html'>&lt;div class="storycontent"&gt;&lt;a href="http://www.wolfram.com/products/mathematica/index.html"&gt;Mathematica&lt;/a&gt; is a powerfull mathematical tool. It also has a great interface that enables effective edition of mathematical formulas, matrices, procedures… On Linux, this interface is launched with the command &lt;code&gt;mathematica&lt;/code&gt;. Nevertheless, there is more than &lt;code&gt;mathematica&lt;/code&gt; in Mathematica.   &lt;p&gt;Indeed, there are situations where you don’t want to use de gui to run calculations. In that case, you can directly use the mathematical engine underlying the gui, running &lt;code&gt;MathKernel&lt;/code&gt;. You will get a nice prompt like this one:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Mathematica 5.1 for Linux&lt;br /&gt;Copyright 1988-2004 Wolfram Research, Inc.&lt;br /&gt; -- Motif graphics initialized -- &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;In[1]:=&lt;br /&gt;&lt;br /&gt;From here, you can type your usual commands. &lt;/p&gt;  &lt;p&gt;But the real point of this is to run scripts that are saved in a file. Here, you have two solutions. Either, once in the MathKernel, you open and run the file typing &lt;code&gt;&amp;lt;&amp;lt;inputfile.m&lt;/code&gt; or, you can directly invoke the kernel using &lt;code&gt;MathKernel -noprompt -run "&amp;lt;&amp;lt;inputfile.m"&lt;/code&gt;. The &lt;code&gt;-noprompt&lt;/code&gt; parameter will avoid the prompt to wait for any input and immediately use &lt;code&gt;inputfile.m&lt;/code&gt;. &lt;/p&gt;  &lt;p&gt;The &lt;code&gt;inputfile.m&lt;/code&gt; can easily be created with the gui. Instead of saving your file as file.nb (the Mathematica format), save it by using &amp;#8216;File&amp;#8217; &gt;&gt; &amp;#8216;Save As Special&amp;#8230;&amp;#8217; &gt;&gt; &amp;#8216;Text&amp;#8217;. If you want that the kernel also exists nicely after the calculation, add &lt;code&gt;Exit[]&lt;/code&gt; at the and of the inputfile.m. To catch all the ouput that is printed on the terminal (&lt;em&gt;i.e&lt;/em&gt; redirect it to a file) and to run the calculation in the background use the command &lt;br /&gt;&lt;code&gt;MathKernel -noprompt -run "&amp;lt;&amp;lt; inputfile.m" &gt; outputfile &amp;#038;&lt;/code&gt;. Sit back and wait.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-116144034535526672?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/116144034535526672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=116144034535526672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116144034535526672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116144034535526672'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/10/using-mathematica-on-cli.html' title='Using Mathematica on the cli'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-116143996878433977</id><published>2006-10-21T15:12:00.000+01:00</published><updated>2007-10-15T20:40:48.504+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='university'/><category scheme='http://www.blogger.com/atom/ns#' term='CS'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Studying CS at the university</title><content type='html'>Two interesting reading if you study computer science at the university or plan to. First this post on slashdot, ‘&lt;a href="http://slashdot.org/article.pl?sid=05/09/11/1348204&amp;amp;from=rss"&gt;Computer  Science Curriculum in College&lt;/a&gt;‘, by CmdrTaco, undergraduate in CS student asking:&lt;div class="storycontent"&gt;  &lt;blockquote&gt;&lt;p&gt;I tend to think that an university education should stress scientific topics over vocational ones, but since I’m just planning to get a job after I grad, am I in the right program?&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;This article,  ‘&lt;a href="http://www.onlamp.com/pub/wlg/7757"&gt;What would you put in a Computer Science Curriculum?&lt;/a&gt;‘, by Dan Zambonini, challenges the utility of some university courses to get a real-world job.&lt;/p&gt;  &lt;p&gt;This topis is of interest to me because one year ago, I started evening classes in CS at the &lt;a href="http://info.fundp.ac.be/"&gt;FUNDP&lt;/a&gt; (Namur, Belgium). My first motivation was fun and personal interest, but now, as I am looking for a job in IT business, I also need some concrete stuff. &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-116143996878433977?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/116143996878433977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=116143996878433977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143996878433977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143996878433977'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/10/studying-cs-at-university.html' title='Studying CS at the university'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-116143878672097013</id><published>2006-10-21T14:52:00.000+01:00</published><updated>2006-10-21T14:53:06.726+01:00</updated><title type='text'>Abstraction Layer in Academia</title><content type='html'>Joel Spolsky recently ( Tuesday, April 11, 2006) posted &lt;a href="http://joelonsoftware.com/articles/DevelopmentAbstraction.html"&gt;The Development Abstraction Layer&lt;/a&gt;  on his &lt;a href="http://joelonsoftware.com/"&gt;site&lt;/a&gt;. The main message, as I got it, is that a good software company manager should make sure that his programmers and developers only need to care and concentrate about their very specif task, programming and developing, and nothing else. (Do not hesitate to read the above mentioned post before going on, Mr. Spolsky explains things much better than I do). His point is about getting a software company make business, &lt;em&gt;ie&lt;/em&gt; be successful in selling software. I have no experience in business, since I have been working in academia since I graduated. But I happily agree with him (I would so much enjoy working for such a company).&lt;div class="storycontent"&gt;  &lt;p&gt;My point is to draw a parallel with the way things work in research labs in universities (at least the way I have seen them working). &lt;/p&gt;  &lt;p&gt;To illustrate the way things (often) are, I will make reference to another story that came up recently, on &lt;a href="http://www.theregister.co.uk/"&gt;The Register&lt;/a&gt; this time. The first part of the story (&lt;a href="http://www.regdeveloper.co.uk/2006/04/10/henslow_darwin_sqlserver/"&gt;Databases in academia&lt;/a&gt; - Monday 10th April 2006 15:26 GMT) illustrates a research project that has been carried out at Cambridge University about the work of Professor Henslow (1796–1861) and his influence on Charles Darwin (see the reg post and Nature link therein for more information). The connection between this project and The Register was that Mark Whitehorn, Reg Developer columnist, happened to get a PhD in the lab doing the Henslow/Darwin work. Mr Whitehorn is also a database expert and collaborated to the project as such. The conclusion of the article is the following:&lt;/p&gt;  &lt;blockquote&gt;&lt;p&gt;Although computers are widely used in theoretical physics and such research, the tools taken as routine in business are being overlooked in academia – if Mark hadn’t taken a PhD with John Parker and then moved into databases (he’s in the Department of Applied Computing at the University of Dundee) this research would have been based on shuffling index cards in a card index box (or, at best, on something like a spreadsheet).&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;Apparently, the article resulted in robust comments, as shows the second article in the serie (&lt;a href="http://www.regdeveloper.co.uk/2006/04/12/more_database_academia/"&gt;More on databases in academia&lt;/a&gt; - Wednesday 12th April 2006 13:37 GMT). One of the points discussed there (that is pertinent for this discussion) is that there where comments about &lt;em&gt;defending academics’ use of databases&lt;/em&gt; and &lt;em&gt;that advanced BI [Business Intelligence] tools might not be used in academia because of the costs associated with what are, usually, commercial products&lt;/em&gt;. (Again, read the original post for more precise information).&lt;/p&gt;  &lt;p&gt;Money is indeed always an issue in academia. I think that this is one of the reasons (even though I don’t necessarily consider it a good one) that &lt;em&gt;people&lt;/em&gt;, and especially PhD students, have to do too many things in a regular work day. These things might be completely science unrelated (like administrative work - I already hear many professors screaming and yelling that they also spend most if not all of their time doing administrativia… yes, but read &lt;a href="http://joelonsoftware.com/articles/DevelopmentAbstraction.html"&gt;The Development Abstraction Layer&lt;/a&gt; again), or they can be related to their work, but way too repetitive. Like, repeating hundreds or thousands of time an experiment (on hundreds or thousand of different samples) for example. Yes, the PhD student should know how to do the experiment, how to critically analye the protocol and the results, but I don’t think that spending so much time is a good thing for somebody that studied for 4 or 5 years at the university. As mentioned in Mr. Spolsky’s article, &lt;em&gt;a system administrator makes the Internet as available as oxygen&lt;/em&gt;, and a technician will do the large scale experimental work way better (because that’s his specialty).&lt;/p&gt;  &lt;p&gt;I also want to quote Bruce M. Alberts (Cell, 41(2) 1985):&lt;/p&gt;  &lt;blockquote&gt;&lt;p&gt;It is crucial to recognize that many important research results start as surprises whose implications can easily be missed, and that money is no substitute for careful observation, thoughtful analysis, and scientific skill. Moreover, a single innovative and original publication is worth much more than ten obvious ones. One could argue that the surest way to destroy a young scientist would be to give him or her eight technical assistants in constant need of supervision and advice, and the motivation to work on three different projects at once. Science is not a business and bigger is not better. What we want to encourage from the best young people is perhaps one paper per year – one that makes a real contribution and will be worth reading even years after its publication date. Any value system based on acquiring the largest research team, or on maximizing either total grant support or publications, is counterproductive to good science and should be viewed with alarm.&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;Of special interest here is &lt;em&gt;the surest way to destroy a young scientist would be to give him or her eight technical assistants in constant need of supervision and advice&lt;/em&gt;. Eight is indeed excessive, but I think that giving a PhD student technical support is important, to give him the possibility to focus on the scientific part of his project. Secondly, supervising and giving advices is something that also needs to be learned. Actually, I would not call it supervising here, I would call it collaboration (especially if the PhD student works alone on &lt;em&gt;his&lt;/em&gt; project). Splitting work so that people get to do what they are best at is very important. The &lt;em&gt;manage to get out of this difficult (PhD) situation&lt;/em&gt; argument should not be turned back on the PhD student. &lt;/p&gt;  &lt;p&gt;I claim that in academia, group leaders should also set abstraction layers (&lt;em&gt;sensu&lt;/em&gt; Spolsky), as the managers in the business world. Efficiency is not defined in terms of sales, but in terms of (in some extent) publications and, more importantly, in terms of education and experience (especially for a PhD project). The latter will necessarily result in the former.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-116143878672097013?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/116143878672097013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=116143878672097013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143878672097013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143878672097013'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/10/abstraction-layer-in-academia.html' title='Abstraction Layer in Academia'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-116143859617589581</id><published>2006-10-21T14:49:00.000+01:00</published><updated>2006-10-21T14:49:56.186+01:00</updated><title type='text'>Citation Advantage of Open Access Articles</title><content type='html'>&lt;div class="storycontent"&gt;&lt;a href="http://www.plos.org/"&gt;PLoS&lt;/a&gt; (Public Library of Science) Biology, an open-access (OA) journal recently published (Volume 4, issue 5 - May 2006) and article [&lt;a href="http://biology.plosjournals.org/perlserv/?request=get-document&amp;amp;doi=10%2E1371%2Fjournal%2Epbio%2E0040157"&gt;Eysenbach G (2006) Citation Advantage of Open Access Articles. PLoS Biol 4(5): e157&lt;/a&gt;] comparing articles that have been published in &lt;a href="http://www.pnas.org/"&gt;PNAS&lt;/a&gt; as OA or and non-OA articles.   &lt;p&gt;An OA publication means that it &lt;em&gt;will immediately be freely available to anyone, anywhere, to download, print, distribute, read, and use without charge or other restrictions, as long as proper attribution of authorship is maintained&lt;/em&gt;. Authors still pay for their articles to be published, but readers do not to read them. This is important in science because that’s the way researchers share their findings with the community: they write an article about their recent work and results, submit it for peer-reviewing and, if accepted, the article is published. Now, to get &lt;em&gt;famous&lt;/em&gt;, a researcher needs his article to be read as much as possible and cited in other articles. As such, the researcher will want to publish in a journal that has an high impact factor, &lt;em&gt;i.e&lt;/em&gt; that is read by a lot of other researchers and whose articles are often cited.&lt;br /&gt;Subscription to scientific journals is often quite expensive, especially for institutions (like university libraries). This is a break to the dissemination of scientific work among researchers. &lt;/p&gt;  &lt;p&gt;Gunther Eysenbach has compared the impact, &lt;em&gt;i.e&lt;/em&gt; the probability of beeing cited in other papers, of OA and non-OA publications and concluded (see full paper for details) that &lt;em&gt;OA articles are more immediately recognized and cited by peers than non-OA articles published in the same journal&lt;/em&gt;. And as such, that &lt;em&gt;OA is likely to benefit science by accelerating dissemination and uptake of research findings&lt;/em&gt;. &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-116143859617589581?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/116143859617589581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=116143859617589581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143859617589581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/116143859617589581'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/10/citation-advantage-of-open-access.html' title='Citation Advantage of Open Access Articles'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115650312988405500</id><published>2006-08-25T11:43:00.000+01:00</published><updated>2007-10-15T20:33:44.051+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='color palette'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R: setting up your own color palette</title><content type='html'>I found an interesting &lt;a href="http://thread.gmane.org/gmane.comp.lang.r.general/52827/focus=52947"&gt;post&lt;/a&gt; on the &lt;span style="font-weight: bold;"&gt;R&lt;/span&gt; mailing list describing a way to define one's own color palette. Indeed, it is difficult to differentiate between a the 255 colors of &lt;span style="font-family:courier new;"&gt;colors()&lt;/span&gt;. &lt;span style="font-family:courier new;"&gt;colorRampPalette&lt;/span&gt; allows to create a custom set of colors.&lt;br /&gt;&lt;pre&gt;&gt; f.c &lt;- colorRampPalette(&lt;br /&gt;     c('red','green','orange','blue','yellow',&lt;br /&gt;     'gray','black','brown','aquamarine3','cyan',&lt;br /&gt;     'darkmagenta','darkviolet','green4'))&lt;br /&gt;     (13);&lt;br /&gt;&gt; plot(0,type='n', ylim=c(0,13), xlim=c(0,1));&lt;br /&gt;&gt; for (i in 1:13) segments(0, i, 1, i, col=f.c[i]);&lt;/pre&gt;&lt;br /&gt;And here is how to use &lt;span style="font-family:courier new;"&gt;f.c&lt;/span&gt; to draw Student distributions:&lt;br /&gt;&lt;pre&gt;&gt; curve(dt(x,55), from=-10,to=10,col=f.c[4])&lt;br /&gt;&gt; j=1&lt;br /&gt;&gt; for (i in seq(1,11,5)) {&lt;br /&gt;curve(dt(x,(i)),from=-10,to=10,add=T,col=f.c[j])&lt;br /&gt;; j=j+1 }&lt;br /&gt;&gt;legend(&lt;br /&gt;"topright",&lt;br /&gt;legend=c("df=1","df=6","df=11","df=55"),&lt;br /&gt;text.col=f.c,merge=T )&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7508/3522/1600/tdist.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7508/3522/320/tdist.jpg" alt="" border="0" /&gt;&lt;/a&gt; &lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;There is a easier (and better) way to get colors that can be well differentiated. The &lt;span style="font-weight: bold;"&gt;RColorBrewer&lt;/span&gt; library implements the work of Brewer that showed that specific color schemes are appropriate for specific tasks.  For example, to create a palette of 6 colors out of "Set1", one of the predefined sets, use&lt;br /&gt;&lt;pre&gt;&gt; cols&lt;-brewer.pal(6,"Set1")&lt;/pre&gt;Now, one can ask to draw a set of boxplots of an appropriate object (like the AffyBatch object &lt;span style="font-weight: bold;"&gt;spikein95&lt;/span&gt; from the &lt;span style="font-weight: bold;"&gt;SpikeInSubset&lt;/span&gt; library) using the previously defined colors&lt;br /&gt;&lt;pre&gt;&gt; library(SpikeInSubset)&lt;br /&gt;&gt; data(spikein95)&lt;br /&gt;&gt; boxplot(spikein95,col=cols)&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_U_VO6np0UkI/Rg2RZlq8tkI/AAAAAAAAAAM/uq68Nh6Vr3Y/s1600-h/Rplot001.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_U_VO6np0UkI/Rg2RZlq8tkI/AAAAAAAAAAM/uq68Nh6Vr3Y/s320/Rplot001.png" alt="" id="BLOGGER_PHOTO_ID_5047850626147202626" 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/32263162-115650312988405500?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115650312988405500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115650312988405500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115650312988405500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115650312988405500'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/r-setting-up-your-own-color-palette.html' title='R: setting up your own color palette'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_U_VO6np0UkI/Rg2RZlq8tkI/AAAAAAAAAAM/uq68Nh6Vr3Y/s72-c/Rplot001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536874541243542</id><published>2006-08-12T08:44:00.000+01:00</published><updated>2007-10-15T20:36:39.726+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='font'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematica'/><title type='text'>Fixing keyboard and font problems in Mathematica</title><content type='html'>&lt;div class="storycontent"&gt;When running Mathematica for the first time, if you get this kind of error message&lt;br /&gt;&lt;p&gt; &lt;code&gt;xset:  bad font path element (#78), possible causes are:&lt;br /&gt;    Directory does not exist or has wrong permissions&lt;br /&gt;    Directory missing fonts.dir&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;the &lt;a href="http://documents.wolfram.com/mathematica/GettingStarted/SystemAdministrationGuide/UnixLinuxAdministration/Fonts.html"&gt;fonts chapter&lt;/a&gt; of the Mathematica Documentation suggests to add the Mathematica fonts to the local font path by running a command like the following on the local machine.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;xset +fp /Path_to_Mathematica_Installation_Directory/5.1/SystemFiles/Fonts/Type1&lt;br /&gt;xset +fp /Path_to_Mathematica_Installation_Directory/5.1/SystemFiles/Fonts/AFM&lt;br /&gt;xset +fp /Path_to_Mathematica_Installation_Directory/5.1/SystemFiles/Fonts/BDF&lt;br /&gt;xset fp rehash&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;It may happen (it did in my case) that some keys (delete, home, end) and key combinations (shift+A: select all, shift+ENTER: run cells…) do not work. &lt;/p&gt;  &lt;p&gt;One thing to check is the file &lt;code&gt;KeyEventTranslations.tr&lt;/code&gt;.&lt;br /&gt;The file is located (on my Linux system, Mathematica version 5.1) in &lt;code&gt;Mathematica/5.1/SystemFiles/FrontEnd/TextResources/X/&lt;/code&gt;.  If you are not allowed to modify that file, it is also possible to copy the file to your local &lt;code&gt;~/.Mathematica/5.1/SystemFiles/FrontEnd/TextResources/X/&lt;/code&gt; and modify that one.&lt;/p&gt;  &lt;p&gt;The lines that may need to be &lt;em&gt;modified&lt;/em&gt; are those for the KeyEvents &lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;End&lt;/code&gt;… :&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Item[KeyEvent["Delete"], "DeleteNext"],&lt;br /&gt;Item[KeyEvent["Home"], "MoveLineBeginning"],&lt;br /&gt;Item[KeyEvent["End"], "MoveLineEnd"],&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;The following lines/KeyEvents may have to be &lt;em&gt;added&lt;/em&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Item[KeyEvent["Home", Modifiers -&gt; {Shift}], "SelectLineBeginning"],&lt;br /&gt;Item[KeyEvent["End", Modifiers -&gt; {Shift}], "SelectLineEnd"],&lt;br /&gt;Item[KeyEvent["Right", Modifiers -&gt; {Shift, Control}], "SelectNextWord"],&lt;br /&gt;Item[KeyEvent["Left",Modifiers -&gt; {Shift, Control}], "SelectPreviousWord"],&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Another helpfull thing to try, if the above mentionned file is fine, is to find out how Mod1 and Mod2 (and every other key) are currently mapped on your system: look in the &lt;em&gt;X Environment Information&lt;/em&gt; dialog box under the &lt;em&gt;Help&lt;/em&gt; menu. The &lt;em&gt;Find Keys and Modifiers&lt;/em&gt; button within this dialog box enables you to find the key mapping for any key. Selecting the &lt;em&gt;Pure keys&lt;/em&gt; may fix some problems.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536874541243542?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536874541243542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536874541243542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536874541243542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536874541243542'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/fixing-keyboard-and-font-problems-in.html' title='Fixing keyboard and font problems in Mathematica'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536841078715845</id><published>2006-08-12T08:39:00.000+01:00</published><updated>2007-01-05T21:44:46.567Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><title type='text'>Quick and dirty CVS mini howto</title><content type='html'>Here is how to very quickly set up your cvs. You need to have ssh installed with ssh-keys (read &lt;a href="http://slashhome.be/wp/index.php?p=12"&gt;this&lt;/a&gt; howto) and know your CVSROOT. The cvs root&lt;br /&gt;&lt;div class="storycontent"&gt;&lt;p&gt; will be something like &lt;code&gt;:ext:username@cvs.provider.org:/cvsroot/group/yourcvs&lt;/code&gt;.&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;copy your public key &lt;code&gt;id_dsa.pub&lt;/code&gt; or &lt;code&gt;id_rsa.pub&lt;/code&gt; on the root of the ftp server of your provider, something like &lt;code&gt;ftp.provider.org&lt;/code&gt; and name it &lt;code&gt;ssh_keys&lt;/code&gt;. Change the permission: &lt;code&gt;chmod 600 ssh_keys&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;export CVSROOT=:ext:username@cvs.provider.org:/cvsroot/group/yourcvs&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;export CVS_RSH=ssh&lt;/code&gt;&lt;/li&gt;&lt;li&gt;get the most recent files on the cvs server in the ourproject directory: &lt;code&gt;cvs co ourproject&lt;/code&gt;&lt;/li&gt;&lt;li&gt;add your own files: &lt;code&gt;cvs add file1 file2 file3&lt;/code&gt;, and commit:&lt;code&gt;cvs commit&lt;/code&gt;. You will also be asked to comment the files and/or changes you commited.&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;And here are a few commands:&lt;br /&gt;&lt;code&gt;add&lt;/code&gt; Add a new file/directory to the repository&lt;br /&gt;&lt;code&gt;checkout&lt;/code&gt; Checkout sources for editing&lt;br /&gt;&lt;code&gt;commit&lt;/code&gt; Check files into the repository&lt;br /&gt;&lt;code&gt;diff&lt;/code&gt;  Show differences between revisions&lt;br /&gt;&lt;code&gt;history&lt;/code&gt; Show repository access history&lt;br /&gt;&lt;code&gt;import&lt;/code&gt; Import sources into CVS, using vendor branches&lt;br /&gt;&lt;code&gt;init&lt;/code&gt; Create a CVS repository if it doesn’t exist&lt;br /&gt;&lt;code&gt;log&lt;/code&gt; Print out history information for files&lt;br /&gt;&lt;code&gt;ls&lt;/code&gt; List files available from CVS&lt;br /&gt;&lt;code&gt;rannotate&lt;/code&gt; Show last revision where each line of module was modified&lt;br /&gt;&lt;code&gt;rdiff&lt;/code&gt; Create ‘patch’ format diffs between releases&lt;br /&gt;&lt;code&gt;release&lt;/code&gt; Indicate that a Module is no longer in use&lt;br /&gt;&lt;code&gt;remove&lt;/code&gt; Remove an entry from the repository&lt;br /&gt;&lt;code&gt;rlog&lt;/code&gt; Print out history information for a module&lt;br /&gt;&lt;code&gt;rls&lt;/code&gt; List files in a module&lt;br /&gt;&lt;code&gt;status&lt;/code&gt; Display status information on checked out files&lt;br /&gt;&lt;code&gt;tag&lt;/code&gt; Add a symbolic tag to checked out version of files&lt;br /&gt;&lt;code&gt;unedit&lt;/code&gt; Undo an edit command&lt;br /&gt;&lt;code&gt;update&lt;/code&gt; Bring work tree in sync with repository&lt;br /&gt;&lt;code&gt;watch&lt;/code&gt; Set watches&lt;br /&gt;&lt;code&gt;watchers&lt;/code&gt; See who is watching a file&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536841078715845?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536841078715845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536841078715845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536841078715845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536841078715845'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/quick-and-dirty-cvs-mini-howto.html' title='Quick and dirty CVS mini howto'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536826439224590</id><published>2006-08-12T08:37:00.000+01:00</published><updated>2007-10-15T20:35:18.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yacc'/><category scheme='http://www.blogger.com/atom/ns#' term='lsd06'/><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='symbol table'/><category scheme='http://www.blogger.com/atom/ns#' term='bison'/><category scheme='http://www.blogger.com/atom/ns#' term='typechecking'/><category scheme='http://www.blogger.com/atom/ns#' term='lex'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Compilateur LSD06</title><content type='html'>&lt;div class="storycontent"&gt;Dans le cadre du cours de &lt;em&gt;Syntaxe et sémantique des langages de programmation&lt;/em&gt; (IHDC2105), Patrice Godard, Fabien Toune et Laurent Gatto ont fait un compilateur permettant de compiler du LSD06, un &lt;em&gt;language simple et didactique (version 2006)&lt;/em&gt;, dont voici les &lt;a href="http://cvsweb.tuxfamily.org/*checkout*/lsd/lsd06/clc-Pcode/docs/spec_lsd06.pdf"&gt;spécifications&lt;/a&gt;.  &lt;p&gt;Vous trouverez sur le &lt;a href="http://cvsweb.tuxfamily.org/lsd/lsd06/clc-Pcode/"&gt;cvs&lt;/a&gt; (hébèrgé par &lt;a href="http://www.tuxfamily.org/"&gt;tuxfamily&lt;/a&gt;) tous les fichiers sources: &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;les fichiers lex et yacc: &lt;code&gt;lsd06.l&lt;/code&gt; et &lt;code&gt;lsd06.y&lt;/code&gt;;&lt;/li&gt;&lt;li&gt;les ficheirs avec les fonctions permettant la création et l’impression sur la sortie standard de la table des symboles ainsi que le typechecking: &lt;code&gt;sym.c&lt;/code&gt; et &lt;code&gt;sym.h&lt;/code&gt;;&lt;/li&gt;&lt;li&gt;les fichiers reprenant les fonctions de manipulation de l’arbre abstrait et les fonctions de vérification des types des paramètres, des fonctions et des variables: &lt;code&gt;ast.c&lt;/code&gt; et &lt;code&gt;ast.h&lt;/code&gt;;&lt;/li&gt;&lt;li&gt;les fichiers qui permettent l’impression de l’arbre, la liste d’alias et la table des symboles en metapost: &lt;code&gt;mpost.c&lt;/code&gt; et &lt;code&gt;mpost.h&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Pour compiler:&lt;br /&gt;&lt;code&gt; bison -dtyv lsd06.y&lt;br /&gt; flex lsd06.l&lt;br /&gt; gcc -c *.c&lt;br /&gt; gcc -o lsd06 *.o&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Pour utiliser le compilateur:&lt;br /&gt;&lt;code&gt;Usage: lsd06 [-hmq] &lt; source.lsd06&lt;br /&gt;         h:  print this help message&lt;br /&gt;         m:  print metapost commands&lt;br /&gt;         q:  quiet (only print pcode)&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Pour créer des fichiers pdf de l’arbre abstrait, la liste d’alias et la table des symboles:&lt;br /&gt;&lt;code&gt; ./lsd06 -m &lt;&gt; figures.mp &amp;&amp;amp; mptopdf figures.mp&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Il y a aussi des exemples de code LSD06 &lt;a href="http://cvsweb.tuxfamily.org/lsd/lsd06/clc-Pcode/Test/"&gt;ici&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Vous trouverez aussi &lt;a href="http://cvsweb.tuxfamily.org/*checkout*/lsd/lsd06/clc-Pcode/rapport-clc/rapport-clc.pdf"&gt;ici&lt;/a&gt; un rapport reprenant toutes les informations et commentaires relatifs au compilateur. Et pour bien faire les choses, il y a aussi une &lt;a href="http://lsd06.tuxfamily.org/docs/doxygen/html/index.html"&gt;documentation en ligne&lt;/a&gt;.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536826439224590?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536826439224590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536826439224590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536826439224590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536826439224590'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/compilateur-lsd06.html' title='Compilateur LSD06'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536822992049658</id><published>2006-08-12T08:36:00.000+01:00</published><updated>2006-08-12T08:37:09.923+01:00</updated><title type='text'>Some Modest Advices for Graduate Students</title><content type='html'>Professor Stephen C. Stearns has some &lt;em&gt;modest advices&lt;/em&gt; for grad students (&lt;a href="http://www.ccs.neu.edu/home/cleary/advice.grad.students.html"&gt;here, &lt;/a&gt;&lt;a href="http://www.anu.edu.au/BoZo/Scott/Cynicaladvice.html"&gt;here&lt;/a&gt;, &lt;a href="http://www.stfrancis.edu/ns/advice.htm"&gt;here&lt;/a&gt; or &lt;a href="http://www.yale.edu/eeb/stearns/advice.htm"&gt;here&lt;/a&gt;). Well, I think these are definitely the best advices that can be given. Yes, they are cynical, but no, they are not exaggerated, nor pessimistic. That’s how things work way too often. So, if you come across these before you start a PhD, here more modest advices on &lt;em&gt;How to choose your PhD project&lt;/em&gt;.&lt;br /&gt;&lt;div class="storycontent"&gt;&lt;p&gt;&lt;br /&gt;I remember that when I was about to finish my studies (in Biology), and that professors were getting interested in the undergrads as possible PhD students, one professor, &lt;a href="http://www.ulb.ac.be/rech/inventaire/chercheurs/8/CH2438.html"&gt;Oberdan Leo&lt;/a&gt;, told me and a few of my friends that the most important thing to consider was the lab in which you were going to work. The topic in itself is, most of the times, not that important. Indeed, I believe that any project can be interesting and that one can learn a lot of things in every field. Especially that the most important things to learn during a PhD are not topic related. I believe that what is really expected from a young PhD is what they all have, or should have in common. The common experience is not a particular laboratory technique or any overspecialized topic. It is rather a certain Independence, some management skills and the capacity to analyse, interpret results and share them with other people, specialized in your topic or not. As such, the most important reasons to choose one project over another are much more relational and/or psychological. Remember that you will likely spend over 10 hours a day, and many weekends, working for your PhD. Your lab will be be a kind of second home…&lt;/p&gt;  &lt;p&gt;How will you spend your years working in that lab/department? Will you be alone, without any interaction with more experienced researchers, mostly learning from your readings and your mistakes? Well, some may claim that everything that does not kill you makes you stringer, but there are many more efficient ways to learn. I think that a healthful discussion is at least as important as finding a solution alone. The discussion helps the apprentice to find the answers by himself, but also stimulates new views, also for the supervisor. It can be an reciprocal advantage. The student and the professor will benefit from strong interaction.&lt;/p&gt;  &lt;p&gt;Other situations I have heard of are the other extreme. The PhD student is some kind of overqualified technician: (s)he gets the to do list from her/his supervisor, brings the results, gives his comments or adds any special remarks that are not obvious from the result report… and waits for the next set of instructions. The student sometimes does not even have the opportunity to write the papers that will be published. Brrr, scary isn’t it!&lt;/p&gt;  &lt;p&gt;Now, the question is “How is it possible to find a good lab, a healthy work place?”. Well, first you should probably not trust the professor that will supervise you. These person are often very good at showing (hiding) the best (worst) aspects of your work. Ask to talk to other PhD students, if possible those that are towards the end of their work. Do not hesitate to talk to your future coworkers outside of the lab. Try to imagine yourself working with these people, 10+ hours a day. Do you think that they are ready to share their knowledge? How many PhD students and post-docs are they in the lab? If there are too few, try to find out why. If there are a lot, try to find out if one is not too much. Are there not too many PhD students for the number of professors or post-docs? Sample as many as possible opinions. And most importantly, take your time to make a decision. Do consider other choices.&lt;/p&gt;  &lt;p&gt;If it’s too late, if you already have started and/or realize that your expectations are not met, that read Professor Stearns’ advices very carefully. If you are not happy, it does not mean that it is necessarily bad. And if you think that these things are not going to happen to you, watch out, and read Professor Stearns’ advices even more carefully. &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536822992049658?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536822992049658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536822992049658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536822992049658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536822992049658'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/some-modest-advices-for-graduate.html' title='Some Modest Advices for Graduate Students'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536795830845360</id><published>2006-08-12T08:32:00.000+01:00</published><updated>2006-08-12T08:32:38.310+01:00</updated><title type='text'>Réflexion sur les enseignements</title><content type='html'>J’ai posté, sur le site d’arts martiaux &lt;a href="http://www.jiseido.be/"&gt;www.jiseido.be&lt;/a&gt; un article où je compare l’enseignement à l’université et l’enseignement d’un art martial. J’y souligne une différence, qui me semble être de taille, c’est la durée de la formation (et donc l’investissement) de la personne qui entame une pratique martiale ou une cursus universitaire. Ce facteur aura des répercutions sur l’évaluation de l’élève ou de l’étudiant. &lt;div class="storycontent"&gt;  &lt;p&gt;Bien que la discussion soit essentiellement axée sur la pratique et l’enseignement des arts martiaux, je trouve que souligner la vision à long terme dans l’enseignement est une réflexion intéressante, même en dehors des arts martiaux. Quel est notre état d’esprit, notre motivation, quand nous abordons des études, ou toute autre formation? Que cherche-t-on à faire passer quand on donne un cours? Sur quoi mettre l’accent pour que les étudiants y tirent un maximum de bénéfices à long terme? Comment procéder à une bonne évaluation?…&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536795830845360?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536795830845360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536795830845360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536795830845360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536795830845360'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/rflexion-sur-les-enseignements.html' title='Réflexion sur les enseignements'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536789511101049</id><published>2006-08-12T08:30:00.000+01:00</published><updated>2007-01-05T21:45:11.790Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='doxygen'/><title type='text'>Getting your hands on Doxygen</title><content type='html'>Let’s start by an short description of the beast. As stated on the &lt;a href="http://http//www.stack.nl/%7Edimitri/doxygen/"&gt;home page&lt;/a&gt;, &lt;em&gt;Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors) and to some extent PHP, C#, and D. You can configure doxygen to extract the code structure from undocumented source files. This is very useful to quickly find your way in large source distributions. You can also visualize the relations between the various elements by means of include dependency graphs, inheritance diagrams, and collaboration diagrams, which are all generated automatically. It can generate an on-line documentation browser (in HTML) and/or an off-line reference manual in LaTeX from a set of documented source files. There is also support for generating output in RTF (MS-Word), PostScript, hyperlinked PDF, compressed HTML, and Unix man pages. The documentation is extracted directly from the sources, which makes it much easier to keep the documentation consistent with the source code.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;I won’t go into the installation details. These will depend on your distribution. Let’s just mention that on gentoo, &lt;code&gt;emerge doxygen&lt;/code&gt; makes it.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;1. The &lt;code&gt;doxygen&lt;/code&gt; executable&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The program that will be run is &lt;code&gt;doxygen&lt;/code&gt;. Note that there are also other executables provided, like &lt;code&gt;doxytag&lt;/code&gt; if you need to create reference programs for which you do not have the source code or &lt;code&gt;doxywizard&lt;/code&gt;, a graphical frontend that can be used to edit the doxigen projet specific configuration file (see below).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Documenting your code&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The very first thing to do is actually to comment your code and follow a set of rules that will allow doxygen to properly parse the source code files. You may skip this part and immediately create a configuration file and run &lt;code&gt;doxygen&lt;/code&gt; if you are in a hurry and have a look at the, althrough incomplete, result. &lt;/p&gt;  &lt;p&gt;I guess that the best way to proceed is to read and define the documentation rules before even starting to code. Thus, you will get uptodate and complete documentation files files right from the beginning. But if the project is not too large, the comments may be added, completed and/or modified later. There are &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/docblocks.html"&gt;more ways&lt;/a&gt; to ducument the code than I will describe here. I will just describe one, the one chosen for the project I used to test doxygen. &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;em&gt;Special documentation blocks: &lt;/em&gt;A special documentation block is recognized by doxygen when parsing the source code files. It knows it has found a piece of documentation that will have to be added in the documentation. A documentation block is formed by two item: (1) a brief (preferably one line) description and (2) a detailed description. Both are optional and must be unique and are written in front of the declaration or definition.&lt;br /&gt;Here is one way to write it, using a  C++ style comment which does not span more than one line:&lt;br /&gt;&lt;code&gt;/// Brief description (only one line!).&lt;br /&gt;/** Detailed description, may span over multiple lines. */&lt;/code&gt;&lt;br /&gt;Use this to comment functions, data types or classes.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Putting documentation after members:&lt;/em&gt; It is possible to document the members of a file, struct, union, class, or enum, directly inside the compound. Place the documentation block directly after the member instead of before and add an additional &lt; marker in the comment block. Again, one can add a brief or detailed description in front or after the member to be commented. One way would be to do it like this:&lt;br /&gt;&lt;code&gt;int var; ///&lt; Brief description after the member&lt;br /&gt;int var; /**&lt;&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Documentation at other places - structural commands: &lt;/em&gt;So far we have added the documentation blocks in front of the declaration or definition of what we wanted to comment. This is often comfortable and should be donne whenever possible. Nevertheless, sometimes it is not possible: for documenting a file there is nothing like &lt;em&gt;in front of a file&lt;/em&gt; for example. But in practice, you should avoid the use this way of doing things unless other requirements force you to do so because it leads to some duplication of information. &lt;p&gt;Structural commands start with a backslash followed by a command name and one or more parameters. A full list of additional commands is given &lt;a href="http://http//www.stack.nl/%7Edimitri/doxygen/commands.html"&gt;here&lt;/a&gt;. Let’s see how to use them with the &lt;code&gt;file&lt;/code&gt; example:&lt;br /&gt;&lt;code&gt;/** \file name_of_the_file.h&lt;br /&gt;    \brief Brief description of name_of_the_file&lt;br /&gt;    Details about name_of_the_file&lt;br /&gt;    */&lt;br /&gt;&lt;/code&gt;  &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;There are many more things that can make you documentation look better. You can easily incorporate &lt;a href="http://http//www.stack.nl/%7Edimitri/doxygen/lists.html"&gt;lists&lt;/a&gt; by using dashes to define the list items. It is also possible to &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/formulas.html"&gt;include formulas&lt;/a&gt; using the LaTeX syntax. &lt;/p&gt;  &lt;p&gt;Doxygen also enables to &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/diagrams.html"&gt;generate graphs&lt;/a&gt; (class, include, call and/or collaboration graphs) unsing the &lt;a href="http://www.research.att.com/sw/tools/graphviz/"&gt;Graphviz&lt;/a&gt;, an cross-platform graph drawing toolkit. For this, you will need to have Graphviz installed and set the some more tags in the configuration file.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. The configuration file&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The next thing to do is to create a configuration file for you project. This can be done by running &lt;code&gt;doxygen&lt;/code&gt; with the &lt;code&gt;-c&lt;/code&gt; parameter. You may choose the config file name by adding it to the command like this &lt;code&gt;doxygen -g &lt;config-file&gt;&lt;/code&gt;. Otherwise, it will get the defaut name &lt;code&gt;Doxyfile&lt;/code&gt;. The previous command actually creates a config file template that should be custmized according your needs. Even though there are up to 169 values that can be changed, you can get rid with much less. Have a look &lt;a href="http://http//www.stack.nl/%7Edimitri/doxygen/config.html"&gt;here&lt;/a&gt; for a description of all the tags that are avalable. I will just describe a few that I have modified the current testing:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;PROJECT_NAME: values should be obvious :-)&lt;/li&gt;&lt;li&gt;PROJECT_NUMBER: …&lt;/li&gt;&lt;li&gt;OUTPUT_DIRECTORY: The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) base path where the generated documentation will be put. If a relative path is entered, it will be relative to the location where doxygen was started. If left blank the current directory will be used.&lt;/li&gt;&lt;li&gt;TAB_SIZE: The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen uses this value to replace tabs by spaces in code fragments.&lt;/li&gt;&lt;li&gt;OPTIMIZE_OUTPUT_FOR_C: Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources only. Doxygen will then generate output that is more tailored for C. For instance, some of the names that are used will be different. The list of all members will be omitted, etc.&lt;/li&gt;&lt;li&gt;EXTRACT_ALL: If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in documentation are documented, even if no documentation was available. Private class members and static file members will be hidden unless the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES&lt;/li&gt;&lt;li&gt;INPUT: The INPUT tag can be used to specify the files and/or directories that contain documented source files. You may enter file names like “myfile.cpp” or directories like “/usr/src/myproject”. Separate the files or directories with spaces. For a small project consisting of a few C and/or C++ source and header files, you can leave INPUT tag empty and doxygen will search for sources in the current directory.&lt;/li&gt;&lt;li&gt;FILE_PATTERNS: If the value of the INPUT tag contains directories, you can use the FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and *.h) to filter out the source-files in the directories. If left blank the following patterns are tested: *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm&lt;/li&gt;&lt;li&gt;EXAMPLE_PATH: The EXAMPLE_PATH tag can be used to specify one or more files or directories that contain example code fragments that are included (see the include command).&lt;/li&gt;&lt;li&gt;From line 613 on, you can configure the documentation format and details. Two interesting tags for the HTML documentation are the HTML_HEADER and HTML_FOOTER. Just give the path to two html files where the headers and footers are provided (in html format) to include them in your doc. Another nice tag is the PDF_HYPERLINKS that allows to produce a pdf file with browsable links (I guess that you will also need the &lt;code&gt;hyperref&lt;/code&gt; LaTeX package installed)&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;4. Running &lt;code&gt;doxygen&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now, you can generate the documentation file by running &lt;code&gt;doxygen &lt;config-file&gt;&lt;/code&gt;. Note that if you decide to generate LaTeX and pdf documentation, there is a Makefile in the latex directory that will buid the pdf files.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536789511101049?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536789511101049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536789511101049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536789511101049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536789511101049'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/getting-your-hands-on-doxygen.html' title='Getting your hands on Doxygen'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536783045873707</id><published>2006-08-12T08:29:00.000+01:00</published><updated>2007-10-15T20:39:45.179+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Steve Yegge'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><title type='text'>You and Math</title><content type='html'>Steve Yegge has a very interesting post on his blog: &lt;a href="http://steve-yegge.blogspot.com/2006/03/math-for-programmers.html"&gt; Math For Programmers&lt;/a&gt;. For me it even goes beyond the ambigous relation between mathematics and programmers. He indeed mentions what kind of math is of importance for the average programmer, but far more important (for me) is the way he describes how to build a real relationship with math, as opposed to the way math is (often) taught in school (at whatever level). The overall style and advices make you feel very relax with the learning process: &lt;em&gt;It’s up to you, you might very well do without, but it can be fun, give it a try when you want. You have time, there is no need to study in a hurry. If something gets too boring or too difficult, read something else.&lt;/em&gt;&lt;br /&gt;There is also a list of books that the author has found very interesting. I just want to mention one, &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0262011212/qid%3D1142679886/026-4801215-3035612"&gt;John Von Neumann and the Origins of Modern Computing&lt;/a&gt;, a book I want to read in the future. And just here another interesting link, &lt;a href="http://www.cabochon.com/%7Estevey/blog-rants/blog-math-every-day.html"&gt;Math Every Day&lt;/a&gt;, he also points in the article.&lt;br /&gt;This is a very interesting article for every one that shows interest, even if only a little one, in mathematics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536783045873707?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536783045873707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536783045873707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536783045873707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536783045873707'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/you-and-math.html' title='You and Math'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536766201958454</id><published>2006-08-12T08:27:00.000+01:00</published><updated>2007-10-15T20:37:24.062+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><category scheme='http://www.blogger.com/atom/ns#' term='alignment'/><category scheme='http://www.blogger.com/atom/ns#' term='texshade'/><category scheme='http://www.blogger.com/atom/ns#' term='memory'/><title type='text'>TeXshade Memory Shortness</title><content type='html'>I am testing &lt;a href="http://homepages.uni-tuebingen.de/beitz/txe.html"&gt;TeXshade&lt;/a&gt;, a DNA/proteine alignemnt LaTeX package quite intensively for the moment. It allows to customize the protein ou DNA alignment in an extremely elaborated way. Even though it is much more powerful for amino acid alignments (it easily plots 3 structure or chemical/physical propoerties), I use it for DNA sequences. &lt;div class="storycontent"&gt;  &lt;p&gt;First important thing I want to mention is the greedy memory behaviour of TeXshade. As soon as you alignments get a little bit long (about 1000 residues per sequence according the manual, and that’s easily the case with DNA sequences), you will get a &lt;code&gt;TeX capacity exceede&lt;/code&gt;. &lt;/p&gt;  &lt;p&gt;Here is what you should do:&lt;br /&gt;&lt;br /&gt;modifiy the &lt;code&gt;texmf.cnf&lt;/code&gt; file:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Modifiy the &lt;code&gt;main_memory&lt;/code&gt; variable to some higher value (I set it to  8000000).&lt;/li&gt;&lt;li&gt; Search for &lt;code&gt;stack_size&lt;/code&gt; and set it to a higher value (10000 works for me)&lt;/li&gt;&lt;li&gt;I also had to change the values of the &lt;code&gt;save_size&lt;/code&gt; (I use 40000)&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;There might be complains by TEX about further speciﬁc parameters. After this you have to run &lt;code&gt;texconﬁg init&lt;/code&gt; to change LaTeX’s config and try again.&lt;/p&gt;  &lt;p&gt;Note that these values work for me but depending on your hardware specs (I guess RAM size), they might not. I have 512M of RAM installed.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536766201958454?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536766201958454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536766201958454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536766201958454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536766201958454'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/texshade-memory-shortness.html' title='TeXshade Memory Shortness'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536755320313425</id><published>2006-08-12T08:21:00.000+01:00</published><updated>2006-08-12T08:25:53.206+01:00</updated><title type='text'>TCP/IP configuration for the HP Laserjet 4</title><content type='html'>I had to reconfigure my LAN printer, a HP Laserjet4. The configuration pannel is not very intuitive (at least fot me) as everytime you enter it, you get the default values, even if later in the procedure you old values are saved.&lt;br /&gt;&lt;div class="storycontent"&gt;&lt;p&gt; I found &lt;a href="http://www.perpetualpc.net/jetdirectconfig.html"&gt;this&lt;/a&gt; nice description on &lt;a href="http://www.perpetualpc.net/index.html"&gt;perpetual pc&lt;/a&gt;. Here is a copy of the steps I needed (and will likely need again):&lt;/p&gt;    &lt;p&gt;&lt;code&gt;To configure TCP/IP from the printer:&lt;br /&gt;(The star means selected or entered; without the star&lt;br /&gt;   the choice you make is not saved; hit enter to get the star and save your choice)&lt;br /&gt;1. Hit the offline button&lt;br /&gt;2. Hit the menu button until you see AUX IO MENU&lt;br /&gt;3. Hit the item button until you see CFG NETWORK = NO&lt;br /&gt;4. Hit the + button to get CFG NETWORK = YES&lt;br /&gt;5. Hit the enter button to get  CFG NETWORK = YES *(this saves your choice)&lt;br /&gt;6. Hit the item button to get CFG TCP/IP = NO&lt;br /&gt;7. Hit the + button to get CFG TCP/IP = YES&lt;br /&gt;8. Hit the enter button to get CFG TCP/IP = YES *(this saves your choice)&lt;br /&gt;9. Hit the item button to get IP BYTE 1 = 0&lt;br /&gt;(This could be any number between 0 and 255, hitting plus increases the number in steps of 1 hold the plus button down to automatically advance the numbers. Hold down the shift button red letters to make numbers go backwards this is where you set the ip address of the printer. This number will be the first number in your address like this: 192.168.1.1, this will be the 192 part. before you hit the the item button again to get to IP BYTE 2 = 0 (or what ever number it is set to) be sure you have hit enter to change the entry and save it.&lt;br /&gt;10. Hit the item button to get IP BYTE 2 = 0&lt;br /&gt;11. Hit the item button to get IP BYTE 3 = 0&lt;br /&gt;12. Hit the itme button to get IP BYTE 4 = 0&lt;br /&gt;13. As you continue to hit the item button you will get something like this SM BYTE =  or LS BYTE = or GW BYTE =  these stand for Subnet Mask, GateWay SysLoGserver. You may want to set these too. Again, be sure to hit enter to get the * which means you have saved the value. You can always test your entry procedure by using the test menu above that will tell you if you successfully changed the ip address, subnet mask, and defalult gateway.&lt;/code&gt;&lt;/p&gt;&lt;p&gt;If you are using dhcp there is a menu for that too. I think it's bootp.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Both of these methods worked for me.&lt;br /&gt;&lt;/p&gt;And &lt;a href="http://www.uktsupport.co.uk/hp/faq/laserjet.htm"&gt;here&lt;/a&gt; a listing to a list of HP LaserJet Status/Error Codes. Always helpfull.&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536755320313425?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536755320313425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536755320313425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536755320313425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536755320313425'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/tcpip-configuration-for-hp-laserjet-4.html' title='TCP/IP configuration for the HP Laserjet 4'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536726618997634</id><published>2006-08-12T08:19:00.000+01:00</published><updated>2007-01-06T20:45:17.331Z</updated><title type='text'>Joel About CS Teaching</title><content type='html'>&lt;div class="storycontent"&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; has an article about &lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;The Perils of JavaSchools&lt;/a&gt; where he states that Java si too easy to learn to master some more complexe issues in programming. I quotes here a few nice sentences from the article.&lt;br /&gt;&lt;br /&gt;This one is really funny:&lt;br /&gt;&lt;br /&gt; &lt;blockquote style="font-style: italic;"&gt;&lt;p&gt;the fact that Java is not hard enough is a feature, not a bug&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;This one should should encourage CS students (that are studying for the coming exams at the moment):&lt;/p&gt;  &lt;blockquote style="font-style: italic;"&gt;&lt;p&gt;If I may be so brash, it has been my humble experience that there are two things traditionally taught in universities as a part of a computer science curriculum which many people just never really fully comprehend: pointers and recursion.&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;And here another one&lt;/p&gt;  &lt;blockquote style="font-style: italic;"&gt;&lt;p&gt;But what about the CS mission of CS departments? […] It shouldn’t be their job to train people to work in industry. […] They’re supposed to be giving students the fundamental tools to live their lives, not preparing them for their first weeks on the job. Right?&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;And last but not least:&lt;/p&gt;  &lt;blockquote style="font-style: italic;"&gt;&lt;p&gt;CS is proofs (recursion), algorithms (recursion), languages (lambda calculus), operating systems (pointers), compilers (lambda calculus) […]&lt;/p&gt;&lt;/blockquote&gt;  &lt;p&gt;Very interesting from my point of view: after graduation in Biology I started CS education while working in a research lab. If that’s not motivating…&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536726618997634?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536726618997634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536726618997634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536726618997634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536726618997634'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/joel-about-cs-teaching.html' title='Joel About CS Teaching'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115536704285076542</id><published>2006-08-12T08:16:00.000+01:00</published><updated>2006-08-12T08:17:22.863+01:00</updated><title type='text'>Journal of Negative Results</title><content type='html'>&lt;div class="storycontent"&gt;&lt;em&gt;The primary intention of &lt;a href="http://www.jnr-eeb.org/index.php"&gt;Journal of Negative Results&lt;/a&gt; is to provide an online-medium for the publication of peer-reviewed, sound scientific work in ecology and evolutionary biology that may otherwise remain unknown. In recent years, the trend has been to publish only studies with ’significant’ results and to ignore studies that seem uneventful. This may lead to a biased, perhaps untrue, representation of what exists in nature. By counter-balancing such selective reporting, JNR aims to expand the capacity for formulating generalizations. The work to be published in JNR will include studies that 1) test novel or established hypotheses/theories that yield negative or dissenting results, or 2) replicate work published previously (in either cognate or different systems). Short notes on studies in which the data are biologically interesting but lack statistical power are also welcome. JNR also intends to present the results of studies in a format suitable for formal meta-analysis. Research quality is of highest importance for JNR. Manuscripts will be assessed for publication on this basis - positive results or support for current scientific dogma are not essential.&lt;/em&gt;&lt;p&gt; &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115536704285076542?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115536704285076542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115536704285076542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536704285076542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115536704285076542'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/journal-of-negative-results.html' title='Journal of Negative Results'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115532417443053693</id><published>2006-08-11T20:22:00.000+01:00</published><updated>2006-08-11T20:23:56.696+01:00</updated><title type='text'>Scientific publicatons are mostly wrong...</title><content type='html'>&lt;div class="storycontent"&gt;&lt;a href="http://medicine.plosjournals.org/perlserv/?request=get-document&amp;amp;doi=10%2E1371%2Fjournal%2Epmed%2E0020124"&gt;This&lt;/a&gt; publication, by John P. A. Ioannidis, an epidemiologist at the University of Ioannina School of Medicine in Greece claims, if correct, that most scientific research papers are wrong. Reasons are small sample sizes, poor study design, researcher bias, selective reporting and other problems combine to make most research findings false. The paper does not show that any particular scientific result of paper is wrong, but claims that the odds are only 1 in 20 that the results of a randomly chosen paper.  &lt;p&gt;This should not be taken as a dismiss of scientific literature, as according to Solomon Snyder, senior editor at the Proceedings of the National Academy of Sciences (&lt;a href="http://www.pnas.org/"&gt;PNAS&lt;/a&gt;), &lt;em&gt;When I read the literature, I’m not reading it to find proof like a textbook. I’m reading to get ideas. So even if something is wrong with the paper, if they have the kernel of a novel idea, that’s something to think about&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Sceince works by setting hypothesis and proving them right or wrong. Making wrong statements is part of the scientific process. Nevertheless, even if creativity is the most important part in research, rigor when drawing conclusions should not be neglected.&lt;br /&gt;Scientist have or would like to have, or believe they have an important role in our society: they are the ones that are supposed to be objective, that are in official commissions stating on important issues for our future, that work in these ivory tower of knowledge and research, the universities. But how is it that among themselves, objective interpretation of results does not seem to that valuable?&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115532417443053693?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115532417443053693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115532417443053693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115532417443053693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115532417443053693'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/scientific-publicatons-are-mostly.html' title='Scientific publicatons are mostly wrong...'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115532407825522506</id><published>2006-08-11T20:17:00.000+01:00</published><updated>2007-10-15T20:38:51.839+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latitude C640'/><category scheme='http://www.blogger.com/atom/ns#' term='laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='BIOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Dell'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Flashing the DELL latitude C640 BIOS</title><content type='html'>Recently, when leaving my notebook compiling (yes, I am using gentoo ;-) after work on the way back home, I found it off on arrival. On startup, I got a message with Error Code #M1004. It was possible to go on and finish the boot process, but the fans run at max speed without stopping. On normal usage, I find the computer already way too noisy, so this was absolutely unbearable.&lt;br /&gt;&lt;br /&gt;A bit a googling later, the solution seemed clear: update the BIOS and/or use the dell utility to remove the error message. The utilities for BIOS upgrade and error message removal can be found &lt;a href="http://support.dell.com/support/downloads/format.aspx?c=us&amp;cs=19&amp;amp;l=en&amp;s=dhs&amp;amp;SystemID=LAT_PNT_P4N_C640&amp;os=LNUX&amp;amp;osl=en&amp;deviceid=2652&amp;amp;typecnt=1&amp;releaseid=R71684&amp;amp;vercnt=9"&gt;here&lt;/a&gt;, on the Dell homepage. Elsewhere (link broken), it is stated, that it is even possible to update the BIOS without using the floppy drive. Unfortunately, this seems to work only when run from a Windows system (at least it did not from Linux using wine). So, I decide to use the C640_A10.exe self-executable file to create a bootable floppy disk to update from A03 to A10 BIOS version.&lt;br /&gt;&lt;br /&gt;I plugged the floppy reader in the laptop and run the follwing commands:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;fdformat /dev/fd0h1440&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;mkfs.msdos /mnt/floppy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and, after mounting the floppy, run wine C640_A10.exe.&lt;br /&gt;&lt;br /&gt;Unfortunately, I got this ugly message The floppy disk size and the image size does not match. After trying a few other things (formatting the floppy with vfat fs, using gloppy from a ubuntu live cd), I found an unused box with Windows installed, so I used it to format the floppy disk. After that, the installation of the disk image on the floppy went well and I rebooted with the newly created floppy.&lt;br /&gt;&lt;br /&gt;The flashing of the BIOS was really easy, as every keystroke was explained during the process. The floppy also automatically run the M1004 error message removing tool.&lt;br /&gt;&lt;br /&gt;I now have version A10 installed and the crazy fan behaviour is gone. Nevertheless, having to use Windows to format the floppy leaves a bad taste in my mouth. I don’t know if this is my fault (wrong formatting parameters) or a problem with the self-extracting file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115532407825522506?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115532407825522506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115532407825522506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115532407825522506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115532407825522506'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/flashing-dell-latitude-c640-bios.html' title='Flashing the DELL latitude C640 BIOS'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115515057097204216</id><published>2006-08-09T20:00:00.000+01:00</published><updated>2006-08-12T08:47:53.503+01:00</updated><title type='text'>S'amuser en réflechissant</title><content type='html'>&lt;h4&gt;Strategies gagnantes&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Voici une série de petits jeux à jouer à deux. Comment faire pour gagner à coup sûr?&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Prenons deux joueurs autour d’une marguerite à 16 pétales arrangés symétriqeument autour de centre. Les joueurs peuvent chacun à leur tour enlever un pétale ou deux si ceux-ci sont adjacents et le gagnant sera celui qui enlevera le dernier pétale. Quelle stratégie garantira la victoire, et à quel joueur?&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Si le joueur qui tire un pétale en deuxième suit la stratégie suivante, il est sûr de gagner: il doit toujours enlever le(s) pétale(s) opposés à ceux enlevés par l’autre. Ainsi, après la première série de pétales arrachés, la fleur sera divisée en deux parties symétriques et il ne sera pas possible d’enlever un pétale à chacune d’entre elles en une fois. Il suffira au second joueur de toujours maintenir cette symétrie pour être assuré d’enlever le dernier&lt;br /&gt;pétale.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Reprenons nos deux joueurs, et plaçons les devant une table rectangulaire. On leur fournit un nombre infini de pièces de monnaie. Les tailles des pièces peuvent varier, mais chaque type de pièce est présent en nombre illimité. Chaque joueur va déposer une seule pièce sur la table sans que celle-ci ne touche une autre ou ne dépasse du bord de la table. Le gagnant est celui qui plaçera la dernière pièe et il remportera tout l’argent.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;La stratégie est similaire à celle de la marguerite, mais cette fois c’est le joueur qui commence qui sera assuré de la victoire. Pour cela il doit commencer par déposer la premiè pièce exactement au milieu de la table de telle manière qu’elle soit divisée en quatre rectangles de même taille. A partir de ce moment, ce joueur devra déposer les pièces suivantes symétriquement (par rapport à la pièce centrale - la toute première) à celles plaçées par l’adversaire. Si on trace deux droites perpendiculaires passant toutes les deux par la pièce centrale et parallèles aux côtés de la table, si le second joueur place sa pièce aux coordonnées (x,y), il faudra la mettre en (-x,-y).&lt;/p&gt; &lt;p&gt;&lt;i&gt;Les deux joueurs sont devant une grille de points. La taille n’est pas spécifiée. Le joueur A relie les points par des segments horizontaux ou verticaux bleus, le joueur B fait de même en rouge. Chaque joueur traçe un trait à la fois sans superposer son trait à un autre. Le joueur A gagne s’il parvient à traçer une boucle fermée; le joueur B gagne s’il l’en empêche.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7508/3522/1600/grid.1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/7508/3522/320/grid.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; Pour pouvoir boucler un traçé, le joueur A devra nécessairement avoir un coin supérieur droit (figure a). Pour gagner, le joueur B devra s’assurer de ne jamais laisser le joueur A obtenir un tel coin: si A dessine une barre horizontale, il faudra le contrer en complétant le coin supérieur droit comme sur la figure b; si A dessine une barre verticale, il faudra le contrer en complétant le coin supérieur droit comme sur la figure c.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Les tours de Hanoi&lt;/h4&gt;&lt;br /&gt;Le casse-tête des Tours de Hanoi a été inventé par le mathématicien français Edouard Lucas en 1883. Il consite en trois piquets, sur l’un desquels sont empilés une succession de disques, troués en leur centre, et arrangés dans un ordre croissant de bas vers le haut. Le but est de déplacer la tour en ne bougeant qu’un seul disque à la fois sans jamais superposer un disque sur un autre de diamètre inférieur. En combien de mouvement de disque peut-on déplacer une tour de n disques?  &lt;p&gt;Commençons par une tour d’un seul disque. Le résultat est 1 et notons le T&lt;sub&gt;1&lt;/sub&gt;=1. Pour deux disques, on déplace le disque supérieur au piquet central, le disque du bas au piquet final, et on remet le disque supérieur dessus. On a T&lt;sub&gt;2&lt;/sub&gt;=3. On a aussi que T&lt;sub&gt;0&lt;/sub&gt;=0 (il n’y a rien à déplacer).&lt;/p&gt;  &lt;p&gt;Quelles sont les étapes pour trois disques? Le plus simple serait de déplacer les deux disques du dessus au piquet central, déplacer le plus gros disque du piquet de départ vers la déstination finale et finir pas remettre les deux disques sur le plus gros. Cette procédure n’est pas autoisée, car on déplace deux disques en même temps, mais cela nous donne une bonne indication de comment procéder. En effet, déplacer un tour de deux disque est assez facile. En généralisant cette approche, on trouve donc que pour déplacer une tour de n disques, &lt;i&gt;il suffit&lt;/i&gt; de déplacer les n-1 disques vers le piquet central, tranférer le dernier disque vers le troisième piquet et remmettre les n-1 dessus. On a donc &lt;code&gt;T&lt;sub&gt;n&lt;/sub&gt; = 2 * T&lt;sub&gt;n-1&lt;/sub&gt; + 1&lt;/code&gt; pour n &gt; 0.&lt;/p&gt;  &lt;p&gt;Cette définiton récursive nous permet de calculer le nombre de déplacement pour n’importe quel nombre de disques (T&lt;sub&gt;n&lt;/sub&gt;), mais le calcul nécéssite de calculer T&lt;sub&gt;n-1&lt;/sub&gt;, T&lt;sub&gt;n-2&lt;/sub&gt;, … jusqu’à une valeur connue, ce qui sera fastidieux pour des n grands.&lt;/p&gt;  &lt;p&gt;Revenons aux petites valeurs de n. Nous avions déjà T&lt;sub&gt;1&lt;/sub&gt;=1, T&lt;sub&gt;2&lt;/sub&gt;=3 et on peut calculer T&lt;sub&gt;3&lt;/sub&gt;=2*3+1=7, T&lt;sub&gt;4&lt;/sub&gt;=2*7+1=15, T&lt;sub&gt;5&lt;/sub&gt;=2*15+1=31, T&lt;sub&gt;6&lt;/sub&gt;=2*31+1=63… Cette suite de nombre nous suggère que &lt;code&gt;T&lt;sub&gt;n&lt;/sub&gt; = 2&lt;sup&gt;n&lt;/sup&gt; - 1&lt;/code&gt;, en tout cas jusque n=6.&lt;/p&gt;  &lt;p&gt;Démontrons par induction/récurrence que cette formule fermée est correcte:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Cette formule est correcte pour n=1: 2&lt;sup&gt;1&lt;/sup&gt; - 1 = 3.&lt;/li&gt;&lt;li&gt;Supponsons &lt;code&gt;T&lt;sub&gt;n&lt;/sub&gt; = 2&lt;sup&gt;n&lt;/sup&gt; - 1&lt;/code&gt; correcte pour tout n (c’est notre hypothèse de récurrence), et démontrons que c’est toujours le cas pour  n+1.&lt;/li&gt;&lt;li&gt;&lt;code&gt;T&lt;sub&gt;n&lt;/sub&gt; = 2 * T&lt;sub&gt;n-1&lt;/sub&gt; + 1 = 2 * (2&lt;sup&gt;n-1&lt;/sup&gt; - 1) + 1 = 2 * 2&lt;sup&gt;n-1&lt;/sup&gt; - 2 + 1  = 2&lt;sup&gt;n&lt;/sup&gt; - &lt;span style="font-family:Georgia,serif;"&gt;1&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Changer ou ne pas changer?&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Vous participez au dernier tour du grand jeu télévisé et vous êtes sur le point de gagner le gros lot. Une dernière épreuve: choisir, parmis trois choix possibles, le rideau derrière lequel se trouve le gros lot en question. En cas d’échec, vous perdez tout.&lt;/p&gt;Après votre choix, quel qu’il soit et sans ouvrir le rideau que vous avez choisit, le présentateur ouvre un autre rideau, celui-là toujours perdant, et vous donne la possibilité de (1) maintenir votre choix ou (2) choisir l’autre rideau encore fermé. Que faites-vous? Vaut-il mieux rester sur son choix, changer de rideau ou est-ce que ça revient au même?&lt;p&gt;Lors du premier choix, nous avons clairement une chance sur trois de trouver le bon rideau. Après l’ouverture d’un rideau perdant, nous avons de l’information supplémantaire, ce qui doit nécessairement changer la donne. Si nous ne changeons pas de rideau, nous restons avec une chance sur trois de victoire. &lt;/p&gt;&lt;p&gt;Le tableau ci-dessous reprend les trois possibiltés que l’on peut rencontrer, à savoir que lors du premier choix, le joueur avait choisit le bon rideau (première ligne) ou un mauvais (deux possibilités, deuxième et troisième ligne).&lt;/p&gt;&lt;table style="width: 288px; height: 171px;" summary="tableau des probabilites" border="1"&gt; &lt;tbody align="center"&gt;&lt;tr&gt;&lt;th&gt;A&lt;sub&gt;1&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;B&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;C&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;A&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;B&lt;sub&gt;1&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;C&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;A&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;B&lt;sub&gt;0&lt;/sub&gt;&lt;/th&gt;&lt;th&gt;C&lt;sub&gt;1&lt;/sub&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Tableau des probabilites de gagner après l’ouverture d’un rideau perdant. Les trois rideaux sont dénotés A, B et C. Le rideau gagnant est noté d’un indice 1, les rideaux perdant d’un indice 0.&lt;br /&gt;&lt;p&gt;Si le joueur change à tout les coups, il ne peut perdre que si au départ il avait choisit le bon rideaux. S’il avait choisit un des deux autres, il gagne nécessairement en changeant son choix. Dès lors, en changeant toujours, le joueur aura un seule chance sur trois de &lt;b&gt;perdre&lt;/b&gt;, et donc deux chances sur trois de &lt;b&gt;gagner&lt;/b&gt;.&lt;/p&gt;Conclusion, il est préférable de changer de rideau.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Si on entourait la terre avec une corde...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    Supposons que la terre soit une sphère bien lisse et qu’on l’entoure, au niveau de l’équateur, au ras du sol, avec une corde. Supposons maintenant que l’on ajoute a cette corde 1 mètre. A quelle hauteur la corde sera du sol?&lt;div class="storycontent"&gt;  &lt;p&gt;Faisons exactement la même chose avec une orange. A quelle distance de la surface du fruit sera la corde?&lt;/p&gt;  &lt;p&gt;Dans les deux cas, la corde sera a 15,9154… cm de la surface de la sphère!&lt;/p&gt;  &lt;p&gt;En effet, le diamètre d’un cercle est calculé par la formule &lt;code&gt;2 π r&lt;/code&gt;, ou &lt;code&gt;r&lt;/code&gt; est le rayon du cercle. Nous cherchons a connaître la distance entre la corde et la surface de la sphère apres avoir ajouté 1 mètre de corde. Disons que le diamètre de la terre soit&lt;br /&gt;40.000 km. Apres avoir ajouté 1 m de corde, on a:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;2 π (r + ε) = 4 * 10 e&lt;sup&gt;7&lt;/sup&gt; + 1&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;ou ε est l’accroissement du rayon, et donc le distance à laquelle se situera la corde. On peut simplifier par &lt;code&gt;2 π r&lt;/code&gt; de part et d’autre de l’égalité et on obtient:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;r + ε = r + (1 / 2 π)&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;puisque 4 * 10 e&lt;sup&gt;7&lt;/sup&gt; mètres vallent &lt;code&gt;2 π r&lt;/code&gt; (rayon en mètres).&lt;/p&gt;  &lt;p&gt;Si on continue à simplifier, on trouve&lt;/p&gt;  &lt;p&gt;&lt;code&gt;ε = 1 / 2 π&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;qui vaut 0.159154… , et donc la corde se situera a 0.159154 m, soit 15.9154… cm de la surface. On voit que ε est indépendant du rayon et dépend uniquement de la longueur ajoutée (dans notre cas 1 mètre).&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115515057097204216?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115515057097204216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115515057097204216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115515057097204216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115515057097204216'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/samuser-en-rflechissant.html' title='S&apos;amuser en réflechissant'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32263162.post-115485352655646990</id><published>2006-08-06T09:38:00.000+01:00</published><updated>2007-10-15T20:38:06.831+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips&apos;n tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='carriage return'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='tr'/><title type='text'>carriage returns</title><content type='html'>One of the things that are really annoying when working in an environment with multiple OS, is getting a file where, for example, the are carriage returns (&lt;code&gt;^M&lt;/code&gt;) instead of newlines (&lt;code&gt;\n&lt;/code&gt;). &lt;code&gt;tr&lt;/code&gt; is a nice tool for such annoyances.&lt;div class="storycontent"&gt;  &lt;p&gt;&lt;code&gt;tr&lt;/code&gt; is a program to &lt;em&gt;translate or delete characters&lt;/em&gt;, as mentionned in the manual. The basic usage is &lt;code&gt;tr [OPTION]... SET1 [SET2]&lt;/code&gt; (see &lt;code&gt;man tr&lt;/code&gt; or &lt;code&gt;info tr&lt;/code&gt; for more info).&lt;br /&gt;In our case, when using a file comming from a Mac OS or DOS/Windows system, we want to get rid of the &lt;code&gt;^M&lt;/code&gt; (SET1) and replace them with &lt;code&gt;\n&lt;/code&gt; (newlines) (SET2). &lt;/p&gt;  &lt;p&gt;For a Mac OS file, this can be done with the command&lt;br /&gt;&lt;code&gt;$ tr '\r' '\n' &amp;lt;  file.mac &amp;gt; file.unix&lt;/code&gt;&lt;br /&gt;that replaces all the carriage returns by newlines.&lt;/p&gt;  &lt;p&gt;For a DOS/Windows file, where the carriage return is followed by a new line, the command&lt;br /&gt;&lt;code&gt;$ tr -d '\r' &amp;lt;  file.win &amp;gt; file.unix &lt;/code&gt;&lt;br /&gt;deletes the carriage returns.&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32263162-115485352655646990?l=foofish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://foofish.blogspot.com/feeds/115485352655646990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32263162&amp;postID=115485352655646990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115485352655646990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32263162/posts/default/115485352655646990'/><link rel='alternate' type='text/html' href='http://foofish.blogspot.com/2006/08/carriage-returns.html' title='carriage returns'/><author><name>Laurent Gatto</name><uri>https://profiles.google.com/103600588885536394602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dR_Q2gVnMP0/AAAAAAAAAAI/AAAAAAAAAAA/h9Qo5Ll9sKc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
