<?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-9064250334544215589</id><updated>2011-09-02T12:57:03.177+02:00</updated><category term='troubleshooting'/><category term='West Side Story'/><category term='eudemonics'/><category term='grails'/><category term='other'/><category term='soccer'/><category term='javascript'/><category term='groovy'/><category term='programming'/><category term='laughing'/><category term='comic'/><category term='eclipse'/><category term='fun'/><category term='philosophy'/><category term='subclipse'/><category term='magnolia'/><category term='subversion'/><category term='Lebensweisheit'/><category term='Primo Levi'/><title type='text'>The joys of craft</title><subtitle type='html'>Federico Grilli's blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-3541909901482853764</id><published>2011-04-19T22:07:00.007+02:00</published><updated>2011-04-20T21:57:40.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><title type='text'>Magnolia Apache Solr integration</title><content type='html'>Last week  I finally released the &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Apache+Solr+integration"&gt;magnolia-solr-module&lt;/a&gt; on &lt;a href="http://forge.magnolia-cms.com/"&gt;Magnolia's Forge&lt;/a&gt;. The module aims at bringing &lt;a href="http://lucene.apache.org/solr/"&gt;Apache Solr&lt;/a&gt; outstanding search features into &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia&lt;/a&gt;. For those who don't know Solr: &lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, rich document (e.g., Word, PDF) handling, and geospatial search. Solr is highly scalable, providing distributed search and index replication, and it powers the search and navigation features of many of the world's largest internet sites." &lt;/i&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;div&gt;Solr is used by some of the largest companies in the world such as apple, ebay, zappos, gettyimages and salesforce, to name just a few. Recently &lt;a href="http://guardian.co.uk/"&gt;The Guardian&lt;/a&gt; (which has the second highest readership of any on-line news site after the New York Times) has chosen Solr &lt;a href="http://www.infoq.com/articles/guardian_scala"&gt;for its content API&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;The reason for integrating Magnolia and Solr is a very simple one: have the best open source tool for a given task do the job. In my case, I like to manage and publish contents with Magnolia CMS (of course, I am biased towards Magnolia ;)) and its easy to use, intuitive interface, and then index and search those contents with Solr. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Apache+Solr+integration"&gt;step-by-step tutorial&lt;/a&gt; accompanying the module I explain how to achieve this.  There I also explain how to customize the module in case its default behavior does not suit your needs. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, if you need &lt;i&gt;blazing fast&lt;/i&gt; search for your Magnolia-based website, give the module a go and enjoy Magnolia+Solr integration!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-3541909901482853764?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/3541909901482853764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=3541909901482853764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/3541909901482853764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/3541909901482853764'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2011/04/magnolia-apache-solr-integration.html' title='Magnolia Apache Solr integration'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-7986595792166807919</id><published>2010-02-23T10:47:00.009+01:00</published><updated>2010-02-23T14:13:17.130+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Magnolia Groovy module 1.0-m2 video</title><content type='html'>The Magnolia Groovy module 1.0 Milestone 2 has just been &lt;a href="http://sourceforge.net/projects/magnolia/files/"&gt;released&lt;/a&gt;. Briefly, what it does is adding first-class &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; support into &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia's CMS&lt;/a&gt; at a deeper, system-wide level, allowing for managing Groovy classes and scripts directly within Magnolia's AdminCentral. The really innovative feature is the ability to plug in at runtime (almost) whatever piece of the CMS with a Groovy counterpart - &lt;b&gt;no need for deployments and stopping/starting the servlet container&lt;/b&gt;. Of course, some common sense is highly recommended here and, though in theory possible, I would not endorse to rewrite and replace everything with Groovy, especially classes performing time-critical tasks. At least, not until Groovy will have become as fast as, if not faster than, Java ;-), which the guys working at &lt;a href="http://groovy.dzone.com/articles/how-come-groovy-overperform"&gt;Groovy++&lt;/a&gt; seem trying to achieve. The &lt;a href="http://blip.tv/file/3256250"&gt;video here&lt;/a&gt; will show this and other new features, such as easy hierarchy JCR navigation through nodes and attributes simply by using &lt;i&gt;. (dot)&lt;/i&gt; notation (something similar to what Groovy does with XML with its XmlSlurper).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-7986595792166807919?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/7986595792166807919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=7986595792166807919' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/7986595792166807919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/7986595792166807919'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2010/02/magnolia-groovy-module-10-m2-video.html' title='Magnolia Groovy module 1.0-m2 video'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-8698411958317258484</id><published>2008-08-30T01:40:00.003+02:00</published><updated>2008-10-29T17:23:25.712+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lebensweisheit'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='eudemonics'/><title type='text'>Monty Python - Always Look on the Bright Side of Life (My epitaph)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;object width="425" height="350"&gt;&lt;param value="http://youtube.com/v/jHPOzQzk9Qo" name="movie"&gt;&lt;embed type="application/x-shockwave-flash" src="http://youtube.com/v/jHPOzQzk9Qo" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Now that's what I call eudemonics! When life sucks, just purse your lips and whistle! Probatum est! That's also what William James, the famous philosopher and psychiatrist, said. We think that action follows sentiment, that is I sing because I'm happy. But this causal link is uncertain. It can be the other way round, so we can improve our mood by singing, dancing, watching a MP's movie etc. as those are actions, and unlike feelings, they are controlled by our will (Schopenhauer perhaps wouldn't agree).&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-8698411958317258484?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/8698411958317258484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=8698411958317258484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/8698411958317258484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/8698411958317258484'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/08/monty-python-always-look-on-bright-side.html' title='Monty Python - Always Look on the Bright Side of Life (My epitaph)'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-4572231457112864760</id><published>2008-08-24T09:15:00.001+02:00</published><updated>2008-08-24T09:15:15.271+02:00</updated><title type='text'>Monty Python Sub Ita: The Funniest Joke in the World (Gep)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/HNATaHuBMQg' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/HNATaHuBMQg'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Words are the most powerful weapons. Read this, if you can, and you're dead. "Wenn ist das Nunstruck git und Slotermeyer? Ja!&lt;br /&gt;Beiherhund das Oder die Flipperwaldt gersput!"&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-4572231457112864760?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/4572231457112864760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=4572231457112864760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/4572231457112864760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/4572231457112864760'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/08/monty-python-sub-ita-funniest-joke-in.html' title='Monty Python Sub Ita: The Funniest Joke in the World (Gep)'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-184198114491179103</id><published>2008-08-21T20:15:00.001+02:00</published><updated>2008-08-21T20:15:40.968+02:00</updated><title type='text'>John Williams n' Julian Bream - spanish dance no.1</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/AYpdUo__dM8' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/AYpdUo__dM8'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Listening to this music is one of the greatest pleasures in life and makes me agree with Nietzsche who said that "life without music would be a mistake". &lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-184198114491179103?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/184198114491179103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=184198114491179103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/184198114491179103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/184198114491179103'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/08/john-williams-n-julian-bream-spanish.html' title='John Williams n&amp;#39; Julian Bream - spanish dance no.1'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-641345657208574582</id><published>2008-07-02T17:03:00.012+02:00</published><updated>2008-07-23T21:45:33.289+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='West Side Story'/><title type='text'>Subversion client too old</title><content type='html'>This is a workaround to fix a problem I had with my svn client after upgrading to Eclipse Ganymede and Subclipse plugin last week. It is based on scattered information I found on the web and that I managed to put together. Hopefully it will save someone some time (somewhere... something... somehow...).&lt;br /&gt;Basically, I had ended up with an svn client 1.4 on my system (ubuntu 8.04) whereas subclipse used a somehow bundled latest version 1.5. So everything went fine, as long as I did my svn work from within eclipse. Until one day (today) I had to do an &lt;pre&gt;&lt;strong&gt;svn up&lt;/strong&gt;&lt;/pre&gt; from the shell (we use maven modules and this time I had to update from the parent pom location). Then I got this message &lt;strong&gt;&lt;pre&gt;This client is too old to work with working copy '.'; &lt;br /&gt;please get a newer Subversion client.&lt;/pre&gt;&lt;/strong&gt; This was baffling, as &lt;pre&gt;&lt;strong&gt;apt-get install subversion&lt;/strong&gt;&lt;/pre&gt; told me that I had the latest package installed. After some googling, it turned out that svn 1.5 upgrades your &lt;em&gt;working (local) &lt;/em&gt; files in a way that it's incompatible with svn client 1.4. To cut it short, I decided to upgrade my svn client.&lt;br /&gt; &lt;br /&gt;Here are the steps to follow:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;At the moment, subversion 1.5 deb package is still considered experimental, so you'll need to add a line to your &lt;strong&gt;&lt;pre&gt;/etc/apt/sources.list&lt;/pre&gt; like this:&lt;br /&gt;&lt;pre&gt;deb http://ftp.it.debian.org/debian experimental main&lt;/pre&gt; &lt;/strong&gt;(You can choose a different mirror here http://packages.debian.org/experimental/i386/subversion/download)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then do &lt;strong&gt;&lt;pre&gt;apt-get update&lt;/pre&gt;&lt;/strong&gt; to update your deb repositories&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Finally &lt;strong&gt;&lt;pre&gt;apt-get install subversion&lt;/pre&gt;&lt;/strong&gt; to update your svn client to version 1.5. I gladly ignored the warnings about some non authenticable packages (those coming from the experimental repository). &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now everything is working fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-641345657208574582?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/641345657208574582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=641345657208574582' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/641345657208574582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/641345657208574582'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/07/svn-client-too-old.html' title='Subversion client too old'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-7957468845779721324</id><published>2008-06-29T21:03:00.002+02:00</published><updated>2008-06-29T21:06:37.499+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='soccer'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Monty Python - Finale di Filosofia (sottotitoli in Italiano)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/0AORIsB8DIw' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/0AORIsB8DIw'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Is Leibnitz's Monadology better than Plato's Theory of Forms? Was Aristotle smarter than Kant? Let these and other questions be settled by a soccer game, rather than by philosophical argument! A Monthy Python's classic which I felt compelled to translate and subtitle in Italian, because the official dubbing and translation really don't do it justice.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-7957468845779721324?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/7957468845779721324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=7957468845779721324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/7957468845779721324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/7957468845779721324'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/06/monty-python-finale-di-filosofia.html' title='Monty Python - Finale di Filosofia (sottotitoli in Italiano)'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-2179292263273783145</id><published>2008-05-10T21:06:00.006+02:00</published><updated>2008-05-10T21:31:49.795+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Tutorial: how to export an MBean in Grails</title><content type='html'>This is a cookbook tutorial I wrote while working-playing-learning (I guess I'm lucky that I am doing for a living something where these three things often get along) with Grails.&lt;br /&gt;It shows how to export Hibernate's StatisticsService MBean by leveraging Spring's JMX support through Grails's BeanBuilder, a class that uses dynamic Groovy to construct bean definitions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.codehaus.org/display/GRAILS/MBean+export+the+Groovy+way"&gt;http://docs.codehaus.org/display/GRAILS/MBean+export+the+Groovy+way&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-2179292263273783145?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/2179292263273783145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=2179292263273783145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/2179292263273783145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/2179292263273783145'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/05/tutorial-how-to-export-mbean-in-grails.html' title='Tutorial: how to export an MBean in Grails'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-6320126389314748024</id><published>2008-04-20T19:59:00.014+02:00</published><updated>2008-05-14T10:27:20.182+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Flickr horizontal menu with Prototype</title><content type='html'>Last week, while looking for a drop-down menu for a Grails application, I came across &lt;a href="http://www.candesprojects.com/demos/FlickrMenu/"&gt;this one&lt;/a&gt; which is very nice but uses jQuery. As Grails comes with Prototype as the default javascript  framework and I didn't want to add another dependency, nor mess up with  jQuery  and Prototype incompatibilities, I decided to port it to Prototype. To set up the menu and download the images and the css, please refer to the &lt;a href="http://www.candesprojects.com/downloads/flickr-horizontal-menu/"&gt;original menu post&lt;/a&gt;, then substitute the jQuery code with the Prototype one below.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;/*&lt;br /&gt;* Flickr-like menu ported from jQuery to Prototype.&lt;br /&gt;* The original is at http://www.candesprojects.com/downloads/flickr-horizontal-menu/&lt;br /&gt;*&lt;br /&gt;* @requires prototype 1.6&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;document.observe("dom:loaded", function() {&lt;br /&gt;&lt;br /&gt;$$("#nicemenu img.arrow").invoke("observe", "click", function(e){&lt;br /&gt;headMenu = e.findElement('span.head_menu');&lt;br /&gt;  //div.sub_menu&lt;br /&gt;submenu = e.findElement('li').down(3);&lt;br /&gt;&lt;br /&gt;if(submenu.getStyle('display')=='block'){&lt;br /&gt;headMenu.removeClassName("active");&lt;br /&gt;submenu.hide();&lt;br /&gt;this.writeAttribute('src','arrow_hover.png');&lt;br /&gt;} else {&lt;br /&gt;headMenu.addClassName("active");&lt;br /&gt;submenu.setStyle({'display': 'block'});&lt;br /&gt;this.writeAttribute('src','arrow_select.png');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$$("div.sub_menu:visible").each(function(e){&lt;br /&gt;if(e!=submenu){&lt;br /&gt;  e.setStyle({'display': 'none'});&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;$$("#nicemenu img.arrow").each(function(e) {&lt;br /&gt;if(e != this){&lt;br /&gt;  e.writeAttribute('src','arrow.png');&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$$("#nicemenu span.head_menu").each(function(e) {&lt;br /&gt;if(e != headMenu){&lt;br /&gt;  e.removeClassName('active');&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;$$("#nicemenu img.arrow").invoke("observe", "mouseover", function(e){&lt;br /&gt;this.writeAttribute('src','arrow_hover.png');&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;$$("#nicemenu img.arrow").invoke("observe", "mouseout", function(e){&lt;br /&gt;submenu = e.findElement('li').down(3);&lt;br /&gt;if(submenu.getStyle('display')!='block'){&lt;br /&gt; this.writeAttribute('src','arrow.png');&lt;br /&gt;} else {&lt;br /&gt; this.writeAttribute('src','arrow_select.png');&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;$$("#nicemenu span.head_menu").invoke("observe", "mouseover", function(){&lt;br /&gt;this.addClassName('over');&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;$$("#nicemenu span.head_menu").invoke("observe", "mouseout", function(){&lt;br /&gt;this.removeClassName('over');&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;document.observe("click", function(e) {&lt;br /&gt;var elt = e.findElement('#nicemenu');&lt;br /&gt;if (elt == undefined){&lt;br /&gt; $$("#nicemenu span.head_menu").invoke('removeClassName','active');&lt;br /&gt; $$("#nicemenu div.sub_menu").invoke('hide');&lt;br /&gt; $$("#nicemenu img.arrow").invoke('writeAttribute','src','arrow.png');&lt;br /&gt;}});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-6320126389314748024?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/6320126389314748024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=6320126389314748024' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/6320126389314748024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/6320126389314748024'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/04/flickr-horizontal-menu-with-prototype.html' title='Flickr horizontal menu with Prototype'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-8182846315922259605</id><published>2008-04-13T10:33:00.005+02:00</published><updated>2008-04-13T20:22:15.333+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='laughing'/><category scheme='http://www.blogger.com/atom/ns#' term='comic'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Reporter laughs at victim of an operation mistake</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;object height="350" width="425"&gt;&lt;param value="http://youtube.com/v/O0dybAaZWuI" name="movie"&gt;&lt;embed type="application/x-shockwave-flash" src="http://youtube.com/v/O0dybAaZWuI" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;/div&gt;"For the ridiculous is some error and deformity which is not painful or destructive[...]" (Aristotle, Poetics). This could account for why the journalist burst out laughing at the accident occurred to the unlucky guy (he underwent a routine surgical operation in the throat but something went wrong, as one can infer from his voice). It was a very human reaction which most of us are very likely to have in a similar situation. In any case, besides making me laugh hard, it was very interesting and aroused in me an interest in better understanding the mechanics of comic, its proximate causes and effects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-8182846315922259605?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/8182846315922259605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=8182846315922259605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/8182846315922259605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/8182846315922259605'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/04/laughing-interview-subtitled.html' title='Reporter laughs at victim of an operation mistake'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-6125048083095404983</id><published>2008-04-10T22:10:00.005+02:00</published><updated>2008-04-12T23:42:40.155+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Primo Levi'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Primo Levi: Back to Auschwitz (Part 1)</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;object height="350" width="425"&gt;&lt;param value="http://youtube.com/v/RIDgjeaJM_I" name="movie"&gt;&lt;embed type="application/x-shockwave-flash" src="http://youtube.com/v/RIDgjeaJM_I" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Primo Levi: Back to Auschwitz (Part 1 of 3, [the remaining two as soon as I'll have time and will :-)]). This is a documentary broadcast by the Italian State Television, Rai, in 1983. I added the subtitles. The English translation is by Mirto Stone and was taken here http://www.inch.com/~ari/levi1.html. I just added some small parts that were missing in the transcription. The interviewer is Daniel Toaff, the son of Elio Toaff, the former Chief Rabbi of Rome.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-6125048083095404983?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://igorstravinskij.blogspot.com/feeds/6125048083095404983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9064250334544215589&amp;postID=6125048083095404983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/6125048083095404983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/6125048083095404983'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/04/primo-levi-back-to-auschwitz-part-1.html' title='Primo Levi: Back to Auschwitz (Part 1)'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9064250334544215589.post-244312975939395195</id><published>2008-03-21T19:01:00.005+01:00</published><updated>2008-05-14T10:28:44.155+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The joys of craft</title><content type='html'>Since I started learning to program in 1998 (yes, I was not a kid of 13 playing with his commodore 64, on the contrary I was a rather mature man of 30 who had barely  seen a pc before and thought that Win95 was sort of a prodige), I've read in programming books that code reuse is generally a good thing. Indeed, this was confirmed by my successive years of experience in the world of professional programming. Now, to prove that I have acquired one of the most distinctive mental habits of this trade, I'm going to show you maybe the most common and primitive form of code reuse, that is copy &amp;amp; paste, applied to this very post. I've often thought about the joys of programming and have come up with some answers. Last night, while browsing Amazon.com, I began reading an excerpt from a book I'm told is a classical for us programmers and which it's on my &lt;a href="http://www.amazon.co.uk/gp/registry/wishlist/32GFDR5SWANU1/ref=cm_wl_rlist_go/026-1762987-8677251" target="_"&gt;wish list&lt;/a&gt; for some time now, "The mythical man-month" by Frederick P. Brooks. Well, in a paragraph called "The joys of craft", Brooks expresses my feelings about programming in such an accurate way, that it's really not worth bothering reformulating them in my own words. So here we go, let's copy and paste.&lt;br /&gt;&lt;br /&gt;"Why is programming fun?  What delights may its practitioner expect as his reward?&lt;br /&gt;First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.&lt;br /&gt;Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child's first clay pencil holder "for Daddy's office."&lt;br /&gt;Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.&lt;br /&gt;Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.&lt;br /&gt;Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (As we shall see later, this very tractability has its own problems.)&lt;br /&gt;Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.&lt;br /&gt;Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-244312975939395195?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/244312975939395195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9064250334544215589/posts/default/244312975939395195'/><link rel='alternate' type='text/html' href='http://igorstravinskij.blogspot.com/2008/03/joys-of-craft.html' title='The joys of craft'/><author><name>Federico Grilli</name><uri>http://www.blogger.com/profile/03428088122410468954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
