<?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-6096704822492180681</id><updated>2011-11-05T14:56:38.064+01:00</updated><category term='linux'/><category term='javascript'/><category term='mysql'/><category term='en'/><category term='books'/><category term='macosx'/><category term='politics'/><category term='perl'/><category term='colours'/><category term='france'/><category term='ssh'/><category term='music'/><category term='dream'/><category term='diff'/><category term='computers'/><category term='drwho'/><category term='creationism'/><category term='gnome'/><category term='literature'/><category term='dell'/><category term='photo'/><category term='git'/><category term='shell'/><category term='flickr'/><category term='brassband'/><category term='orm'/><category term='history'/><category term='religion'/><category term='video'/><category term='irc'/><category term='vim'/><category term='mashup'/><category term='maps'/><category term='ubuntu'/><category term='far-right'/><category term='painting'/><category term='munin'/><category term='science'/><title type='text'>ConstType</title><subtitle type='html'>Attempts of a late comer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-709176512043077072</id><published>2011-02-15T12:10:00.002+01:00</published><updated>2011-02-15T12:18:59.202+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Dropbox config change from the CLI</title><content type='html'>I use &lt;a href="http://dropbox.com"&gt;Dropbox&lt;/a&gt; on my MacBook. It's neat. However for some reason it's not really autodetecting my proxy, which completely set up via a master proxy.pac file.&lt;br /&gt;&lt;br /&gt;I have already a shell script that takes care of adjusting my SSH configuration and my custom proxy.pac depending on where I am. So I just extended it to change Dropbox's configuration and restart it. Here's the gist of it:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/827397.js?file=change-dropbox-proxytype.sh"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-709176512043077072?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/709176512043077072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=709176512043077072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/709176512043077072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/709176512043077072'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2011/02/dropbox-config-change-from-cli.html' title='Dropbox config change from the CLI'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3176878996008342105</id><published>2010-04-23T23:19:00.002+02:00</published><updated>2010-04-23T23:21:58.655+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>The nature of history</title><content type='html'>As an historian, this strikes me as words of wisdom :&lt;br /&gt;&lt;blockquote&gt;You can't even change the future, in the sense that you can only change the present one moment at a time, stubbornly, until the future unwinds itself into the stories of our lives.&lt;br /&gt;-- &lt;i&gt;Larry Wall in &lt;a href="http://www.perlmonks.org/?node_id=836573"&gt;perlmonks&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Paul Veyne and Michel Foucault would not disagree.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3176878996008342105?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3176878996008342105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3176878996008342105' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3176878996008342105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3176878996008342105'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2010/04/nature-of-history.html' title='The nature of history'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5023151813552757131</id><published>2010-04-02T11:48:00.003+02:00</published><updated>2010-04-02T17:15:16.711+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>The origins of sanctity of marriage</title><content type='html'>In &lt;i&gt;The Knight, The Lady, and the Priest&lt;/i&gt;, &lt;a href="http://en.wikipedia.org/wiki/Georges_Duby"&gt;Georges Duby&lt;/a&gt;, historian and medievist, analyses the transformations of occidental society between the Xth and the XIIth centuries, with some focus on the marriage institution.&lt;br /&gt;&lt;br /&gt;During this period of time, a new feudal system was progressively put in place and a new balance of power was found in the occidental kingdoms. As a consequence, the patrilineal transmission of domains and titles began to become the rule; to sustain this societal change, it was necessary to make the marriage more rigid, notably by disallowing the common practice of divorces, marriages by rapt, and repudiations.&lt;br /&gt;&lt;br /&gt;And that's where the Church intervenes. Previously, the Christian religion didn't care much about marriage. Jesus didn't -- he declared that in the kingdom of God, there will be no husbands or wives; actually he didn't care much about family values in general (see Luke 14:26 for example). Paul, the co-founder of Christianism, wasn't very concerned either: it's better to be married than to burn, did he wrote, but it was clear that the true Christian was to be celibate in his mind.&lt;br /&gt;&lt;br /&gt;So the Church started to introduce during the XIth century mandatory marriage blessings, and then, a couple generations later, full-fledged ceremonies. Pope Gregory VII forbid the marriage or even concubinage of priests. Marriages that were not approved by a priest were declared invalid. Nobles, even kings, were excommunicated when they didn't follow the new rules. Progressively it became a sacrament.&lt;br /&gt;&lt;br /&gt;There was some resistance to the new institutions; as usual in those Christian times, they took the form of heresy, although the heretics, this time, weren't the reformers, but the traditionalists.&lt;br /&gt;&lt;br /&gt;This new form of marriage has stuck until us. But remember: when someone talks about &lt;a href="http://www.flickr.com/photos/pargon/4469686974/in/set-72157623594187379/"&gt;sanctity of marriage&lt;/a&gt;, he's actually speaking about an opportunist theological innovation invented by some French and Italian bishops during the eleventh century for purely political reasons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5023151813552757131?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5023151813552757131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5023151813552757131' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5023151813552757131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5023151813552757131'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2010/04/origins-of-sanctify-of-marriage.html' title='The origins of sanctity of marriage'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8877520411623336283</id><published>2009-11-03T12:04:00.000+01:00</published><updated>2009-11-03T12:06:07.031+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu upgrade woes</title><content type='html'>After having upgraded my laptop (a Dell Latitude D420) to Ubuntu Karmic Koala, it refused to boot. The normal boot process was only showing the usual splash screen, that only consists in the Ubuntu logo, then switched to a black screen, where nothing was possible anymore -- no switching to a text console, nothing. Damn.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;Here's how I fixed that (in the hope that could be useful to someone). I found out, by booting without the splash screen, that the root partition wasn't mounted on boot, which was the cause of all problems. For the record, to boot without the splash screen, you have to select the kernel you want in the grub menu, edit its command-line, and remove the words "quiet splash" from it.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;So I booted on the rescue kernel (by selecting it in grub), which gave me a basic busybox shell in RAM. There, I mounted manually my root partition, &lt;tt&gt;/dev/sda1&lt;/tt&gt;, to a newly created directory &lt;tt&gt;/grumpf&lt;/tt&gt;. I moved &lt;tt&gt;/grumpf/etc/fstab&lt;/tt&gt; away and wrote a basic working fstab with the commands:&lt;br /&gt;&lt;pre&gt;echo proc /proc proc defaults 0 0 &amp;gt; /grumpf/etc/fstab&lt;br /&gt;echo /dev/sda1 / ext3 defaults,errors=remount-ro 0 1 &amp;gt;&amp;gt; /grumpf/etc/fstab&lt;/pre&gt;&lt;br /&gt;Then I rebooted. In the grub selection menu, I selected the regular kernel, but edited its command-line: I replaced the part &lt;tt&gt;root=UUID=deafbeef...&lt;/tt&gt; by &lt;tt&gt;root=/dev/sda1&lt;/tt&gt;, actually telling grub to look up the device by symbolic name instead of UUID. At this point the computer successfully booted.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;Once there, I could log in as root, edit &lt;tt&gt;/boot/grub/menu.lst&lt;/tt&gt; to make permanent my changes to the kernel command-line, and complete the fstab with appropriate lines for the swap, the cdrom and my &lt;tt&gt;/home&lt;/tt&gt; partition. One last reboot, and voil&amp;agrave;, the system was fully functional again.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;This doesn't explain why device UUIDs aren't supported in the boot sequence on that hardware, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8877520411623336283?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8877520411623336283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8877520411623336283' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8877520411623336283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8877520411623336283'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/11/ubuntu-upgrade-woes.html' title='Ubuntu upgrade woes'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6481074302356850529</id><published>2009-07-27T19:49:00.000+02:00</published><updated>2009-07-27T19:50:44.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Smart match to-do</title><content type='html'>The "new" smart match in Perl 5.10.1 can still be ameliorated.&lt;br /&gt;&lt;br /&gt;Unlike what will happen with the changes between 5.10.0 and 5.10.1, which won't be backwards-compatible, the futher improvements to smart matching will be considered only if they don't break code. However the semantics can be extended.&lt;br /&gt;&lt;br /&gt;Here's an example. The following code, that prints "ok" under 5.10.0, will now issue a run-time error :&lt;br /&gt;&lt;pre&gt;use 5.10.1;&lt;br /&gt;$obj = bless { foo =&gt; 42 }; &lt;br /&gt;say "ok" if 'foo' ~~ $obj;&lt;/pre&gt;&lt;br /&gt;The new error, &lt;i&gt;Smart matching a non-overloaded object breaks encapsulation&lt;/i&gt;, which was suggested by Ricardo Signes, avoids to access by mistake the implementation details of an object.&lt;br /&gt;&lt;br /&gt;However, from inside a method, it can be completely correct to use ~~ on the object's underlying reference. That's no longer possible in 5.10.1, unless you make a shallow copy of the object, for example with:&lt;br /&gt;&lt;pre&gt;'foo' ~~ { %$obj }&lt;/pre&gt;&lt;br /&gt;Which won't be very performant if you have lots of keys there.&lt;br /&gt;&lt;br /&gt;That's why I recently added in &lt;i&gt;perltodo&lt;/i&gt; this little item:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Currently &lt;tt&gt;$foo ~~ $object&lt;/tt&gt; will die with the message "Smart matching a non-overloaded object breaks encapsulation". It would be nice to allow to bypass this by using explictly the syntax &lt;tt&gt;$foo ~~ %$object&lt;/tt&gt; or &lt;tt&gt;$foo ~~ @$object&lt;/tt&gt;.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6481074302356850529?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6481074302356850529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6481074302356850529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6481074302356850529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6481074302356850529'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/smart-match-to-do.html' title='Smart match to-do'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7321996368102639750</id><published>2009-07-22T17:57:00.001+02:00</published><updated>2009-07-22T17:59:31.235+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>On the influence of religion and astrology on science</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;I have, in addition, introduced a new method of philosophizing on the basis of numbers.&lt;/i&gt; -- Pico della Mirandola, Oration on the Dignity of Man&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Wolfgang_Pauli"&gt;Wolfgang Pauli&lt;/a&gt;, in addition of being a Nobelized physicist, was most interested in the mental and psychological processes that make scientific discoveries possible. In a book co-authored with &lt;a href="http://en.wikipedia.org/wiki/Carl_Jung"&gt;C.G. Jung&lt;/a&gt;, &lt;i&gt;The Interpretation of Nature and the Psyche&lt;/i&gt;, he studies how &lt;a href="http://en.wikipedia.org/wiki/Kepler"&gt;Johannes Kepler&lt;/a&gt; discovered his three laws. By looking at the original texts of Kepler, who was a strict protestant, Pauli shows that the image that Kepler had of the Trinity led him to accept the Copernician heliocentrism, and to invent the idea that the movements of the planets could be measured and mathematically described.&lt;br /&gt;&lt;br /&gt;The main enemy of Kepler was &lt;a href="http://en.wikipedia.org/wiki/Robert_Fludd"&gt;Robert Fludd&lt;/a&gt;, an English physician and astrologer. Fludd had a background in alchemy, kabbalah and mysticism. For him, the heavens (the macrocosm) was the reflection of the human body (the microcosm), and vice-versa: consequently, applying mathematical rules to the movements of planets was implying a negation of free will. (It's to be noted at this point that both Kepler and Fludd believed that planets were living beings.)&lt;br /&gt;&lt;br /&gt;The same gap between Fludd's and Kepler's presuppositions can be seen on their approach to astrology. Fludd believed that astrology worked because of the mystical correspondence between heavens and earth. Kepler supposes action on the human mind induced by remote sources of light placed at certain angles -- the same angles that appear in Kepler's second law. As Pauli notes, Kepler's thesis is experimentally verifiable, but Kepler didn't seem to think that, if he his correct about astrology, artificial sources of light would have the same effect. Here too, Kepler completely externalizes the physical processes, something that Fludd refuses to do on religious grounds.&lt;br /&gt;&lt;br /&gt;It's remarkable to note that Fludd's conceptions made him refuse Kepler's approach to astronomy, but enabled him to correctly discover the principle of blood circulation. That is, as the human body is like the heavens, where planets revolve around the Sun, image of God, then in the body blood must revolve around the heart, where is located the Soul, image of God. Or at least that's how Fludd saw it.&lt;br /&gt;&lt;br /&gt;Even with false assumptions, both men made science advance. The conclusion of Pauli somehow was that, while all assumptions need to be scrutinized with skepticism, only the results will validate a scientific theory; but that those assumptions are precisely what makes the scientists creative. So, what kind of assumptions led to Pauli's Exclusion Principle?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7321996368102639750?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7321996368102639750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7321996368102639750' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7321996368102639750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7321996368102639750'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/on-influence-of-religion-and-astrology.html' title='On the influence of religion and astrology on science'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6433807519284592461</id><published>2009-07-21T19:53:00.002+02:00</published><updated>2009-07-21T19:57:55.616+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Deprecation in the Perl core</title><content type='html'>chromatic goes on &lt;a href="http://www.modernperlbooks.com/mt/2009/07/deprecated-pointy-bits.html"&gt;arguing&lt;/a&gt; that deprecated language constructs deserve to be removed just because they're deprecated.&lt;br /&gt;&lt;br /&gt;I'll argue, at the contrary, that deprecated constructs should be removed only when they stand in the way of a performance improvement or of a bug fix. Which is precisely why, for example, pseudo-hashes, empty package names or &lt;tt&gt;$*&lt;/tt&gt; got removed in Perl 5.10. In other cases the deprecation warning is more of a "bad style, don't do this" message -- until someone finds a good reason to remove the deprecated construct.&lt;br /&gt;&lt;br /&gt;Here are a few examples, which are a panel of different cases:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The &lt;tt&gt;$[&lt;/tt&gt; variable used to be a waste of memory. Now re-implemented as a &lt;tt&gt;%^H&lt;/tt&gt; element, its existence has now no runtime memory impact (as long as it's not used). It's very possible, however, that it has a speed impact (I'd be glad too see a benchmark). If someone demonstrates that perl can be made faster by removing it, it's worth removing. (Note that it's deprecated in bleadperl currently.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The apostrophe syntax for namespaces (&lt;tt&gt;foo'bar&lt;/tt&gt; instead of &lt;tt&gt;foo::bar&lt;/tt&gt;) has been used quite recently for its cuteness value (like the function &lt;tt&gt;isn't&lt;/tt&gt;). It's not yet deprecated. Moreover the core still has Perl 4 files that use it. (Those would be worth considering for removal, by the way -- they're not maintained.) However, it's largely considered bad style to use this syntax and it can be confusing (as in &lt;tt&gt;print "$name's"&lt;/tt&gt;). Adding a deprecation warning would be nice to warn users against potential errors, but I think that removing it would cause too many problems; so, that deprecation warning is likely to stay for some value of ever.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;tt&gt;defined(@foo)&lt;/tt&gt; and &lt;tt&gt;defined(%bar)&lt;/tt&gt; syntax is actually only deprecated for lexicals -- not for globals. (You can check.) Some deep magic uses them for stashes. I'm not sure about the details, but a comment in toke.c asserts that removing them would break the Tk module. So that construct can't be removed without some heavy engineering to devise a replacement.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Finally, the "split to @_ in scalar context" deprecation. Removing assignment to @_ would change the behaviour of split, and that's what caused the discussion on P5P: if we remove it and replace it by something more sensible, code developed on 5.12 might cause problems when run on an older perl. Opinions differ here. I would personally favor removing it unconditionally, which is likely to be chromatic's point of view too (for once). More conservative opinions were issued.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now, let's have a look at the two arguments against deprecation and removal that are misrepresented by chromatic:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The arguments for retaining these features are likewise simple: modifying code may cause bugs and removing features may break existing code.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;First, "modifying code may cause bugs". This meme surfaced on P5P about a very complex and hairy Perl module with almost no test (&lt;tt&gt;ExtUtils::ParseXS&lt;/tt&gt;). However the code changes we're talking about here are C changes. Written properly, C is a more straightforward language than Perl, and the test coverage of the core is excellent. So I don't buy that argument at all and I don't think anyone knowledgeable used it seriously about core changes. Also, if we're speaking only about adding a warning, it's usually a very simple change. Removal itself might be more complex, but still a lot simpler than adding features. And features get added.&lt;br /&gt;&lt;br /&gt;Secondly, "removing features may break existing code". Right, but are we talking about deprecation of removal ? chromatic seems to suppose that deprecation must necessarily be followed by removal. He says: &lt;i&gt;The problem, I believe, is that there's little impetus to migrate away from deprecated features; features can remain deprecated for 15 years.&lt;/i&gt; But this is &lt;i&gt;not&lt;/i&gt; a problem -- this is a sensible policy decision. Unlike mere deprecation, removal of constructs will break code, so we must balance it with convenience, and proceed only when it brings more benefits than inconveniences for Perl users.&lt;br /&gt;&lt;br /&gt;Basically the only real argument against &lt;i&gt;removal&lt;/i&gt; of features is precisely the one that chromatic persists in ignoring: preservation of backward compatibility, to avoid gratuitous breakage of Perl programs. But instead of repeating myself on that point, let me finish this post by a quote:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Perl has broken backward compatibility in the past where I judged very few people would be affected.&lt;br /&gt;-- Larry Wall in &lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-01/msg00882.html"&gt;P5P&lt;/a&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6433807519284592461?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6433807519284592461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6433807519284592461' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6433807519284592461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6433807519284592461'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/deprecation-in-perl-core.html' title='Deprecation in the Perl core'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5032741074046834371</id><published>2009-07-17T09:20:00.002+02:00</published><updated>2009-07-27T19:55:12.182+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The job of the pumpking</title><content type='html'>The job of a pumpking is a difficult one. It demands technical and human skills, and constant commitment.&lt;br /&gt;&lt;br /&gt;Historically, the pumpking has been the one who applied most of the patches. (That's actually the origin of the word -- the pumpking holds a semaphore known as the &lt;i&gt;patch pumpkin&lt;/i&gt;.) Applying a patch is never completely trivial. Even if the code change is clear enough, you'll have to look at the regression tests, and eventually write some; make sure the docs are still correct and complete (and eventually write some); if applicable, increment the version numbers of the core modules, or contact the maintainer of the module if it's dual life.&lt;br /&gt;&lt;br /&gt;Sometimes, the code change is not clear at all, or really big, or it touches areas of the code that the pumpking is not familiar with. In this case he has to learn about the surrounding code, or ask experts in that field (if any are around and willing to respond), understand how the patch works, determine what kind of performance or footprint impact it will have, think about possible better implementations, detect potential subtle regressions, and consider test coverage of the new code.&lt;br /&gt;&lt;br /&gt;Even if it's a doc patch, he will have to check that the new documentation is right, doesn't duplicate or contradict information elsewhere, and is written clearly enough and in a grammatically correct English. (Which makes it only more difficult for non-native pumpkings.)&lt;br /&gt;&lt;br /&gt;Putting it shortly, patch application is a time consuming activity, and it demands a fair amount of concentration. In any case, that's &lt;i&gt;not&lt;/i&gt; something you can do when you have ten minutes free between two tasks.&lt;br /&gt;&lt;br /&gt;Is it rewarding? Well, not really. Applying patches is a lot like scratching other people's itches. You don't get much time left to work on what would interest you personally. Like, fixing funny bugs, or adding new functionalities. And people tend to get upset when their patches are not applied fast enough.&lt;br /&gt;&lt;br /&gt;Sometimes you have to reject a patch. You do this in the most diplomatic way possible, because the person who sent it usually is full of good will, and volunteered some of his own free time, and you don't want to drive volunteers off. So you ask, could I have some more docs with that, because I don't understand it fully? or: what problem does it solve for you? or: excuse me, but have you considered this alternate implementation that might be better suited? Care to work on it a bit more? Thanks. Even when you know at the first sight that a patch is totally worthless, you can't reply, "ur patch iz worthless, lol", you have to try to be pedagogical about why the proposed patch is a bad idea.&lt;br /&gt;&lt;br /&gt;And all of this, you do on borrowed time, because you're not paid for it. You could be sleeping, or cooking, or having fun with your family and your friends, or enjoying a nice day's weather. No, you stay inside and you apply other people's patches. And why do you do it? Because you like Perl, you want to make it better, and you're not doing a bad job at it. And probably because no-one else would be doing it for you.&lt;br /&gt;&lt;br /&gt;And of course no-one except the previous pumpkings fully realize what all of this really means. No. You take decisions, lead by technical expertise and years of familiarity with perl5-porters. Sometimes heat is generated, but that settles down quickly and stays contained within the mailing list. You listen to all parties and you show respect. And you take an informed decision, trying to remember, as Chip Salzenberg noted, that good synthesis is different from good compromise, although they're easy to mistake for each other, and that only the first one leads to good design. All of this is normal, and expected.&lt;br /&gt;&lt;br /&gt;Being a pumpking is difficult. It's demanding; it's not rewarding. But that's not why I quitted. I quitted because I can't continue to do it under constant fire. I want my work to be properly criticized based on technical considerations, not to be denigrated. (Also, I want a pony, too. I realize that it's difficult to deal with people who are in the middle of the "hazard" peak of &lt;a href="http://blog.gardeviance.org/2008/04/three-stages-of-expertise.html"&gt;this graph&lt;/a&gt;.) That's also why I would refuse to be paid to be a full-time pumpking: in my day job, I get recognition.&lt;br /&gt;&lt;br /&gt;Actually, I don't think that a new pumpking will step up, and I think that this will be for the best. P5P probably needs to transition from pumpkingship to a more oligarchic form of governance. More people need to take the responsibility to review and apply patches. More people need to back up the technical decisions that are made. A vocal consensus is stronger than a single pumpking, and it will force us to write down a policy, which will be a good thing and increase the bus factor of Perl. Moreover, a system involving many committers would scale better. All committers are volunteering time. It's a scarce resource, but can be put in common. And new major Perl releases are not going to happen without more copious free time.&lt;br /&gt;&lt;br /&gt;As a side-effect, if many people start handling the patch backlog, that means that I'll be able to devote time to long-standing issues without feeling guilty. Like the UTF-8 cleanup I have been speaking about.&lt;br /&gt;&lt;br /&gt;For once, I plan to take some vacations this summer -- away from P5P. That didn't happened to me since years. I think I deserved it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5032741074046834371?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5032741074046834371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5032741074046834371' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5032741074046834371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5032741074046834371'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/job-of-pumpking.html' title='The job of the pumpking'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4070175054635519552</id><published>2009-07-10T10:52:00.001+02:00</published><updated>2009-07-10T11:03:10.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The strictperl experiment</title><content type='html'>The &lt;a href="http://www.modernperlbooks.com/mt/2009/07/strictperl.html"&gt;strictperl&lt;/a&gt; experiment by chromatic, and the &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/53eb19dd57d98e5a28ec6e1a56a1a40ce469145f"&gt;strict-by-default&lt;/a&gt; patch by Steffen Mueller, will help me explain what approaches are right or wrong in dealing with Perl 5 evolutions.&lt;br /&gt;&lt;br /&gt;strictperl is, as chromatic puts it, &lt;i&gt;unilaterally enabling strict for all code not run through -e&lt;/i&gt;. Unsurprisingly, that breaks a lot of code. And I mean a lot, as in "most". Not only on the DarkPAN (I seldom use strict for scripts of four lines), on the CPAN (I have modules that will break under strictperl), but in the core itself. chromatic mentions &lt;tt&gt;Exporter&lt;/tt&gt; and &lt;tt&gt;vars&lt;/tt&gt; as modules that break under it. Well, &lt;i&gt;of course&lt;/i&gt; they break. Their very purpose is to manipulate symbols by name, which is exactly the kind of thing that strict prevents. (Incidentally all code that uses &lt;tt&gt;Exporter&lt;/tt&gt; or &lt;tt&gt;vars&lt;/tt&gt; can't run under strict perl, and I think that's most of the Perl code out there actually.) That is why chromatic added a separate makefile target to build strictperl: if the patch was going in perl itself, perl couldn't be even built! That's how broken it is.&lt;br /&gt;&lt;br /&gt;It's certainly interesting to dive in Perl's internals, but to experiment with enabling strict on a global level, a simple source filter would have been sufficient. One could have written one in ten minutes, including time to look up the documentation, and it would have been immediately obvious afterwards why it was a bad idea. Except to chromatic, who still thinks it's (quoting) &lt;i&gt;a feature I believe is worth considering&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;So now let's look at Steffen Mueller's solution, which is strictperl done right, and which is already in bleadperl.&lt;br /&gt;&lt;br /&gt;Currently, with bleadperl, a simple &lt;tt&gt;use 5.11.0&lt;/tt&gt; will enable strictures &lt;b&gt;in the current lexical scope&lt;/b&gt;, like &lt;tt&gt;use strict&lt;/tt&gt; would do, but implicitly. (It will also enable features, but that's unrelated.) Look:&lt;br /&gt;&lt;pre&gt;$ bleadperl -e 'use 5.11.0; print $foo'&lt;br /&gt;Global symbol "$foo" requires explicit package name at -e line 1.&lt;br /&gt;Execution of -e aborted due to compilation errors.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Moreover, like in chromatic's strictperl, a simple &lt;tt&gt;-e&lt;/tt&gt; or &lt;tt&gt;-E&lt;/tt&gt; won't enable them, because strictures are not wanted for one-liners.&lt;br /&gt;&lt;br /&gt;That way, we don't break code that doesn't want strictures, (actually we don't break anything at all that doesn't require 5.11.0 already, it's completely backwards compatible), but it's still removing some boilerplate for default strictness if you're requesting a perl recent enough.&lt;br /&gt;&lt;br /&gt;Steffen's patch itself is not very recent, but I didn't apply it to bleadperl immediately, because I disagreed with the implementation. As you can see in the sources, it uses &lt;tt&gt;Perl_load_module&lt;/tt&gt; to load the file &lt;i&gt;strict.pm&lt;/i&gt; and execute its &lt;tt&gt;import()&lt;/tt&gt; method. That's very slow. I applied it when I got around to &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/5cc917d61a1b0b6683ece694d00cdb1abdf9c0d9"&gt;make it faster&lt;/a&gt; with the next commit, which replaces that method call by just flipping three bits on an internal integer variable.&lt;br /&gt;&lt;br /&gt;All this goodness is coming to you in Perl 5.12 when someone will be willing to take the pumpking's hat.&lt;br /&gt;&lt;br /&gt;Next time, I'll explain why enabling warnings by default is not a good idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4070175054635519552?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4070175054635519552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4070175054635519552' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4070175054635519552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4070175054635519552'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/strictperl-experiment.html' title='The strictperl experiment'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2243460989952462955</id><published>2009-07-06T14:29:00.002+02:00</published><updated>2009-07-06T14:33:05.228+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Resigning</title><content type='html'>So I'm &lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-07/msg00193.html"&gt;resigning&lt;/a&gt; from my role of Perl 5 pumpking. That doesn't mean that I'm not proud of what I did for Perl 5 in the past, or that I don't stand behind my choices anymore.&lt;br /&gt;&lt;br /&gt;Let's begin by inspecting some of the core ideas that drove the chromatic rants since the last six months, and examine why they are a sure recipe for failure.&lt;br /&gt;&lt;br /&gt;First, the regular snapshots, labeled releases. When you cannot control how much development time you'll have for the next release, nor the list of hot topics that the contributors will volunteer to contribute to, you don't release easily; at the best, you snapshot. Which is fine for alpha-grade software as parrot, as I've already said; but not for production-ready software. Did I point out that Perl was a very complex project with a lot of interdependent parts? Care is essential.&lt;br /&gt;&lt;br /&gt;(As a side-effect, it might quite be easy to predict the release dates of parrot for the next century, but not the date where it will be used in production. If that happens at all, that is.)&lt;br /&gt;&lt;br /&gt;Secondly, a lack of feature plan for the next versions of Perl. Again, this is not something that you can control in a volunteer-based project. I've said many times that I'd like 5.12 to solve some inconsistencies on the handling of UTF-8 strings with regard to case-insensitivity comparisons and case-changing operators. That would be a backwards incompatible change and would break code -- contrary to the gross mischaracterisations that chromatic presents as truth, P5P is certainly not opposed to backwards incompatibility. But to achieve that, you need a regex + UTF-8 guru, or somebody willing to invest countless hours into becoming one. If someone comes with another itch to scratch, sends patches, implements a neat new feature, then that would warrant a shiny 5.12 without the UTF-8 revamp.&lt;br /&gt;&lt;br /&gt;Thirdly, the "untested code is not worth caring about" fallacy. One can try to wave away the DarkPAN into oblivion with a blog post, but if Perl still exists for more important purposes than the amusement of a few computer language geeks, it's because of the DarkPAN. And not all the DarkPAN code is regression-tested, or even testable. Quick glue scripts, crontabbed email reports, network management helpers, post-commit hooks: they cost too much to test, because the environment they run in is orders of magnitude more complex than their internal logic. I've code out there in the DarkPAN that deals with the relative replication delays on two pairs of master and slaves databases. That's not testable. But this code is critical.&lt;br /&gt;&lt;br /&gt;Fourthly, the main argument chromatic has to back up his proposals for Perl 5 is "we should change defaults and add syntactic sugar without thinking about the consequences because that will allow me to rip off three lines of boilerplate code." The hints I gave at the time on P5P that maybe adding syntax would be a better idea if there was some semantics behind it were then aggressively relabelled as reactionary. (As a coincidence, modernperlbooks.com started its anti-P5P propaganda shortly afterwards.)&lt;br /&gt;&lt;br /&gt;At the contrary, every language extension that went into 5.10 was there because it solved an actual problem, in a more efficient way than the CPAN could provide, and sufficiently thought out (I hope) to avoid being sorry having to maintain it in a couple of versions from now. (But now I'm not so sure about &lt;tt&gt;UNIVERSAL::DOES()&lt;/tt&gt; anymore.)&lt;br /&gt;&lt;br /&gt;Fifthly, the way chromatic has arbitrary chosen one particular regression from 5.8 to 5.10 and presented it as if it was as serious as a remote root zero-day vulnerability, willingly ignoring every other regression (or improvement) in the hope of making a point. Note, that regression wasn't even a bug in the language, something that could have made Perl programs misbehave or segfault. It was a &lt;i&gt;performance&lt;/i&gt; regression. In a world where most programs are I/O bound anyway. And there were many other more interesting regressions to choose from, I won't hide that. So why this one? Certainly because of its marketing value. It was certainly sexier than a more severe regression on an obscure feature he would have needed to explain to his readers.&lt;br /&gt;&lt;br /&gt;At the end, I've had enough of those gratuitous attacks. I've always accepted and even encouraged criticism about my decisions as a pumpking, but only as long as there were based on technical arguments, not on marketing slogans repeated hysterically by someone who remains deaf to any form of discussion. So I'm stepping down from my role of pumpking. I'm burnt out. I don't want to have to justify myself again and again in front of all this.&lt;br /&gt;&lt;br /&gt;Moreover, if my resignation can help Perl 5, it will be for the greater good. There are many committers and knoledgeable contributors, and they'll probably start reviewing the patches to apply a bit more: avoiding bottlenecks is good. The release process will be documented and distributed (and thanks to Dave Mitchell for having worked a lot on this) and the whole bus factor of Perl 5 will go up. Don't worry, I'll still be around to ensure that the future of Perl 5 is not handed to the marketroids, and to produce the occasional patch. But I'm withdrawing from the front line. Which will have, I'm sure, positive effects in the end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2243460989952462955?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2243460989952462955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2243460989952462955' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2243460989952462955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2243460989952462955'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/resigning.html' title='Resigning'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-274820055123868302</id><published>2009-07-06T07:45:00.002+02:00</published><updated>2009-07-06T07:49:44.265+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Perlbuzz is no longer useful</title><content type='html'>I've been since a long time disappointed at perlbuzz, but here's another &lt;a href="http://perlbuzz.com/2009/07/perlbuzz-news-roundup-2009-07-05.html"&gt;blatant proof of their lack of professionalism&lt;/a&gt;. This supposed "news roundup" post points to several articles by chromatic and his fanboys, and supplement them by pure FUD, like the retransmission of a twitter message saying "Is getting code into the !perl core a fight against inertia and petty hostility?", linking to an anonymous comment on a random web forum. If this is not calumny, I don't know what it is. It's just unfair to see perlbuzz relaying it without checking.&lt;br /&gt;&lt;br /&gt;However, I note that none of the rebuttals written by me or &lt;a href="http://use.perl.org/~Alias/journal/39234"&gt;by&lt;/a&gt; &lt;a href="http://use.perl.org/~jarich/journal/39229"&gt;others&lt;/a&gt; &lt;a href="http://use.perl.org/~Aristotle/journal/39232"&gt;elsewhere&lt;/a&gt; have deserved a mention.&lt;br /&gt;&lt;br /&gt;Someone is actively trying to damage the community image of P5P out there, and perlbuzz is helping him. Willingly?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-274820055123868302?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/274820055123868302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=274820055123868302' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/274820055123868302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/274820055123868302'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/perlbuzz-is-no-longer-useful.html' title='Perlbuzz is no longer useful'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7960085651314915715</id><published>2009-07-05T10:00:00.000+02:00</published><updated>2009-07-05T10:01:25.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Time-based releases in open source</title><content type='html'>Whenever I hear someone saying &lt;i&gt;we should have regular releases&lt;/i&gt;, I hear &lt;i&gt;we should release when Venus enters Pisces&lt;/i&gt;. Because, when you have so many uncontrolled parameters to deal with, sticking to a predefined calendar boils down to superstition.&lt;br /&gt;&lt;br /&gt;Time-based releases actually make sense in one case : when you're selling your software. That way, you can ensure a regular stream of revenue via upgrades. Moreover, if you're a commercial entity, you probably are already paying full-time a couple of developers, so you can predict how much time you'll spend on the next version during the next few months.&lt;br /&gt;&lt;br /&gt;All those premises are not true for volunteer-based open source projects, such as Perl.&lt;br /&gt;&lt;br /&gt;Actually, time-based releases still make sense if the project is in an alpha stage and is being prototyped. In this case, however, it's more accurate to speak about snapshots than releases, because such a "release" is only a way to publicize the newest changelog. That's the case for parrot, for example: it doesn't aim for backwards compatibility, or even stability, and has no user base. That would be also the case for the development branch of Perl 5 (currently 5.11), although nobody got around to do it since the migration to git -- I agree that would be a nice improvement.&lt;br /&gt;&lt;br /&gt;In the specific case of Perl 5, even if you wanted to try to have regular releases, more factors would complicate the task. You can't release bleadperl at any point and call it stable, even when all dual-life modules are perfectly in sync with the CPAN and when all tests pass on all platforms and all configurations. That's because you also need, for a new major release, to have a consistent set of features. For example, it would not have made sense to release 5.10.0 with the lexical $_ variable, but without the (_) prototype.&lt;br /&gt;&lt;br /&gt;With the upcoming release of 5.10.1 by Dave Mitchell, we're trying to improve the release process to be less of a pain for the pumpkings. Changes to dual-life modules will no longer be accepted in the core unless they are put on CPAN first. Module::Corelist will refer to tags in the git repository instead of perforce change numbers. The perldelta will hopefully be written a bit more incrementally.&lt;br /&gt;&lt;br /&gt;I plan to copy 5.10.1's perldelta in bleadperl when it's done, then to supplement it by blead-only changes. Afterwards I'll have more elements to judge whether we're ready for a 5.12.0 or not -- and that decision will be motivated by the contents of the release, not by the time of the year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7960085651314915715?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7960085651314915715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7960085651314915715' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7960085651314915715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7960085651314915715'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/time-based-releases-in-open-source.html' title='Time-based releases in open source'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2687655967565283796</id><published>2009-07-04T10:58:00.001+02:00</published><updated>2009-07-04T11:00:00.868+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The DarkPAN matters</title><content type='html'>There is currently some FUD going about in some parts of the Perl community about why we should break Perl 5 backwards compatibility. A short blog entry, &lt;a href="http://perl-yarg.blogspot.com/2009/06/darkpan-schmarkpan-stop-meme.html"&gt;schmarkpan&lt;/a&gt;, is a good example of the trend: loud, noisy, but clueless and devoid of any content.&lt;br /&gt;&lt;br /&gt;The author writes, &lt;i&gt;DarkPAN was discussed quite a bit at YAPC::NA. But really, what is it? How is it defined?&lt;/i&gt; Well, DarkPAN is just a slang word to express the fact that Perl 5 is now currently used all over the world in production and sometimes critical systems: websites with high availibility, financial systems, operating system build processes, and so on. That would also include the so-called GreyPAN, all Perl OSS applications that are not on CPAN. So, asking this question, even rhetorically, makes you sound as if you didn't knew that Perl is actually used in production.&lt;br /&gt;&lt;br /&gt;He continues, &lt;i&gt;Who are these people that have a vested interested in Perl and yet do not participate?&lt;/i&gt; For a start, I would like to point out that Mr Perez himself is someone with apparently some interest in Perl, but who does not participate in Perl 5 at the slightest. I might be biased, but I tend to think that the regular contributors of perl5-porters are a lot more likely to have informed opinions about the Perl 5 core development than people who don't even read it.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I think attempting to appease a faceless entity with no defined boundaries has fail written all over it. It is fear mongering.&lt;/i&gt; Who's the fear monger here? And who's trying to be realistic by attempting to release software with some quality expectations, notably by making the upgrade process seamless and introducing as little bugs as possible? It's a well-known political technique to accuse the opposite party of being guilty of one's own defects. But it doesn't make you right.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If we break it, they can choose not to upgrade.&lt;/i&gt; Several fallacies in one single sentence. First, we should &lt;i&gt;not&lt;/i&gt; consider breaking it. Breakage happens, but our goal is to avoid it. Secondly, breakage is detected after upgrades, usually (or it would have been avoided). Third, this not only applies to Perl 5, but also to every open source project widely used (in the Perl world, DBI or LWP come to mind -- upgrading them is not a trivial operation either.) This is a matter of common sense.&lt;br /&gt;&lt;br /&gt;Then, suddenly and without warning, the discussion shifts from breaking backwards compatibility to simply breaking Perl: &lt;i&gt;What about bug fixes?, I hear you say. That is the joy of open source. There are lots of unemployed hackers out there that would be willing to backport those fixes for you. Oh heavens forbid! Actually paying open source hackers to write code! The sky is falling!&lt;/i&gt; Wishful thinking at its finest. Mr Perez might have found a tuit tree in the middle of a magic garden, but I have never seen "lots of unemployed hackers" who are at the same time fluent in the Perl internals, and lots of generous donators that fight over the privilege of paying them to work on Perl. Actually, there is one, currently: Dave Mitchell, who is paid to get 5.10.1 released. Yes, paid: the sky is falling.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Perl does not belong to DarkPAN. It belongs to us who participate in its wellbeing.&lt;/i&gt; In other words, "fuck the users". But we're not in the land of toy projects here. We can't bless any change (or revert it two releases afterwards) just because it looks shiny at the time. This is not the parrot you're looking for. People do use Perl 5 for serious things, and we must ensure that a certain level of quality is preserved.&lt;br /&gt;&lt;br /&gt;But have you, Mr Perez, even skimmed through a perldelta manpage, to look at the list of incompatible changes? Because there's actually a lot of them, in spite of what you seem to believe. I had code that broke because &lt;tt&gt;strict&lt;/tt&gt; is stricter in 5.10 (as mentioned in the manual that you didn't bother to read.) &lt;a href="http://consttype.blogspot.com/2007/07/replacement.html"&gt;ghc broke&lt;/a&gt; because we removed the magical variable &lt;tt&gt;$*&lt;/tt&gt;. It's not like we fear incompatible change. We just don't like to introduce incompatible changes just for the sake of being incompatible.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I say we make the decisions best for our language of choice.&lt;/i&gt; But code changes don't happen because someone yells about it on a blog. They happen because someone actually writes code. If you really want to see something changed in Perl 5, write a patch and come discussing it on P5P. Although you might not have an idea about what you might want to see changed in Perl 5, since your empty, uninformed and slightly inconsistent rant fails to identify any precise problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2687655967565283796?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2687655967565283796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2687655967565283796' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2687655967565283796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2687655967565283796'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/07/darkpan-matters.html' title='The DarkPAN matters'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5452061135994251156</id><published>2009-06-20T11:07:00.003+02:00</published><updated>2009-06-20T11:12:24.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The new \N regex escape</title><content type='html'>At the French Perl Workshop 2009, a &lt;a href="http://conferences.mongueurs.net/fpw2009/talk/2098"&gt;talk on Perl 6 parsing&lt;/a&gt; by Stéphane Payrard reminded me of the existence of &lt;tt&gt;\N&lt;/tt&gt; in Perl 6. It's a regex escape that is the exact opposite of &lt;tt&gt;\n&lt;/tt&gt; : it will match any character that is not a newline, independently from the presence or absence of the single line match modifier &lt;tt&gt;/s&lt;/tt&gt;. So I have now &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/afefe6bfcf9956c77e5f9eee351e3d13be12ea3b"&gt;added it in Perl 5&lt;/a&gt;. This is my first feature contribution to the regex engine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5452061135994251156?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5452061135994251156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5452061135994251156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5452061135994251156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5452061135994251156'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/06/new-n-regex-escape.html' title='The new \N regex escape'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7218171295097410570</id><published>2009-06-14T21:23:00.005+02:00</published><updated>2009-06-14T21:32:06.708+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Back from the FPW 2009</title><content type='html'>The French Perl Workshop 2009 has ended. I took some &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/sets/72157619647172887/"&gt;pictures&lt;/a&gt; (not much). I had the occasion to try on a smaller French audience the talk I'll give in Lisbon for YAPC::Europe.&lt;br /&gt;&lt;br /&gt;One of the interesting presentations was made by the &lt;a href="http://rtgi.fr/"&gt;rtgi&lt;/a&gt; guys, who mapped the CPAN authors and modules, as well as the Perl community as seen on the web, on &lt;a href="http://cpan-explorer.org/"&gt;cpan-explorer.org&lt;/a&gt;. Enjoy the maps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7218171295097410570?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7218171295097410570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7218171295097410570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7218171295097410570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7218171295097410570'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/06/back-from-fpw-2009.html' title='Back from the FPW 2009'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8976298409674813698</id><published>2009-06-13T15:08:00.001+02:00</published><updated>2009-06-13T15:08:37.256+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The Future of Perl 5</title><content type='html'>Bjarne Stroustrup is &lt;a href="http://lambda-the-ultimate.org/node/5"&gt;quoted&lt;/a&gt; having said: &lt;i&gt;It is my firm belief that all successful languages are grown and not merely designed from first principles.&lt;/i&gt; Being a perlist, (or a perlian? a perlard?), I can only agree. Perl 5 was grown, and continues to grow; although most of its growth is now outsourced to the CPAN (with modules like Devel::Declare, Method::Signatures, Moose, MooseX::*, and so on.)&lt;br /&gt;&lt;br /&gt;Thus, I see little added value in adding new, complex syntax to Perl 5. My preference goes to making Perl 5 easier to extend. (Here you can feel the influence of the Perl 6 approach.) The core's job is not to duplicate and override the efforts made on CPAN to extend Perl, but to encourage them. CPAN is, after all, the killer app of Perl.&lt;br /&gt;&lt;br /&gt;The big advantages of outsourcing syntax experiments to CPAN is that the community can run many experiments in parallel, and have those experiments reach a larger public (because installing a CPAN module is easier than compiling a new perl); that enables also to prune more quickly the failed approaches. This is a way to optimize and dynamize innovation.&lt;br /&gt;&lt;br /&gt;So, a patch to add a form of subroutine parameter declaration, or to add some syntactic sugar for declaring classes, are probably not going to be included in Perl 5 today. Those would extend the syntax, but not help extensibility -- actually they would hinder it, imposing and freezing a single core way to do things. And saying that there is only one way to do it is a bit unperlish. It's basically for the same reason that we don't add an XML parser or a template preprocessor in the core: no single, one-size-fits-all solution has emerged.&lt;br /&gt;&lt;br /&gt;Now, if a one single way of declaring subroutine parameters or classes emerges and stabilizes, it makes sense to add it in the core, and even to re-implement it in C, for efficiency reasons. But whatever is added will also impose some backwards compatibility requirements on the future core releases: we must be careful to avoid getting stuck with useless or ugly syntax. -- In turn, that means that new syntax can eventually be added for purely aesthetic reasons (like the &lt;a href="http://search.cpan.org/dist/perl-5.10.0/pod/perl5100delta.pod#Stacked_filetest_operators"&gt;stacking of filetest operators&lt;/a&gt; in 5.10).&lt;br /&gt;&lt;br /&gt;Those general considerations don't mean, however, that all new syntax is to be ruled out from the core: if some new syntax is introduced in a way that improves the internals or can be taken advantage of by CPAN modules, it's worthwhile to include. For example, we can consider adding a way to declare methods differently than ordinary subroutines (possibly via a new keyword &lt;tt&gt;method&lt;/tt&gt; that would supplement &lt;tt&gt;sub&lt;/tt&gt;) : so we can forbid calling them as subroutines, or by magic-goto from a subroutine. We could also add a way for a subroutine to know whether it has been called as a method or as a subroutine. That kind of thing. Improving the possibilities of introspection and self-checking of Perl do improve its extensibility.&lt;br /&gt;&lt;br /&gt;What about, then, the future directions of Perl 5? The Big Picture? The priorities? The Plan for 5.12 and beyond?&lt;br /&gt;&lt;br /&gt;New syntax is nice and shiny. But for me, there are more important and urgent features that are needed now. New syntax introduces new bugs, and, Perl 5 being what it is, new edge cases; we should aim to reduce those instead.&lt;br /&gt;&lt;br /&gt;In my view, (I &lt;a href="http://en.wikipedia.org/wiki/Apophasis"&gt;could even use&lt;/a&gt; the word &lt;i&gt;vision&lt;/i&gt;, but I won't do it), the future of Perl 5 should be mostly organised around two directions:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;clean-up and orthogonalisation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;giving more facilities for extensibility&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;To elaborate on that a bit:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clean-up and orthogonalisation&lt;/b&gt; : the big TO-DO here for 5.12 is the clean-up of the internal handling of UTF-8 strings and the abstraction leakage that ensues in some corners of it. (This was referred to as &lt;a href="http://juerd.nl/files/slides/2007yapceu/unicodesemantics.html"&gt;&lt;b&gt;the&lt;/b&gt; Unicode bug&lt;/a&gt; by many people.) Briefly, perl builtins like &lt;tt&gt;lc()&lt;/tt&gt; or &lt;tt&gt;uc()&lt;/tt&gt;, or regex metacharacters like &lt;tt&gt;\w&lt;/tt&gt;, have a behaviour that depends on whether the string they operate on have the internal UTF-8 flag set. This shouldn't be the case -- that flag should be kept strictly internal. Fixing this will make the life easier to many people that handle Unicode strings with Perl, but it will break backwards compatibility. That's why it's not planned for a 5.10.x release.&lt;br /&gt;&lt;br /&gt;Another field that could be improved is the behaviour of &lt;a href="http://search.cpan.org/dist/perl-5.10.0/pod/perltodo.pod#autovivification"&gt;autovivification&lt;/a&gt;, which is currently not extremely consistent. Sometimes also autovivification is annoying -- a common example is a test like &lt;tt&gt;exists($h-&amp;gt;{a}{b})&lt;/tt&gt;, that autovivs &lt;tt&gt;$h-&amp;gt;{a}&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Any one of those two cleanups, once implemented, would be important enough to deserve a 5.12.0 release (at least that's what I'm thinking this week).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Giving more facilities for extensibility&lt;/b&gt; : Providing more hooks to module writers. Perl is pretty hookable already; but the creativity of modules writers has no limits. &lt;a href="http://search.cpan.org/~vpit/"&gt;Vincent&lt;/a&gt; for example was talking yesterday about making the internal function &lt;tt&gt;op_free()&lt;/tt&gt;, used to free code from the memory, hookable -- which would help for some evil manipulations of &lt;tt&gt;eval()&lt;/tt&gt;, the details of which I don't remember at the moment. More generally, a better API for manipulating the optree internals would be useful. I would like to have more hooks in the tokenizer as well -- Devel::Declare, for example, could benefit from this.&lt;br /&gt;&lt;br /&gt;Once those goals are achieved, it will be time to add new syntax, on steadier grounds. The core will never have an XML parser, because the diversity of needs for parsing XML makes the diversity of modules necessary and welcomed; this is not true for object models -- many competing object models are not necessarily a good thing, especially inside a same application. But large-scale experimentation on CPAN enabled the community to make Moose much better than whatever a handful of P5Pers could have designed by themselves.&lt;br /&gt;&lt;br /&gt;And now I shall &lt;a href="http://www.flickr.com/photos/mirod/200428767/"&gt;STFUAWSC&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8976298409674813698?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8976298409674813698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8976298409674813698' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8976298409674813698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8976298409674813698'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/06/future-of-perl-5.html' title='The Future of Perl 5'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7888505671382488487</id><published>2009-05-05T09:49:00.002+02:00</published><updated>2009-05-05T09:52:10.467+02:00</updated><title type='text'>Evolution of smart matching</title><content type='html'>The semantics of the smart match (~~) operator, introduced in Perl 5.10.0, are undergoing major changes. They are justified partly by the divergence with Perl 6's smart match, and partly by the inconvenience of the current semantics.&lt;br /&gt;&lt;br /&gt;The major change that drove all other ajdustments is that now, ~~ is no longer symmetrical, but the dispatch will be done based on the type of the matcher (the right hand side) only. The type of the matchee will be taken into account only in a second phase.&lt;br /&gt;&lt;br /&gt;The loss of symmetry however allowed to introduce better distributivity (in the ~~ %hash and ~~ @array cases.)&lt;br /&gt;&lt;br /&gt;Another consequence is that overloading the ~~ operator will be taken into account only when the object is on the right of the match. Allowing the matchee to invoke ~~ overload would interfere with the property of distributivity, notably in the $object ~~ @array case.&lt;br /&gt;&lt;br /&gt;The full semantics can be checked out in the perlsyn man page in the &lt;i&gt;smartmatch&lt;/i&gt; branch of &lt;a href="http://perl5.git.perl.org/perl.git"&gt;the Perl 5 source repository&lt;/a&gt;. I consider those docs final (unless Larry invokes Rule One...)&lt;br /&gt;&lt;br /&gt;I plan to do a short talk on the new smart match in Lisbon, at the next YAPC::EU -- more detailed than the braindump you're currently reading!&lt;br /&gt;&lt;br /&gt;The implementation is still in progress. Tests, notably, are needed, if you want to help (because my tuits are quite short those days...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7888505671382488487?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7888505671382488487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7888505671382488487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7888505671382488487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7888505671382488487'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/05/evolution-of-smart-matching.html' title='Evolution of smart matching'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8025827417324015177</id><published>2009-04-07T14:22:00.002+02:00</published><updated>2009-04-07T14:41:11.803+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Deprecating $[</title><content type='html'>I just committed in perl a &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/55b6781562aff32ef6499c4f263ab251254ca5cb"&gt;patch&lt;/a&gt; by James Mastros that emits a deprecation warning each time &lt;a href="http://search.cpan.org/dist/perl-5.10.0/pod/perlvar.pod#$[_"&gt;$[&lt;/a&gt; is assigned to. This patch will go in the 5.12.X series.&lt;br /&gt;&lt;br /&gt;What does this mean exactly? This only means that we discourage using $[ in any new code now. This doesn't necessarily mean that $[ will be removed in the 5.14.0. Some variables or features have been deprecated for a longer time before being actually removed. However, $[ is likely to be removed in 5.14, and here's why:&lt;br /&gt;&lt;br /&gt;Basically, $[ allows the programmer to adjust the index of the first element of an array -- by default, 0. $[ has been in the past the source of many worrisome behaviours, and has evolved to accomodate them.&lt;br /&gt;&lt;br /&gt;In Perl 4, if I remember correctly, $[ was global. This was not a good idea. Of course, you could set it with local(), but called subroutines would still see the new value. That's why $[ began to be treated like a lexical pragma in Perl 5.0; that way, all side-effects were avoided. The "downside" of this was that $[ needed to be assigned at compile-time. That could be surprising to "clever" programmers in search of novel obfuscation techniques.&lt;br /&gt;&lt;br /&gt;However, memory was needed to keep track of the value of $[, in each lexical scope. That's why in 5.10 $[ was removed from the global compiler hints structure and was stored in the improved version of the %^H lexical hints variable. I'll spare you the details (&lt;a href="http://search.cpan.org/dist/perl-5.10.0/pod/perlpragma.pod"&gt;perlpragma&lt;/a&gt; has some of them), but, shortly, that allowed us to reclaim the memory used for $[ (at least in programs that didn't use it).&lt;br /&gt;&lt;br /&gt;So, now, in 5.10, the existence of $[ has no memory impact on perl. However, it's possible that it still has a small run-time impact. Removing the code that tests whether $[ exists and is non-zero before accessing an array element could make perl run a tiny bit faster. And that's why we're now deprecating $[.&lt;br /&gt;&lt;br /&gt;Thanks to James Mastros for Friendly Doing It. And, by the way: that was a one-line patch to the C code of the interpreter. Useful stuff doesn't need to be difficult to implement!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8025827417324015177?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8025827417324015177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8025827417324015177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8025827417324015177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8025827417324015177'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/04/deprecating.html' title='Deprecating $['/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7849532709988678747</id><published>2009-03-31T10:23:00.000+02:00</published><updated>2009-03-31T10:24:24.104+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Autovivification in Perl 5</title><content type='html'>On the Perl 5 Porters mailing list, Graham Barr &lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-03/msg00773.html"&gt;points&lt;/a&gt; at an interesting bit of history.&lt;br /&gt;&lt;br /&gt;The question discussed is autovivification of non-existent hash elements when used in an lvalue context. Usually, they are autovivified: (this is with 5.10.0)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ perl -E '1 for $x{a}; say for keys %x'&lt;br /&gt;a&lt;br /&gt;$ perl -E 'map $_, $x{a}; say for keys %x'&lt;br /&gt;a&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But not when used as subroutine arguments:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ perl -E 'sub f{} f($x{a}); say for keys %x; say "END"'&lt;br /&gt;END&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Graham says that sub args were special cased out during 5.005 development, for unclear reasons.&lt;br /&gt;&lt;br /&gt;A small bit of inconsistency is that hash slices &lt;i&gt;are&lt;/i&gt; autovivified in sub calls:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ perl -E 'sub f{} f(@x{a}); say for keys %x'&lt;br /&gt;a&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We have no good overview of the current state of autovivification behaviour in Perl 5. It's known that it can change with strictures. The &lt;a href="http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod"&gt;current perltodo&lt;/a&gt; notes: &lt;i&gt;Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict&lt;/i&gt;. (It's a known bug that strictures can affect autovivification; I wonder whether taintedness can affect this too.)&lt;br /&gt;&lt;br /&gt;A good first step towards consistency would be to produce a matrix of autovivification for a bunch of data types (array elements, hash elements, hash slices, tied or not) and a bunch of operators that take lvalues (map, grep, foreach, sub call, chained &lt;tt&gt;-&amp;gt;&lt;/tt&gt; dereferences, etc.) with and without strictures/taint. Then, that could be turned into a regression test, and finally we could tweak the behaviour in 5.12 to make it more consistent.&lt;br /&gt;&lt;br /&gt;Want to help?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7849532709988678747?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7849532709988678747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7849532709988678747' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7849532709988678747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7849532709988678747'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/03/autovivification-in-perl-5.html' title='Autovivification in Perl 5'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8614875169606103050</id><published>2009-03-27T10:25:00.002+01:00</published><updated>2009-03-27T10:30:59.115+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Polybius at the funeral</title><content type='html'>Plutarch, in his &lt;i&gt;Life of Philopoemen&lt;/i&gt;, mentions that a young man named Polybius was carrying the urn of the general:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;They burnt his body, and put the ashes into an urn, and then marched homeward, not as in an ordinary march, but with a kind of solemn pomp, half triumph, half funeral, crowns of victory on their heads, and tears in their eyes, and their captive enemies in fetters by them.  Polybius, the general's son, carried the urn, so covered with garlands and ribbons as scarcely to be visible; and the noblest of the Achaeans accompanied him.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Polybius, is, of course, the great historian, and also one of the major sources of Plutarch for the second Punic war and the conquest of the Greece by Rome. But Plutarch does not mention that. He just expects his reader to know who he's talking about.&lt;br /&gt;&lt;br /&gt;Do we read here, between the lines, Plutarch's secret regret of not having lived in interesting times -- of not having something original to write on, and of being a mere compiler? Was Plutarch dreaming of being a Thucydides or a Polybius, who, like Clausewitz twenty centuries afterwards, were unlucky officers before becoming great historians?&lt;br /&gt;&lt;br /&gt;Or maybe Plutarch, who was a subject of the Roman Caesar, but still Greek and proud of it, didn't want to insist on, but rather allude to, the image of the historian of the downfall of Greece, in his youth, taking part in the funeral of the man who was nicknamed, by the Romans themselves, "the last of the Greeks".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8614875169606103050?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8614875169606103050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8614875169606103050' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8614875169606103050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8614875169606103050'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/03/polybius-at-funeral.html' title='Polybius at the funeral'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7332474394388058847</id><published>2009-03-26T10:12:00.005+01:00</published><updated>2009-03-27T10:31:42.609+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Sons of a snake</title><content type='html'>Both Alexander the Great and P. Cornelius Scipio Africanus the Elder were said to be sons of Zeus (respectively Jupiter), the god having taken the shape of a giant snake to impregnate their mothers. It's difficult to judge which part Alexander and Scipio themselves had in the fabrication of those legends. According to Plutarch, Alexander asserted his divine parenthood when he was talking with Asians and Egyptians, but not with Macedonians and Greeks. Scipio never asserted it, but never negated it either. Moreover, Scipio was familiar with the Greek culture, so he might have just copied Alexander's legend for his own political reasons. Also, Alexander's legend might not be completely unrelated to the legend of Buddha's birth, notably the part where his mother dreams about being pregnant of a powerful animal.&lt;br /&gt;&lt;br /&gt;The theme of the great general son of a god in the Indo-European history and mythology would be interesting to explore. I don't see what role does the snake symbol play in this system, but it reminds me a bit of the Celtic Melusine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7332474394388058847?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7332474394388058847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7332474394388058847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7332474394388058847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7332474394388058847'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2009/03/sons-of-snake.html' title='Sons of a snake'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8383523678799774371</id><published>2008-10-14T12:19:00.002+02:00</published><updated>2008-10-14T12:22:00.580+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Git: on rebasing</title><content type='html'>(This is a follow-up to &lt;a href="http://consttype.blogspot.com/2008/10/git-how-remotes-work.html"&gt;How remotes work&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;We've seen how git manages to merge your local changes when you pull from a remote repository.&lt;br /&gt;&lt;br /&gt;This approach has a small downside, aesthetically: that is, the creation of a large number of merge commits, making the history more difficult to read. Wouldn't it be nice if git offered you the possibility to simply re-apply your local changes on top of what you just pulled?&lt;br /&gt;&lt;br /&gt;Rejoice, because that's what the &lt;tt&gt;git rebase&lt;/tt&gt; command is for.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;git rebase origin/master&lt;/tt&gt; will take the local commits (that are reachable from the &lt;i&gt;master&lt;/i&gt; head, but not from &lt;i&gt;origin/master&lt;/i&gt;), remove them from the commit tree, and re-apply them on top of &lt;i&gt;origin/master&lt;/i&gt;, before moving the &lt;i&gt;master&lt;/i&gt; head to the top of the new line of commits it just created. That way, the history is kept linear:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_doRI2vYPLjQ/SPRyW2xtpzI/AAAAAAAAACQ/CfITXDLS4dI/s1600-h/git-rebase-lc.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_doRI2vYPLjQ/SPRyW2xtpzI/AAAAAAAAACQ/CfITXDLS4dI/s200/git-rebase-lc.png" alt="" id="BLOGGER_PHOTO_ID_5256952402034927410" border="0" /&gt;&lt;/a&gt;You can afterwards just push your new commits.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Important warning&lt;/i&gt;: &lt;tt&gt;git rebase&lt;/tt&gt; changes your commits. Because their place in the tree will be different, their SHA1 will be different as well; and the old ones will disappear. For that reason, you must not manipulate commits with rebase if you have already published them in a shared repository from which someone else might have fetched.&lt;br /&gt;&lt;br /&gt;Rebasing is a powerful tool that will enable you to manipulate your branches, moving lines of commits from one location to another. The &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html"&gt;git-rebase&lt;/a&gt; man page has more examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8383523678799774371?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8383523678799774371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8383523678799774371' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8383523678799774371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8383523678799774371'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/10/git-on-rebasing.html' title='Git: on rebasing'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_doRI2vYPLjQ/SPRyW2xtpzI/AAAAAAAAACQ/CfITXDLS4dI/s72-c/git-rebase-lc.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3244565507388274207</id><published>2008-10-10T17:13:00.006+02:00</published><updated>2008-10-10T17:21:07.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Git: how remotes work</title><content type='html'>One of the difficult things for a git beginner to understand is how remote branches work.&lt;br /&gt;&lt;br /&gt;Basically, as git is a &lt;i&gt;distributed&lt;/i&gt; version control system, every developer has a full and independent repository. So, how can you pass changes around?&lt;br /&gt;&lt;br /&gt;In the examples below, we'll consider a remote repository, that we'll call &lt;i&gt;origin&lt;/i&gt;, and a local one (that we'll call &lt;i&gt;local&lt;/i&gt;). The remote repository has one branch, called &lt;i&gt;master&lt;/i&gt;, that has been cloned as &lt;i&gt;origin/master&lt;/i&gt; on the local repository. Moreover, the local repository has one local branch, called &lt;i&gt;master&lt;/i&gt; as well (but it doesn't need to be), which is set up to &lt;i&gt;track&lt;/i&gt; changes that happen on &lt;i&gt;origin/master&lt;/i&gt;. Note that, as &lt;i&gt;origin/master&lt;/i&gt; is a remote branch, it cannot be checked out -- only &lt;i&gt;master&lt;/i&gt; can.&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;fetch&lt;/i&gt; operation (command &lt;tt&gt;git fetch&lt;/tt&gt;) copies the latest commits from the &lt;i&gt;master&lt;/i&gt; on origin to &lt;i&gt;origin/master&lt;/i&gt;, and updates the HEAD of the &lt;i&gt;origin/master&lt;/i&gt; branch:&lt;br /&gt;&lt;pre&gt;git fetch origin&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_doRI2vYPLjQ/SO9xZiXe6TI/AAAAAAAAABo/prbsdtnP67E/s1600-h/git-fetch-ff.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_doRI2vYPLjQ/SO9xZiXe6TI/AAAAAAAAABo/prbsdtnP67E/s200/git-fetch-ff.png" alt="" id="BLOGGER_PHOTO_ID_5255543973700626738" border="0" /&gt;&lt;/a&gt;The circles on the schema (click for a larger version) represent commits, and the arrows are the parent-&amp;gt;child relationship between commits. The labels indicate the various HEADs (or branches). It is to be noted that a branch is nothing more than a label following the HEAD of a series of commits.&lt;br /&gt;&lt;br /&gt;At the end of this operation, &lt;i&gt;origin/master&lt;/i&gt; matches the &lt;i&gt;master&lt;/i&gt; branch on the origin, but &lt;i&gt;master&lt;/i&gt; on the local repository is still behind. We need to use the &lt;tt&gt;git merge&lt;/tt&gt; command to make &lt;i&gt;master&lt;/i&gt; point at the same commit than &lt;i&gt;origin/master&lt;/i&gt;:&lt;br /&gt;&lt;pre&gt;git merge origin/master&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_doRI2vYPLjQ/SO9xxwB1tBI/AAAAAAAAABw/OrrqjkWwIXk/s1600-h/git-merge-ff.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_doRI2vYPLjQ/SO9xxwB1tBI/AAAAAAAAABw/OrrqjkWwIXk/s200/git-merge-ff.png" alt="" id="BLOGGER_PHOTO_ID_5255544389684802578" border="0" /&gt;&lt;/a&gt;This kind of merge is called a &lt;i&gt;fast-forward&lt;/i&gt; because no actual merging of changes is involved. No new commit is created; we have just moved a HEAD forward in history. And that's fast.&lt;br /&gt;&lt;br /&gt;Now, what happens if you committed a change on your &lt;i&gt;master&lt;/i&gt; on local? Nothing changes for the fetch; the two new commits are still created from origin's &lt;i&gt;master&lt;/i&gt; so &lt;i&gt;origin/master&lt;/i&gt; matches it exactly:&lt;br /&gt;&lt;pre&gt;git fetch origin&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_doRI2vYPLjQ/SO9yJUhicvI/AAAAAAAAAB4/YWPjNBPaviA/s1600-h/git-fetch-lc.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_doRI2vYPLjQ/SO9yJUhicvI/AAAAAAAAAB4/YWPjNBPaviA/s200/git-fetch-lc.png" alt="" id="BLOGGER_PHOTO_ID_5255544794618426098" border="0" /&gt;&lt;/a&gt;However, on local, &lt;i&gt;master&lt;/i&gt; and &lt;i&gt;origin/master&lt;/i&gt; have bifurcated. To reunite them, you'll need to use &lt;tt&gt;git merge&lt;/tt&gt;, that will create another commit, and make &lt;i&gt;master&lt;/i&gt; point to it:&lt;br /&gt;&lt;pre&gt;git merge origin/master&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_doRI2vYPLjQ/SO9yTltcN9I/AAAAAAAAACA/lvVNoG6USxo/s1600-h/git-merge-lc.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_doRI2vYPLjQ/SO9yTltcN9I/AAAAAAAAACA/lvVNoG6USxo/s200/git-merge-lc.png" alt="" id="BLOGGER_PHOTO_ID_5255544971030443986" border="0" /&gt;&lt;/a&gt;The new commit (in orange) is a merge commit: it has two parents. (If conflicts happens, git will ask you to resolve them.)&lt;br /&gt;&lt;br /&gt;Ah, but now, your master has two more commits that the origin's master. And you surely want to share your changes with your fellow developers. That's where the &lt;tt&gt;git push&lt;/tt&gt; command is useful:&lt;br /&gt;&lt;pre&gt;git push origin&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_doRI2vYPLjQ/SO9yfsRZ_JI/AAAAAAAAACI/5AMlKfLN5Hc/s1600-h/git-push-lc.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_doRI2vYPLjQ/SO9yfsRZ_JI/AAAAAAAAACI/5AMlKfLN5Hc/s200/git-push-lc.png" alt="" id="BLOGGER_PHOTO_ID_5255545178950335634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;tt&gt;git push&lt;/tt&gt; will start by copying your two commits to the origin, and ask it to update its &lt;i&gt;master&lt;/i&gt; to point at the same location than yours. At the end of the operation, both commit trees should match exactly. Note that &lt;tt&gt;git push&lt;/tt&gt; will refuse to push if your &lt;i&gt;origin/master&lt;/i&gt; is not up to date.&lt;br /&gt;&lt;br /&gt;The "origin" argument to &lt;tt&gt;git fetch&lt;/tt&gt; and &lt;tt&gt;git push&lt;/tt&gt; is optional; git will use all remotes if you don't specify one.&lt;br /&gt;&lt;br /&gt;Finally, a note: as fetch and merge are often done together, a git command combines both: &lt;tt&gt;git pull&lt;/tt&gt;. It's smarter than the addition of the two commands, because it knows how to look in your git config what remote branch is actually tracked by your current local branch, and merge from there -- so you don't even need to type the name of &lt;tt&gt;origin/master&lt;/tt&gt; for the merge.&lt;br /&gt;&lt;br /&gt;Next time, we'll speak about rebasing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3244565507388274207?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3244565507388274207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3244565507388274207' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3244565507388274207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3244565507388274207'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/10/git-how-remotes-work.html' title='Git: how remotes work'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_doRI2vYPLjQ/SO9xZiXe6TI/AAAAAAAAABo/prbsdtnP67E/s72-c/git-fetch-ff.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5563685225994947501</id><published>2008-10-06T10:37:00.004+02:00</published><updated>2008-10-06T10:46:41.321+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Git tip: rewind master, keep head in a branch</title><content type='html'>Imagine that you just committed something on your master branch, and suddendly realize that you'll have to work a bit more on it. Wouldn't it be great to have committed this last patch on a branch instead?&lt;br /&gt;&lt;br /&gt;Git allows you to do this. You can rewind the master by one patch, while retaining the current HEAD in a new branch.&lt;br /&gt;&lt;br /&gt;First, create a new branch (let's call it &lt;i&gt;newbranch&lt;/i&gt;) that points at your HEAD:&lt;br /&gt;&lt;pre&gt;git branch newbranch&lt;/pre&gt;Then, rewind the master by one commit:&lt;pre&gt;git reset --hard HEAD^&lt;/pre&gt;That's all. You just moved your last commit on its own branch. If you want to continue working on top of it, you just have to&lt;br /&gt;&lt;pre&gt;git checkout newbranch&lt;/pre&gt;and start hacking.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_doRI2vYPLjQ/SOnPqC-16_I/AAAAAAAAABQ/A5jCnc5aoSM/s1600-h/gitk.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_doRI2vYPLjQ/SOnPqC-16_I/AAAAAAAAABQ/A5jCnc5aoSM/s200/gitk.png" alt="" id="BLOGGER_PHOTO_ID_5253958761566301170" border="0" /&gt;&lt;/a&gt;(Now, this is a very entry-level git tip, but those kind of examples, that demonstrate what makes git different from centralized version control systems, have certainly a good pedagogical value. More to come when I have tuits.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5563685225994947501?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5563685225994947501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5563685225994947501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5563685225994947501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5563685225994947501'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/10/git-tip-rewind-master-keep-head-in.html' title='Git tip: rewind master, keep head in a branch'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_doRI2vYPLjQ/SOnPqC-16_I/AAAAAAAAABQ/A5jCnc5aoSM/s72-c/gitk.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-783367198341649145</id><published>2008-09-23T13:48:00.000+02:00</published><updated>2008-09-23T13:49:41.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Back from the Italian Perl Workshop</title><content type='html'>I'm back from Pisa, where I attended the &lt;a href="http://conferences.yapceurope.org/ipw2008/"&gt;Italian Perl Workshop 2008&lt;/a&gt; last week (kindly invited by the organizers).&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;This was a very enjoyable conference. Several talks were in English, but most of them were in Italian: however, it was still easy for me to understand what was going on, partly because Italian is not really far from French, partly because of my already acquired familiarity with this language, and finally because good slides always help. (I'm sure I would have had a lot more trouble understanding presentations in Dutch or in Spanish, for example.)&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;I presented two talks; the &lt;a href="http://consttype.org/presentations/codestyleipw2008.html"&gt;first one&lt;/a&gt;, on Thursday, was a bit improvised: it was for the first part a plea in favour of writing code that stylistically will avoid clobbering the history in a version control system; for a second part, a live demonstration of a tool I wrote for consulting the history of a git repository from within vim. (More on that tool later.) My second talk, on Friday, was a &lt;a href="http://consttype.org/presentations/perl5100ipw2008.html"&gt;presentation of the main new features in perl 5.10&lt;/a&gt; -- basically an updated and translated version of the talk I gave at the French Perl Workshop 2007 in Lyon. The fact that I had a cold did not help my voice and my throat was aching after both presentations. I'm not sure I want to hear the audio recordings that were made.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;We stayed the whole week-end in Pisa afterwards, visiting the city. Have I mentioned how much I enjoy Italy? Each time I go there I wish I could stay longer; and if I had to choose a country to live in besides France, that would certainly be Italy. (Moreover, they have the best food in the world. And the wines are not bad either.)&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;I come back with a to-do list that includes starting using &lt;a href="http://search.cpan.org/dist/Devel-NYTProf/"&gt;Devel::NYTProf&lt;/a&gt;, which was presented by Tim Bunce; and looking at Matt Trout's &lt;a href="http://search.cpan.org/dist/Devel-Declare"&gt;Devel::Declare&lt;/a&gt; craziness. It seems that I have joined &lt;tt&gt;#moose&lt;/tt&gt; on the perl IRC network, too. Those things just happen after conferences. And that's why you should go to conferences: they build the community much more than mailing lists and IRC channels. A great thanks to all conference organizers!&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;I didn't take many &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/tags/ipw2008"&gt;pictures of the IPW&lt;/a&gt;, but they're on flickr already. More sightseeing shots will follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-783367198341649145?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/783367198341649145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=783367198341649145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/783367198341649145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/783367198341649145'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/09/back-from-italian-perl-workshop.html' title='Back from the Italian Perl Workshop'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4728910199056418163</id><published>2008-06-05T14:21:00.002+02:00</published><updated>2008-06-05T14:25:42.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Fidena and Furiani</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;In the year of the consulship of Marcus Licinius and Lucius Calpurnius, the losses of a great war were matched by an unexpected disaster, no sooner begun than ended. One Atilius, of the freedman class, having undertaken to build an amphitheatre at Fidena for the exhibition of a show of gladiators, failed to lay a solid foundation to frame the wooden superstructure with beams of sufficient strength; for he had neither an abundance of wealth, nor zeal for public popularity, but he had simply sought the work for sordid gain. Thither flocked all who loved such sights and who during the reign of Tiberius had been wholly debarred from such amusements; men and women of every age crowding to the place because it was near Rome. And so the calamity was all the more fatal. The building was densely crowded; then came a violent shock, as it fell inwards or spread outwards, precipitating and burying an immense multitude which was intently gazing on the show or standing round. Those who were crushed to death in the first moment of the accident had at least under such dreadful circumstances the advantage of escaping torture. More to be pitied were they who with limbs torn from them still retained life, while they recognised their wives and children by seeing them during the day and by hearing in the night their screams and groans. Soon all the neighbours in their excitement at the report were bewailing brothers, kinsmen or parents. Even those whose friends or relatives were away from home for quite a different reason, still trembled for them, and as it was not yet known who had been destroyed by the crash, suspense made the alarm more widespread.&lt;br /&gt;&lt;br /&gt;As soon as they began to remove the debris, there was a rush to see the lifeless forms and much embracing and kissing. Often a dispute would arise, when some distorted face, bearing however a general resemblance of form and age, had baffled their efforts at recognition. Fifty thousand persons were maimed or destroyed in this disaster.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;a href="http://mcadams.posc.mu.edu/txt/ah/tacitus/"&gt;Tacitus&lt;/a&gt;, Annals, Book IV&lt;/blockquote&gt;&lt;br /&gt;This happened 20 centuries ago, under the reign of Tiberius.&lt;br /&gt;&lt;br /&gt;On the 5th May 1992, part of the biggest football stadium in Corsica (in the village of Furiani) collapsed during a major match. 15 people died, 2000 were wounded. That's a lot less than the fifty thousand mentioned by Tacitus. However, it should be noted that the Furiani catastrophe and the much older one in Fidena share the exact same causes: greed from the entrepreneurs, combined with extreme affluence to a sportive event, and lousy security measures.&lt;br /&gt;&lt;br /&gt;Ah, progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4728910199056418163?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4728910199056418163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4728910199056418163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4728910199056418163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4728910199056418163'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/06/in-year-of-consulship-of-marcus.html' title='Fidena and Furiani'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5790235051118408086</id><published>2008-05-30T09:35:00.003+02:00</published><updated>2008-05-30T09:44:22.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><title type='text'>Port forwarding with ssh</title><content type='html'>Let's just say that I've a box with an sshd listening on port 22, but I want it to accept as well connections on port, for example, 443. There might be many many ways to do it, but one way is to open an ssh tunnel, by running this as root on the said box:&lt;br /&gt;&lt;pre&gt;ssh -g -N -f -L 443:localhost:22 user@localhost&lt;/pre&gt;&lt;br /&gt;-f forks, so the tunnel stays open in the background as long as the box is up. -g allows connections from the outside world. -N is there to avoid executing a command (just forward the port). And -L gives the tunnel specification.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5790235051118408086?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5790235051118408086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5790235051118408086' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5790235051118408086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5790235051118408086'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/05/port-forwarding-with-ssh.html' title='Port forwarding with ssh'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3147515084951137091</id><published>2008-05-27T18:12:00.003+02:00</published><updated>2008-05-27T18:19:08.035+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Process substitution in bash</title><content type='html'>I like the process substitution syntax in bash. Since I don't expect everyone to already use it at lengths, a small note on it might be welcomed.&lt;br /&gt;&lt;br /&gt;Process substitution connects the input or the output of a process list to a pipe whose other end is connected to the rest of your command line. For example, this will list your files in reverse order:&lt;br /&gt;&lt;pre&gt;sort --reverse &amp;lt;(ls)&lt;/pre&gt;&lt;br /&gt;You'd said, I could have used a good old pipe, as in &lt;tt&gt;ls | sort --reverse&lt;/tt&gt;. Fair enough, but sometimes you want more than one input, or output. That's where process substitution comes to the rescue.&lt;br /&gt;&lt;br /&gt;I find this particularly useful with &lt;tt&gt;diff(1)&lt;/tt&gt;. I like diff. Don't you like diff? (GNU diff, I mean, the one with -u for unified diffs. It don't mean a thing if it ain't got that switch.) I read unified diffs every morning at breakfast. (I swear it's true.)&lt;br /&gt;&lt;br /&gt;So let's see, I want to compare the output of two commands. Let's say I want to compare two perl optrees. (A perl optree is the intermediate form in which perl compiles your program before executing them.) To get a good, but concise, overview of a perl optree, dumped on the standard error stream, my favourite command is:&lt;br /&gt;&lt;pre&gt;perl -MO=Concise foo.pl&lt;/pre&gt;&lt;br /&gt;(I think I'll make myself an alias for that one day.)&lt;br /&gt;&lt;br /&gt;Let's say my almost similar programs are in files foo.pl and bar.pl. To get a diff of their optrees, the command will then be:&lt;br /&gt;&lt;pre&gt;diff -u &amp;lt;(perl -MO=Concise foo.pl 2&amp;gt;&amp;amp;1) &amp;lt;(perl -MO=Concise bar.pl 2&amp;gt;&amp;amp;1)&lt;/pre&gt;&lt;br /&gt;(Note that I redirected stderr to stdout.) Et voil&amp;agrave;.&lt;br /&gt;&lt;br /&gt;And if that's too much typing, there's always history substitution:&lt;br /&gt;&lt;pre&gt;perl -MO=Concise foo.pl 2&amp;gt;&amp;amp;1&lt;br /&gt;diff -u &amp;lt;(!!) &amp;lt;(!!:s/foo/bar/)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3147515084951137091?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3147515084951137091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3147515084951137091' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3147515084951137091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3147515084951137091'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/05/process-substitution-in-bash.html' title='Process substitution in bash'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4043273579401035067</id><published>2008-05-26T10:10:00.001+02:00</published><updated>2008-05-27T18:23:03.514+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>On Naples and its garbage</title><content type='html'>The situation of garbage disposal in Naples and the monopoly that &lt;a href="http://en.wikipedia.org/wiki/Camorra"&gt;Camorra&lt;/a&gt; (the Napolitan Mafia) acquired upon it is an application of the formula:&lt;br /&gt;&lt;center&gt;&lt;i&gt;mafia = capitalism - state&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;What happened there? A couple of decades ago, the Camorra began to invest in garbage disposal companies. Garbage disposal and its treatment are quite expensive, especially when the laws require not to dump dangerous chemicals anywhere in the fields or the rivers. But if you don't care about polluting an entire country, garbage disposal, at the market prices, is very lucrative, because it allows for enormous margins. Using intimidation and corruption to wipe out local competition, and selling its services to industrials to cheaply dispose of their waste, (thus gaining approval from the powerful industry bosses), the Camorra has now transformed the Campania in a wasteland where people are a lot more likely to develop cancers than in other parts of Italy.&lt;br /&gt;&lt;br /&gt;Fair competition is part of capitalism, but without an effective judicial power to prevent violence against competitors, the game is biased. Moreover, without a government to edict and guarantee safeguards, protecting its citizens from whatever consequences unrestrained capitalism might have on the environment or on the society, ecological and social catastrophes are bound to happen -- at the very profit of the bad ones.&lt;br /&gt;&lt;br /&gt;My formula of course applies as well to the &lt;a href="http://en.wikipedia.org/wiki/Mafia"&gt;Sicilian Mafia&lt;/a&gt;, born at the end of the XIXth century around Palermo; at that time, it took advantage of a very good economical situation in Sicily and of a default of government, Italy being a young kingdom, and Sicily just out of feudalism.&lt;br /&gt;&lt;br /&gt;Thus, every time I read on the internets &lt;i&gt;anarcho-capitalism&lt;/i&gt;, I mentally translate it into &lt;i&gt;Mafia rule waiting to happen&lt;/i&gt;. I'm sure the Honoured Society would be happy to see a libertarian elected in the White House, even if this libertarian is the most honest man on earth. (The Mafia doesn't have political opinions -- it helps whoever will help it.)&lt;br /&gt;&lt;br /&gt;(As an aside, &lt;a href="http://en.wikipedia.org/wiki/Tony_Soprano"&gt;Tony Soprano&lt;/a&gt; comes from a Napolitan family, and officially works in garbage disposal. The writers were documented...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4043273579401035067?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4043273579401035067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4043273579401035067' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4043273579401035067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4043273579401035067'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/05/on-naples-and-its-garbage.html' title='On Naples and its garbage'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-1899477602768748721</id><published>2008-05-09T10:16:00.001+02:00</published><updated>2008-05-09T10:17:46.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Why People Are Passionate About Perl</title><content type='html'>brian d foy &lt;a href="http://use.perl.org/~brian_d_foy/journal/36356"&gt;asks&lt;/a&gt; why people are passionate about Perl. So, brian, here are a pumpking's answers to your questions.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The person who introduced me to Perl showed me that&lt;/i&gt; I could throw away all those fragile sed and awk scripts and get the job done much quickier. So that gets us to the second question:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I first starting using Perl to&lt;/i&gt; process very large data files. Or at least they were considered very large at the time: less than 2 Go, I think. But I quickly grasped the thing and began to wrote small scripts to automate various things on my computer (and others').&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I kept using Perl because&lt;/i&gt; it was fun. And it still is.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I can't stop thinking about Perl&lt;/i&gt; because... they won't let me! If I stop thinking about Perl, I &lt;i&gt;know&lt;/i&gt; they're out there to get me, lurking in the dark corners of the intarweb, with their bug reports, their suggestions and their patches.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I'm still using Perl because&lt;/i&gt;, well, basically, because I'm paid for it. But on the other hand, I chose a job where I was getting paid to use Perl. I could have chosen a Java, a C, or (my goodness) a PHP job. But with a proper Perl job you have the CPAN at hand, ready to be used. So you can concentrate with the problem solving and the business side of your applications, because almost all the libraries you'll need are already there.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I get other people to use Perl by&lt;/i&gt; hitting them on the head with a -- no wait. Actually that's the most interesting question. I get other people to use Perl by trying to make Perl a less annoying language, in my own scale.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I also program in&lt;/i&gt; C, but mostly when I have to patch perl itself -- the only place where you can't use Perl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-1899477602768748721?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/1899477602768748721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=1899477602768748721' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/1899477602768748721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/1899477602768748721'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/05/why-people-are-passionate-about-perl.html' title='Why People Are Passionate About Perl'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3196375281448041016</id><published>2008-03-25T16:47:00.000+01:00</published><updated>2008-03-25T16:48:18.518+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='irc'/><title type='text'>IRC thought of the day</title><content type='html'>On &lt;a href="http://freenode.net/"&gt;freenode&lt;/a&gt;, every IRC channel is the zoo of another one.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/138454701/" title="La maison des girafes by @rgs, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/49/138454701_d79e17495a_m.jpg" align="center" width="240" height="180" alt="La maison des girafes" style="margin:0 10px 10px 0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3196375281448041016?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3196375281448041016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3196375281448041016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3196375281448041016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3196375281448041016'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/03/irc-thought-of-day.html' title='IRC thought of the day'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/49/138454701_d79e17495a_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7335126527156936818</id><published>2008-03-20T10:49:00.004+01:00</published><updated>2008-03-20T11:06:46.109+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup'/><title type='text'>Google charts on Flickr</title><content type='html'>Looks like the &lt;a href="http://code.google.com/apis/chart/"&gt;Google Chart API&lt;/a&gt; now does maps. I like maps.&lt;br /&gt;&lt;br /&gt;I figured that I could map some of my &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/tags/"&gt;flickr tags&lt;/a&gt; to a map, just to see where I've taken my photos. Here are some of my location-related tags, and the current number of photos tagged with:&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;amsterdam&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;birmingham&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;brussels&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;venice&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;nice&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;paris&lt;/td&gt;&lt;td&gt;274&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;lyon&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;(total for France tags)&lt;/td&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;It's then almost trivial to come up with an image URL from google:&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=t&amp;amp;chs=440x220&amp;amp;chtm=europe&amp;amp;chco=ffffff,edf0d4,13390a,13390a&amp;amp;chld=NLGBBEITFR&amp;amp;chd=t:9.9,4.7,2.2,19.6,100" /&gt;&lt;br /&gt;Neat, huh?&lt;br /&gt;&lt;br /&gt;But where to go from there? Obviously, it would be a good idea to tag photos with the two-letter ISO country name, maybe as "country:FR" or "country:NL" (not sure what a good convention would be); then, the associated number of photos could be retrieved effortlessly via the Flickr API. Alternatively, if one wants to construct a nice mashup, having a DB full of city names or/and using geotags would be a nice idea too. Tuits anyone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7335126527156936818?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7335126527156936818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7335126527156936818' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7335126527156936818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7335126527156936818'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/03/google-charts-on-flickr.html' title='Google charts on Flickr'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4682433927897980101</id><published>2008-03-19T08:24:00.003+01:00</published><updated>2008-03-20T10:54:03.208+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='colours'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>CPAN reports colors</title><content type='html'>&lt;a href="http://search.cpan.org/"&gt;search.cpan.org&lt;/a&gt; has, on each distribution page, a link to CPAN testers reports, and, thanks to Slaven Rezic, to matrices that neatly summarize the report statuses per distribution or per author (&lt;a href="http://bbbike.radzeit.de/~slaven/cpantestersmatrix.cgi?dist=Safe%202.15"&gt;here&lt;/a&gt;'s an example for &lt;a href="http://search.cpan.org/~rgarcia/Safe-2.15/"&gt;Safe 2.15&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Unfortunately, the default color scheme isn't really readable for color-blind people. However, Slaven used a less known feature of CSS to provide an alternate colouring scheme. In Firefox, when viewing the matrix page, select &lt;i&gt;View &amp;gt; Page Style &amp;gt; High Contrast&lt;/i&gt; to get the alternate CSS, et voil&amp;agrave;, the colours are now accessible. Thanks Slaven!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4682433927897980101?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4682433927897980101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4682433927897980101' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4682433927897980101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4682433927897980101'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/03/cpan-reports-colors.html' title='CPAN reports colors'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-1574180068173806049</id><published>2008-03-18T09:32:00.001+01:00</published><updated>2008-03-18T09:34:06.666+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Harry Connick Jr, the pianist</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/44740270/" title="Keyboard, stripes by @rgs, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/33/44740270_53d81a140e_m.jpg" width="240" height="180" alt="Keyboard, stripes" style="float:left; margin:0 10px 10px 0" /&gt;&lt;/a&gt; I recently discovered the pianist side of Harry Connick Jr, who is best known as a crooner. The influence of Thelonious Monk is remarkably high. Broken rhythms, weird block chords, minimalist improvisations: we are in presence of one of the only disciples of The Sphere. He even grabs full codas from Monk. For &lt;i&gt;evidence&lt;/i&gt;, listen to &lt;a href="http://www.deezer.com/track/45904"&gt;One Last Pitch&lt;/a&gt;, a trio recording.&lt;br /&gt;&lt;br /&gt;And what's remarkable, is that it seems that this influence has been completely overlooked by everybody. Connick is a much, much better pianist than singer. And his piano style is certainly not what you'd expect from a white crooner with the look of an Hollywood playboy.&lt;br /&gt;&lt;br /&gt;Well, I guess that it's just another &lt;i&gt;confirmation&lt;/i&gt; of the old saying, &lt;i&gt;all jazz musicians are underestimated&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-1574180068173806049?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/1574180068173806049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=1574180068173806049' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/1574180068173806049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/1574180068173806049'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/03/harry-connick-jr-pianist.html' title='Harry Connick Jr, the pianist'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/33/44740270_53d81a140e_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2384530112272143770</id><published>2008-01-21T13:05:00.000+01:00</published><updated>2008-01-21T13:09:14.435+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>vim and Perl 5.10</title><content type='html'>If you use vim and want it to highlight correctly the new keywords in Perl 5.10, you can just drop the following syntax plugin script as &lt;tt&gt;~/.vim/syntax/perl.vim&lt;/tt&gt; :&lt;br /&gt;&lt;pre&gt;so $VIMRUNTIME/syntax/perl.vim&lt;br /&gt;syn keyword perlStatementStorage state&lt;br /&gt;syn keyword perlStatementFiledesc say&lt;br /&gt;if exists("perl_fold") &amp;&amp; exists("perl_fold_blocks")&lt;br /&gt;    syn match perlConditional "\&amp;lt;given\&amp;gt;"&lt;br /&gt;    syn match perlConditional "\&amp;lt;when\&amp;gt;"&lt;br /&gt;    syn match perlConditional "\&amp;lt;default\&amp;gt;"&lt;br /&gt;    syn match perlRepeat "\&amp;lt;break\&amp;gt;"&lt;br /&gt;else&lt;br /&gt;    syn keyword perlConditional given when default&lt;br /&gt;    syn keyword perlRepeat break&lt;br /&gt;endif&lt;br /&gt;if exists("perl_fold")&lt;br /&gt;    syn match perlControl "\&amp;lt;BEGIN\|CHECK\|INIT\|END\|UNITCHECK\&amp;gt;" contained&lt;br /&gt;else&lt;br /&gt;    syn keyword perlControl BEGIN END CHECK INIT UNITCHECK&lt;br /&gt;endif&lt;/pre&gt;&lt;br /&gt;An extension, not implemented here, could be to add a new highlight class for the new regexp verbs (MARK, SKIP, COMMIT, etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2384530112272143770?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2384530112272143770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2384530112272143770' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2384530112272143770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2384530112272143770'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/01/vim-and-perl-510.html' title='vim and Perl 5.10'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4872430621763418808</id><published>2008-01-16T15:56:00.000+01:00</published><updated>2008-01-16T16:05:46.529+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Disk usage graphical presentation</title><content type='html'>I found out by accident about this GNOME tool, the "Disk Usage Analyzer". It has a surprisingly good UI, displaying subdirectories as concentric circular arcs. It makes visually obvious the spots where all the place is wasted. Or spent.&lt;br /&gt;&lt;br /&gt;As an illustration, here's a screenshot of it displaying the disk usage taken by a fresh checkout of Perl 5's sources.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_doRI2vYPLjQ/R44cWK9JPmI/AAAAAAAAAAw/kTBO9stb3HA/s1600-h/Screenshot-Disk+Usage+Analyzer.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_doRI2vYPLjQ/R44cWK9JPmI/AAAAAAAAAAw/kTBO9stb3HA/s320/Screenshot-Disk+Usage+Analyzer.png" alt="" id="BLOGGER_PHOTO_ID_5156089790609309282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I wouldn't have thought that &lt;a href="http://search.cpan.org/dist/Encode"&gt;Encode&lt;/a&gt; was taking so much space. (This is, of course, due to all the files that describes the various encodings recognized by this module.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4872430621763418808?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4872430621763418808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4872430621763418808' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4872430621763418808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4872430621763418808'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2008/01/disk-usage-graphical-presentation.html' title='Disk usage graphical presentation'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_doRI2vYPLjQ/R44cWK9JPmI/AAAAAAAAAAw/kTBO9stb3HA/s72-c/Screenshot-Disk+Usage+Analyzer.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6060741969147208095</id><published>2007-12-19T10:29:00.000+01:00</published><updated>2007-12-19T10:37:01.563+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Perl 5.10.0 is out</title><content type='html'>The news is beginning to propagate on the internet... &lt;a href="http://search.cpan.org/~rgarcia/perl-5.10.0/"&gt;perl 5.10.0&lt;/a&gt; is out. My &lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-12/msg00414.html"&gt;informal announcement&lt;/a&gt; was posted to perl5-porters yesterday, and it summarizes my views on the subject. Or, more concisely: I'm happy!&lt;br /&gt;&lt;br /&gt;I think I deserve a small vacation, and I'll be away in Nice for one week (the week of Christmas).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6060741969147208095?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6060741969147208095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6060741969147208095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6060741969147208095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6060741969147208095'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/12/perl-5100-is-out.html' title='Perl 5.10.0 is out'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7763200836266603655</id><published>2007-12-07T10:22:00.000+01:00</published><updated>2007-12-07T10:30:09.770+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Let's go scripting</title><content type='html'>The latest &lt;a href="http://www.perl.com/pub/a/2007/12/06/soto-11.html"&gt;article by Larry Wall&lt;/a&gt; is out, and it has the highest density of memorable quotes I ever observed in the wild. Go read it now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7763200836266603655?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7763200836266603655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7763200836266603655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7763200836266603655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7763200836266603655'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/12/state-of-onion.html' title='Let&apos;s go scripting'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7003385513558411206</id><published>2007-11-27T10:32:00.000+01:00</published><updated>2007-11-27T10:33:47.223+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='dream'/><title type='text'>The elevator dream</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/352648222/" title="Light ascending by @rgs, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/130/352648222_da88a534d1_m.jpg" width="180" height="240" alt="Light ascending" style="float:left; margin:0 10px 10px 0" /&gt;&lt;/a&gt; I made one of those strange dreams tonight. My job was to write software for elevators. I had just read a (fictional) article by &lt;a href="http://blog.plover.com/"&gt;MJD&lt;/a&gt; on how bad is most software for elevators, and written by incompetent programmers. Full of those thoughts, feeling somewhat insecure about my ability to write good elevator software, I begin my work day by, you know, taking an elevator, to go to my office. At this exact moment, a bunch of Japanese girls show up and take the elevator with me. Somehow they know what I do for a living, so they start asking questions: "Hey, I'm vegan. Can't you design elevators for vegans? -- I'm Christian, and there are no good Bible-friendly elevators. -- ..." and so on &lt;i&gt;ad libitum&lt;/i&gt;. When I said, "Bloody Hell", (for once, I dreamt in English), "Bloody Hell, why can't you just all take the same bloody elevator", I woke up.&lt;br /&gt;&lt;br /&gt;Next time, I'll take the stairs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7003385513558411206?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7003385513558411206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7003385513558411206' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7003385513558411206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7003385513558411206'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/11/elevator-dream.html' title='The elevator dream'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/130/352648222_da88a534d1_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6126561540390158545</id><published>2007-11-24T08:59:00.000+01:00</published><updated>2007-11-24T09:04:20.581+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Dolphy's last words</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_doRI2vYPLjQ/R0faivUPw9I/AAAAAAAAAAk/gjRPQo9vP2Y/s1600-h/2136ENGQ8KL._AA115_.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_doRI2vYPLjQ/R0faivUPw9I/AAAAAAAAAAk/gjRPQo9vP2Y/s320/2136ENGQ8KL._AA115_.jpg" alt="" id="BLOGGER_PHOTO_ID_5136314190391133138" border="0" /&gt;&lt;/a&gt;Here are the last recorded words of Eric Dolphy, one of the most talented alto saxophonists of the jazz avant-garde of the early sixties (and one of the true continuators of Charlie Parker):&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;When you hear music, after it's over, it's gone, in the air; you can never capture it again.&lt;/i&gt;&lt;/blockquote&gt;Never capture it again? Those idealists, they would kill the music industry in the name of art! Hopefully, the music industry has now understood that music much too serious a matter to entrust to musicians.&lt;br /&gt;(The quotation above can be heard at the end of &lt;i&gt;Miss Ann&lt;/i&gt;, on his album &lt;i&gt;Last Date&lt;/i&gt;, recorded in 1964. Not Dolphy's best recording, but a masterpiece anyway.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6126561540390158545?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6126561540390158545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6126561540390158545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6126561540390158545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6126561540390158545'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/11/dolphys-last-words.html' title='Dolphy&apos;s last words'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_doRI2vYPLjQ/R0faivUPw9I/AAAAAAAAAAk/gjRPQo9vP2Y/s72-c/2136ENGQ8KL._AA115_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3247657619518081211</id><published>2007-11-19T10:09:00.000+01:00</published><updated>2007-11-19T10:18:18.716+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Back from FPW2007</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/2042992251/" title="Iron windows by @rgs, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2353/2042992251_6c9a462b25_m.jpg" width="240" height="180" alt="Iron windows" style="float:left; margin:0 10px 10px 0" /&gt;&lt;/a&gt; I'm back from the &lt;a href="http://conferences.mongueurs.net/fpw2007/"&gt;French Perl Workshop 2007, in Lyon&lt;/a&gt;. That was a great conference. I took some &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/sets/72157603228529011/"&gt;pictures&lt;/a&gt; and made two presentations and one lightning talk.&lt;br /&gt;&lt;br /&gt;The slides of the first presentation, &lt;a href="http://consttype.org/perl/presentations/perl5100fpw2007.html"&gt;Un Panorama de Perl 5.10&lt;/a&gt;, are available on-line. The second one didn't had any slides, since I just walked through the &lt;a href="http://search.cpan.org/src/RGARCIA/encoding-source-0.02/lib/encoding/source.pm"&gt;code&lt;/a&gt; of my module &lt;tt&gt;encoding::source&lt;/tt&gt;, explaining what it does.&lt;br /&gt;&lt;br /&gt;Finally, the lightning talk was the live upload on stage of &lt;a href="http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/"&gt;perl 5.10.0 Release Candidate One&lt;/a&gt;. Download and test!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3247657619518081211?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3247657619518081211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3247657619518081211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3247657619518081211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3247657619518081211'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/11/back-from-fpw2007.html' title='Back from FPW2007'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2353/2042992251_6c9a462b25_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2985666685382922875</id><published>2007-11-12T10:16:00.000+01:00</published><updated>2007-11-12T10:17:22.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Flaubert's elephants</title><content type='html'>The Carthaginians did use elephants in their army, but those beasts were difficult to handle. Here's what Livy says about their drivers:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;More elephants were killed by their drivers than by the enemy. They had a carpenter's chisel and a mallet, and when the maddened beasts rushed among their own side the driver placed the chisel between the ears just where the head is joined to the neck and drove it home with all his might. This was the quickest method that had been discovered of putting these huge animals to death when there was no hope of controlling them, and Hasdrubal was the first to introduce it.&lt;/i&gt; -- Livy, XXVII, 49&lt;/blockquote&gt;&lt;br /&gt;Also, in &lt;i&gt;Salammb&amp;ocirc;&lt;/i&gt;, we read:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;He [Hamilcar] organised a phalanx of seventy-two elephants with those which had returned from Utica, and others which were private property, and rendered them formidable. He armed their drivers with mallet and chisel to enable them to split their skulls in the fight if they ran away.&lt;/i&gt; -- Flaubert, Salammb&amp;ocirc;, VIII&lt;/blockquote&gt;&lt;br /&gt;Hasdrubal is the son of Hamilcar, and the brother of Hannibal. Flaubert's novel takes place during the &lt;a href="http://en.wikipedia.org/wiki/Mercenary_War"&gt;Mercenary War&lt;/a&gt; (circa 240, Hasdrubal was probably not yet born), and the Livy quotation refers to the Second Punic War, more precisely to the &lt;a href="http://en.wikipedia.org/wiki/Battle_of_the_Metaurus"&gt;Battle of the Metaurus&lt;/a&gt; (207) -- that is, afterwards.&lt;br /&gt;&lt;br /&gt;In other words, Flaubert is guilty of anachronism. But he was certainly aware of that, and favored the literary effect over the historical accuracy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2985666685382922875?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2985666685382922875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2985666685382922875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2985666685382922875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2985666685382922875'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/11/flauberts-elephants.html' title='Flaubert&apos;s elephants'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8330758432949052454</id><published>2007-11-03T09:31:00.000+01:00</published><updated>2007-11-12T10:17:52.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Hannibal and the vinegar</title><content type='html'>How Hannibal Barca and his army crossed the Alps to go in Italy to fight against Rome:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;At last, when men and beasts alike were worn out by their fruitless exertions, a camp was formed on the summit, after the place had been cleared with immense difficulty owing to the quantity of snow that had to be removed. The next thing was to level the rock through which alone a road was practicable. The soldiers were told off to cut through it. They built up against it an enormous pile of tall trees which they had felled and lopped, and when the wind was strong enough to blow up the fire they set light to the pile. When the rock was red hot they poured vinegar upon it to disintegrate it. After thus treating it by fire they opened a way through it with their tools, and eased the steep slope by winding tracks of moderate gradient, so that not only the baggage animals but even the elephants could be led down.&lt;/i&gt;&lt;br /&gt;-- Titus Livius, XXI, 37&lt;/blockquote&gt;&lt;br /&gt;Yes, vinegar. I'm full of admiration for this legendary hack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8330758432949052454?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8330758432949052454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8330758432949052454' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8330758432949052454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8330758432949052454'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/11/hannibal-and-vinegar.html' title='Hannibal and the vinegar'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5825354298734550602</id><published>2007-10-30T11:59:00.000+01:00</published><updated>2007-10-30T12:01:34.711+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='dell'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu, Dell laptop and hard disk power management</title><content type='html'>There has been some talk those days on laptop hard disk lifespan. See, for example, what &lt;a href="http://fasmz.org/~pterjan/blog/?date=20071029#p01"&gt;Pascal says about it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, after some investigation, I saw that on my laptop (Dell Latitude D420) the BIOS doesn't handle an APM value of 255. By default the startup scripts execute &lt;tt&gt;hdparm -B 255 /dev/sda&lt;/tt&gt; (or other devices) and that actually sets the APM value to 128 (as given by &lt;tt&gt;hdparm -I /dev/sda | grep Advanced&lt;/tt&gt;). (I'm using Ubuntu 7.10 -- the script I'm talking about is &lt;tt&gt;/etc/acpi/power.sh&lt;/tt&gt;.)&lt;br /&gt;&lt;br /&gt;On the other hand, using &lt;tt&gt;-B 254&lt;/tt&gt; seems to disable APM. So here's a way to do it, by default, on every boot:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add those lines to &lt;tt&gt;/etc/hdparm.conf&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;/dev/sda {&lt;br /&gt;    apm = 254&lt;br /&gt;}&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make &lt;tt&gt;/etc/init.d/hdparm&lt;/tt&gt; run at startup:&lt;br /&gt;&lt;pre&gt;ln -s /etc/init.d/hdparm /etc/rcS.d/S07hdparm&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And now the load cycle count reported by SMART remains stable. Which means that hopefully my hard disk will live longer.&lt;br /&gt;&lt;br /&gt;Addendum: if you don't use SMART, you should. Install the &lt;tt&gt;smartmontools&lt;/tt&gt; package, enable SMART on your disks with &lt;tt&gt;smartctl -s on&lt;/tt&gt;, and read the &lt;i&gt;smartctl(8)&lt;/i&gt; manpage. Optionally, enable the &lt;tt&gt;smartd&lt;/tt&gt; monitoring daemon (via &lt;tt&gt;/etc/default/smartmontools&lt;/tt&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5825354298734550602?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5825354298734550602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5825354298734550602' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5825354298734550602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5825354298734550602'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/10/ubuntu-dell-laptop-and-hard-disk-power.html' title='Ubuntu, Dell laptop and hard disk power management'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3850970806097496465</id><published>2007-10-24T10:24:00.000+02:00</published><updated>2007-10-24T10:33:27.361+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>urxvt + perl</title><content type='html'>I'm playing with urxvt (a.k.a. &lt;a href="http://software.schmorp.de/pkg/rxvt-unicode.html"&gt;rxvt-unicode&lt;/a&gt;), a fully Unicode-aware terminal forked off the popular rxvt.&lt;br /&gt;&lt;br /&gt;One of the good things with it is that it's &lt;i&gt;fully scriptable in Perl&lt;/i&gt;. Here's my first attempt, a small plugin that adds an item in the popup menu (given by the standard Perl plugin &lt;i&gt;selection-popup&lt;/i&gt;) to draw in bold font whatever matches the selection. It's not extremely useful, but that's a start.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;our $selection_hilight_qr;&lt;br /&gt;&lt;br /&gt;sub on_start {&lt;br /&gt;    my ($self) = @_;&lt;br /&gt;    $self-&amp;gt;{term}{selection_popup_hook} ||= [];&lt;br /&gt;    push @{ $self-&amp;gt;{term}{selection_popup_hook} },&lt;br /&gt;        sub { hilight =&amp;gt; sub { $selection_hilight_qr = qr/\Q$_/ } },&lt;br /&gt;        sub { 'remove hilight' =&amp;gt; sub { undef $selection_hilight_qr } };&lt;br /&gt;    ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub on_line_update {&lt;br /&gt;    if (defined $selection_hilight_qr) {&lt;br /&gt;        my ($self, $row) = @_;&lt;br /&gt;        my $line = $self-&amp;gt;line($row);&lt;br /&gt;        my $text = $line-&amp;gt;t;&lt;br /&gt;        while ($text =~ /$selection_hilight_qr/g) {&lt;br /&gt;            my $rend = $line-&amp;gt;r;&lt;br /&gt;            for (@{$rend}[$-[0] .. $+[0] - 1]) {&lt;br /&gt;                $_ |= urxvt::RS_Bold;&lt;br /&gt;            }&lt;br /&gt;            $line-&amp;gt;r($rend);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    ();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, this code is pretty small (although not very readable maybe -- I dislike using @+ and @-, but my urxvt isn't compiled against a Perl 5.10 :).&lt;br /&gt;&lt;br /&gt;Well, I'm now looking for ideas. What would be cool for a terminal to do for you (and that urxvt doesn't already provide?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3850970806097496465?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3850970806097496465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3850970806097496465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3850970806097496465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3850970806097496465'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/10/urxvt-perl.html' title='urxvt + perl'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7805672409801192863</id><published>2007-10-08T11:57:00.000+02:00</published><updated>2007-10-08T12:02:39.428+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>New camera</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/1498907943/"&gt;&lt;img src="http://farm3.static.flickr.com/2386/1498907943_96cf885f05_m.jpg" width="240" height="180" style="float:left; margin:0 10px 10px 0" /&gt;&lt;/a&gt; I just got a new camera, a brand new Canon PowerShot A720 IS. Very nice compact camera. Great optical zoom (6x). Possibility of manual settings. Nice UI (so far). There's no detailed user manual, though -- I still need to learn how to program my modes, etc.&lt;br /&gt;&lt;br /&gt;I spent my sunday playing with it. I've uploaded a couple of shots to &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/"&gt;flickr&lt;/a&gt; -- more, of course, are to follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7805672409801192863?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7805672409801192863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7805672409801192863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7805672409801192863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7805672409801192863'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/10/new-camera.html' title='New camera'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2386/1498907943_96cf885f05_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8618490203625199641</id><published>2007-09-06T10:32:00.000+02:00</published><updated>2007-09-06T10:33:02.495+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>French Perl Workshop 2007</title><content type='html'>I signed up for the &lt;a href="http://conferences.mongueurs.net/fpw2007/"&gt;French Perl Workshop 2007&lt;/a&gt; in Lyon, and I proposed two talks: one on the new shiny stuff in Perl 5.10, and a smaller one on &lt;a href="http://search.cpan.org/dist/encoding-source/"&gt;encoding::source&lt;/a&gt;, one of my scary modules. (I had this last idea while giving an impromptu presentation of encoding::source at the latest Amsterdam.pm meeting last Tuesday.) By popular demand, my presentations will be in French. See you there.&lt;br /&gt;&lt;br /&gt;(Now I have to write slides...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8618490203625199641?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8618490203625199641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8618490203625199641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8618490203625199641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8618490203625199641'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/09/french-perl-workshop-2007.html' title='French Perl Workshop 2007'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2771189982679924499</id><published>2007-09-05T09:54:00.000+02:00</published><updated>2007-09-05T09:57:02.304+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='colours'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>Blue versus Pink</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/1156988485/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1166/1156988485_2cc1987082_m.jpg" width="240" height="180" alt="Baignade autorisée" style="float:left; margin:0 10px 10px 0" /&gt;&lt;/a&gt; Found via slashdot, an article on &lt;a href="http://www.badscience.net/"&gt;Bad Science&lt;/a&gt; &lt;a href="http://www.badscience.net/?p=518"&gt;criticizing&lt;/a&gt; a research in evolutionary psychology about why boys prefer blue, and girls pink. The author says, and rightly:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The “girls preferring pink” thing is not set in stone, and in fact there are good reasons to suspect it is culturally determined.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;And then he gives examples. But if I may add another remark to his rant: it turns out that the categories of &lt;i&gt;blue&lt;/i&gt; and &lt;i&gt;pink&lt;/i&gt; are also culturally determined. Actually, the colour &lt;i&gt;blue&lt;/i&gt; didn't even exist as a separate entity before the Middle Ages. Ancient Greek, for example, does not have a word for &lt;i&gt;blue&lt;/i&gt;, and Homer speaks about the &lt;i&gt;wine-coloured sea&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I think that the study of colours and their perception is more a subject for historians than for biologists or physicists. On this subject, one of the best books I've read is &lt;i&gt;Blue, the History of a Color&lt;/i&gt;, by &lt;a href="http://en.wikipedia.org/wiki/Michel_Pastoureau"&gt;Michel Pastoureau&lt;/a&gt;, in which the last chapter briefly talks about the very recent (and very occidental) association of blue and pink to boys and girls, respectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2771189982679924499?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2771189982679924499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2771189982679924499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2771189982679924499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2771189982679924499'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/09/blue-versus-pink.html' title='Blue versus Pink'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1166/1156988485_2cc1987082_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2380895072890744264</id><published>2007-08-28T09:59:00.000+02:00</published><updated>2007-08-28T10:05:04.128+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>On Gravitas</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/970579781/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1037/970579781_658357986b_m.jpg"style="float:left; margin:0 10px 10px 0" width="240" height="240" border="0" &gt;&lt;/a&gt; &lt;a href="http://onyxneon.com/books/gravitas/index.html"&gt;&lt;i&gt;Gravitas&lt;/i&gt;&lt;/a&gt; is a novel by S. Christopher, centered around a character named Ben, and his evolution at the edge of his thirties. In a few words, Ben lives in a medium-sized American city (that could be Portland, for instance); he's a senior programmer in a small software company; he has a geeky housemate.&lt;br /&gt;&lt;br /&gt;The novel has no other real purpose than to depict Ben's life and mind. That has shaped the narrative style, which proceeds by an accumulation of scenes, not necessarily in chronological order, rather than by a well-formed, developing plot. Ben is, by many criteria, successful, but by other traits, he's not strictly in tune with his environment: sometimes he appears to shift by a half-tone, maybe more, leading him to be a spectator of himself (and others). The love (and pain) that a girl will inflict on him will force him out of his shell, at least for a period, and he will live this event as a small, strange trauma, maybe the first of his life, not counting his own birth.&lt;br /&gt;&lt;br /&gt;Minor themes are recurrent through the book, indicating that it's better constructed than it would be obvious at a first glance.&lt;br /&gt;&lt;br /&gt;One of those themes is the &lt;i&gt;disappearance&lt;/i&gt; -- of days, people, words, that seem to slip through Ben's memory, as if reality wouldn't let itself be captured easily as a mind representation, by someone who is reluctant to engage in it fully.&lt;br /&gt;&lt;br /&gt;Another theme might be &lt;i&gt;abstraction&lt;/i&gt;. I don't find a better word for that capacity -- or defect -- that some people have, to perceive things through an emotionless prism, like one would look at a piece of software, including oneself.&lt;br /&gt;&lt;br /&gt;The author uses a dense, rich form of English, full of images. This prolixity suits well the introspective nature of the book.&lt;br /&gt;&lt;br /&gt;I enjoyed &lt;i&gt;Gravitas&lt;/i&gt;. On an ideal shelf, it would be between P.K.Dick's &lt;a href="http://www.philipkdick.com/works_novels_confessions.html"&gt;non-sci-fi novels&lt;/a&gt; and Meredith's &lt;a href="http://en.wikipedia.org/wiki/The_Egoist_%28novel%29"&gt;&lt;i&gt;Egoist&lt;/i&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2380895072890744264?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2380895072890744264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2380895072890744264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2380895072890744264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2380895072890744264'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/08/on-gravitas.html' title='On Gravitas'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1037/970579781_658357986b_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5927844013251119320</id><published>2007-08-06T14:39:00.000+02:00</published><updated>2007-08-06T14:41:31.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>mysql command-line tricks</title><content type='html'>I use the MySQL shell a lot. A couple of tricks can make it more usable:&lt;br /&gt;&lt;br /&gt;First, prompt customisation. I work with lots of different databases on different hosts. So, I customised my prompt via an environment variable:&lt;br /&gt;&lt;pre&gt;export MYSQL_PS1="\\d@\\h&amp;gt; "&lt;/pre&gt;&lt;br /&gt;This makes &lt;tt&gt;mysql&lt;/tt&gt; display the database name and the hostname instead of the fixed string "mysql":&lt;br /&gt;&lt;pre&gt;$ mysql&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 143955 to server version: 5.0.27-standard-log&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the buffer.&lt;br /&gt;&lt;br /&gt;test@counterfly&amp;gt;&lt;/pre&gt;&lt;br /&gt;Secondly, readline configuration. When editing long SQL statements, I prefer to use vi-like keybindings. That can be selected by adding the following lines to your &lt;tt&gt;~/.inputrc&lt;/tt&gt; file:&lt;br /&gt;&lt;pre&gt;$if Mysql&lt;br /&gt;    set keymap vi&lt;br /&gt;    set editing-mode vi&lt;br /&gt;$endif&lt;/pre&gt;&lt;br /&gt;You can then navigate history and edit like like you would do (almost) in vi. See your readline manual for more details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5927844013251119320?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5927844013251119320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5927844013251119320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5927844013251119320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5927844013251119320'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/08/mysql-command-line-tricks.html' title='mysql command-line tricks'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8675197043401693442</id><published>2007-07-13T18:17:00.000+02:00</published><updated>2007-07-13T18:20:25.067+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>$* replacement</title><content type='html'>So, the special variable &lt;tt&gt;$*&lt;/tt&gt; has been removed from perl 5.10, after having been deprecated for years. For those who don't remember Perl4-style programming, &lt;tt&gt;$*&lt;/tt&gt; was used to enable multi-line matching in regular expressions. In Perl 5, the preferred way to do it is to use the more flexible regexp flag &lt;tt&gt;/m&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;I removed that poor old variable not because I like removing old things, but because it was standing in the way of a bug I wanted to fix (&lt;a href="http://rt.perl.org/rt3/Public/Bug/Display.html?id=22354"&gt;bug #22354&lt;/a&gt;). Anyway. Apparently there is still out there some old Perl code that fears not using &lt;tt&gt;$*&lt;/tt&gt;. And notably ghc's &lt;a href="http://hackage.haskell.org/trac/ghc/wiki/Commentary/EvilMangler"&gt;evil mangler&lt;/a&gt;, which broke with perl 5.9.5.&lt;br /&gt;&lt;br /&gt;But Audrey Tang (who else?) found an elegant way to emulate &lt;tt&gt;$* = 1&lt;/tt&gt;, in a characteristic perl-zen manner. Here's how: the current evil mangler contains this simple line of code, in a BEGIN block:&lt;br /&gt;&lt;pre&gt;require overload; overload::constant( qr =&gt; sub { "(?m:$_[1])" } );&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8675197043401693442?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8675197043401693442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8675197043401693442' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8675197043401693442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8675197043401693442'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/07/replacement.html' title='$* replacement'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3010012801835850616</id><published>2007-07-11T10:26:00.000+02:00</published><updated>2007-07-11T10:28:13.185+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Saving GNOME settings</title><content type='html'>Here's a small tip I got from GNOME expert &lt;a href="http://fasmz.org/~pterjan/blog/"&gt;Pascal Terjan&lt;/a&gt;, and that I'm copying here because I don't trust my memory:&lt;br /&gt;&lt;br /&gt;Want to inspect the settings of some GNOME application? Use &lt;tt&gt;gconf-editor&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Want to copy the settings of some GNOME app (like, say, metacity) from one desktop to another? Use the command-line tool &lt;tt&gt;gconftool&lt;/tt&gt;, specifically the options &lt;tt&gt;--dump&lt;/tt&gt; and &lt;tt&gt;--load&lt;/tt&gt;. (The paths you need to feed to &lt;tt&gt;gconftool&lt;/tt&gt; can be retrieved via &lt;tt&gt;gconf-editor&lt;/tt&gt;.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3010012801835850616?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3010012801835850616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3010012801835850616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3010012801835850616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3010012801835850616'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/07/saving-gnome-settings.html' title='Saving GNOME settings'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7631079479044974049</id><published>2007-07-10T09:52:00.001+02:00</published><updated>2007-07-10T11:06:45.417+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='munin'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Munin plugin for ping response time</title><content type='html'>My ADSL router (a freebox) shows a recent tendency to desynchronize itself. That's annoying, even it that only lasts a few minutes from time to time. Maybe a cable needs to be replaced (advice?). So, I quickly hacked this plugin for &lt;a href="http://munin.projects.linpro.no/"&gt;Munin&lt;/a&gt;, an excellent system monitoring package:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -wT&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;our @HOSTS = qw(free.fr);&lt;br /&gt;if (@ARGV &amp;&amp; $ARGV[0] eq 'config') {&lt;br /&gt;    print &amp;lt;&amp;lt;CONFIG;&lt;br /&gt;graph_title Ping response time&lt;br /&gt;graph_vlabel time (ms)&lt;br /&gt;graph_args --base 1000 -l 0&lt;br /&gt;graph_scale no&lt;br /&gt;graph_category network&lt;br /&gt;CONFIG&lt;br /&gt;    for my $host (@HOSTS) {&lt;br /&gt;        my $name = $host;&lt;br /&gt;        $name =~ tr/./_/;&lt;br /&gt;        print "$name.label $host\n";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;    @ENV{qw(PATH)} = qw(/bin);&lt;br /&gt;    for my $host (@HOSTS) {&lt;br /&gt;        my $name = $host;&lt;br /&gt;        $name =~ tr/./_/;&lt;br /&gt;        my @ping = qx(/bin/ping -nc1 $host 2&gt;/dev/null);&lt;br /&gt;        my $times = $ping[-1];&lt;br /&gt;        my $val = '';&lt;br /&gt;        if ($times =~ m{^rtt min/avg/max/mdev = ([\d.]+)}) {&lt;br /&gt;            $val = $1;&lt;br /&gt;        }&lt;br /&gt;        print "$name.value $val\n";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Feel free to adapt/improve. This code is of course released under whatever license Munin is released under (I didn't bother to check.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7631079479044974049?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7631079479044974049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7631079479044974049' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7631079479044974049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7631079479044974049'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/07/munin-plugin-for-ping-response-time.html' title='Munin plugin for ping response time'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4971727213214838387</id><published>2007-07-09T09:02:00.000+02:00</published><updated>2007-07-09T09:04:44.926+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Perl 5.9.5</title><content type='html'>I've released &lt;a href="http://search.cpan.org/~rgarcia/perl-5.9.5/"&gt;Perl 5.9.5&lt;/a&gt; on saturday. Get it while it's hot. Get the &lt;a href="http://use.perl.org/article.pl?sid=07/07/09/0655239"&gt;official announcement&lt;/a&gt; as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4971727213214838387?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4971727213214838387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4971727213214838387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4971727213214838387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4971727213214838387'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/07/perl-595.html' title='Perl 5.9.5'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6419365824858643458</id><published>2007-07-04T10:34:00.000+02:00</published><updated>2007-07-04T10:35:31.883+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Sub::Current</title><content type='html'>I've released another new heavily magic Perl module on CPAN, this time scratching an itch of Yves Orton. It's called &lt;a href="http://search.cpan.org/dist/Sub-Current/"&gt;Sub::Current&lt;/a&gt; and allows you to get a reference to the currently executing subroutine.&lt;br /&gt;&lt;br /&gt;At first I wanted to use a tied scalar instead of a function to get this reference; however, due to the way parameter passing is implemented in Perl, that's not easily possible: the tied variable (let's call it ${^ROUTINE}) is FETCHed at the innermost scope, so this won't work:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sub foo {&lt;br /&gt;    # here ${^ROUTINE} points to bar(), not to foo() !&lt;br /&gt;    bar( ${^ROUTINE} );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I think that could be done by tweaking some of the ck_ functions that are used to optimize Perl's internal optree during the compilation phase. I know that some people are not afraid to do this, but I feel that this would be a rather fragile solution, for only a little bit of syntactic sugar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6419365824858643458?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6419365824858643458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6419365824858643458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6419365824858643458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6419365824858643458'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/07/subcurrent.html' title='Sub::Current'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2967545005870788239</id><published>2007-06-25T11:47:00.000+02:00</published><updated>2007-06-25T11:52:19.981+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='colours'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>Do you dream in colour?</title><content type='html'>&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/619831453/"&gt;&lt;img style="float:left; margin:0 10px 10px 0" border="0" src="http://farm2.static.flickr.com/1058/619831453_50fff7cec2_m.jpg" width="240" height="240" alt="Squares" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.plover.com/brain/dream-in-color.html"&gt;Do you dream in color?&lt;/a&gt; asks Mark-Jason Dominus. Interesting question, on which I've already some thoughts.&lt;br /&gt;&lt;br /&gt;I'm colour-blind. I see some colours, but the words that are used to describe colours are for me largely arbitrary. Why use two different words, like, green and orange, for the same colour? A consequence of that is a difficulty to verbalize colours, which in turn makes it difficult for me to remember the colour of an object, if nobody told me what word to use to describe it. Without a proper vocabulary to classify them in my brain, I can't remember or percieve fully the colours.&lt;br /&gt;&lt;br /&gt;So it shouldn't be a surprise that I dream "in black and white": or, more accurately, that I can't name and remember the colours of the objects that appear in my mind during dreams. Colours are an irrelevant part of my Weltanschau&amp;uuml;ng.&lt;br /&gt;&lt;br /&gt;However, from time to time, I make a dream about a colour. Those are in general very simple dreams, focused on a single object; nothing happens; sometimes I only dream about a colour without an object. (Robert Louis Stevenson, in &lt;i&gt;A Chapter on Dreams&lt;/i&gt;, says that he sometimes dreams about a particularly horrible and uncanny hue of brown.) And usually that colour is &lt;i&gt;mauve&lt;/i&gt;, or the idea I have about what mauve should look like: a mix between red and blue, which does not exist for me in the real world.&lt;br /&gt;&lt;br /&gt;I'm not sure how to explain this. Probably my brain is playing tricks to iself (that is, to me): my eyes are not able to send the signal &lt;i&gt;mauve&lt;/i&gt; to the brain, but the brain circuitry is intact and is able to perceive mauve once the eyes are out of the loop. However, that new colour is so strange that it soon overrides all other aspects of the dream it appeared in. I don't have any other explanation (short of the Platonician thesis, that learning is remembering.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2967545005870788239?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2967545005870788239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2967545005870788239' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2967545005870788239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2967545005870788239'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/06/do-you-dream-in-colour.html' title='Do you dream in colour?'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1058/619831453_50fff7cec2_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-63726161708793117</id><published>2007-06-20T15:17:00.000+02:00</published><updated>2007-06-20T15:21:36.009+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>encoding::source</title><content type='html'>I'm happy to announce to the unsuspecting world that I've released to the CPAN a new Perl module, &lt;a href="http://search.cpan.org/dist/encoding-source"&gt;&lt;tt&gt;encoding::source&lt;/tt&gt;&lt;/a&gt;. Like I say in the docs, this is like the &lt;tt&gt;encoding&lt;/tt&gt; pragma, but done right. In other words, it allows you to change, on a per-file or per-block basis, the encoding of the string literals in your programs.&lt;br /&gt;&lt;br /&gt;That's probably some of the scariest Perl code I've written. Note that it won't run on any released perl. You'll nead bleadperl (or the upcoming 5.9.5) for that. That's because it uses the new support for user-defined lexical pragmas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-63726161708793117?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/63726161708793117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=63726161708793117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/63726161708793117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/63726161708793117'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/06/encodingsource.html' title='encoding::source'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-742278352803440654</id><published>2007-06-18T22:11:00.000+02:00</published><updated>2007-07-13T12:34:56.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='drwho'/><title type='text'>Best Doctor quote ever</title><content type='html'>&lt;blockquote&gt;We're at the end of the universe, right at the edge of knowledge itself, and you're busy... blogging!&lt;/blockquote&gt;&lt;br /&gt;The Doctor, in &lt;a href="http://en.wikipedia.org/wiki/Utopia_(Doctor_Who)"&gt;Utopia&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-742278352803440654?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/742278352803440654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=742278352803440654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/742278352803440654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/742278352803440654'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/06/best-doctor-quote-ever.html' title='Best Doctor quote ever'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-906628953528576392</id><published>2007-06-14T19:10:00.000+02:00</published><updated>2007-06-15T08:44:42.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='painting'/><title type='text'>On Olympia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_doRI2vYPLjQ/RnI1CBhcrCI/AAAAAAAAAAU/m2Z4sGqYyHc/s1600-h/547390825_5c5a90bdbd_m.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_doRI2vYPLjQ/RnI1CBhcrCI/AAAAAAAAAAU/m2Z4sGqYyHc/s320/547390825_5c5a90bdbd_m.jpg" alt="" id="BLOGGER_PHOTO_ID_5076178038884707362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Edouard Manet, while young, once copied Titian's &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Venus_of_Urbino"&gt;Venus of Urbino&lt;/a&gt;&lt;/i&gt;, for practice. Later, when he produced one of his most famous and &lt;i&gt;avant-garde&lt;/i&gt; paintings, &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Olympia_%28painting%29"&gt;Olympia&lt;/a&gt;&lt;/i&gt;, he was reminiscent of the old Venetian master: for he based his programmatic female nude on Titian's classical Renaissance Venus, but carefully inverted all the details.&lt;br /&gt;&lt;br /&gt;The pose of the nude woman, lying on a bed, looking at the spectator, is the same on the two paintings. However, the Venus has a crouching puppy at her feet, while Olympia has there a cat standing up. Titian's scene has an open, bright background; Manet closed it with a dark curtain. Maidservants are seen on both paintings: Venus has two pale-skinned servants, seen in the background, from behind; the servant of Olympia is dark-skinned, faces the spectator, and is placed in the foreground. The Venus holds flowers; Olympia is about to receive flowers held by her servant. The Venus is in a diurn haze that suits the goddesses; Olympia is in a crude light, evoking a closed place rather than the openness of a Venetian palace.&lt;br /&gt;&lt;br /&gt;As I see it, all those inversions are signs employed by Manet to indicate the subject of his painting: down with gods and goddesses, paint the reality. But they also indicate that Manet was seeing himself as part of the tradition, and that he wanted his works to be inserted in a dialogue with the masterpieces of the past. I'd rather be careful not to say too many things about &lt;i&gt;Olympia&lt;/i&gt;, since the interpretation of this complex painting is quite difficult, that I will probably change my mind about it a few dozen times in the future, and that I haven't even seen it for real, although I live near the &lt;a href="http://en.wikipedia.org/wiki/Orsay_Museum"&gt;Orsay Museum&lt;/a&gt;. Anyway, those inversions are worth being noted.&lt;br /&gt;&lt;br /&gt;(On a side note, I remember that Giorgio Vasari reports, in his &lt;i&gt;Lives of Artists&lt;/i&gt;, that Michelangelo told him that Titian was a great painter, but that he couldn't draw. The same reproach was made, until late, to Manet...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-906628953528576392?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/906628953528576392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=906628953528576392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/906628953528576392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/906628953528576392'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/06/on-olympia.html' title='On Olympia'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_doRI2vYPLjQ/RnI1CBhcrCI/AAAAAAAAAAU/m2Z4sGqYyHc/s72-c/547390825_5c5a90bdbd_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4149352297752601007</id><published>2007-06-11T19:21:00.000+02:00</published><updated>2007-06-11T19:26:22.058+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>On Greek myths</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/rgarciasuarez74/540246417/"&gt;&lt;img style="float:left; margin:0 10px 10px 0" src="http://farm2.static.flickr.com/1395/540246417_b640e7ea72_m.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've read a couple of books on ancient Greeks lately. The first one was a book of &lt;a href="http://en.wikipedia.org/wiki/Plutarch"&gt;Plutarch&lt;/a&gt; on the oracles of the Pythia of Delphi. Plutarch, best known as an historian for his &lt;i&gt;Parallel Lives&lt;/i&gt;, was also for some time a priest of Apollo, so he gives there some first-hand informations.&lt;br /&gt;&lt;br /&gt;The second book was a very interesting essay by Paul Veyne, a contemporary French archaeologist and historian, titled &lt;i&gt;Les Grecs ont-ils cru &amp;agrave; leurs mythes?&lt;/i&gt; (&lt;i&gt;Have Greeks believed their myths?&lt;/i&gt;). It begins by general considerations on the ancient Greek religion, and the place of mythology herein; then it takes a more philosophical turn, in the steps of Michel Foucault, and discusses what the notion of truth means.&lt;br /&gt;&lt;br /&gt;One of the things that can be noted about the Greek religion, and that is much apparent through those two books, is that Greeks, like many ancient civilisations, did not have a concept of "faith", which we now in the modern western world tend to consider as a common ground for religions -- probably because we're mostly only familiar with the two big monotheisms, Christianity and Islam. No faith: nobody, in the home country of philosophy, would have considered virtuous or honourable to hold a mandated belief, not meant to be discussed or to be subject to inquiry. Incidentally, nobody was scandalised by the numerous philosophers who were arguing about the trustfulness of the oracles or the existence of the gods.&lt;br /&gt;&lt;br /&gt;However, while many Greeks simply did not believe in the gods, and even less in their adventures as told by Homer, Hesiod and all the mythography, it appears that they couldn't imagine that those myths were completely invented, and they tried to explain their existence by several theories: for example, that gods were great kings of the past, later divinised, or that the myths were hiding ancient doctrines hidden under allegories.&lt;br /&gt;&lt;br /&gt;So what role did myths play in the Greeks' everyday lives? I think that they were part of the &lt;i&gt;tradition&lt;/i&gt;, in the noblest sense of the term: the tradition as the foundation for a culture (and that's why they ought to be respected). The myths, the gods and the heroes were common figures, models for good or bad behaviour, a common language of stories and situations that everyone could refer to. Probably, this profusion of the mythical language, and the freedom with which it was treated, created the ideal ground for all the inventions that were made in Greece: mathematics, geometry, theatre, democracy, philosophy, history, and so on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4149352297752601007?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4149352297752601007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4149352297752601007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4149352297752601007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4149352297752601007'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/06/on-greek-myths.html' title='On Greek myths'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1395/540246417_b640e7ea72_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3282308433130510331</id><published>2007-05-31T12:19:00.000+02:00</published><updated>2007-05-31T12:22:38.297+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='colours'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>Accessibility bookmarklet</title><content type='html'>Here's a small bookmarklet to &lt;a href="javascript:(function(){var a=document.getElementsByTagName('a');for(var i=0;i&lt;a.length;++i)if(a[i].href){a[i].style.textDecoration='underline'}})()"&gt;underline hyperlinks&lt;/a&gt;. I've added it to my Firefox bookmark bar under the simple name "_". It is very handy when some poorly designed sites have a CSS where links are both (1) not underlined, and (2) in a colour quite close to the colour of the regular text. That happens quite often (esp. to colour-blind web users...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3282308433130510331?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3282308433130510331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3282308433130510331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3282308433130510331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3282308433130510331'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/accessibility-bookmarklet.html' title='Accessibility bookmarklet'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4414159228528003619</id><published>2007-05-30T10:29:00.000+02:00</published><updated>2007-05-30T10:39:23.662+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>Venice!</title><content type='html'>I've finished uploading to Flickr the pictures of my &lt;a href="http://www.flickr.com/photos/rgarciasuarez74/sets/72157600276556498/"&gt;honeymoon in Venice&lt;/a&gt;. How can you make bad pictures in Venice? As Bird used to say: in the silly hope you do enjoy...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/rgarciasuarez74/512131489/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/221/512131489_6cec246d3a_m.jpg" width="240" height="180" alt="Ponte de la malvasia veghia" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4414159228528003619?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4414159228528003619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4414159228528003619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4414159228528003619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4414159228528003619'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/venice.html' title='Venice!'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/221/512131489_6cec246d3a_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5615707605207671496</id><published>2007-05-29T10:06:00.000+02:00</published><updated>2007-05-29T10:08:51.862+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Intertextuality, as they say</title><content type='html'>I've just finished reading &lt;a href="http://en.wikipedia.org/wiki/The_Name_of_the_Rose"&gt;The Name of the Rose&lt;/a&gt;, by Umberto Eco. Long ago, I thought this was just another crime novel. Then, I got a bit more familiar with Eco's essays, and thought it might be another kind of book after all. I was right: it's not &lt;i&gt;only&lt;/i&gt; a crime novel. It's full of references to a load of other minor or major works of literature (and I'm sure I've not even caught 10% of them). The double level of lecture makes it fun to read, if you pay attention.&lt;br /&gt;&lt;br /&gt;For example, in the very first page, I could spot an allusion to the opening of &lt;i&gt;Don Quixote&lt;/i&gt;. Later, multiple allusions to Dante, including a direct interpolation of a verse of the &lt;i&gt;Divine Comedy&lt;/i&gt; into the text. The character Jorge de Burgos, the blind man, guardian of a labyrinth-library, is evidently a nightmarish version of the Argentinian writer Jorge Luis Borges. The delirious dream of Adso, towards the end of the book, is treated like James Joyce could have done. And, last but not least, the hero, Guillaume of Baskerville, is evidently a clone of Sherlock Holmes, with who he shares many physical and moral features (including a predilection for drugs).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5615707605207671496?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5615707605207671496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5615707605207671496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5615707605207671496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5615707605207671496'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/intertextuality-as-they-say.html' title='Intertextuality, as they say'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-6625164535095259463</id><published>2007-05-28T11:27:00.001+02:00</published><updated>2007-05-28T11:28:42.347+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><title type='text'>Vanity projects</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;These days the correct vanity project is yet another useless ORM.&lt;/i&gt;&lt;br /&gt;-- Matt S. Trout on the &lt;a href="http://london.pm.org/pipermail/london.pm/Week-of-Mon-20070521/008280.html"&gt;london.pm mailing list&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;Vanity projects used to be templating systems, remember? That was the obligatory small project a beginner ought to write for himself. Seems that we move on to higher abstractions.&lt;br /&gt;&lt;br /&gt;However, I still think that there's room for a good open source OODBMS. That would be an interesting project. Maybe an interesting vanity project, even!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-6625164535095259463?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/6625164535095259463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=6625164535095259463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6625164535095259463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/6625164535095259463'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/vanity-projects.html' title='Vanity projects'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-3951314762675932935</id><published>2007-05-24T13:42:00.000+02:00</published><updated>2007-05-24T13:59:49.935+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>MySQL annoyance</title><content type='html'>Got bitten by a bit of insanity in MySQL 5.0.26. Imagine you have a bogus query, &lt;code&gt;SELECT poo FROM SomeTable&lt;/code&gt;, that looks correct, except that there is no "poo" column in the said table. (You mispelled "foo". So much for your brain.) MySQL will correctly return an error, &lt;i&gt;Unknown column&lt;/i&gt; or somesuch, when you try to run it.&lt;br /&gt;&lt;br /&gt;Except in a subquery. Like, for example, in:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;DELETE FROM SomeOtherTable WHERE id IN (SELECT poo FROM SomeTable)&lt;/code&gt;&lt;/blockquote&gt;which will be then exactly equivalent to a simple, unadorned &lt;code&gt;DELETE FROM SomeOtherTable&lt;/code&gt;. And you loose your data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-3951314762675932935?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/3951314762675932935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=3951314762675932935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3951314762675932935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/3951314762675932935'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/mysql-annoyance.html' title='MySQL annoyance'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-5896178587138732949</id><published>2007-05-11T11:02:00.000+02:00</published><updated>2007-05-11T11:10:23.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='colours'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>"Irina Palm" colours</title><content type='html'>I'm seeing in the streets posters for a new movie, &lt;span style="font-style: italic;"&gt;Irina Palm&lt;/span&gt;. The posters look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_doRI2vYPLjQ/RkQx1qphLhI/AAAAAAAAAAM/s_wBhvGzeRE/s1600-h/18752360.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_doRI2vYPLjQ/RkQx1qphLhI/AAAAAAAAAAM/s_wBhvGzeRE/s320/18752360.jpg" alt="" id="BLOGGER_PHOTO_ID_5063226679122538002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It probably looks fine to most readers, and I must say that it's almost readable for me and my colour-blind eyes. But the paper posters are completely monochromatic to me, even when I'm close, and I had to ask another person to know what was written. That sucks. Conclusion... Don't use color combinations that cause problems for people with color blindness in its various forms. (That's from the &lt;a href="http://www.w3.org/TR/html401/types.html#h-6.5.1"&gt;W3C HTML 4.01 Specification, section 6.5.1&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-5896178587138732949?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/5896178587138732949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=5896178587138732949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5896178587138732949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/5896178587138732949'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/irina-palm-colours.html' title='&quot;Irina Palm&quot; colours'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_doRI2vYPLjQ/RkQx1qphLhI/AAAAAAAAAAM/s_wBhvGzeRE/s72-c/18752360.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8538963337880133330</id><published>2007-05-09T13:25:00.000+02:00</published><updated>2007-05-09T13:28:57.792+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='brassband'/><title type='text'>Old brass band video</title><content type='html'>A friend found a video of me, playing in a brass band at the Sables d'Olonne, for the Edhec nautic race, circa 1994. I'm not getting younger, am I. And he put it on youtube (sorry, bad quality, old recording technologies.)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eeSrhYHV-II"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/eeSrhYHV-II" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I'm the tall guy with a cornet, behind, in the middle. Yes, that's on a boat.&lt;br /&gt;(Given the way we play here, we must have been dead drunk! but less than the guy trying to mimic a conductor just in front of us.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8538963337880133330?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8538963337880133330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8538963337880133330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8538963337880133330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8538963337880133330'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/old-brass-band-video.html' title='Old brass band video'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-8506797151656561735</id><published>2007-05-08T14:18:00.000+02:00</published><updated>2007-05-08T14:21:00.837+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Birthplaces of Presidents</title><content type='html'>Out of idleness, and to try the new google maps functionalities, I created a &lt;a href="http://maps.google.fr/maps/ms?ie=UTF8&amp;hl=fr&amp;msa=0&amp;msid=103081769632430968061.000001126b8e35e926560&amp;z=6&amp;om=1"&gt;map of the birthplaces of the presidents of the French republics&lt;/a&gt;. Two were born abroad; five in Paris; most of the others in the geographical center of France.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-8506797151656561735?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/8506797151656561735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=8506797151656561735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8506797151656561735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/8506797151656561735'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/birthplaces-of-presidents.html' title='Birthplaces of Presidents'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4236586288984309601</id><published>2007-05-07T10:41:00.000+02:00</published><updated>2007-05-07T11:55:10.147+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='creationism'/><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><title type='text'>The origins of Creationism</title><content type='html'>One of the delusions of the creationists is about their own origins. They like to think that they're the guardians of an old truth, that has been under attack since only one or two centuries. But creationism is itself a recent invention, and that should not be forgotten.&lt;br /&gt;&lt;br /&gt;Nietzsche said that myths were beginning to die when people started believing in them. (He was more specifically speaking about Greek myths, if I remember correctly, but that's besides the point.) The story of Adam and Eve was, during thousands of years, a vivid myth that was innerving the mystery of the origins of mankind, and which was used as the center for the theological or esoteric meditations of the learned classes. It is important to see that, for Christians and Jews, the Genesis was naturally open to multiple interpretations, which weren't mutually exclusive: as the Bible was supposed to be given by a being whose intelligence was infinite, it was only logical to seek in it other meanings than the pure literal one.&lt;br /&gt;&lt;br /&gt;That's what the Jews made, for example, with the compilation of the Talmud, after the desctruction of the Second Temple, and later, with the Kabbalah. For the Rabbis, the story of Adam describes the drama of the incarnation of the soul, of divine nature, in flesh ("unto Adam also and to his wife did the Lord God make coats of skins, and clothed them" -- Genesis 3:21 : meaning that before the Fall, before the birth in this world, souls are immaterial).&lt;br /&gt;&lt;br /&gt;In the Christian world, Saint Augustine wrote a short book on the literal interpretation of the Genesis, where he explains that the purpose of the Bible is not to be a book about natural history, but about salvation, that the alleged six days of the creation must be seen as a metaphor, and that what reason and intelligence allow the men to discover must not be shadowed by too much respect to the letter of Scriptures. This view, shared by many other Fathers, is still today the official view of the Catholic Church.&lt;br /&gt;&lt;br /&gt;So, why and how did creationism appear ? I blame the Puritans. When this fringe of Protestantism decided that they didn't need professional priests, or specialists in theology and in exegesis, and that they didn't want any mediation between them and the Scripture, they closed their minds to three thousand years of wisdom. That was only the translation in the spiritual field of the austerity they imposed to themselves in their lives: a people of merchants, of bankers, obsessed by usefulness and thrift, scared by anything that could be related to pleasure, scared then by the pleasure of learning for learning's sake, of the joy given by the speculation of a bondless mind, with no sight of practical applications. Creationism is the product of a strong hatred for freedom of thought, itself the product of a strong hatred for idleness, for culture, and for anything that has no practical uses. And that's why it's so dangerous, and why it must be fought at all costs, not only by atheists, but also by all partisans of a religion from where spirituality is not absent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4236586288984309601?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4236586288984309601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4236586288984309601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4236586288984309601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4236586288984309601'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/origins-of-creationism.html' title='The origins of Creationism'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2448018152211534132</id><published>2007-05-04T10:14:00.000+02:00</published><updated>2007-05-04T10:28:36.006+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><title type='text'>Musings on diff -u</title><content type='html'>diff(1) and patch(1) are wonderful tools, but there might be still room for improvement. As someone who deals with a large number of patches, I find that patches that just move code around contain too much redundant information, and are thus difficult to read.&lt;br /&gt;&lt;br /&gt;I'd like an addition to the &lt;a href="http://en.wikipedia.org/wiki/Unified_diff#Unified_format"&gt;unified diff format&lt;/a&gt;. Instead of showing a large chunk being deleted and added again later, it would factorize it, for example like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; non modified text&lt;br /&gt;-first line of moved text&lt;br /&gt;[-... block number #1 ...-]&lt;br /&gt;-last line of moved text&lt;br /&gt; continuing...&lt;br /&gt;+first line of moved text&lt;br /&gt;[+... block number #1 ... +]&lt;br /&gt;+last line of moved text&lt;br /&gt; rest of the context goes here&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For extra points, that should work across files. That could be first implemented as a post-processor to diff(1).&lt;br /&gt;&lt;br /&gt;For extra extra bonus points, some clever version control system would use this for an enhanced version of the annotate/blame/praise command, so it could show history even for code that was moved around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2448018152211534132?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2448018152211534132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2448018152211534132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2448018152211534132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2448018152211534132'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/musings-on-diff-u.html' title='Musings on diff -u'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-7000871873765434909</id><published>2007-05-02T18:32:00.000+02:00</published><updated>2007-05-03T17:29:05.544+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='far-right'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='france'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>A postcard from Jeanne d'Arc</title><content type='html'>The far-right movements in Europe have now consistently adopted a strategy of having two visages, for two different audiences.&lt;br /&gt;&lt;br /&gt;The first visage, nice and smiling, is aimed at the general public: the electors who are not yet won to the cause, and who need to be seduced. Denying all accusations of racism or fascism (or other un-nice words), that side likes to talk about how the traditional political parties want to reduce it to silence: because its novel and bright ideas to save the country scare the People in Power. Paradoxically, at the same time, it likes to point out that the far-right ideas appear in the discourses of mainline politicians, who copy them because they're right, without giving credit. However, that shallow rhetoric isn't sufficient to mask the complete lack of political insight, which is usually limited to blaming immigrants or the EU for everything, and posing as a victim the rest of the time.&lt;br /&gt;&lt;br /&gt;The second visage is usually shown only to the inner party. It's much scarier. But sometimes you can have a glance at it.&lt;br /&gt;&lt;br /&gt;After many weeks of electoral campaign in France, where we were exposed daily to the carefully sugared discourses of Le Pen (not mentioning the election posters everywhere in the streets), the French far-right finally revealed itself &lt;i&gt;tel qu'en lui-même&lt;/i&gt;, yesterday May 1st, day of Jeanne d'Arc, traditionally an annual convention of the core supporters of Le Pen. I found a nice photoset on Flickr about that &lt;a href="http://www.flickr.com/photos/hughes_leglise/sets/72157600166567947/"&gt;the 2007 Jeanne d'Arc celebration&lt;/a&gt;. Some pictures are really scary.&lt;br /&gt;&lt;br /&gt;Take, for example, this one, and look at the details of the postcards:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/hughes_leglise/480800065/in/set-72157600166567947"&gt;&lt;img src="http://farm1.static.flickr.com/187/480800065_9c8e4da939_m_d.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of them depicts Philippe Pétain with nostalgia -- Pétain was Hitler's strawman during the occupation of France in World War II. Another postcard features a guy making the fascist salute. A third one shows Hitler greeting Simone Veil (author of the French law that legalized abortion) among a club of mass murderers, including also Stalin an Mao -- a scene which insults not only the memory of the Holocaust victims, but also Veil herself, since she survived Auschwitz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-7000871873765434909?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/7000871873765434909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=7000871873765434909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7000871873765434909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/7000871873765434909'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/far-right-movements-in-europe-have-now.html' title='A postcard from Jeanne d&apos;Arc'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-2311748331909983547</id><published>2007-05-01T13:40:00.000+02:00</published><updated>2007-05-01T13:41:46.361+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>Mr. Thorow</title><content type='html'>I'm reading &lt;a href="http://en.wikipedia.org/wiki/Nathaniel_Hawthorne"&gt;Hawthorne&lt;/a&gt;'s &lt;span style="font-style: italic;"&gt;Notebooks.&lt;/span&gt; During september 1842, Hawthorne meets a strange little man, Mr. "Thorow", from who he buys a canoe that Thorow build himself. After a few pages, I began to realize that the little man was actually &lt;a href="http://en.wikipedia.org/wiki/Thoreau"&gt;Henry David Thoreau&lt;/a&gt;, and the wikipedia entry, quoting Hawthorne, confirmed that.&lt;br /&gt;&lt;br /&gt;Another neighbour of Hawthorne during those years was &lt;a href="http://en.wikipedia.org/wiki/Ralph_Waldo_Emerson"&gt;Ralph Waldo Emerson&lt;/a&gt;; the notebooks contains lots of little amusing facts about him, and Hawthorne befriended him (although he had little sympathy for Emerson's unitarian beliefs).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-2311748331909983547?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/2311748331909983547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=2311748331909983547' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2311748331909983547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/2311748331909983547'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/05/mr-thorow.html' title='Mr. Thorow'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6096704822492180681.post-4104152484543270351</id><published>2007-04-30T10:52:00.000+02:00</published><updated>2007-07-13T12:34:56.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='drwho'/><title type='text'>Favourite Doctor Who episodes</title><content type='html'>My new favourite Doctor Who episode is now &lt;a href="http://en.wikipedia.org/wiki/City_Of_Death"&gt;City of Death&lt;/a&gt;. Not only is it shot in Paris, in lots of familiar places; also, this is a 4th Doctor episode, and I like the 4th Doctor; it includes a villain which is very ugly; and as a bonus, we have John Cleese in some typical John Cleese appearance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6096704822492180681-4104152484543270351?l=consttype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://consttype.blogspot.com/feeds/4104152484543270351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6096704822492180681&amp;postID=4104152484543270351' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4104152484543270351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6096704822492180681/posts/default/4104152484543270351'/><link rel='alternate' type='text/html' href='http://consttype.blogspot.com/2007/04/favourite-doctor-who-episodes.html' title='Favourite Doctor Who episodes'/><author><name>Rafael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
