Merged all images folders into images.
jump to
@@ -1,4 +1,2 @@
User-agent: * -Disallow: /data Disallow: /images -Disallow: /img
@@ -8,7 +8,7 @@ <p>I should write more. I noticed that I since I decided to take a break from <a href="http:www.zzine.org">zZine
Magazine</a> I more or less stopped writing – and started <em>baking</em> again with <a href="http://www.cakephp.org/">CakePHP</a>. As a result I finally recoded this website and <em>refreshed</em> a little bit my almost-rusty baking skills.</p> -<p style="float:left;"><img src="/img/pictures/cakephp.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/cakephp.png" alt="" /></p> <p>Why not taking advantage of this and write more about CakePHP then? After all, my last <a href="/articles/cakephp/">article</a> turned out well enough and some people even bookmarked it online on del.icio.us and ma.gnolia… Now it’s a bit out of date, I must admit: it was based on a pre-beta release
@@ -21,7 +21,8 @@ be in my situation, but I hope this can help at least those who experienced or could experience something similar
someday. </p> <p><em><strong>Working under Uncle Bill’s wing</strong></em><br /> - <img src="/img/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I’ve recently been + <img src="/images/pictures/genova.jpg" alt="" /> Not Microsoft. No, not directly at any rate. I’ve recently + been contacted by a well known multi-national company which does almost anything ranging from computers, phones, electrical stuff to huge self-aware robots designed to conquer new worlds… Not quite, but let’s just say that this image contributes to give an idea of a Corporate-type reality.@@ -76,7 +77,8 @@ <li>My friends and fianceé will probably hassle me to give them free goodies they think I’ll get from
the company</li> </ul> <p><em><strong>Working in a ‘cool place’, and fly high</strong></em> <br /> - <img src="/img/pictures/lambruschini.jpg" alt="" /> Nope, sorry, the <a href="http://www.cakefoundation.org/">Cake + <img src="/images/pictures/lambruschini.jpg" alt="" /> Nope, sorry, the <a + href="http://www.cakefoundation.org/">Cake Software Foundation</a> unfortunately is not hiring. The alternative is a small company in my city, Genoa, which recently merged with a slightly bigger company based in Milan, which <em>might</em> merge with a big national company involved in producing some successful (here in Italy and even abroad, a little bit) TV programs. Network
@@ -13,7 +13,7 @@ add ten bookmarks about Cake right away, but the <em>latest addition</em> showed on the front page would feature
only bookmarks, which would be bad (yes, I do worry about silly things). At the moment this blog is the second easiest way to provide fresh content frequently enough to encourage visitors to come back, but articles could be even better.</p> -<p style="float:left;"><img src="/img/pictures/baking_bear.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/baking_bear.png" alt="" /></p> <p>Without further ado, I hereby announce that <em>I am working on some new articles on CakePHP</em>, at least one. I’d like to write something technical about CakePHP’s advanced features, because that’s where the current documentation is lacking, at the moment: associations, caching, some advanced components… they are
@@ -14,11 +14,12 @@ don’t want to act as a Ruby on Rails fanatic and boast that <em>you can do anything with CakePHP</em> and
things like that, but I can certainly say that CakePHP can be <em>extended</em> and <em>integrated</em> with other collections of scripts, frameworks and projects. With limitations, of course: you probably don’t want to force an integration between CakePHP and another <span class="caps">MVC</span>/Event Driven/Whatever framework, simply - because it would be rather pointless and potential conflicts may occur.</p> + because it would be rather pointless and potential conflicts may occur. +</p> <p>What I keep finding online is other open source projects adopting CakePHP as <em>backend</em> and <em>structure</em>. I’m sure there are many examples which could be mentioned here, but I chose two in particular: one has been around for a few months and the other is just born.</p> -<p style="float:left;"><img src="/img/pictures/amfphp.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/amfphp.jpg" alt="" /></p> <p><a href="http://amfphp.org/"><span class="caps">AMFPHP</span></a> is quite an interesting project:</p> <blockquote> <p>“[it] is an open-source Flash Remoting gateway. It’s fast, reliable, 100% free and open-source. Flash@@ -51,7 +52,7 @@ <p>The installation doesn’t seem too painful at all. And – guess what – gwoo recently updated a very
informative tutorial showing how to create a simple – but still impressive – bullettin board with CakeAMFPHP.</p> <p><em>“Cool, but I never liked flash, what about <span class="caps">AJAX</span>?”</em></p> -<p style="float:left;"><img src="/img/pictures/qooxdoo.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/qooxdoo.gif" alt="" /></p> <p>CakePHP has a nice <span class="caps">AJAX</span> helper to be used in conjunction with <a href="http://prototype.conio.net/">prototype</a>, but there are truly a lot of libraries, mini-frameworks, pre-built applications to create interactive desktop-like user interfaces. Some people may already know <a
@@ -18,7 +18,7 @@ this means that the could be some performance issues, for one, and also that inevitably not <em>all</em> features
offered by either ADOdb or <span class="caps">PEAR</span>::DB are used. In my very, very, very modest opinion (I’m not an expert on this matter), this solution focus on achieving good database compatibility leaving the doors open for further tinkering, if needed.</p> -<p style="float:left;"><img src="/img/pictures/postgres.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/postgres.png" alt="" /></p> <p>Having said this, yes, the possibilities are good that your favorite database is supported by CakePHP, more or less. Of course, as repeatedly pointed out by some CakePHP core developers, Cake dev team didn’t and is not going to test <em>every</em> database with Cake, using either of the two abstraction layers, but users are more than welcome@@ -26,12 +26,13 @@ to do so.</p>
<p>Let’s now have a look at what is <em>known to work</em> with Cake:</p> <p><strong>MySQL</strong> works fine, and is currently recommended as <em>preferred</em> database solution. What about <strong>MySQLi</strong>? Well, thanks to mappleJoe there’s a (PHP5 only!) <a - href="http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512">driver</a> ready to be used.</p> + href="http://cakephp.org/pastes/show/770e73e77e4d7a3d32c2f3de3f175512">driver</a> ready to be used. +</p> *PostgreSQL*’s support is continuously improving. Something may work, something may not: the good news is that the folks who are using it are <a href="http://groups.google.com/group/cake-php/browse_thread/thread/85a29ab6ec6826a0/8eecea26ba53e1fd?q=postgres&rnum=1#8eecea26ba53e1fd">sharing their thoughts</a> with the rest of us. -<p style="float:right;"><img src="/img/pictures/sqlite.gif" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/sqlite.gif" alt="" /></p> <p><strong>SQLite</strong> is supported natively, or so it seems… what about the newest SQLite3? Yes, probably: there’s a quick <a href="http://www.thompsonlife.net/index.php?section=9">howto</a> on ThompsonLife.net to make it work through the dbo_pear driver.</p>@@ -40,10 +41,12 @@ href="http://wiki.cakephp.org/docs:databases">wiki</a> (thanks ivanp).</p>
<p><a href="http://www.filemaker.com/">FileMaker</a> is getting there: things aren’t that easy, but bdb is doing <a href="http://groups.google.com/group/cake-php/browse_thread/thread/572d8dd2ba4cbdf7/dca851c795247c0b?q=database&rnum=2#dca851c795247c0b">all - his best</a> to make it work, good luck!</p> + his best</a> to make it work, good luck! +</p> <p>Neil Fincham was also trying to develop a custom driver to support <a href="http://www.pervasive.com/">Pervasive</a> through a <a href="http://www.unixodbc.org/">unixODBC</a> driver. Best of luck!</p> <p>For other databases, check ADOdb’s <a href="http://phplens.com/adodb/supported.databases.html">list of supported databases</a> and use the <code>dbo-adodb</code> driver, or use <span class="caps">PEAR</span>::DB (for fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql,sqlite and sybase) using the - <code>dbo-pear</code> driver.</p> + <code>dbo-pear</code> driver. +</p>
@@ -10,7 +10,8 @@ standard for forums and articles, so consequently more or less all my articles are bbcoded. <br />
I could copy and paste the <em>BBcodeHelper</em> I coded for this site, and it could be quite an interesting read for some people… well, tough luck: today I’d like to talk about Textile instead, which now I consider <em>the answer</em> to all - text formatting problems.</p> + text formatting problems. +</p> <p>If what I wrote up to here doesn’t make sense to you, I’m rambling about the apparent necessity and the undeniable need of web developers, content managers, and writers to use something else other than <span class="caps">HTML</span> for adding style and formatting text. What’s wrong with <span@@ -31,7 +32,7 @@ similar to me!</p>
<p>What about <code>_this_</code> instead? You use only two additional characters instead of seven. <span class="caps">SEVEN</span>. If I only want italcized text I honestly can’t imagine myself using more than two extra characters. It’s natural. It’s human.</p> -<p style="float:left;"><img src="/img/pictures/pear2.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/pear2.gif" alt="" /></p> Precisely. Textile is a <em>“Humane web text generator™”</em>, it’s simple, elegant and produces standard compliant <span class="caps">XHTML</span> code. <a href="http://www.textism.com/about/">Dean Allen</a> should be worshipped by entire generations of web developers for inventing something so easy to use and so <em>elegant</em> at
@@ -15,7 +15,7 @@ <p>Definitely: everybody is special, and people tend to say that especially when someone passes away. In my
grandpa’s case, actually I can say that in a slightly more absolute sense: his life was truly uncommon and very active.</p> <p><strong>A very active life</strong></p> -<p style="float:left;"><img src="/img/pictures/grandpa.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/grandpa.jpg" alt="" /></p> <p>Vittorio Cevasco, my grandfather, was certainly the most active member of my family. We’re talking about a man who was still able to drive a car up to last September (he was nearly 90 years old), and used to drive 500 Km on the motorway and mountain roads every year to go on vacation: he went to the same place, Mals Vinschgau, near the@@ -47,7 +47,7 @@ <p>He was one of the first man in Italy and the the first in Genoa area to get a flying license, back in 1934. A news
which made the local papers at the time, and we still have that article somewhere. He wanted to become a civil pilot, but he never did: the Country needed him to protect our sky, when Italy joined the War in 1941.</p> <p><strong>The Aviator</strong></p> -<p style="float:left;"><img src="/img/pictures/sessarego.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/sessarego.jpg" alt="" /></p> <p>My grandpa lived the early years of his youth in the village of Sessarego, where my great-grandfather bought an old house, after taking part in <a href="http://www.italian-american.com/garib-it.htm's">Giuseppe Garibaldi</a> expedition at Marsala (1860) fighting for the Italian independence (he’s listed among <a@@ -68,13 +68,15 @@ he’d have became a military pilot, as the Regime needed people for their brand new aircrafts, and the was felt
imminent.<br /> He paid them back, eventually, after passing both the civil and military tests. He became a sergeant for the <em>Regia Aviazione</em> (Royal Airforce), with a salary of 20 Lire/month, ten of which went to the flying school, - for many months, but he was still earning some very decent money.</p> + for many months, but he was still earning some very decent money. +</p> <p>One of the most peculiar things about my grandpa was his memory: he was always able to tell you the story of his life, all the events, with the same details and <em>all the exact dates</em>, on every occasion. Even when we took him to the hospital, a few weeks ago, when we asked the nurse if he was self-conscious she said: <em>“Yes… well, he was talking a few hours ago, but I don’t know if he was raving or what… - he said he was a pilot, and that he used to fly at 350Km/h…”</em></p> -<p style="float:right;"><img src="/img/pictures/r2002-main.jpg" alt="" /></p> + he said he was a pilot, and that he used to fly at 350Km/h…”</em> +</p> +<p style="float:right;"><img src="/images/pictures/r2002-main.jpg" alt="" /></p> <p>Damn right. His old <a href="http://www.comandosupremo.com/Re2002.html">Re 2002</a> was able to fly at 350 Km/h if pushed, at a standard altitude of 35,000 m, while carrying a 500Kg bomb. It was <em>his</em> plane, and he never forgot that, even a few days before he passed away. He’d tell you all the stats, the mechanics, the technical@@ -101,7 +103,7 @@ about <em>that particular day in 193x/4x</em> and so on: we all knew that, and actually I enjoyed listening to his
stories, mostly because they were genuine and authentic relics of an old and glorious past. I think in his mind he wanted us all to remember him in that way, to always keep in mind that he was a pilot and how he enjoyed it, even when he went in jail for it, even when his plane was taken down…</p> -<p style="float:left;"><img src="/img/pictures/Re2002.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/Re2002.jpg" alt="" /></p> <p>On that day right after he was assigned to a new base, they asked him to perform some exercises in the air, loops and all sort of acrobatics: <em>“ë sölite cöse che së dûviëiva fä in t’ë l’aviäsiûn”</em> [the usual things you had to do in the airforce].<br />
@@ -32,7 +32,7 @@ <p>All this for less than 10$/month, ideally 5$, on shared hosting. I already made my choice and if you’re reading
this post it means everything worked fine, but anyway, let’s have a look at what the market can offer for my needs. I only went for US-based hosts: Italian hosts are terrible and US hosts are normally more reliable and cheaper.</p> -<p style="float:left;"><img src="/img/pictures/dreamhost.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/dreamhost.gif" alt="" /></p> <p>The first hosting company I was tempted by was <a href="http://www.dreamhost.com">DreamHost</a>. They can literally sell you anything but their mother, at stupidly cheap rates for what you get (apparently):</p> <ul>@@ -53,7 +53,7 @@ reliability is not too great, for example, and that the seem to be rather dodgy in general. “They are
overselling, they’ll soon enforce <span class="caps">CPU</span> restrictions” etc. etc. <br /> <em>…let’s move along</em> </p> -<p style="float:right;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/rails.gif" alt="" /></p> <p>I might try out Ruby on Rails someday, so perhaps I thought it would be wise to choose a host supporting it, for a change. The first Rails friendly I thought about was <a href="http://www.railsplayground.org">RailsPlayground</a>, which started off as <span class="caps">FREE</span> Rails host and then ended up offering interesting commercial@@ -72,7 +72,7 @@ <li>…and more</li>
</ul> <p>Well, the only reason why I didn’t go with them was that I did slightly more space, only that. The plan for 5GB of space costs 11$/month, which was too expensive for my liking.</p> -<p style="float:left;"><img src="/img/pictures/textdrive.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/textdrive.gif" alt="" /></p> <p>Since we’re talking about Rails, why not <a href="http://www.textdrive.com">Textdrive</a>? Founded by 200 IT professional, hosts high quality sites, it’s the official Rails host… An “elite” solution, here’s what you get:</p>
@@ -10,7 +10,7 @@ href="http://www.rubyonrails.org">Ruby on Rails</a> came out I felt damn jealous and terribly tempted to learn
Ruby <em>only</em> to start using such an amazing web development framework. At the time I actually even started reading various tutorials about it, and I was literally amazed at how RoR revolutioned the way of developing web applications.</p> -<p style="float:left;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/rails.gif" alt="" /></p> <p>One of the main problems which made me – sadly – abandon Rails was Ruby itself: personally I’ve never seen a programming language with a cleaner and more elegant syntax, but also – at least at the time – there weren’t many hosts supporting it. LuckilyI found CakePHP quickly after that…<br />@@ -65,7 +65,7 @@ </ul>
</li> <li>vendors/</li> </ul> -<p style="float:right;"><img src="/img/pictures/cakephp.png" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/cakephp.png" alt="" /></p> <p>Cake felt the necessity to divide what you can mess with (<code>app/</code>, <code>vendors/</code>) from what you’d better not touch (<code>cake/</code>). Rails just left everything on the same level.</p> <p>After creating my database and the necessary tables I have to edit <code>config/database.yml</code>, which@@ -141,7 +141,8 @@ 19: <td><</span>= recipe.date <span>></td><br />
20: </tr><br /> 21: <</span> end <span>><br /> <</span> end %></p> -<p>I took a screenshot of the page, because it was too nice: <a href="/img/pictures/rails_error.jpg">check it out</a>. +<p>I took a screenshot of the page, because it was too nice: <a href="/images/pictures/rails_error.jpg">check it + out</a>. This error page really tells you what’s wrong, and even prints the lines of code around the error! It also lets the developer check the full backtrace and every sort of information… Can we have this in CakePHP please? I actually started to develop something like this, but seemed quite hard to do in <span class="caps">PHP</span>.</p>
@@ -12,7 +12,7 @@ in many different ways, someone said it can do wonders, some said it’s more advanced, others said something like
<em>“qcodo sucks.. cake stinks.. symfony rocks!!!!!”</em>, so it <span class="caps">OUGHT</span> TO be pretty cool, definitely. </p> -<p style="float:left;"><img src="/img/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad +<p style="float:left;"><img src="/images/pictures/symfony.gif" alt="" /> <em>Know thy enemy</em> someone said (OK, bad joke), so let’s have a look at this interesting alternative to CakePHP. <em>No dude, not another <span class="caps">MVC</span>-like, pseudo-Rails, <span class="caps">AJAX</span>-worshipping framework!</em> Yes, another one. Actually Symfony is more than that: while people <em>can</em> say CakePHP is similar to RoR for some@@ -36,7 +36,7 @@ developer is not a complete and hopeless idiot when it comes to design and look ‘n’ feel!<br />
I do agree that some CakePHP sites (mine, mainly) don’t look too good, and probably the Cake Software Foundation should pay me to put it offline. I also agree that the Symfony website looks nice and is more pleasant to the eye than CakePHP’s, but I do hope that the old “design contest” doesn’t get forgotten…</p> -<p style="float:right;"><img src="/img/pictures/askeet.gif" alt="" /> The Symfony team also did something truly +<p style="float:right;"><img src="/images/pictures/askeet.gif" alt="" /> The Symfony team also did something truly remarkable: a comprehensive tutorial, an advent calendar, some great free source code to download and a fully functional Web 2.0-compliant online application <em>all in one</em>. I’m referring to Askeet, a Symfony-powered website which has been built from scratch using the
@@ -12,7 +12,7 @@ <p>Anyhow, it’s ready, just baked and smells damn good. Go get it if you didn’t already, it’s
available at <a href="http://cakeforge.org/frs/?group_id=23">the usual place</a>, even this time you won’t be disappointed. CakePHP now reached the 1.0 milestone, in a way which reminds me a lot about Mozilla Firefox: a lot of people were already using it <em>before</em> it went stable officially!</p> -<p style="float:left;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/CakePHP_1.0.png" alt="" /></p> <p>The CakePHP Team has been humble enough not to declare their product <em>stable</em> before the time. I personally considered CakePHP stable <em>enough</em> since RC2… and considering that this site and many others have been built on alpha, beta and RC version, I think people can get an idea of Cake’s reliability.<br />@@ -54,7 +54,7 @@ Adding check for custom error class in app/.
Added check for AppController::appError(); will be called if this method is in AppController. </code></pre> -<p style="float:right;"><img src="/img/pictures/cakesite.png" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/cakesite.png" alt="" /></p> <p>If you’re not too excited about this new release, maybe you should have a look at <a href="http://www.cakephp.org">www.cakephp.org</a>. Different? Damn right it is: it looks like someone listened to our prayers for a new website design. The merciful soul is <a href="http://www.nolimit-studio.com/">Armando@@ -63,8 +63,9 @@ <span class="caps">GREAT</span> idea of thinking about an <em>innovative</em> design for the Cake site…
Actually my dad didn’t think that way: <em>“That’s not new, that way of advertising was all over the place when I was a kid!”</em> And he’s right, Armando thought that a fifties-like template would have been perfect for Cake. Forget all the smooth, roundy-and-chubby, toons-like “official” Web 2.0 - designs (beta), the new Cake site needs to stand out of the crowd…</p> -<p style="float:left;"><img src="/img/pictures/fonz.jpg" alt="" /></p> + designs (beta), the new Cake site needs to stand out of the crowd… +</p> +<p style="float:left;"><img src="/images/pictures/fonz.jpg" alt="" /></p> <p><br /><br /> <em>Heyyy! Well done guys…</em> </p>
@@ -36,7 +36,7 @@ <p>Anyhow, right when I went to submit my article to Digg, it turns out that another guy wrote <a
href="http://digg.com/programming/5_Next_Generation_PHP_Frameworks">a similar round up</a>, which made it to Digg’s homepage. That was an annoying cohincidence, but in the end things didn’t go too bad: his roundup was more generic, while mine was more specific and detailed.</p> -<p style="float:left;"><img src="/img/pictures/dugg_detail.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/dugg_detail.png" alt="" /></p> <p>After submitting my article the reaction wasn’t instantaneous… 5, 7, 10, 13 diggs in the first two hours. Then shortly I made it to 30 and when the 40th visitor dugg it my article was moved to the first page!<br /> I immediately noticed it when I refreshed my stats page: a minute before my girlfriend was here telling me “oh
@@ -15,7 +15,7 @@ like that… something rather different, but still something: the <code>bake.php</code> script.<br />
This cute little thing is located in the <code>cake/scripts/</code> folder and can be used – hear, hear – from command line. You can run Ruby and Perl scripts, so yes, you can actually run <span class="caps">PHP</span> from command line, although it’s not its primary purpose.</p> -<p><img src="/img/pictures/bake.jpg" alt="" /></p> +<p><img src="/images/pictures/bake.jpg" alt="" /></p> <p>Cool then, let’s open a *nix shell, Windows command prompt, etc. etc., go into the <code>cake/scripts/</code> folder and run:</p> <p><code>php bake.php</code></p>@@ -30,12 +30,14 @@ also generate <em>something</em> eventually if you provide all the necessary details.<br />
A different approach, which may be good or bad according to your taste: personally I think we should also have something faster to use, like a Rails generator, and I opened a <a href="https://trac.cakephp.org/ticket/768">ticket</a> about it, but let’s see what bake.php can do, for - now.</p> + now. +</p> <p>The answer is… nearly anything. It annoying enough to please, but if you follow its directions it can do a prettu decent job in the end, it’s far from being sentient, but let’s say it’s smart enough for a script. First of all if you try it out on a fresh Cake install it will notice that you haven’t configured your database yet, so it will ask for a hostname, username, password, database name etc. etc. and generate your - <code>app/config/database.php</code> for you, not a bad start.</p> + <code>app/config/database.php</code> for you, not a bad start. +</p> <p>Once that’s done – and it won’t go on unless you configure a (MySQL only?) database – you can proceed with the rest. You can start creating either a controller, model or view; I tried a <code>Posts</code> controller, for example. The script then asks quite a few questions:</p>
@@ -26,7 +26,7 @@ 2. chmod /cake_install/rdBaker/tmp to 0777<br />
3. launch http://localhost/cake_install/rdBaker/</p> </quote> <p>Not too hard, innit?</p> -<p><img src="/img/pictures/rdbaker.jpg" alt="" /></p> +<p><img src="/images/pictures/rdbaker.jpg" alt="" /></p> <p>Good. So you try accessing something like <code>http://localhost/php/test/cakephp/cake_test/rdBaker/</code> (that’s on my own local <span class="caps">WAMP</span> server) and you’ll get a nice page asking you to “supply your ingredients” via a simple form. <br />
@@ -12,7 +12,7 @@ This is old news now, the screencasts section came together with the <a href="/articles/24">site overhaul</a> but I
only got a chance to take a look at them (one of them only, to be totally honest) recently, and so here’s a spoil… erhm, a <em>detailed</em> description of John Anderson’s screencast about the <a href="http://manual.cakephp.org/chapter/18">Blog Tutorial</a>.</p> -<p style="float:left;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/CakePHP_1.0.png" alt="" /></p> <p>There’s something I’ll never do: a screencast. Recording every mouse movement, every word or piece of code typed in half an hour? No way! And what happens if I mistype something? People will keep pointing out the fact that I was starting to type <code></h2></code> to close a <code></h1></code> tag, or that I waited an
@@ -17,7 +17,7 @@ is enough to leave the most popular multi-purpose programming editor out: programmers don’t need a spell
checker, a highlighter for their favourite language is more than enough. <br /> I will not mention all the applications I tried to find the Perfect Editor, and I’ll just focus on the programs I ended up using in the end. Some may be well known, others may not, anyway, here we go.</p> -<p style="float:left;"><img src="/img/pictures/wp/bill.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/wp/bill.jpg" alt="" /></p> <p><a href="http://www.microsoft.com/office/preview/default.mspx">Word 2007 Beta 2</a> – Yes, I know that OpenOffice is free and OO Writer works great, but perhaps at work you’ll be asked to use MS Word. Some editors may require that as well, and their templates may not be correctly rendered by OpenOffice, so in the end@@ -35,7 +35,7 @@ class="caps">STILL</span> have to clutter your taskbar if you want to keep more than one document open. <br />
At any rate, it does the job, exactly in the same way as it did in the previous versions. <br /> I use it if people ask me to, and for writing stuff which doesn’t need to be formatted with a particular markup or style but rather look nice and have pictures embedded.</p> -<p style="float:right;"><img src="/img/pictures/wp/writely.gif" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/wp/writely.gif" alt="" /></p> <p>Writely – Now this is much more fun. A <em>online</em>, <span class="caps">AJAX</span>-powered word processor recently acquired by Google. IT’s currently in closed beta, but I was lucky enough to get an account before they closed registrations and I can invite people to use@@ -55,7 +55,7 @@ and save it, Writely automatically creates a new version of it, storing the old ones as well, so that you can even
compare them to highlight differences if you wish: a great feature to keep track of the editing process and know exactly who edited which. When I noticed it that was it, Writely has become my online <em>repository</em> for my articles and writings.</p> -<p style="float:left;"><img src="/img/pictures/wp/cream.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/wp/cream.png" alt="" /></p> <p>Cream – I discovered this a while ago, and it’s perhaps the most multi-purpose editor out there. It’s built on top of Vim (respect+) but it has a friendlier interface by default, and that’s exactly what I’m using right now for typing this post. The reasons are simple: it
@@ -10,7 +10,7 @@ pointing out that I forgot another Rails-like framework, in my round-up. He obviously posted a link to this rather
mysterious Rails port in <span class="caps">PHP</span> and spam or not, I’d like to thank this guy for letting me know of the existence of Akelos, a new <span class="caps">PHP</span> framework which seems simply too good to be true.</p> -<p style="float:left;"><img src="/img/pictures/frameworks/akelos_framework.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/frameworks/akelos_framework.png" alt="" /></p> <p>Let me just spend a few words more before writing more about it though. First off, it’s not available yet. OR at least it doesn’t seem to be: the author is planning to release his work to the Open Source community but… well, he’s a bit concerned about the current “<span class="caps">PHP</span> Framework@@ -35,7 +35,7 @@ really like RoR and I love the way it works, and yes, I think Ruby is definitely the best language to do that
sort of things, <span class="caps">EVERYBODY</span> <span class="caps">KNOWS</span> <span class="caps">THAT</span>. Please, please, save us poor <span class="caps">PHP</span> developers the usual preaching.</small></p> -<p style="float:right;"><img src="/img/pictures/frameworks/bermi_ferrer.png" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/frameworks/bermi_ferrer.png" alt="" /></p> <p>Right, back to Akelos now. Curious as I am I immediately checked out the official page and all i found was a pretty long list of features which made me dribble, literally… ooops!</p> <p>Let’s just quote the most juicy ones, shall we?</p>
@@ -7,16 +7,17 @@ -----
<p><em><strong>Italy has won the World Cup!</strong></em></p> <p>It doesn’t matter if Zidane first scored on a totally unfair penalty kick at the 7th minute and then, totally out of his mind, headbutted Materazzi… WE <span class="caps">WON</span>, <span class="caps">AND</span> WE - <span class="caps">KICKED</span> <span class="caps">THEIR</span> <span class="caps">ASS</span>, end of story :)</p> + <span class="caps">KICKED</span> <span class="caps">THEIR</span> <span class="caps">ASS</span>, end of story :) +</p> <div align="center"> - <p><img src="/img/italy/worldcup.jpg" alt="" /> + <p><img src="/images/italy/worldcup.jpg" alt="" /> </div> </p> <blockquote> - <p style="float:left;"><img src="/img/italy/grosso.jpg" alt="" /></p> + <p style="float:left;"><img src="/images/italy/grosso.jpg" alt="" /></p> <p>“Italy beat France 5-3 in a penalty shoot-out to win the World Cup after an absorbing 1-1 draw in Berlin. </p> - <p style="float:right;"><img src="/img/italy/italy1.jpg" alt="" /></p> + <p style="float:right;"><img src="/images/italy/italy1.jpg" alt="" /></p> <p>Fabio Grosso scored the winning goal after France’s David Trezeguet missed.</p> <p>Playing his last game before retiring, Zinedine Zidane’s career ended in disgrace after he was sent off for crazily headbutting Marco Materazzi.</p>
@@ -61,7 +61,7 @@ <li>FileUploader (by the author, using prototype)</li>
<li>Window</li> <li>EventSelectors</li> </ul> -<p style="float:left;"><img src="/img/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/frameworks/akelos_framework_logo.gif" alt="" /></p> <p>Good, well, kind of: that’s just what <em>others</em> did, but it’s worth noting that it’s all there and – apparently – integrated with the framework, hopefully not too tightly. But people are fussy, and do not get excited easily anymore, long gone are the early days of Rails, when the whole Internet shake at
@@ -17,8 +17,9 @@ class="caps">AJAX</span> Start Pages created or not, but at any rate – in my very, very, very humble
opinion, is the most advanced and the most usable of <a href="http://www.techcrunch.com/2005/12/07/ajax-desktops-wont-stop/">the lot</a>, and an essential tool for lazy folks like me who want to keep up-to-date with what’s going on without having to visit dozen of websites - everyday.</p> -<p style="float:left;"><img src="/img/pictures/netvibes.jpg" alt="" /></p> + everyday. +</p> +<p style="float:left;"><img src="/images/pictures/netvibes.jpg" alt="" /></p> <p>I can see people jumping up and down shouting “Pageflakes is better”, “Protopage kicks a$$” etc. etc. Well, yes, probably, as you like: different people like different things, and when it comes to <span class="caps">AJAX</span> Start Pages there’s really a lot to choose from: 3spots has an excellent (and
@@ -11,7 +11,7 @@ <p>Up to now I never made any formal announcement myself (although the Cake Software Foundation already did, months
ago), nor gave out any juicy details about it, but maybe now the time has come to post something more about it. Yes, I am indeed writing a book about the CakePHP framework, and yes, you can already buy it but no, you can’t phisically get it simply because it’s still in progress (miracles of the modern publishing industry!).</p> -<p style="float:left;"><img src="/img/cakephp-recipes/cover.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/cakephp-recipes/cover.jpg" alt="" /></p> <p>I’d like to point out that I’m not the <em>only</em> author of the book: all the code examples and snippets included in the book is provided by the Cake Software Foundation staff, in the person of Larry E. Masters and Garrett J. Woodworth mainly, who will also act as technical editors and first reviewers of the book, together
@@ -18,9 +18,9 @@ published by <span class="caps">IBM</span> are much more up-to-date than my articles, and thus deserve such a
mention instead.</p> <p>Oddly enough, I took a screenshot of the CakePHP website just yesterday <em>“by chance”</em> and my articles were still there:</p> -<p><img src="/img/pictures/cake-promo/cakephp-08032007.png" alt="" /></p> +<p><img src="/images/pictures/cake-promo/cakephp-08032007.png" alt="" /></p> <p>…while this morning they weren’t anymore:</p> -<p><img src="/img/pictures/cake-promo/cakephp-09032007.png" alt="" /></p> +<p><img src="/images/pictures/cake-promo/cakephp-09032007.png" alt="" /></p> <p>Of course I can’t provide any proof that I took the screenshot yesterday, and of course I don’t have any proof of the fact that someone in <span class="caps">CSF</span> may have thought that due to my recent <a href="/articles/42/">bad behavior</a> my articles didn’t deserve to be publicized anymore. I am confident
@@ -4,36 +4,69 @@ content-type: article
timestamp: 1207885260 tags: "ruby|review|books" ----- -<p>I finally got my hands on a shiny new copy of <em>Design Patterns in Ruby<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup></em>. The book itself is not brand new and it was already widely praised by many different people online, so I wanted to take a look for myself.</p> -<p>To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>. It’s also smaller and shorter than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> (340 pages), which makes it much easier to carry around and less intimidating to read. It’s also <em>not</em> meant to be a reference book, so it is actually pleasant an easy to read all in one go, as you’ll soon find out.</p> -<p>What is it about? — well, design patters in the Ruby language of course. But it’s not the usual brainwash of programming theory you would expect by a typical book on patters, it has <em>plenty</em> of examples of real code. When I say <em>real code</em> I don’t mean the usual Dog/Cat/Horse/<insert animal here> classes or juke-box simulations which don’t work at all etc. etc., I mean actual snippets from well known Ruby applications, like RubyGems, FXRuby and, of course, Rails.<br /> -OK well, there’s an exception perhaps: Russ <em>did</em> include a few wild life simulations (ponds with frogs and similar), but it’s only for your own good, and for the sake of tradition.</p> +<p>I finally got my hands on a shiny new copy of <em>Design Patterns in Ruby<sup class="footnote" id="fnr1"><a + href="#fn1">1</a></sup></em>. The book itself is not brand new and it was already widely praised by many + different people online, so I wanted to take a look for myself.</p> +<p>To my surprise, the book is a hardcover edition, which makes it look more professional and more durable than the + average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>. It’s also smaller and + shorter than the average programming book<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> (340 pages), + which makes it much easier to carry around and less intimidating to read. It’s also <em>not</em> meant to be a + reference book, so it is actually pleasant an easy to read all in one go, as you’ll soon find out.</p> +<p>What is it about? — well, design patters in the Ruby language of course. But it’s not the usual brainwash + of programming theory you would expect by a typical book on patters, it has <em>plenty</em> of examples of real + code. When I say <em>real code</em> I don’t mean the usual Dog/Cat/Horse/<insert animal here> classes or + juke-box simulations which don’t work at all etc. etc., I mean actual snippets from well known Ruby + applications, like RubyGems, FXRuby and, of course, Rails.<br /> + OK well, there’s an exception perhaps: Russ <em>did</em> include a few wild life simulations (ponds with frogs + and similar), but it’s only for your own good, and for the sake of tradition.</p> <p>Anyhow, let’s start from the beginning…</p> <h3>Part I: Patters and Ruby</h3> -<p>The first part of the book serves as a general introduction to the other two parts. If you know the basics of both design patterns and Ruby, you can safely skip this as you won’t find anything of overwhelming interest here.</p> -<p>Personally I really liked <strong>Chapter 1</strong> though, “Building better Programs with Patterns”, in which Russ does a great job in summarizing the original GoF book<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> into four points:</p> -<p style="float:right;"><img src="/files/design_patterns_in_ruby.jpg" alt="" /></p> +<p>The first part of the book serves as a general introduction to the other two parts. If you know the basics of both + design patterns and Ruby, you can safely skip this as you won’t find anything of overwhelming interest here. +</p> +<p>Personally I really liked <strong>Chapter 1</strong> though, “Building better Programs with Patterns”, in + which Russ does a great job in summarizing the original GoF book<sup class="footnote" id="fnr3"><a + href="#fn3">3</a></sup> into four points:</p> +<p style="float:right;"><img src="/images/design_patterns_in_ruby.jpg" alt="" /></p> <ul> <li><em>Separate our the things that change from those that stay the same.</em></li> <li><em>Program to an interface, not an implementation.</em></li> <li><em>Prefer composition over inheritance.</em></li> <li><em>Delegate, delegate, delegate.</em></li> </ul> -<p>Also, although it does not come from the Design Patterns book but from building real systems, the author adds the <span class="caps">YAGNI</span> (You Ain’t Gonna Need It) principle<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup> as a reminder to resist the temptation of implementing things which <em>may</em> be needed <em>later on</em>, even if they are not needed right now.<br /> -The chapter ends with an outline of the patterns which will be presented throughout the book: 14 out of the original 23 patterns by the Gand of Four will be discussed in Part II and 3 bonus “Ruby-only” patterns will be examined in Part <span class="caps">III</span>, as a special treat.</p> -<p><strong>Chapter 2</strong> (<em>Getting started with Ruby</em>) feels perhaps a bit out of place. As others pointed out<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>, why does a book on advanced Ruby programming techniques include a 35-page-long introduction on the Ruby language? The answer was given by Russ himself in an interview<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>:</p> +<p>Also, although it does not come from the Design Patterns book but from building real systems, the author adds the + <span class="caps">YAGNI</span> (You Ain’t Gonna Need It) principle<sup class="footnote" id="fnr4"><a + href="#fn4">4</a></sup> as a reminder to resist the temptation of implementing things which <em>may</em> be + needed <em>later on</em>, even if they are not needed right now.<br /> + The chapter ends with an outline of the patterns which will be presented throughout the book: 14 out of the original + 23 patterns by the Gand of Four will be discussed in Part II and 3 bonus “Ruby-only” patterns will be + examined in Part <span class="caps">III</span>, as a special treat.</p> +<p><strong>Chapter 2</strong> (<em>Getting started with Ruby</em>) feels perhaps a bit out of place. As others pointed + out<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>, why does a book on advanced Ruby programming + techniques include a 35-page-long introduction on the Ruby language? The answer was given by Russ himself in an + interview<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>:</p> <blockquote> -<p>“The reason that I included the introductory chapter about Ruby in there was to make the book accessible to folks with little or no Ruby background.<br /> -Now honestly, I don’t think that you could come to my book with no background in Ruby and walk away from it an expert Ruby programmer — it’s not really that kind of introductory book.<br /> -But I do think that someone with experience in other languages could read my book and come away knowing about Ruby, understanding what all the shouting is about.”</p> + <p>“The reason that I included the introductory chapter about Ruby in there was to make the book accessible to + folks with little or no Ruby background.<br /> + Now honestly, I don’t think that you could come to my book with no background in Ruby and walk away from it an + expert Ruby programmer — it’s not really that kind of introductory book.<br /> + But I do think that someone with experience in other languages could read my book and come away knowing about + Ruby, understanding what all the shouting is about.”</p> </blockquote> -<p>I admit, I skipped this chapter during my first reading because I was eager to move on to the main part of the book, but I did read it afterwards (I had to write this review after all!). It’s quite a nice introduction aimed at the average .<span class="caps">NET</span>/Java developer: Russ provides a step-by-step presentation of the main features of the language while holding the reader by hand when something weird or scary comes about:</p> +<p>I admit, I skipped this chapter during my first reading because I was eager to move on to the main part of the book, + but I did read it afterwards (I had to write this review after all!). It’s quite a nice introduction aimed at + the average .<span class="caps">NET</span>/Java developer: Russ provides a step-by-step presentation of the main + features of the language while holding the reader by hand when something weird or scary comes about:</p> <blockquote> -<p>The slightly strange-looking syntax in this code is actually a tip-off something deep and important: In Ruby, everythng — and I mean <em>everything</em> — is an object.</p> + <p>The slightly strange-looking syntax in this code is actually a tip-off something deep and important: In Ruby, + everythng — and I mean <em>everything</em> — is an object.</p> </blockquote> -<p>Of course Chapter 2 won’t turn you into a Ruby guru, but it definitely fulfills one of the author’s goals: bringing developers of other languages closer to Ruby, and give them a tiny taste of how Ruby can be <em>wickedly powerful</em>.</p> +<p>Of course Chapter 2 won’t turn you into a Ruby guru, but it definitely fulfills one of the author’s + goals: bringing developers of other languages closer to Ruby, and give them a tiny taste of how Ruby can be + <em>wickedly powerful</em>.</p> <h3>Part II: Patterns in Ruby</h3> -<p>Part II constitutes the bulk of the book, describing 14 GoF patterns in 220 pages. The patterns covered are the following:</p> +<p>Part II constitutes the bulk of the book, describing 14 GoF patterns in 220 pages. The patterns covered are the + following:</p> <ul> <li>Template Method</li> <li>Strategy</li>@@ -50,58 +83,143 @@ <li>Abstract Factory Method</li>
<li>Builder</li> <li>Interpreter</li> </ul> -<p>Why not covering all 23? Well, because to be honest, they are rarely used in Ruby. Furthermore, in some cases some of the ones examined in the book may feel a bit <em>unnatural</em> to the average Rubyist: how many times did you ever think about using an External Iterator when <code>each</code> is normally available as default internal iterator for any Array-like class?</p> -<p>Each chapter in this part is devoted to a particular pattern and it is organized in more or less the same way, as outlined in the following sections.</p> +<p>Why not covering all 23? Well, because to be honest, they are rarely used in Ruby. Furthermore, in some cases some of + the ones examined in the book may feel a bit <em>unnatural</em> to the average Rubyist: how many times did you ever + think about using an External Iterator when <code>each</code> is normally available as default internal iterator for + any Array-like class?</p> +<p>Each chapter in this part is devoted to a particular pattern and it is organized in more or less the same way, as + outlined in the following sections.</p> <h4>Introduction and Personal Anecdotes</h4> -<p>Most chapters start with a personal anecdote involving the author: it may be a memory related to his first job at the local grocery store (Chapter 8), or about the day he decided to buy his son a bike (Chapter 14):</p> +<p>Most chapters start with a personal anecdote involving the author: it may be a memory related to his first job at the + local grocery store (Chapter 8), or about the day he decided to buy his son a bike (Chapter 14):</p> <blockquote> -<p>“I remember the day we bought my son his first bike.” […] I spent hours trying to pull together a minor junkiard of parts according to instructions that would have baffled the entire National Security Agency. As it turned out, picking the bike was the easy part: putting it together was the real challenge.</p> + <p>“I remember the day we bought my son his first bike.” […] I spent hours trying to pull together + a minor junkiard of parts according to instructions that would have baffled the entire National Security Agency. + As it turned out, picking the bike was the easy part: putting it together was the real challenge.</p> </blockquote> -<p>This was used to introduce the Builder pattern, and how to use it to configure objects which include different logical parts.<br /> -Personally I find this technique particularly useful to introduce a particular problem from a different, more mundane prospective instead of starting off with an abstract theorethical description of the pattern itself. <br /> -The anecdote is then followed by the description of the actual programming problem for which the specific pattern will be used.</p> +<p>This was used to introduce the Builder pattern, and how to use it to configure objects which include different + logical parts.<br /> + Personally I find this technique particularly useful to introduce a particular problem from a different, more + mundane prospective instead of starting off with an abstract theorethical description of the pattern itself. <br /> + The anecdote is then followed by the description of the actual programming problem for which the specific pattern + will be used.</p> <h4>Description of the Pattern and Initial Implementation</h4> -<p>An initial implementation of the pattern in Ruby will be provided more or less immediately after the introduction of each chapter, often accompanied by a simple <span class="caps">UML</span> diagram.<br /> -This implementation normally has quite a few conceptual flaws, which are then examined and corrected step-by-step the chapter to obtain a more “Ruby-friendly” solution.</p> +<p>An initial implementation of the pattern in Ruby will be provided more or less immediately after the introduction of + each chapter, often accompanied by a simple <span class="caps">UML</span> diagram.<br /> + This implementation normally has quite a few conceptual flaws, which are then examined and corrected step-by-step + the chapter to obtain a more “Ruby-friendly” solution.</p> <h4>A More Rubyfied Version of the Pattern</h4> -<p>The final implementation of each pattern is often very different from the initial attempt, and it may contain quite a lot of Ruby-specific code. The author does an excellent job in suggesting pattern implementations which often use blocks, <code>Proc</code> objects or method redefinitions when needed, to make the code more succint and more readable at the same time, as all Ruby code should be.</p> -<p>By doing so, even people who are still learning Ruby will understand how to use some very useful Ruby idioms which can be a bit difficult to grasp otherwise.</p> +<p>The final implementation of each pattern is often very different from the initial attempt, and it may contain quite a + lot of Ruby-specific code. The author does an excellent job in suggesting pattern implementations which often use + blocks, <code>Proc</code> objects or method redefinitions when needed, to make the code more succint and more + readable at the same time, as all Ruby code should be.</p> +<p>By doing so, even people who are still learning Ruby will understand how to use some very useful Ruby idioms which + can be a bit difficult to grasp otherwise.</p> <h4>Using and Abusing <Pattern></h4> -<p>Patterns are often overused and misused, and some people normally end up wondering if they should be used at all, after all. This section (present as a matter of fact in <em>every</em> chapter of part II an <span class="caps">III</span>) examines the pitfalls of the pattern and the most common mistakes developer make when applying it.<br /> -It is by far the most useful section of each chapter, and that’s what I’ll be reading and re-reading every time I’m thinking about using a particular pattern in my code. As a matter of fact, these sections make you realize that <em>every</em> pattern has its own inherent flaws and dangers, and that it is far from being a Silver Bullet. Even when you’re <em>supposed</em> to use a pattern to accomplish something, be aware that <em>something nasty</em> can happen unless you’re extra careful: this, perhaps, is the true Golden Rule conveyed throughout the whole book.</p> +<p>Patterns are often overused and misused, and some people normally end up wondering if they should be used at all, + after all. This section (present as a matter of fact in <em>every</em> chapter of part II an <span + class="caps">III</span>) examines the pitfalls of the pattern and the most common mistakes developer make when + applying it.<br /> + It is by far the most useful section of each chapter, and that’s what I’ll be reading and re-reading + every time I’m thinking about using a particular pattern in my code. As a matter of fact, these sections make + you realize that <em>every</em> pattern has its own inherent flaws and dangers, and that it is far from being a + Silver Bullet. Even when you’re <em>supposed</em> to use a pattern to accomplish something, be aware that + <em>something nasty</em> can happen unless you’re extra careful: this, perhaps, is the true Golden Rule + conveyed throughout the whole book.</p> <h4><Pattern>s in the Wild</h4> -<p>This is another very interesting section which is included in every chapter of part II and <span class="caps">III</span>. After describing what a pattern does, how it <em>can</em> be used and how it <em>should</em> be used, you’ll finally find some interesting examples taken from real world applications.<br /> -By “real world application” I mean something like ActiveRecord<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup> (Observer, Command, Adapter, …), DRb<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup> (Proxy) or FXRuby<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup> (Composite), for example, i.e. important programs and libraries which are used in production environments.<br /> -Personally, I was really glad to find such examples in this book: it definitely helps you feeling design patterns as something more practical and useful than pure software architecture theories.</p> +<p>This is another very interesting section which is included in every chapter of part II and <span + class="caps">III</span>. After describing what a pattern does, how it <em>can</em> be used and how it + <em>should</em> be used, you’ll finally find some interesting examples taken from real world + applications.<br /> + By “real world application” I mean something like ActiveRecord<sup class="footnote" id="fnr7"><a + href="#fn7">7</a></sup> (Observer, Command, Adapter, …), DRb<sup class="footnote" id="fnr8"><a + href="#fn8">8</a></sup> (Proxy) or FXRuby<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup> + (Composite), for example, i.e. important programs and libraries which are used in production environments.<br /> + Personally, I was really glad to find such examples in this book: it definitely helps you feeling design patterns as + something more practical and useful than pure software architecture theories.</p> <h4>Wrapping it Up</h4> -<p>“Wrapping it Up” is the title of the last section of each chapter of Part II and <span class="caps">III</span>. It’s basically a summary of the whole chapter and thus a useful way to recap the most important concepts. I found this section particularly useful when using the book as a design pattern reference, after reading it for the first time: this section provides a quick and essential overview of each pattern — and the most important DOs and DON’Ts, too.</p> +<p>“Wrapping it Up” is the title of the last section of each chapter of Part II and <span + class="caps">III</span>. It’s basically a summary of the whole chapter and thus a useful way to recap the + most important concepts. I found this section particularly useful when using the book as a design pattern reference, + after reading it for the first time: this section provides a quick and essential overview of each pattern — + and the most important DOs and DON’Ts, too.</p> <h3>Part <span class="caps">III</span>: Patterns for Ruby</h3> -<p>By the time you get to Part <span class="caps">III</span> you’ll definitely feel that Ruby can do <em>more_. Some of the Ruby implementation of certain patterns described in the book make extensive use of blocks and Proc objects, and the @method</em>missing@ method (although potentially dangerous unless extra care is taken) gives us a more immediate way to obtain delegation, for example when creating Proxies. <br /> -Also the fact that objects can be modified at runtime by adding and removing methods “as needed” seems quite an underused feature in traditional patterns, simply because those patterns were first conceived for languages which are very different from Ruby and are perhaps less <em>liberal</em> than Ruby when it comes to dynamic features<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup>.</p> -<p>These particular Ruby features can be used (and abused, of course) to implement more Ruby-esque patterns, such as the ones included in this part of the book:</p> +<p>By the time you get to Part <span class="caps">III</span> you’ll definitely feel that Ruby can do <em>more_. + Some of the Ruby implementation of certain patterns described in the book make extensive use of blocks and Proc + objects, and the @method</em>missing@ method (although potentially dangerous unless extra care is taken) gives + us a more immediate way to obtain delegation, for example when creating Proxies. <br /> + Also the fact that objects can be modified at runtime by adding and removing methods “as needed” seems + quite an underused feature in traditional patterns, simply because those patterns were first conceived for languages + which are very different from Ruby and are perhaps less <em>liberal</em> than Ruby when it comes to dynamic + features<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup>.</p> +<p>These particular Ruby features can be used (and abused, of course) to implement more Ruby-esque patterns, such as the + ones included in this part of the book:</p> <ul> <li>Internal Domain-Specific Languages</li> <li>Meta-Programming</li> <li>Convention Over Configuration</li> </ul> -<p>These are just examples, of course some may complain because the Active Record or <span class="caps">ORM</span> pattern are missing, but this is understandable as it may be considered too specific compared to the others. <br /> -Each pattern is examined in detail, and I particularly like way the <span class="caps">DSL</span> pattern was described: Chapter 16 explains how to develop a simple but effective Ruby <span class="caps">DSL</span> from scratch for creating file backups. This can be particularly useful for people who never tried creating DSLs before, but also for developers who tried, but want to improve their skills.</p> -<p>Chapter 18 (Convention Over Configuration) is sufficiently clear and detailed, perhaps even too much if you already know how Rails was developed (and all the hype which follwed).</p> -<p>On the other hand, I was a bit disappointed by Chapter 17 (Meta-Programming). Maybe it’s because I built up extremely high expectations about it while reading the rest of the book, but it just felt too short and not detailed enough for my liking. If I had to write such a chapter (which would have been actually very hard), I would have started from an excellent post by Ola Bini<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which introduces <em>eleven</em> meta-programming techniques, and built up content and examples from there. The only reason why — I think — Russ didn’t do it in his book was length/balance constraint: a <em>properly detailed</em> chapter about meta-programming in Ruby could easily take up over forty pages!</p> +<p>These are just examples, of course some may complain because the Active Record or <span class="caps">ORM</span> + pattern are missing, but this is understandable as it may be considered too specific compared to the others. <br /> + Each pattern is examined in detail, and I particularly like way the <span class="caps">DSL</span> pattern was + described: Chapter 16 explains how to develop a simple but effective Ruby <span class="caps">DSL</span> from scratch + for creating file backups. This can be particularly useful for people who never tried creating DSLs before, but also + for developers who tried, but want to improve their skills.</p> +<p>Chapter 18 (Convention Over Configuration) is sufficiently clear and detailed, perhaps even too much if you already + know how Rails was developed (and all the hype which follwed).</p> +<p>On the other hand, I was a bit disappointed by Chapter 17 (Meta-Programming). Maybe it’s because I built up + extremely high expectations about it while reading the rest of the book, but it just felt too short and not detailed + enough for my liking. If I had to write such a chapter (which would have been actually very hard), I would have + started from an excellent post by Ola Bini<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which + introduces <em>eleven</em> meta-programming techniques, and built up content and examples from there. The only + reason why — I think — Russ didn’t do it in his book was length/balance constraint: a <em>properly + detailed</em> chapter about meta-programming in Ruby could easily take up over forty pages!</p> <h3>The Verdict</h3> -<p>As I said in the beginning: this is not meant to be a complete, in-depth, reference book on everything you may want to know about design patterns in Ruby. That’s why, as a matter of fact, you can actually read this book all the way through without getting utterly bored. Russ uses an informal, yet appropriate style to turn potentially complex, theorethical computer science principles into easy-to-understand, <em>useful</em> tools which can truly improve the way you code.</p> -<p>The whole book flows very very nicely. I actually recommend reading this book in sequence, without skipping chapters, because each pattern is described in a way that is somehow linked to the following ones, so that you can understand and learn about the pros and cons of each one in a more natural and useful way.</p> -<p>OK, I would have loved to see Part <span class="caps">III</span> as long as Part II, probably, but overall I’m very, very satisfied of what the book taught me. The only problem is that it also made me suddenly realize all the naive design mistakes I’ve been making when coding in Ruby, so I’ll now feel compelled to fix at least some of them…</p> +<p>As I said in the beginning: this is not meant to be a complete, in-depth, reference book on everything you may want + to know about design patterns in Ruby. That’s why, as a matter of fact, you can actually read this book all + the way through without getting utterly bored. Russ uses an informal, yet appropriate style to turn potentially + complex, theorethical computer science principles into easy-to-understand, <em>useful</em> tools which can truly + improve the way you code.</p> +<p>The whole book flows very very nicely. I actually recommend reading this book in sequence, without skipping chapters, + because each pattern is described in a way that is somehow linked to the following ones, so that you can understand + and learn about the pros and cons of each one in a more natural and useful way.</p> +<p>OK, I would have loved to see Part <span class="caps">III</span> as long as Part II, probably, but overall I’m + very, very satisfied of what the book taught me. The only problem is that it also made me suddenly realize all the + naive design mistakes I’ve been making when coding in Ruby, so I’ll now feel compelled to fix at least + some of them…</p> <p>Definitely a worthwhile read, I just hope to see more books like this, or even a second edition of this one soon!</p> <h3>Notes</h3> -<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a href="http://www.informit.com/store/product.aspx?isbn=0321490452">Design Patterns in Ruby</a> by Russ Olsen, Addison Wesley Professional, 2007.</p> -<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> Think of <a href="http://www.pragprog.com/titles/ruby">Programming Ruby: The Pragmatic Programmer’s Guide, 2nd Ed.</a> by Dave Thomas with Chad Fowler and Andy Hunt, Pragmatic Programmers, 2004.</p> -<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.informit.com/store/product.aspx?isbn=0201633612">Design Patterns: Elements of Reusable Object-Oriented Software</a>, by By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (a.k.a. the <em>Gang of Four</em>), Addison Wesley Professional, 1994.</p> -<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For more information on the <span class="caps">YAGNI</span> principle, visit <a href="http://www.xprogramming.com/Practices/PracNotNeed.html">You’re <span class="caps">NOT</span> gonna need it</a>, Ronald E Jeffries.</p> -<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> See <a href="http://on-ruby.blogspot.com/2007/12/design-patterns-in-ruby-review.html">Design Patterns in Ruby, a review</a>, <em>On Ruby</em>blog.</p> -<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> See <a href="http://on-ruby.blogspot.com/2008/01/russ-olsen-interview.html">Russ Olsen Interview</a>, <em>On Ruby</em>blog.</p> -<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> <a href="http://ar.rubyonrails.com/">ActiveRecord</a> is an implementation of the Object-Relational Mapping (<span class="caps">ORM</span>) pattern used by the Ruby on Rails framework.</p> -<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Distributed Ruby, see <a href="http://chadfowler.com/ruby/drb.html">Intro to DRb</a> by Chad Fowler.</p> -<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.fxruby.org/">FXRuby</a>, a graphical toolkit written in Ruby.</p> -<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> This can be a good or bad thing depending on the way you look at it, and what you want to use the language for. The fact that Ruby is dynamically typed makes it easier to do things which are totally impossible in C++ or Java, but it also introduces a whole new set of potential dangers.</p> -<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a href="http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html">Ruby Metaprogramming Techniques</a>, Ola Bini: Programming Language Synchronicity.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> <a + href="http://www.informit.com/store/product.aspx?isbn=0321490452">Design Patterns in Ruby</a> by Russ Olsen, + Addison Wesley Professional, 2007.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> Think of <a + href="http://www.pragprog.com/titles/ruby">Programming Ruby: The Pragmatic Programmer’s Guide, 2nd Ed.</a> + by Dave Thomas with Chad Fowler and Andy Hunt, Pragmatic Programmers, 2004.</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a + href="http://www.informit.com/store/product.aspx?isbn=0201633612">Design Patterns: Elements of Reusable + Object-Oriented Software</a>, by By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides (a.k.a. the + <em>Gang of Four</em>), Addison Wesley Professional, 1994.</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> For more information on the <span + class="caps">YAGNI</span> principle, visit <a + href="http://www.xprogramming.com/Practices/PracNotNeed.html">You’re <span class="caps">NOT</span> gonna + need it</a>, Ronald E Jeffries.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> See <a + href="http://on-ruby.blogspot.com/2007/12/design-patterns-in-ruby-review.html">Design Patterns in Ruby, a + review</a>, <em>On Ruby</em>blog.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> See <a + href="http://on-ruby.blogspot.com/2008/01/russ-olsen-interview.html">Russ Olsen Interview</a>, <em>On + Ruby</em>blog.</p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> <a href="http://ar.rubyonrails.com/">ActiveRecord</a> is + an implementation of the Object-Relational Mapping (<span class="caps">ORM</span>) pattern used by the Ruby on Rails + framework.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Distributed Ruby, see <a + href="http://chadfowler.com/ruby/drb.html">Intro to DRb</a> by Chad Fowler.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.fxruby.org/">FXRuby</a>, a graphical + toolkit written in Ruby.</p> +<p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> This can be a good or bad thing depending on the way + you look at it, and what you want to use the language for. The fact that Ruby is dynamically typed makes it easier + to do things which are totally impossible in C++ or Java, but it also introduces a whole new set of potential + dangers.</p> +<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a + href="http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html">Ruby Metaprogramming + Techniques</a>, Ola Bini: Programming Language Synchronicity.</p>
@@ -7,93 +7,187 @@ tags: "review|books|ruby"
pdf: true ----- - <section class="section"> -<p>Back when I read <em><a href="http://www.pragprog.com/titles/ruby/programming-ruby">Programming Ruby</a></em> for the first time, I distinctly remember a short reference to <a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">dRb</a>, the <strong>D</strong>istributed <strong>R</strong>u<strong>b</strong>y library included in the Standard Library.</p> -<p><em>“Cool!”</em> — I thought</p> -<p>…and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I didn’t need it, so I pretty much forgot about it altogether until this book came out.</p> -<p><em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with Ruby</a></em> fills a very particular niche of the Ruby programming world: <em>distributed</em> programming. Moreover, this book is somehow <em>justified</em> by the scarce documentation on the subject:</p> -<blockquote> -<p>Although these libraries [DRb and rinda] have been included with Ruby for many years now, they have received little or no attention (or documentation). This has led to a lot of <span class="caps">FUD</span> (fear, uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use (if at all).</p> -</blockquote> -<p style="padding-left:4em;">— Mark Bates, <em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with Ruby</a></em></p> -<p>But there’s more. This book gives the reader a complete overview of what’s out there, in the Ruby world, to support distributed programming. This includes quite a few gems and libraries besides the ones provided in the standard library.</p> <section class="section"> -<header><h1 id="h_1" class="toc">Overview</h1></header> -<img src="/img/pictures/distributed-programming-with-ruby.jpg" style="float:right;" /> - <p>The book is organized into four parts, each dealing with a particular set of Ruby libraries related to distributed programming.</p> -<p>The author, <a href="http://www.metabates.com/">Mark Bates</a>, does a good job maintaining a sort of continuity in the examples throughout the book: you’ll get accustomed to a <em>Logger</em> class of some kind being punctually re-implemented more or less once per chapter, using a different library.</p> -<p>Additionally, the libraries described in the book are ordered by “reverse preference” in each part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the preceding ones.</p> + <p>Back when I read <em><a href="http://www.pragprog.com/titles/ruby/programming-ruby">Programming Ruby</a></em> for + the first time, I distinctly remember a short reference to <a + href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">dRb</a>, the <strong>D</strong>istributed + <strong>R</strong>u<strong>b</strong>y library included in the Standard Library.</p> + <p><em>“Cool!”</em> — I thought</p> + <p>…and that was pretty much it. The documentation for DRb was pretty much nonexistent (at the time), I + didn’t need it, so I pretty much forgot about it altogether until this book came out.</p> + <p><em><a href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with + Ruby</a></em> fills a very particular niche of the Ruby programming world: <em>distributed</em> + programming. Moreover, this book is somehow <em>justified</em> by the scarce documentation on the subject:</p> + <blockquote> + <p>Although these libraries [DRb and rinda] have been included with Ruby for many years now, they have received + little or no attention (or documentation). This has led to a lot of <span class="caps">FUD</span> (fear, + uncertainty, and doubt) about what these libraries can and cannot do, and when they are appropriate to use + (if at all).</p> + </blockquote> + <p style="padding-left:4em;">— Mark Bates, <em><a + href="http://www.informit.com/store/product.aspx?isbn=0321638360">Distributed Programming with + Ruby</a></em></p> + <p>But there’s more. This book gives the reader a complete overview of what’s out there, in the Ruby + world, to support distributed programming. This includes quite a few gems and libraries besides the ones + provided in the standard library.</p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">Overview</h1> + </header> + <img src="/images/pictures/distributed-programming-with-ruby.jpg" style="float:right;" /> + <p>The book is organized into four parts, each dealing with a particular set of Ruby libraries related to + distributed programming.</p> + <p>The author, <a href="http://www.metabates.com/">Mark Bates</a>, does a good job maintaining a sort of + continuity in the examples throughout the book: you’ll get accustomed to a <em>Logger</em> class of + some kind being punctually re-implemented more or less once per chapter, using a different library.</p> + <p>Additionally, the libraries described in the book are ordered by “reverse preference” in each + part of the book, so normally the libraries described later on in a part fix some of the shortcomings of the + preceding ones.</p> - - <section class="section"> -<header><h1 id="h_2" class="toc">Part I: Standard Library</h1></header> -<p>This part is the most important of all: it gives you the very basics about Distributed Programming and it describes the “building blocks” (<a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">DRb</a> and <a href="http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html">Rinda</a>) used in nearly all the other libraries described in the book. If you want you can skip some chapters in the other parts of the book, but make sure this part is crystal clear in your head before proceeding any further.</p> -</section> - - <section class="section"> -<header><h1 id="h_3" class="toc">Part II: Third-Party Frameworks and Libraries</h1></header> -<p>If you read part I, you’re probably a bit disappointed by DRb and Rinda and the amount of code you have to write to make simple things work in a distributed environment. The good news is that there are some Ruby gems out there that can make life simpler:</p> -<ul> - <li><a href="http://seattlerb.rubyforge.org/RingyDingy/">RingyDingy</a></li> - <li><a href="http://rufy.com/starfish/doc/">Starfish</a></li> - <li><a href="http://github.com/markbates/distribunaut">Distribunaut</a></li> - <li><a href="http://github.com/mperham/politics">Politics</a></li> -</ul> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Part I: Standard Library</h1> + </header> + <p>This part is the most important of all: it gives you the very basics about Distributed Programming and it + describes the “building blocks” (<a + href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">DRb</a> and <a + href="http://ruby-doc.org/stdlib/libdoc/rinda/rdoc/index.html">Rinda</a>) used in nearly all the + other libraries described in the book. If you want you can skip some chapters in the other parts of the + book, but make sure this part is crystal clear in your head before proceeding any further.</p> -</section> - - <section class="section"> -<header><h1 id="h_4" class="toc">Part III: Distributed Message Queues</h1></header> -<p>In this part, the author introduces more in detail the concept of distribute message queues, and also the technologies and protocols available not only in the Ruby world but elsewhere. It focuses on two libraries:</p> -<ul> - <li><a href="http://rubyforge.org/projects/starling/">Starling</a>, originally used by Twitter.</li> - <li><a href="http://github.com/tmm1/amqp"><span class="caps">AMQP</span></a>, an implementation of the <a href="http://www.amqp.org/"><span class="caps">AMQP</span></a> protocol in Ruby, that can be used in conjunction with <a href="http://www.rabbitmq.com/">RabbitMQ</a>, an Erlang-based messaging system.</li> -</ul> + </section> -</section> - - <section class="section"> -<header><h1 id="h_5" class="toc">Part IV: Distributed Programming with Ruby on Rails</h1></header> -<p>The book ends somewhat abruptly with this last part that deals with distributed programming in the Rails world. It feels a bit like a last-minute addendum that I would have left for an appendix, nevertheless it briefly introduces <a href="http://backgroundrb.rubyforge.org/">BackgrounDRb</a> and <a href="http://github.com/tobi/delayed_job">Delayed Job</a>.</p> + <section class="section"> + <header> + <h1 id="h_3" class="toc">Part II: Third-Party Frameworks and Libraries</h1> + </header> + <p>If you read part I, you’re probably a bit disappointed by DRb and Rinda and the amount of code you + have to write to make simple things work in a distributed environment. The good news is that there are + some Ruby gems out there that can make life simpler:</p> + <ul> + <li><a href="http://seattlerb.rubyforge.org/RingyDingy/">RingyDingy</a></li> + <li><a href="http://rufy.com/starfish/doc/">Starfish</a></li> + <li><a href="http://github.com/markbates/distribunaut">Distribunaut</a></li> + <li><a href="http://github.com/mperham/politics">Politics</a></li> + </ul> -</section> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Part III: Distributed Message Queues</h1> + </header> + <p>In this part, the author introduces more in detail the concept of distribute message queues, and also the + technologies and protocols available not only in the Ruby world but elsewhere. It focuses on two + libraries:</p> + <ul> + <li><a href="http://rubyforge.org/projects/starling/">Starling</a>, originally used by Twitter.</li> + <li><a href="http://github.com/tmm1/amqp"><span class="caps">AMQP</span></a>, an implementation of the + <a href="http://www.amqp.org/"><span class="caps">AMQP</span></a> protocol in Ruby, that can be used + in conjunction with <a href="http://www.rabbitmq.com/">RabbitMQ</a>, an Erlang-based messaging + system.</li> + </ul> -<section class="section"> -<header><h1 id="h_6" class="toc">Technical Analysis</h1></header> -<p>Unlike other technical books, this one can (must?) be read sequentially. Generally each chapter focuses on a library, describes how to install it and use it, and highlights its pros and cons. Typically, the “cons” are solved in the following chapter by another library, and so on…</p> -<p>The book is not meant to contain a full technical reference of each library, and it’s quite short (256 pages), so you really get the most out of it if you read it all, from start to finish. I didn’t realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a good job demistifying some of them.</p> -<p>One thing that really struck me out of this book is the focus on gems. We’re not talking about <em>mainstream</em> frameworks like Rails or Merb here, but rather of some rather specialized, smaller libraries that fullfill very specific tasks. Personally, I don’t remember any other Ruby book doing this in the same way, and I was quite happy about it.</p> -<p>On the other hand, gems are a double-edged sword: while some of them are really cool and well-maintained, others may disappear tomorrow with no prior notice. I was actually very surprised to see even some of the <em>quirks</em> of these gems documented in the book:</p> -<p><strong>p91</strong>: <em>“Notice that we added client { } to the bottom of the server file. The reason for this appears to be a bug or flaw in the Starfish architecture.”</em></p> -<p>Really? Hasn’t it be fixed now? Apparently not, that’s the way it works, so no, you can’t blame the author of the book for this.</p> + </section> + + <section class="section"> + <header> + <h1 id="h_5" class="toc">Part IV: Distributed Programming with Ruby on Rails</h1> + </header> + <p>The book ends somewhat abruptly with this last part that deals with distributed programming in the Rails + world. It feels a bit like a last-minute addendum that I would have left for an appendix, nevertheless + it briefly introduces <a href="http://backgroundrb.rubyforge.org/">BackgrounDRb</a> and <a + href="http://github.com/tobi/delayed_job">Delayed Job</a>.</p> + + </section> + + </section> <section class="section"> -<header><h1 id="h_7" class="toc">Formatting and Readability</h1></header> -<p>As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job making sure you don’t get bored. Chapters and sections are quite short and there’s a good text/code ratio: the examples are short and clear, and you don’t have to try them out yourself, because most of the time the author does it for you. It’s not infrequent for the author to tell you to run “wrong” code, but that’s a great way to show you how to do the right thing right afterwards.</p> -<p>Sidebars and boxes are used properly and they do provide actual value-added content: some information on a non-Ruby technology, some tips and tricks on how to run things smoothly, etc. On the other hand, one thing I couldn’t stand were the <em>endnotes</em>. I must say I don’t like endnotes at the best of times, but when they are pointless I just can’t suffer them. Each chapter has its own fair share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub projects: I would have preferred the URLs inline with the rest of the text, but that’s just me.</p> + <header> + <h1 id="h_6" class="toc">Technical Analysis</h1> + </header> + <p>Unlike other technical books, this one can (must?) be read sequentially. Generally each chapter focuses on a + library, describes how to install it and use it, and highlights its pros and cons. Typically, the + “cons” are solved in the following chapter by another library, and so on…</p> + <p>The book is not meant to contain a full technical reference of each library, and it’s quite short (256 + pages), so you really get the most out of it if you read it all, from start to finish. I didn’t + realize there were so many different libraries in this particular niche of Ruby programming, and Mark does a + good job demistifying some of them.</p> + <p>One thing that really struck me out of this book is the focus on gems. We’re not talking about + <em>mainstream</em> frameworks like Rails or Merb here, but rather of some rather specialized, smaller + libraries that fullfill very specific tasks. Personally, I don’t remember any other Ruby book doing + this in the same way, and I was quite happy about it.</p> + <p>On the other hand, gems are a double-edged sword: while some of them are really cool and well-maintained, + others may disappear tomorrow with no prior notice. I was actually very surprised to see even some of the + <em>quirks</em> of these gems documented in the book:</p> + <p><strong>p91</strong>: <em>“Notice that we added client { } to the bottom of the server file. The reason + for this appears to be a bug or flaw in the Starfish architecture.”</em></p> + <p>Really? Hasn’t it be fixed now? Apparently not, that’s the way it works, so no, you can’t + blame the author of the book for this.</p> + + <section class="section"> + <header> + <h1 id="h_7" class="toc">Formatting and Readability</h1> + </header> + <p>As I pointed out earlier, this book is somehow meant to be read sequentially, and Mark does a good job + making sure you don’t get bored. Chapters and sections are quite short and there’s a good + text/code ratio: the examples are short and clear, and you don’t have to try them out yourself, + because most of the time the author does it for you. It’s not infrequent for the author to tell + you to run “wrong” code, but that’s a great way to show you how to do the right thing + right afterwards.</p> + <p>Sidebars and boxes are used properly and they do provide actual value-added content: some information on + a non-Ruby technology, some tips and tricks on how to run things smoothly, etc. On the other hand, one + thing I couldn’t stand were the <em>endnotes</em>. I must say I don’t like endnotes at the + best of times, but when they are pointless I just can’t suffer them. Each chapter has its own fair + share of endnotes, but unfortunately most of them are just URLs to Wikipedia pages or RubyForce/GitHub + projects: I would have preferred the URLs inline with the rest of the text, but that’s just me. + </p> -</section> - <section class="section"> -<header><h1 id="h_8" class="toc">Style and Contents</h1></header> -<p>Mark has a nice, informal writing style. Exactly what you expect from a programming book nowadays, even if sometimes it feels a bit too informal:</p> -<p><strong>p86</strong>: <em>“I think I understand what Eric means by all that. However, that is as deep as the documentation goes on the subject. I have not been able to test what I think he means, so I won’t make any grand promises about what the library can and cannot do in regards to expiring/renewing registrations.”</em></p> -<p>Although this is not something you’d see in a professional book everyday, it definitely helps to connect with the reader: Mark is one of us after all, even if he happens to have created quite a few <a href="http://github.com/markbates">interesting projects</a>, like the Mack framework, the Distribunaut library (which is also mentioned in his book, but in a very impartial way) and Configatron. From his book you understand that he’s neither one of those rockstar developers nor one of those famous authors who just writes books for a living: he’s a competent programmer who knows quite a bit about a particular, but relevant, niche of Ruby programming.</p> + </section> + <section class="section"> + <header> + <h1 id="h_8" class="toc">Style and Contents</h1> + </header> + <p>Mark has a nice, informal writing style. Exactly what you expect from a programming book nowadays, even + if sometimes it feels a bit too informal:</p> + <p><strong>p86</strong>: <em>“I think I understand what Eric means by all that. However, that is as + deep as the documentation goes on the subject. I have not been able to test what I think he means, + so I won’t make any grand promises about what the library can and cannot do in regards to + expiring/renewing registrations.”</em></p> + <p>Although this is not something you’d see in a professional book everyday, it definitely helps to + connect with the reader: Mark is one of us after all, even if he happens to have created quite a few <a + href="http://github.com/markbates">interesting projects</a>, like the Mack framework, the + Distribunaut library (which is also mentioned in his book, but in a very impartial way) and Configatron. + From his book you understand that he’s neither one of those rockstar developers nor one of those + famous authors who just writes books for a living: he’s a competent programmer who knows quite a + bit about a particular, but relevant, niche of Ruby programming.</p> -</section> + </section> -</section> + </section> -<section class="section"> -<header><h1 id="h_9" class="toc">Final Thoughts</h1></header> -<p>This is one of those books I’d like to see a second edition of. Partly because there are some relatively new gems which have been left out (<a href="http://github.com/kwi/BrB">BrB</a>, for example), partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather extreme rate.</p> -<p>The decision to write about mainly about gems was bold but necessary, and I’d really like to see more authors doing that, but with extra care. From reading this book, you understand that there’s no <em>silver bullet</em> when it comes to Distributed Programming, but rather different tools to do different jobs.</p> -<p>The thing I missed the most? A proper conclusion to the book. You’re left with two chapter about Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a sort of “summing up” end chapter (re-)highlighting the pros and cons of each library and a sort of feature matrix.</p> -<p>Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing distributed Ruby programs.</p> + <section class="section"> + <header> + <h1 id="h_9" class="toc">Final Thoughts</h1> + </header> + <p>This is one of those books I’d like to see a second edition of. Partly because there are some + relatively new gems which have been left out (<a href="http://github.com/kwi/BrB">BrB</a>, for example), + partly because this is a rather hot topic at the moment, and different solutions are popping out at a rather + extreme rate.</p> + <p>The decision to write about mainly about gems was bold but necessary, and I’d really like to see more + authors doing that, but with extra care. From reading this book, you understand that there’s no + <em>silver bullet</em> when it comes to Distributed Programming, but rather different tools to do different + jobs.</p> + <p>The thing I missed the most? A proper conclusion to the book. You’re left with two chapter about + Rails-specific libraries which could have easily become appendixes, and nothing else. I would have liked a + sort of “summing up” end chapter (re-)highlighting the pros and cons of each library and a sort + of feature matrix.</p> + <p>Nevertheless, it was well worth my time and it proved to be a very good resource to get started in writing + distributed Ruby programs.</p> -</section> + </section> </section>
@@ -4,38 +4,73 @@ content-type: article
timestamp: 1200890820 tags: "ruby|review|books" ----- -<p style="float:right;"><img src="/files/efficient_ruby_shortcut.jpeg" alt="" /></p> -<p>The second shortcut from Addison-Wesley Professional series I’m going to review is called <a href="http://www.informit.com/store/product.aspx?isbn=0321540034">Writing Efficient Ruby Code</a>. A very promising title, especially considering that this book is only 50 pages long.</p> -<p>As usual, this shortcut can be intended as a sort of programmer-friendly detailed cheatsheet: like the other ones in this series it sports a monitor-friendly landscape layout and does not go to deep into the details unless strictly necessary to understand a particular concept.</p> +<p style="float:right;"><img src="/images/efficient_ruby_shortcut.jpeg" alt="" /></p> +<p>The second shortcut from Addison-Wesley Professional series I’m going to review is called <a + href="http://www.informit.com/store/product.aspx?isbn=0321540034">Writing Efficient Ruby Code</a>. A very + promising title, especially considering that this book is only 50 pages long.</p> +<p>As usual, this shortcut can be intended as a sort of programmer-friendly detailed cheatsheet: like the other ones in + this series it sports a monitor-friendly landscape layout and does not go to deep into the details unless strictly + necessary to understand a particular concept.</p> <h3>The Author</h3> -<p><a href="http://railsexpress.de/blog/">Dr. Stefan Kaes</a>, the author, contributed a lot to improve Ruby on Rails’ performance by refactoring portions of its core and try to “get maximum speed out of performance-critical sections of code”. This short but interesting shortcut groups together a lot of performance tweaks, tips and tricks but also some “anti-patterns” Kaes was able to identify through his career as programming teacher Ruby software consultant and key Rails contributor.</p> +<p><a href="http://railsexpress.de/blog/">Dr. Stefan Kaes</a>, the author, contributed a lot to improve Ruby on + Rails’ performance by refactoring portions of its core and try to “get maximum speed out of + performance-critical sections of code”. This short but interesting shortcut groups together a lot of + performance tweaks, tips and tricks but also some “anti-patterns” Kaes was able to identify through his + career as programming teacher Ruby software consultant and key Rails contributor.</p> <h3>The Contents</h3> -<p>Like with the previously-covered <a href="/articles/mongrel-shortcut-review">Mongrel shortcut</a>, <em>Writing Efficient Ruby Code</em> always goes straight to the point when it comes to identify problems. The first one mentioned is of course that the <em>Ruby Interpreter is Slow</em>, most people are aware of that, due to their direct experience or because this argument is normally used by non-Rubyists to argue the language’s usability in commercial projects. What you may not know is why that is so, and that’s where the first part of this book comes into play.</p> +<p>Like with the previously-covered <a href="/articles/mongrel-shortcut-review">Mongrel shortcut</a>, <em>Writing + Efficient Ruby Code</em> always goes straight to the point when it comes to identify problems. The first one + mentioned is of course that the <em>Ruby Interpreter is Slow</em>, most people are aware of that, due to their + direct experience or because this argument is normally used by non-Rubyists to argue the language’s usability + in commercial projects. What you may not know is why that is so, and that’s where the first part of this book + comes into play.</p> <blockquote> -<p><em>“Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they can be created, changed, and destroyed at runtime. This comprises classes, modules, methods, constants, and class and instance variables. Only local variables are second-class citizens in Ruby: Whether a name refers to a local variable is determined at parse time.</em></p> + <p><em>“Ruby is a highly dynamic language: Almost all language entities are first-class citizens in that they + can be created, changed, and destroyed at runtime. This comprises classes, modules, methods, constants, and + class and instance variables. Only local variables are second-class citizens in Ruby: Whether a name refers + to a local variable is determined at parse time.</em></p> </blockquote> -<p>This makes Ruby extremely flexible, but also more complex. Whever you use a name to refer to an object, Ruby has to search for the object it refers to, and this costs in terms of processing time.</p> +<p>This makes Ruby extremely flexible, but also more complex. Whever you use a name to refer to an object, Ruby has to + search for the object it refers to, and this costs in terms of processing time.</p> <p>As a matter of fact, one of the most recurring tips in the book to improve code performance is the following:</p> <p style="text-align:center;"><strong>Method calls are expensive, use variables directly when possible.</strong></p> -<p>Keep this in mind: <code>self.something</code> is <em>not</em> the same as <code>@something</code>. The end result is the same, but the first way costs more in terms of performance because Ruby has to look up the method name.<br /> -Similarly, <strong>local variables <em>should</em> be introduced as a way to “cache” the result of method calls</strong>. Often you may feel “guilty” to introduce a new variable and keep calling the same method over and over: this should definitely be avoided.</p> +<p>Keep this in mind: <code>self.something</code> is <em>not</em> the same as <code>@something</code>. The end result is + the same, but the first way costs more in terms of performance because Ruby has to look up the method name.<br /> + Similarly, <strong>local variables <em>should</em> be introduced as a way to “cache” the result of + method calls</strong>. Often you may feel “guilty” to introduce a new variable and keep calling the + same method over and over: this should definitely be avoided.</p> <p>Other useful tips include, for example:</p> <ul> <li>Use syntax constructs (e.g. assignments) as expressinons. Use evaluation precedences.</li> - <li>Use interpolated strings <code>"... #{string_variable}"</code> (there’s also no performance difference if constant strings are used between <code>"</code> or <code>'</code>)</li> - <li>Use operators which update the data structure without copying it (when possible). Use <code>update</code> or <code>merge</code> to update hashes.</li> - <li>Iterating using <code>for a in A</code> is slightly faster than performing the same iteration using <code>each</code>, (it is the opposite in Ruby 1.9 though)</li> + <li>Use interpolated strings <code>"... #{string_variable}"</code> (there’s also no performance difference if + constant strings are used between <code>"</code> or <code>'</code>)</li> + <li>Use operators which update the data structure without copying it (when possible). Use <code>update</code> or + <code>merge</code> to update hashes.</li> + <li>Iterating using <code>for a in A</code> is slightly faster than performing the same iteration using + <code>each</code>, (it is the opposite in Ruby 1.9 though)</li> <li>do not use <code>return</code> unless you have to</li> <li>test in order of expected case frequency</li> <li>Use parallel assignment (<code>a, b = 5, 6</code>) where applicable</li> <li>If a module gets included in only one other class (or module), it’s preferable to open the class instead.</li> </ul> -<p>I deliberately chose not to elaborate any further on the tips listed above because otherwise I’ll give a big chunk of the contents of the book itself. If you know Ruby enough, you may already know why such reccommendations make sense, but if you don’t, <em>Writing Efficient Ruby Code</em> can be a short but very interesting read.</p> +<p>I deliberately chose not to elaborate any further on the tips listed above because otherwise I’ll give a big + chunk of the contents of the book itself. If you know Ruby enough, you may already know why such reccommendations + make sense, but if you don’t, <em>Writing Efficient Ruby Code</em> can be a short but very interesting read. +</p> <h3>The Good</h3> -<p>For each of the 30 “coding patterns” (and consequent anti-patterns) described in the book, the author does a great job explaining the reasons of doing something in a particular way, also through examples and benchmarks, where possible.</p> -<p>Furthermore, this <em>shortcut</em> can really be useful to grasp a few difference between Ruby 1.8.5, 1.8.6 and 1.9 in terms of performance: not all the patters apply to all Ruby implementations, and when that’s the case it is clearly stated.</p> +<p>For each of the 30 “coding patterns” (and consequent anti-patterns) described in the book, the author + does a great job explaining the reasons of doing something in a particular way, also through examples and + benchmarks, where possible.</p> +<p>Furthermore, this <em>shortcut</em> can really be useful to grasp a few difference between Ruby 1.8.5, 1.8.6 and 1.9 + in terms of performance: not all the patters apply to all Ruby implementations, and when that’s the case it is + clearly stated.</p> <h3>The Bad</h3> -<p>My only complaint about the book is probably the lack of details and more “specialized” patterns. Everything (except for a few Rails-specific tips) normally apply to Ruby <em>as a whole</em>, without going deeply to analyze specific libraries or third-party gems. As a result, once you get the general idea, some of the patters may seem pretty obvious or a logic consequence of others.</p> -<p>It is also true that this is meant to be a <em>shortcut</em>, not a comprehensive analysis on code optimization techniques which can be applied to specific cases: something like this would require much more than 50 pages!</p> +<p>My only complaint about the book is probably the lack of details and more “specialized” patterns. + Everything (except for a few Rails-specific tips) normally apply to Ruby <em>as a whole</em>, without going deeply + to analyze specific libraries or third-party gems. As a result, once you get the general idea, some of the patters + may seem pretty obvious or a logic consequence of others.</p> +<p>It is also true that this is meant to be a <em>shortcut</em>, not a comprehensive analysis on code optimization + techniques which can be applied to specific cases: something like this would require much more than 50 pages!</p> <h3>The Bottom Line</h3> -<p>Read it, re-read a few bits of it to make sure you grasp the most important concepts, and keep its table of contents in front of you as a reminder when refactoring your code!</p> +<p>Read it, re-read a few bits of it to make sure you grasp the most important concepts, and keep its table of contents + in front of you as a reminder when refactoring your code!</p>
@@ -20,7 +20,7 @@ <p>Because I’m addicted to trying out new tools, however, I always kept testing new browsers I discovered here and
there. K-Meleon, Flock, Sleipnir… When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn’t – and it still isn’t – usable at all, mainly due to sporadic crashes.</p> -<p style="float:right;"><img src="/files/opera/fast.jpg" alt="" /></p> +<p style="float:right;"><img src="/images/opera/fast.jpg" alt="" /></p> <p>Similarly, I’ve been trying out <a href="http://www.opera.com/">Opera</a> periodically, as new releases came out, but again it didn’t seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to@@ -71,7 +71,7 @@ <p><strong><span class="caps">UPDATE</span>:</strong> For a list of the features provided by Firefox extensions
which are included in Opera, see Rijk’s <a href="http://files.myopera.com/Rijk/blog/extensions.html">Top 150 Popular Firefox Extensions and Opera</a></p> </blockquote> -<p style="float:right;"><img src="/files/opera/opera_navigation.png" alt="" /></p> +<p style="float:right;"><img src="/images/opera/opera_navigation.png" alt="" /></p> <p>Because I’m addicted to betas, I immediately downloaded <a href="http://www.opera.com/products/desktop/next/">Opera Kestrel</a>, i.e. Opera 9.50 beta 1. I never actually liked Opera’s default theme, so I started looking around for <strong><a@@ -129,7 +129,7 @@ custom search engine in Firefox, but unfortunately Opera didn’t seem to allow users to customize their search
engines…</p> <p>Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible:</p> -<p style="float:right;"><img src="/files/opera/search_engines.png" alt="" /></p> +<p style="float:right;"><img src="/images/opera/search_engines.png" alt="" /></p> <ol> <li>Go to your search engine or any website with a search form</li> <li>Right click the search field</li>@@ -179,7 +179,7 @@ can do.</p>
<p>Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through <span class="caps">FTP</span> directories. Here’s what Opera can handle: </p> -<p style="float:right;"><img src="/files/opera/files.png" alt="" /></p> +<p style="float:right;"><img src="/images/opera/files.png" alt="" /></p> <ul> <li>Web Pages – No need of explanations here.</li> <li><span class="caps">FTP</span> – <span class="caps">FTP</span> directories are listed very clearly,
@@ -4,17 +4,34 @@ content-type: article
timestamp: 1213670760 tags: "firefox|browsers|writing|review|books" ----- -<p>When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. <br /> -After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla’s web sites, I realized I was wrong: Firefox 3 introduced <em>a lot</em> of new things, and keeping track of all of them, I admit, was quite a hard task.</p> -<p>Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor “complained” that 8,300+ words was about 3 times over the minimum requirements for a feature article! <br /> -<em>“I don’t really think that people can read the whole thing online”</em> —, he said, and I somehow agreed.</p> -<p>In the end, they decided to pack my “article” into a 30-pages <span class="caps">PDF</span> eBook which can be downloaded <em>absolutely free of charge</em> from SitePoint web site as well, so here it is:</p> -<p style="float:left;"><img src="/files/ff3-revealed.png" alt="" /></p> +<p>When the SitePoint staff asked me to write an article summing up all the new features of Firefox 3, I gladly + accepted: I wrote about Firefox before, and I thought it was just going to be a 2-3 hours job maximum. <br /> + After diving deeper into Firefox 3 development, reading dozens of different blogs and scouting Mozilla’s web + sites, I realized I was wrong: Firefox 3 introduced <em>a lot</em> of new things, and keeping track of all of them, + I admit, was quite a hard task.</p> +<p>Nevertheless, I wrote the article and delivered it to SitePoint in time fore the release, but my editor + “complained” that 8,300+ words was about 3 times over the minimum requirements for a feature article! + <br /> + <em>“I don’t really think that people can read the whole thing online”</em> —, he said, and + I somehow agreed. +</p> +<p>In the end, they decided to pack my “article” into a 30-pages <span class="caps">PDF</span> eBook which + can be downloaded <em>absolutely free of charge</em> from SitePoint web site as well, so here it is:</p> +<p style="float:left;"><img src="/images/ff3-revealed.png" alt="" /></p> <p><br /><br /> -<span style="font-size: 1.5em;"> <strong><a href="http://firefox.s3.sitepoint.com/ff3-revealed.zip">Firefox 3 Revealed</a></strong> </span></p> -<p>If you prefer though, you can still read the article directly on SitePoint, <a href="http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot">here</a>.</p> -<p>This guide aims to give you a comprehensive overview of virtually <em>all</em> the new features and improvements introduced by Firefox 3.</p> + <span style="font-size: 1.5em;"> <strong><a href="http://firefox.s3.sitepoint.com/ff3-revealed.zip">Firefox 3 + Revealed</a></strong> </span> +</p> +<p>If you prefer though, you can still read the article directly on SitePoint, <a + href="http://www.sitepoint.com/article/firefox-3-whats-new-whats-hot">here</a>.</p> +<p>This guide aims to give you a comprehensive overview of virtually <em>all</em> the new features and improvements + introduced by Firefox 3.</p> <p><br /><br /></p> -<p>I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular <strong><a href="http://magain.com/blog/">Matthew Magain</a></strong> for his help and support (and for creating the <span class="caps">PDF</span> on a Sunday evening!).<br /> -Additionally, I would also like to thank the Mozilla Development Team for their awesome job with Firefox 3 and everyone else who made this eBook possible.</p> -<p><strong>Update:</strong> Feel free to <strong><a href="http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint">digg</a></strong> this eBook!</p> +<p>I would like to thank the whole SitePoint staff for giving me the opportunity to write this eBook, and in particular + <strong><a href="http://magain.com/blog/">Matthew Magain</a></strong> for his help and support (and for creating the + <span class="caps">PDF</span> on a Sunday evening!).<br /> + Additionally, I would also like to thank the Mozilla Development Team for their awesome job with Firefox 3 and + everyone else who made this eBook possible.</p> +<p><strong>Update:</strong> Feel free to <strong><a + href="http://digg.com/software/FireFox_3_Revealed_Free_ebook_from_SitePoint">digg</a></strong> this eBook! +</p>
@@ -4,9 +4,13 @@ content-type: article
timestamp: 1256654880 tags: "li3|php|tutorial" ----- -<p>So <a href="http://li3.rad-dev.org/">Lithium</a> is now officially out, and its 0.1 release can be freely <a href="http://rad-dev.org/lithium/versions">downloaded</a> from the official web site or by cloning the Lithium git repository. The good news is that although not many web hosts offer <span class="caps">PHP</span> 5.3, you can try it out youself, locally and with minimum effort.</p> +<p>So <a href="http://li3.rad-dev.org/">Lithium</a> is now officially out, and its 0.1 release can be freely <a + href="http://rad-dev.org/lithium/versions">downloaded</a> from the official web site or by cloning the Lithium + git repository. The good news is that although not many web hosts offer <span class="caps">PHP</span> 5.3, you can + try it out youself, locally and with minimum effort.</p> <h3>Requirements</h3> -<p>According to the <a href="http://rad-dev.org/wiki/guides/setup">Lithium Wiki</a>, to develop applications with Lithium you need:</p> +<p>According to the <a href="http://rad-dev.org/wiki/guides/setup">Lithium Wiki</a>, to develop applications with + Lithium you need:</p> <ul> <li>A web server, like Apache or <span class="caps">IIS</span></li> <li><span class="caps">PHP</span> 5.3.0 or higher</li>@@ -14,33 +18,49 @@ <li>Git (not required, but all example projects are on git repos, so you may as well have it)</li>
</ul> <p>For this tutorial, more specifically, you need to download (just download, don’t install anything!):</p> <ul> - <li><a href="http://code.google.com/p/mongoose/">mongoose</a>, a tiny, standalone (as <em>in one single file</em>), cross-platform web server.</li> - <li><a href="http://www.php.net/downloads.php#v5"><span class="caps">PHP</span> 5.3.0</a>, not the installer, the zip package.</li> + <li><a href="http://code.google.com/p/mongoose/">mongoose</a>, a tiny, standalone (as <em>in one single file</em>), + cross-platform web server.</li> + <li><a href="http://www.php.net/downloads.php#v5"><span class="caps">PHP</span> 5.3.0</a>, not the installer, the + zip package.</li> <li><a href="http://rad-dev.org/lithium/versions">Lithium</a> (version 0.1, at the time of writing)</li> <li>The <a href="http://rad-dev.org/li3_docs">li3_docs plugin</a>.</li> </ul> -<p>To get the li3_docs plugin you need to <a href="http://rad-dev.org/users/add">register</a> on rad-dev.org, and clone the li3_docs git repository. If you don’t have git installed or you don’t want to read <a href="http://spheredev.org/wiki/Git_for_the_lazy">another awesome tutorial</a> to install it and learn how to use it, I’ll save you the hassle and let you download the plugin from <a href="/files/li3_docs.zip">here</a>, for this time ony.</p> -<p><b>Note:</b> This tutorial assumes that you are on Windows. If you are not, some things may be a bit different depending on your platform.</p> +<p>To get the li3_docs plugin you need to <a href="http://rad-dev.org/users/add">register</a> on rad-dev.org, and clone + the li3_docs git repository. If you don’t have git installed or you don’t want to read <a + href="http://spheredev.org/wiki/Git_for_the_lazy">another awesome tutorial</a> to install it and learn how to + use it, I’ll save you the hassle and let you download the plugin from <a href="/files/li3_docs.zip">here</a>, + for this time ony.</p> +<p><b>Note:</b> This tutorial assumes that you are on Windows. If you are not, some things may be a bit different + depending on your platform.</p> <h3>Setting up the environment</h3> -<p>Choose a directory on your sistem (let’s call it <b>D:\lithium_test</b> from now on). We’ll do everything in here, and you can move it anywhere you like afterwards, even on a <span class="caps">USB</span> stick, without breaking anything.</p> +<p>Choose a directory on your sistem (let’s call it <b>D:\lithium_test</b> from now on). We’ll do everything + in here, and you can move it anywhere you like afterwards, even on a <span class="caps">USB</span> stick, without + breaking anything.</p> <ol> <li>Unzip Lithium in <b>D:\lithium_test</b>, so that it contains the following files and directories: - <ul> - <li>app/</li> - <li>libraries/</li> - <li>.htaccess (it won’t actually be used in this tutorial)</li> - </ul></li> - <li>Unzip <span class="caps">PHP</span> 5.3.0 somewhere and copy the following files to the <b>D:\lithium_test</b> folder: - <ul> - <li>php5.dll</li> - <li>php-cgi.exe</li> - <li>php.ini (just get php.ini-development from the <span class="caps">PHP</span> package and rename it)</li> - </ul></li> - <li>Copy the mongoose-2.8.exe executable in <b>D:\lithium_test</b> and rename it to <b>mongoose.exe</b> for convenience.</li> + <ul> + <li>app/</li> + <li>libraries/</li> + <li>.htaccess (it won’t actually be used in this tutorial)</li> + </ul> + </li> + <li>Unzip <span class="caps">PHP</span> 5.3.0 somewhere and copy the following files to the <b>D:\lithium_test</b> + folder: + <ul> + <li>php5.dll</li> + <li>php-cgi.exe</li> + <li>php.ini (just get php.ini-development from the <span class="caps">PHP</span> package and rename it)</li> + </ul> + </li> + <li>Copy the mongoose-2.8.exe executable in <b>D:\lithium_test</b> and rename it to <b>mongoose.exe</b> for + convenience.</li> <li>Create a <b>mongoose.conf</b> file containing the following lines:</li> </ol> -<div class='text'><pre><code>cgi_interp php-cgi.exe -cgi_ext php</code></pre></div><p>If you did everything correctly, your <b>D:\lithium_test</b> directory should contain the following:</p> +<div class='text'> + <pre><code>cgi_interp php-cgi.exe +cgi_ext php</code></pre> +</div> +<p>If you did everything correctly, your <b>D:\lithium_test</b> directory should contain the following:</p> <ul> <li>app\</li> <li>libraries\</li>@@ -52,24 +72,37 @@ <li>php.ini</li>
<li>php5.dll</li> </ul> <h3>Running Lithium</h3> -<p>Double click <b>mongoose.exe</b> and point your browser of choice to <a href="http://localhost:8080/app/webroot/index.php">http://localhost:8080/app/webroot/index.php</a>. You should see the Lithium temporary homepage (yes, I expected something fancier too):</p> -<p><img src="/img/pictures/lithium/temp_homepage.png" alt="" /></p> +<p>Double click <b>mongoose.exe</b> and point your browser of choice to <a + href="http://localhost:8080/app/webroot/index.php">http://localhost:8080/app/webroot/index.php</a>. You should + see the Lithium temporary homepage (yes, I expected something fancier too):</p> +<p><img src="/images/pictures/lithium/temp_homepage.png" alt="" /></p> <p>Now, let’s see if we can get the li3_docs plugin running as well:</p> <ol> - <li>Unzip <b>li3_docs.zip</b> and copy the <b>li3_docs</b> folder in <b>D:\lithium_test\app\libraries\plugins</b>.</li> - <li>Open <b>D:\lithium_test\app\config\bootstrap.php</b> and add the line: <code>Libraries::add('plugin', 'li3_docs');</code> at the end. I actually found this commented out already (line 80).</li> + <li>Unzip <b>li3_docs.zip</b> and copy the <b>li3_docs</b> folder in <b>D:\lithium_test\app\libraries\plugins</b>. + </li> + <li>Open <b>D:\lithium_test\app\config\bootstrap.php</b> and add the line: + <code>Libraries::add('plugin', 'li3_docs');</code> at the end. I actually found this commented out already (line + 80). + </li> </ol> -<p>Go to <a href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>, you should see something like this:</p> -<p><img src="/img/pictures/lithium/li3_docs.png" alt="" /></p> +<p>Go to <a + href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>, + you should see something like this:</p> +<p><img src="/images/pictures/lithium/li3_docs.png" alt="" /></p> <p>Congratulation, you’re now running your first Lithium application!</p> <h3>Fixing URLs</h3> <p>Once the initial excitement wears off you’ll notice that none of the links on the docs page works.</p> -<p>That’s because the mongoose web server does not support <span class="caps">URL</span> rewriting (and Lithium needs it badly right now), so we have to change the way URLs are created. <a href="http://twitter.com/nateabele">@nateabele</a> gave me <a href="http://pastium.org/view/3a966c1446fcbd1d4f5a94d882256987">some tips</a> on how to do this; it’s very simple:</p> +<p>That’s because the mongoose web server does not support <span class="caps">URL</span> rewriting (and Lithium + needs it badly right now), so we have to change the way URLs are created. <a + href="http://twitter.com/nateabele">@nateabele</a> gave me <a + href="http://pastium.org/view/3a966c1446fcbd1d4f5a94d882256987">some tips</a> on how to do this; it’s very + simple:</p> <ol> <li>Create a directory called <b>action</b> in <b>D:\lithium_test\app\extensions</b>.</li> <li>Create a file called <b>Request.php</b>, containing the following:</li> </ol> -<div class='php'><pre><code><?php +<div class='php'> + <pre><code><?php namespace app\extensions\action; class Request extends \lithium\action\Request {@@ -78,11 +111,19 @@ protected function _base() {
return '?url='; } } -?></code></pre></div><p>We’re basically extending the <code>\lithium\action\Request</code> with a custom class, telling Lithium how to create the base <span class="caps">URL</span>.</p> +?></code></pre> +</div> +<p>We’re basically extending the <code>\lithium\action\Request</code> with a custom class, telling Lithium how to + create the base <span class="caps">URL</span>.</p> <p>After doing so, open <b>D:\lithium_test\app\webroot\index.php</b> and change:</p> <p><code>echo lithium\action\Dispatcher::run();</code></p> <p>into:</p> <code>echo lithium\action\Dispatcher::run(new app\extensions\action\Request());</code> <p>In this case, we’re instructing the dispatcher to use our custom Request class instead of the default one.</p> -<p>Now everything should work as expected. Reload the docs page (<a href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>) and verify that the links work by navigating to <code>Lithium</code>, then <code>action</code> and finally <code>Controller</code>.</p> -<p>Now you can use Lithium to display its own <span class="caps">API</span> locally (if things didn’t work out, there’s always <a href="http://li3.rad-dev.org/docs">http://li3.rad-dev.org/docs</a>).</p> +<p>Now everything should work as expected. Reload the docs page (<a + href="http://localhost:8080/app/webroot/index.php?url=docs">http://localhost:8080/app/webroot/index.php?url=docs</a>) + and verify that the links work by navigating to <code>Lithium</code>, then <code>action</code> and finally + <code>Controller</code>. +</p> +<p>Now you can use Lithium to display its own <span class="caps">API</span> locally (if things didn’t work out, + there’s always <a href="http://li3.rad-dev.org/docs">http://li3.rad-dev.org/docs</a>).</p>
@@ -6,71 +6,128 @@ timestamp: 1273417200
tags: "glyph|ruby|opensource" ----- - <section class="section"> -<p>I am very pleased to announce the second release of the <a href="/glyph/">Glyph Document Authoring Framework</a>. For those who don’t know, Glyph is a pure-Ruby, extensible solution to author documents like books or articles using a simple, fully-customizable markup language.</p> -<p>Since the <a href="/articles/introducing-glyph/">first release</a>, came out, last month, a lot happened. Plenty of bugs were fixed and new features implemented, as shown by the <a href="http://github.com/h3rald/glyph/blob/master/CHANGELOG.textile">changelog</a>. Here’s a brief rundown of the most notable changes.</p> -<section class="section"> -<header><h1 id="h_1" class="toc">What Glyph code looks like</h1></header> -<p>Earlier this week I <a href="http://blog.h3rald.com/making-a-custom-vim-syntax-file">blogged</a> about my new <a href="http://github.com/h3rald/stash/blob/master/.vim/syntax/glyph.vim">Glyph vim syntax file</a>. I’ve been using it for a while, and all I can say is that it really helps! Here’s what it looks like:</p> -<p><img src="/img/pictures/glyph_syntax.png" /></p> -<p>I’m sorry for the Emacs and TextMate folks, but I only use Vim, so I only made a Vim syntax file. Anyhow, Glyph grammar is very simple, so rolling out your own syntax file for your favorite editor shouldn’t be too hard.</p> -</section> -<section class="section"> -<header><h1 id="h_2" class="toc">Notable features</h1></header> <section class="section"> -<header><h1 id="h_3" class="toc">Single-file compilation</h1></header> -<p>Perhaps the most life-changing feature in this release is the possibility of compiling a single Glyph source file into an <span class="caps">HTML</span> or <span class="caps">PDF</span> file. This means you no longer need to create a full-blown project for writing a short article: just create a file anywhere and run <code>glyph compile filename.glyph</code>on it!</p> -<p>The good thing is that with this new release you can also define snippets, configuration settings, and even macros right into your Glyph files, so you can do almost anything without having to create a project or fiddle with <span class="caps">YAML</span> files.</p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">Programmatic usage</h1></header> -<p>The second most notable feature is the possibility to use Glyph as a Ruby library, i.e. as you’d use a filter like RedCloth or MarkDown. Additionally, it is also possible to compile single files programmatically, so you can, for example, create <span class="caps">PDF</span> files for your articles from the same source file. Don’t believe me? Feel free to click the <em>Download <span class="caps">PDF</span></em> and <em>View Source</em> links on this very page to see for yourself…</p> -<p>For those of you using the awesome <a href="http://nanoc.stoneship.org">nanoc</a> static site generator, here’s a few source files you may want to take a look at:</p> -<ul> - <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-data.rb">lib/glyph-data.rb</a> — How to update configuration settings.</li> - <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-filter.rb">lib/glyph-data.rb</a> — a simple Glyph filter.</li> - <li><a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a> — a rule using the <code>Glyph#compile</code> method to generate <span class="caps">PDF</span> files.</li> -</ul> -</section> -<section class="section"> -<header><h1 id="h_5" class="toc">Auto-regeneration</h1></header> -<p>Another very interesting feature is the possibility to auto-regenerate your output files automatically whenever a source file is changed. Just run <code>glyph compile --auto</code> and you’re away. I’d like to thank <a href="http://koraktor.github.com">Sebastian Staudt</a> for proposing, implementing, and testing this feature.</p> -</section> -<section class="section"> -<header><h1 id="h_6" class="toc">Conditional macros</h1></header> -<p>Finally, although it may worry some, I added the possibility to evaluate conditional expressions directly in Glyph. The syntax is a bit verbose due to the extreme simplicity of Glyph parser, but it does the job:</p> -<p><code> + <p>I am very pleased to announce the second release of the <a href="/glyph/">Glyph Document Authoring Framework</a>. + For those who don’t know, Glyph is a pure-Ruby, extensible solution to author documents like books or + articles using a simple, fully-customizable markup language.</p> + <p>Since the <a href="/articles/introducing-glyph/">first release</a>, came out, last month, a lot happened. Plenty + of bugs were fixed and new features implemented, as shown by the <a + href="http://github.com/h3rald/glyph/blob/master/CHANGELOG.textile">changelog</a>. Here’s a brief + rundown of the most notable changes.</p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">What Glyph code looks like</h1> + </header> + <p>Earlier this week I <a href="http://blog.h3rald.com/making-a-custom-vim-syntax-file">blogged</a> about my new + <a href="http://github.com/h3rald/stash/blob/master/.vim/syntax/glyph.vim">Glyph vim syntax file</a>. + I’ve been using it for a while, and all I can say is that it really helps! Here’s what it looks + like:</p> + <p><img src="/images/pictures/glyph_syntax.png" /></p> + <p>I’m sorry for the Emacs and TextMate folks, but I only use Vim, so I only made a Vim syntax file. + Anyhow, Glyph grammar is very simple, so rolling out your own syntax file for your favorite editor + shouldn’t be too hard.</p> + </section> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Notable features</h1> + </header> + <section class="section"> + <header> + <h1 id="h_3" class="toc">Single-file compilation</h1> + </header> + <p>Perhaps the most life-changing feature in this release is the possibility of compiling a single Glyph + source file into an <span class="caps">HTML</span> or <span class="caps">PDF</span> file. This means you + no longer need to create a full-blown project for writing a short article: just create a file anywhere + and run <code>glyph compile filename.glyph</code>on it!</p> + <p>The good thing is that with this new release you can also define snippets, configuration settings, and + even macros right into your Glyph files, so you can do almost anything without having to create a + project or fiddle with <span class="caps">YAML</span> files.</p> + </section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Programmatic usage</h1> + </header> + <p>The second most notable feature is the possibility to use Glyph as a Ruby library, i.e. as you’d + use a filter like RedCloth or MarkDown. Additionally, it is also possible to compile single files + programmatically, so you can, for example, create <span class="caps">PDF</span> files for your articles + from the same source file. Don’t believe me? Feel free to click the <em>Download <span + class="caps">PDF</span></em> and <em>View Source</em> links on this very page to see for + yourself…</p> + <p>For those of you using the awesome <a href="http://nanoc.stoneship.org">nanoc</a> static site generator, + here’s a few source files you may want to take a look at:</p> + <ul> + <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-data.rb">lib/glyph-data.rb</a> + — How to update configuration settings.</li> + <li><a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph-filter.rb">lib/glyph-data.rb</a> + — a simple Glyph filter.</li> + <li><a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a> — a rule using the + <code>Glyph#compile</code> method to generate <span class="caps">PDF</span> files.</li> + </ul> + </section> + <section class="section"> + <header> + <h1 id="h_5" class="toc">Auto-regeneration</h1> + </header> + <p>Another very interesting feature is the possibility to auto-regenerate your output files automatically + whenever a source file is changed. Just run <code>glyph compile --auto</code> and you’re away. + I’d like to thank <a href="http://koraktor.github.com">Sebastian Staudt</a> for proposing, + implementing, and testing this feature.</p> + </section> + <section class="section"> + <header> + <h1 id="h_6" class="toc">Conditional macros</h1> + </header> + <p>Finally, although it may worry some, I added the possibility to evaluate conditional expressions directly + in Glyph. The syntax is a bit verbose due to the extreme simplicity of Glyph parser, but it does the + job:</p> + <p><code> ?[and[ eq[$[document.output]|pdf]| eq[$[tools.pdf_generator]|prince] ]| style[pagination.css]] </code></p> -<p>The snippet above can be used to include the <code>pagination.css</code> stylesheet only when generating a <span class="caps">PDF</span> file with Prince <span class="caps">XML</span>.</p> -</section> -</section> -<section class="section"> -<header><h1 id="h_7" class="toc">What’s next?</h1></header> -<p>Release 0.3.0 is currently being planned, and so are its <a href="http://github.com/h3rald/glyph/issues">features</a>. For now, I’d like to thank the following individuals for contributing to Glyph:</p> -<ul> - <li><a href="http://www.jabbslad.com">Jamie Atkinson</a> (Jabbslad), for spotting and fixing some bugs and providing feedback.</li> - <li><a href="http://koraktor.github.com">Sebastian Staudt</a> (koraktor), for spotting and fixing some bugs, proposing and implementing new features.</li> -</ul> -<p>In particular, Sebastian is working on <a href="http://wiki.github.com/h3rald/glyph/feature-bibliography-support">bibliogaphy support</a> for Glyph, looking forward to it!</p> -<p>Although still in its infancy, Glyph is becoming more and more usable everyday. If you are interested, you can contribute in many different ways to the project, such as:</p> -<ul> - <li>By participating to discussions on the <a href="http://groups.google.com/group/glyph-framework">user group</a> (it’s a bit quiet of there for now…)</li> - <li>By spreading the word on Twitter, on your blog, or wherever you like.</li> - <li>By installing it, using it, reporting bugs and proposing new features (it’s just a <code>gem install glyph</code> away!).</li> - <li>By actually contributing to its development (it’s <a href="http://wiki.github.com/h3rald/glyph/contribution-guidelines">easy</a>!).</li> -</ul> -<p>Additionally, if you don’t like coding:</p> -<ul> - <li>feedback on the current documentation and on the <a href="http://github.com/h3rald/glyph/raw/master/book/output/pdf/glyph.pdf">Glyph book</a> is appreciated</li> - <li>if you are good with <span class="caps">CSS</span>, I’m looking for some nice new <span class="caps">CSS</span> styles to include in the standard Glyph distribution.</li> - <li>if you’re good with graphics, Glyph needs a good-looking logo…</li> -</ul> -<p>Any form of contribution will be credited in some way, e.g. by links and tweets.</p> -</section> + <p>The snippet above can be used to include the <code>pagination.css</code> stylesheet only when generating + a <span class="caps">PDF</span> file with Prince <span class="caps">XML</span>.</p> + </section> + </section> + <section class="section"> + <header> + <h1 id="h_7" class="toc">What’s next?</h1> + </header> + <p>Release 0.3.0 is currently being planned, and so are its <a + href="http://github.com/h3rald/glyph/issues">features</a>. For now, I’d like to thank the + following individuals for contributing to Glyph:</p> + <ul> + <li><a href="http://www.jabbslad.com">Jamie Atkinson</a> (Jabbslad), for spotting and fixing some bugs and + providing feedback.</li> + <li><a href="http://koraktor.github.com">Sebastian Staudt</a> (koraktor), for spotting and fixing some bugs, + proposing and implementing new features.</li> + </ul> + <p>In particular, Sebastian is working on <a + href="http://wiki.github.com/h3rald/glyph/feature-bibliography-support">bibliogaphy support</a> for + Glyph, looking forward to it!</p> + <p>Although still in its infancy, Glyph is becoming more and more usable everyday. If you are interested, you + can contribute in many different ways to the project, such as:</p> + <ul> + <li>By participating to discussions on the <a href="http://groups.google.com/group/glyph-framework">user + group</a> (it’s a bit quiet of there for now…)</li> + <li>By spreading the word on Twitter, on your blog, or wherever you like.</li> + <li>By installing it, using it, reporting bugs and proposing new features (it’s just a + <code>gem install glyph</code> away!).</li> + <li>By actually contributing to its development (it’s <a + href="http://wiki.github.com/h3rald/glyph/contribution-guidelines">easy</a>!).</li> + </ul> + <p>Additionally, if you don’t like coding:</p> + <ul> + <li>feedback on the current documentation and on the <a + href="http://github.com/h3rald/glyph/raw/master/book/output/pdf/glyph.pdf">Glyph book</a> is + appreciated</li> + <li>if you are good with <span class="caps">CSS</span>, I’m looking for some nice new <span + class="caps">CSS</span> styles to include in the standard Glyph distribution.</li> + <li>if you’re good with graphics, Glyph needs a good-looking logo…</li> + </ul> + <p>Any form of contribution will be credited in some way, e.g. by links and tweets.</p> + </section> </section>
@@ -6,79 +6,128 @@ timestamp: 1276431000
tags: "glyph|ruby|opensource" ----- - <section class="section"> -<p>The third release of <a href="/glyph/">Glyph</a> is out!</p> +<section class="section"> + <p>The third release of <a href="/glyph/">Glyph</a> is out!</p> -<p>For those checking it out for the first time, Glyph is a <em>Rapid Document Authoring Framework</em> focused on extensibility and content reuse. For an example of what Glyph can do, have a look at Glyph's <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">free PDF book</a>.</p> + <p>For those checking it out for the first time, Glyph is a <em>Rapid Document Authoring Framework</em> focused on + extensibility and content reuse. For an example of what Glyph can do, have a look at Glyph's <a + href="http://github.com/downloads/h3rald/glyph/glyph.pdf">free PDF book</a>.</p> -<p>This release brings more stability to Glyph, more speed, and features affecting Glyph's core functionality. As a consequence, some <a href="http://github.com/h3rald/glyph/issues/closed#issue/121">incompatibilities</a> had to be introduced – but after all, better now than later.</p> + <p>This release brings more stability to Glyph, more speed, and features affecting Glyph's core functionality. As a + consequence, some <a href="http://github.com/h3rald/glyph/issues/closed#issue/121">incompatibilities</a> had to + be introduced – but after all, better now than later.</p> -<section class="section"> -<header><h1 id="h_1" class="toc">New parser and performance improvements</h1></header> -<p>This release's big news is the brand new <a href="http://yardoc.org/docs/h3rald-glyph/glyph/parser">Glyph Parser</a>. Until this release, Glyph relied on the awesome <a href="http://treetop.rubyforge.org/">Treetop</a> library for parsing Glyph language. Treetop is great when it comes to creating language parsers effortlessly, but it can add quite a bit of an overhead especially when using <a href="http://groups.google.com/group/treetop-dev/browse_thread/thread/15ff7659b2efbeed">dot star</a> patterns.</p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">New parser and performance improvements</h1> + </header> + <p>This release's big news is the brand new <a href="http://yardoc.org/docs/h3rald-glyph/glyph/parser">Glyph + Parser</a>. Until this release, Glyph relied on the awesome <a + href="http://treetop.rubyforge.org/">Treetop</a> library for parsing Glyph language. Treetop is great + when it comes to creating language parsers effortlessly, but it can add quite a bit of an overhead + especially when using <a + href="http://groups.google.com/group/treetop-dev/browse_thread/thread/15ff7659b2efbeed">dot star</a> + patterns.</p> - <p>So I ran a few benchmarks and in the end decided to write my very own (first!) parser from scratch using just the <a href="http://ruby-doc.org/core/classes/StringScanner.html">StringScanner</a> class, which is part of Ruby Standard Library. It took me a bit to get used to it, but in the end I managed to create something able to produce an Abstract Syntax Tree exactly the way I wanted.</p> + <p>So I ran a few benchmarks and in the end decided to write my very own (first!) parser from scratch using just + the <a href="http://ruby-doc.org/core/classes/StringScanner.html">StringScanner</a> class, which is part of + Ruby Standard Library. It took me a bit to get used to it, but in the end I managed to create something able + to produce an Abstract Syntax Tree exactly the way I wanted.</p> - <p>After adding the new parser, Glyph became significantly faster. This doesn't mean it's as fast as, say, RedCloth, but I it can be used to process long books in just a few <em>seconds</em> rather than <em>minutes</em>.</p> + <p>After adding the new parser, Glyph became significantly faster. This doesn't mean it's as fast as, say, + RedCloth, but I it can be used to process long books in just a few <em>seconds</em> rather than + <em>minutes</em>.</p> -</section> + </section> -<section class="section"> -<header><h1 id="h_2" class="toc">Macro Attributes</h1></header> -<p>Glyph now supports named attributes as well as positional parameters. This is particularly handy when you want to create macros with a lot of optional arguments: in this case, positional parameters are not great. As a result, for example, the <code>section</code> macro now takes an optional <code>title</code> and <code>id</code> attributes, rather than two parameters</p> - - <p>Attributes look like macros, but they all start with a <code>@</code> character. For example, see the the following image, showing this very section:</p> - - <img src="/img/pictures/updated_glyph_syntax.png" /> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Macro Attributes</h1> + </header> + <p>Glyph now supports named attributes as well as positional parameters. This is particularly handy when you + want to create macros with a lot of optional arguments: in this case, positional parameters are not great. + As a result, for example, the <code>section</code> macro now takes an optional <code>title</code> and + <code>id</code> attributes, rather than two parameters</p> -</section> + <p>Attributes look like macros, but they all start with a <code>@</code> character. For example, see the the + following image, showing this very section:</p> + + <img src="/images/pictures/updated_glyph_syntax.png" /> -<section class="section"> -<header><h1 id="h_3" class="toc">Full XML support</h1></header> -<p>Once macro attributes became available at parser level, having Glyph to produce arbitrary XML code became extremely easy. By default, now if Glyph doesn't find a macro it assumes you're inputting an XML tag of some kind, so you can write:</p> + </section> + + <section class="section"> + <header> + <h1 id="h_3" class="toc">Full XML support</h1> + </header> + <p>Once macro attributes became available at parser level, having Glyph to produce arbitrary XML code became + extremely easy. By default, now if Glyph doesn't find a macro it assumes you're inputting an XML tag of some + kind, so you can write:</p> - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>p[This is a paragraph with some em[emphasized] text.] + <div class="CodeRay"> + <div class="code"> + <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>p[This is a paragraph with some em[emphasized] text.] <span class="line-numbers"><a href="#n2" name="n2">2</a></span>img[ <span class="line-numbers"><a href="#n3" name="n3">3</a></span> @alt[Glyph Code] <span class="line-numbers"><a href="#n4" name="n4">4</a></span> @width[50%] <span class="line-numbers"><a href="#n5" name="n5">5</a></span> @height[50%] <span class="line-numbers"><a href="#n6" name="n6">6</a></span> @src[glyph_code.png] -<span class="line-numbers"><a href="#n7" name="n7">7</a></span>]</pre></div> -</div> +<span class="line-numbers"><a href="#n7" name="n7">7</a></span>]</pre> + </div> + </div> - <p>And get the following HTML code back:</p> - - <div class="CodeRay"> - <div class="code"><pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span><span class="tag"><p></span>This is a paragraph with some <span class="tag"><em></span>emphasized<span class="tag"></em></span> text.<span class="tag"></p></span> + <p>And get the following HTML code back:</p> + + <div class="CodeRay"> + <div class="code"> + <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span><span class="tag"><p></span>This is a paragraph with some <span class="tag"><em></span>emphasized<span class="tag"></em></span> text.<span class="tag"></p></span> <span class="line-numbers"><a href="#n2" name="n2">2</a></span><span class="tag"><img</span> <span class="line-numbers"><a href="#n3" name="n3">3</a></span> <span class="attribute-name">alt</span>=<span class="string"><span class="delimiter">"</span><span class="content">Glyph Code</span><span class="delimiter">"</span></span> <span class="line-numbers"><a href="#n4" name="n4">4</a></span> <span class="attribute-name">width</span>=<span class="string"><span class="delimiter">"</span><span class="content">50%</span><span class="delimiter">"</span></span> <span class="line-numbers"><a href="#n5" name="n5">5</a></span> <span class="attribute-name">height</span>=<span class="string"><span class="delimiter">"</span><span class="content">60%</span><span class="delimiter">"</span></span> <span class="line-numbers"><a href="#n6" name="n6">6</a></span> <span class="attribute-name">src</span>=<span class="string"><span class="delimiter">"</span><span class="content">glyph_code.png</span><span class="delimiter">"</span></span> -<span class="line-numbers"><a href="#n7" name="n7">7</a></span><span class="tag">/></span></pre></div> -</div> +<span class="line-numbers"><a href="#n7" name="n7">7</a></span><span class="tag">/></span></pre> + </div> + </div> - <p>...and none of the macros used in the previosu Glyph code snippet are actually defined in Glyph. Among other things, this means that <em>you don't have to</em> use Textile or Markup within your Glyph code unless you absolutely need to (e.g. for lists, which would be a bit verbose to create using just Glyph markup).</p> + <p>...and none of the macros used in the previosu Glyph code snippet are actually defined in Glyph. Among other + things, this means that <em>you don't have to</em> use Textile or Markup within your Glyph code unless you + absolutely need to (e.g. for lists, which would be a bit verbose to create using just Glyph markup).</p> -</section> + </section> -<section class="section"> -<header><h1 id="h_4" class="toc">Improved <code>include</code> macro and "safe mode"</h1></header> -<p>The <code>include</code> macro now <em>must</em> take an path to a file relative to the <code>text/</code> directory of your project, <em>or</em> it can also be used to include (and <em>evaluate</em>) ruby code within your <code>lib/</code> directory. Moreover, you can now use the <code>include</code> macro even when compiling single Glyph files.</p> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Improved <code>include</code> macro and "safe mode"</h1> + </header> + <p>The <code>include</code> macro now <em>must</em> take an path to a file relative to the <code>text/</code> + directory of your project, <em>or</em> it can also be used to include (and <em>evaluate</em>) ruby code + within your <code>lib/</code> directory. Moreover, you can now use the <code>include</code> macro even when + compiling single Glyph files.</p> - <p>Now, while evaluating Ruby code in an external file can be quite handy, is also quite insecure. For this reason, it is now possible to use Glyph programmatically in "safe mode", thereby forbidding the usage of certain <em>unsafe</em> macros.</p> + <p>Now, while evaluating Ruby code in an external file can be quite handy, is also quite insecure. For this + reason, it is now possible to use Glyph programmatically in "safe mode", thereby forbidding the usage of + certain <em>unsafe</em> macros.</p> -</section> + </section> -<section class="section"> -<header><h1 id="h_5" class="toc">What's next?</h1></header> -<p>Sooner or later I'll have to implement support for generating multiple files in output. This would make it possible to make the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph book</a> available online as a collection of separate HTML file, for example, or, later on, maybe even compiled into a (ugh!) CHM file.</p> + <section class="section"> + <header> + <h1 id="h_5" class="toc">What's next?</h1> + </header> + <p>Sooner or later I'll have to implement support for generating multiple files in output. This would make it + possible to make the <a href="http://github.com/downloads/h3rald/glyph/glyph.pdf">Glyph book</a> available + online as a collection of separate HTML file, for example, or, later on, maybe even compiled into a (ugh!) + CHM file.</p> - <p>Additionally, HTML5 support is also on the horizon: given the current Glyph architecture, it will be relatively easy to have Glyph macros to produce HTML5 code instead of XHTML. LaTeX support, on the other hand, is a completely different game, mainly because I'm not familiar with it, so if anyone feels creative and would like an easier way to produce reusable LaTeX code, <a href="http://github.com/h3rald/glyph/">get forking</a> and contact me!</p> + <p>Additionally, HTML5 support is also on the horizon: given the current Glyph architecture, it will be + relatively easy to have Glyph macros to produce HTML5 code instead of XHTML. LaTeX support, on the other + hand, is a completely different game, mainly because I'm not familiar with it, so if anyone feels creative + and would like an easier way to produce reusable LaTeX code, <a href="http://github.com/h3rald/glyph/">get + forking</a> and contact me!</p> -</section> + </section> </section>
@@ -4,55 +4,115 @@ content-type: article
timestamp: 1156737060 tags: "google|internet|ajax|web20|review" ----- -<p>A while ago Google started offering services like <a href="http://mail.google.com/mail/">Google Mail</a> (Gmail) and <a href="http://www.google.com/calendar/">Google Calendar</a> to domain owners. Sure everyone likes Gmail, but one of the few bad things about it is that it never feels “unique”: your email address is always gonna be <something><code>gmail.com or <something></code>googlemail.com. Not a big deal? Well, sure, not really, but it really depends on the people using the service and how fussy they are:</p> +<p>A while ago Google started offering services like <a href="http://mail.google.com/mail/">Google Mail</a> (Gmail) and + <a href="http://www.google.com/calendar/">Google Calendar</a> to domain owners. Sure everyone likes Gmail, but one + of the few bad things about it is that it never feels “unique”: your email address is always gonna be + <something><code>gmail.com or <something></code>googlemail.com. Not a big deal? Well, sure, not really, but it + really depends on the people using the service and how fussy they are:</p> <ul> <li>small/medium business wouldn’t like this: @gmail.com gives farless credibility than @domain.com</li> - <li>When using Gmail with the Send As feature, messages will be sent “on behalf of”, and this can potentially mess things up as some spam filters don’t like it.</li> + <li>When using Gmail with the Send As feature, messages will be sent “on behalf of”, and this can + potentially mess things up as some spam filters don’t like it.</li> </ul> -<p>Now it seems to be <a href="http://seattlepi.nwsource.com/business/1700AP_Google_Business_Applications.html">official</a>: Google is starting to offer customizable services to anyone who wish to sign up for it, not only as a restricted beta service.<br /> -What does this mean? Well, it can be the (free and easy) definitive web solution for small business, kids, grandmas and everyone who wants to establish a presence on the web by paying only the annual domain renewal fees…</p> +<p>Now it seems to be <a + href="http://seattlepi.nwsource.com/business/1700AP_Google_Business_Applications.html">official</a>: Google is + starting to offer customizable services to anyone who wish to sign up for it, not only as a restricted beta + service.<br /> + What does this mean? Well, it can be the (free and easy) definitive web solution for small business, kids, grandmas + and everyone who wants to establish a presence on the web by paying only the annual domain renewal fees…</p> <h3>Included applications</h3> -<p>Note the title: <a href="https://www.google.com/a/">Google Apps</a> for your domain, not only Gmail. Here’s what you get:</p> +<p>Note the title: <a href="https://www.google.com/a/">Google Apps</a> for your domain, not only Gmail. Here’s + what you get:</p> <ul> - <li><a href="http://mail.google.com/">Gmail</a> – You know what it offers: a state-of-the art <span class="caps">AJAX</span> interface, speed, reliability, very effective spam filter, loads of space, tagging (labels) stars and all the rest.</li> - <li><a href="http://www.google.com/calendar/">Google Calendar</a> – One of the best online calendar available. Features and <span class="caps">AJAX</span> interface, full integration with Gmail, ability to create private and public calendars, reminders,</li> - <li><em>Google Chat</em> – Google’s instant messenger, available through <a href="http://www.google.com/talk/">Google Talk</a> desktop application or online, seamlessly integrated in your Gmail interface.</li> - <li><a href="http://pages.google.com/">Google Web Pages</a> – aka Google’s page creator, easily create webpages using Google’s <span class="caps">WYSIWYG</span> online editor.</li> + <li><a href="http://mail.google.com/">Gmail</a> – You know what it offers: a state-of-the art <span + class="caps">AJAX</span> interface, speed, reliability, very effective spam filter, loads of space, tagging + (labels) stars and all the rest.</li> + <li><a href="http://www.google.com/calendar/">Google Calendar</a> – One of the best online calendar available. + Features and <span class="caps">AJAX</span> interface, full integration with Gmail, ability to create private + and public calendars, reminders,</li> + <li><em>Google Chat</em> – Google’s instant messenger, available through <a + href="http://www.google.com/talk/">Google Talk</a> desktop application or online, seamlessly integrated in + your Gmail interface.</li> + <li><a href="http://pages.google.com/">Google Web Pages</a> – aka Google’s page creator, easily create + webpages using Google’s <span class="caps">WYSIWYG</span> online editor.</li> </ul> -<p>Now, try imagining these four services combined and (almost) fully customizable… Still no idea? Well, keep reading for a list of all the included features.</p> +<p>Now, try imagining these four services combined and (almost) fully customizable… Still no idea? Well, keep + reading for a list of all the included features.</p> <h3>Included Features</h3> -<p>In order to use Google Apps for your domain, you must of course own a domain. The next step involves changing your domain’s MX entry to “<span class="caps">ASPMX</span>.L.<span class="caps">GOOGLE</span>.<span class="caps">COM</span>”, and follow the instructions to create an administration account for your Google applications, and after a while every email sent to your domain’s accounts will be routed to your new Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you’re required to change the <span class="caps">CNAME</span> record of your <span class="caps">DNS</span> to “ghs.google.com”.</p> +<p>In order to use Google Apps for your domain, you must of course own a domain. The next step involves changing your + domain’s MX entry to “<span class="caps">ASPMX</span>.L.<span class="caps">GOOGLE</span>.<span + class="caps">COM</span>”, and follow the instructions to create an administration account for your Google + applications, and after a while every email sent to your domain’s accounts will be routed to your new + Google-powered inbox. Similarly, in order to use Google Page Creator on your domain, you’re required to change + the <span class="caps">CNAME</span> record of your <span class="caps">DNS</span> to “ghs.google.com”. +</p> <blockquote> -<p>Note: in order to avoid inconveniences especially if a lot of users use your domain’s email, it is recommended that you pay attention on Google’s instructions on how to set the whole thing up. For further information refer to the official <a href="https://www.google.com/a/FAQ"><span class="caps">FAQ</span></a>. In order to be able to use Google Page Creator on your domain, you must setup an <span class="caps">URL</span> to publish your webpages: of course do <span class="caps">NOT</span> set this to “www.yourdomain.com” or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator.</p> + <p>Note: in order to avoid inconveniences especially if a lot of users use your domain’s email, it is + recommended that you pay attention on Google’s instructions on how to set the whole thing up. For further + information refer to the official <a href="https://www.google.com/a/FAQ"><span class="caps">FAQ</span></a>. In + order to be able to use Google Page Creator on your domain, you must setup an <span class="caps">URL</span> to + publish your webpages: of course do <span class="caps">NOT</span> set this to “www.yourdomain.com” + or any subdomain currently in use or your visitors will access the pages you created with Google Page Creator. + </p> </blockquote> <p>Here’s what you get:<br /> -<img src="/img/pictures/gmail-hosted/gmail.png" alt="" /> <br /> -For a bigger image click <a href="/img/pictures/gmail-hosted/gmail_full.png">here</a>. Let’s now have a look at what are the main differences from the standard Gmail.</p> + <img src="/images/pictures/gmail-hosted/gmail.png" alt="" /> <br /> + For a bigger image click <a href="/images/pictures/gmail-hosted/gmail_full.png">here</a>. Let’s now have a + look at what are the main differences from the standard Gmail. +</p> <p><u><em><strong>Include your own logo</strong></em></u><br /> -<img src="/img/pictures/gmail-hosted/logo.png" alt="" /></p> -<p>Your own logo will be displayed on the upper left corner of every page. And this is truly sweet. All you have to do to change it is uploading a 143×59 <span class="caps">PNG</span> or <span class="caps">GIF</span> image from your domain management panel (see below).</p> + <img src="/images/pictures/gmail-hosted/logo.png" alt="" /> +</p> +<p>Your own logo will be displayed on the upper left corner of every page. And this is truly sweet. All you have to do + to change it is uploading a 143×59 <span class="caps">PNG</span> or <span class="caps">GIF</span> image from + your domain management panel (see below).</p> <p><u><em><strong>Use your company name instead of Google’s</strong></em></u><br /> -<img src="/img/pictures/gmail-hosted/links.png" alt="" /></p> -<p>Besides a custom logo, it is possible to set a company name to be used instead of “Google” or “Gmail” in page titles and links. I chose “H3RALD.com Mail” and that’s displayed everywhere, including on the sign-in page.</p> + <img src="/images/pictures/gmail-hosted/links.png" alt="" /> +</p> +<p>Besides a custom logo, it is possible to set a company name to be used instead of “Google” or + “Gmail” in page titles and links. I chose “H3RALD.com Mail” and that’s displayed + everywhere, including on the sign-in page.</p> <p><u><em><strong>Control Panel</strong></em></u><br /> -All the custom settings can easily be managed through an easy-to use control panel:</p> -<p><img src="/img/pictures/gmail-hosted/options_panel.png" alt="" /></p> -<p>It’s really easy to use and has wizards to setup all the included services and options like setting up user accounts, settings etc.</p> -<p><img src="/img/pictures/gmail-hosted/domain.png" alt="" /></p> + All the custom settings can easily be managed through an easy-to use control panel:</p> +<p><img src="/images/pictures/gmail-hosted/options_panel.png" alt="" /></p> +<p>It’s really easy to use and has wizards to setup all the included services and options like setting up user + accounts, settings etc.</p> +<p><img src="/images/pictures/gmail-hosted/domain.png" alt="" /></p> <p><u><em><strong>User Accounts</strong></em></u><br /> -Through the control panel you can add new users and modifying existing user accounts to access your services. You can create administrators who are able to access administrative domain-wide settings, and standard users. Every user gets 2048MB of space for their emails, and that’s pretty generous considering that it seems that you’re able to create around 25 user accounts.</p> -<p>Already have a list of users you’re like to import? Just save them in <span class="caps">CSV</span> format and upload them.</p> -<p>Would you like to be able to contact all your users at once, e.g. via a newsletter? Google thought about this as well, and you can create your own personal newsletters which can be sent out automatically to your @yourdomain.com email accounts.</p> + Through the control panel you can add new users and modifying existing user accounts to access your services. You + can create administrators who are able to access administrative domain-wide settings, and standard users. Every user + gets 2048MB of space for their emails, and that’s pretty generous considering that it seems that you’re + able to create around 25 user accounts.</p> +<p>Already have a list of users you’re like to import? Just save them in <span class="caps">CSV</span> format and + upload them.</p> +<p>Would you like to be able to contact all your users at once, e.g. via a newsletter? Google thought about this as + well, and you can create your own personal newsletters which can be sent out automatically to your @yourdomain.com + email accounts.</p> <p><u><em><strong>Internal Messaging System</strong></em></u><br /> -But there’s more. We all know Google Talk: yes it’s nice, but probably <span class="caps">MSN</span> has more features, smileys and all the rest but it still remains a perfectly usable instant manager, which also allows file transfer. Your users can use Google Talk to communicate with each other <em>or</em> simply chat through their webmail interface, More features? Well, for example <a href="https://www.google.com/support/hosted/bin/answer.py?answer=34143">you can setup Google Talk to work on federated networks</a>.</p> + But there’s more. We all know Google Talk: yes it’s nice, but probably <span class="caps">MSN</span> has + more features, smileys and all the rest but it still remains a perfectly usable instant manager, which also allows + file transfer. Your users can use Google Talk to communicate with each other <em>or</em> simply chat through their + webmail interface, More features? Well, for example <a + href="https://www.google.com/support/hosted/bin/answer.py?answer=34143">you can setup Google Talk to work on + federated networks</a>.</p> <p><u><em><strong>Appointments/Projects management</strong></em></u><br /> -Google Calendar is an excellent online calendar, and now you can use it within your own domain as well. This means, for example, that it can be used to set your company’s appointments, reminder, project deadlines by creating an unlimited number of custom calendars to share with your collaborators.</p> + Google Calendar is an excellent online calendar, and now you can use it within your own domain as well. This means, + for example, that it can be used to set your company’s appointments, reminder, project deadlines by creating + an unlimited number of custom calendars to share with your collaborators.</p> <p><u><em><strong>Design your own site</strong></em></u><br /> -I know a lot of restaurants, shops and people who would like to have a small site for their business or activity, but they can’t develop web application themselves. So the most obvious solution is to hire some professional web developer to rip them off… erhm, to create a website for them. Now it is not necessary: by setting the correct <span class="caps">DNS</span> parameters, you can allow users to create their own webpages using a foolproof and advanced web editor powered by Google: <a href="http://pages.google.com/">Google Page Creator</a>. <br /> -I didn’t set it up on my own domain, but a preview of what you can do with Google Page Creator is available <a href="http://h3rald.googlepages.com/home">here</a>.</p> + I know a lot of restaurants, shops and people who would like to have a small site for their business or activity, + but they can’t develop web application themselves. So the most obvious solution is to hire some professional + web developer to rip them off… erhm, to create a website for them. Now it is not necessary: by setting the + correct <span class="caps">DNS</span> parameters, you can allow users to create their own webpages using a foolproof + and advanced web editor powered by Google: <a href="http://pages.google.com/">Google Page Creator</a>. <br /> + I didn’t set it up on my own domain, but a preview of what you can do with Google Page Creator is available <a + href="http://h3rald.googlepages.com/home">here</a>.</p> <h3>Scenario</h3> -<p>After considering all this, I came to the conclusion that what Google did can help a lot of people and at the same time prevent some evil webmaster to charge them hundreds of Euro (they really get away with it!) for basic “websites” with “three or more static pages”.<br /> -All you have to do is buy your own domain, and that can be as cheap as 8$ per year, the rest comes for free, from Google:</p> +<p>After considering all this, I came to the conclusion that what Google did can help a lot of people and at the same + time prevent some evil webmaster to charge them hundreds of Euro (they really get away with it!) for basic + “websites” with “three or more static pages”.<br /> + All you have to do is buy your own domain, and that can be as cheap as 8$ per year, the rest comes for free, from + Google:</p> <ul> <li>The best webmail interface you can possibly imagine</li> <li>Nearly unlimited space for everything</li>@@ -62,6 +122,10 @@ <li>Your own “corporate instant messenger”</li>
<li>Your own calendar to manage appointments, meetings etc.</li> <li>An intuitive and advanced web page creator – not like Geocities</li> </ul> -<p>All this for free. Yes, with ads (I’m not here to discuss <a href="http://www.gmail-is-too-creepy.com/">privacy concerns</a>), but after all they’re not displayed on your main site.</p> +<p>All this for free. Yes, with ads (I’m not here to discuss <a href="http://www.gmail-is-too-creepy.com/">privacy + concerns</a>), but after all they’re not displayed on your main site.</p> <p><em>What about Server Side technologies for my sites?</em></p> -<p>OK kid, now that would be a little bit too much, even if I can foresee some possible “Google Web Widgets” at some point. “Create your <em>interactive and dinamic</em> website within minutes, no programming knowledge required”… that would be great (for Google) and bad (for freelance web developers). One thing at a time, after all G(od|oogle) has the whole eternity to fulfill his Goals.</p> +<p>OK kid, now that would be a little bit too much, even if I can foresee some possible “Google Web Widgets” + at some point. “Create your <em>interactive and dinamic</em> website within minutes, no programming knowledge + required”… that would be great (for Google) and bad (for freelance web developers). One thing at a time, + after all G(od|oogle) has the whole eternity to fulfill his Goals.</p>
@@ -4,35 +4,71 @@ content-type: article
timestamp: 1220401860 tags: "browsers|review|google" ----- -<p style="float:left;"><img src="/files/google-chrome/chrome-logo.jpg" alt="" /></p> -<p>It looks like there’s a <a href="http://www.google.com/chrome">new open source browser</a> in town. As usual, nearly everything about it <a href="http://blogoscoped.com/archive/2008-09-01-n47.html">leaked</a> <a href="http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/">before</a> its <a href="http://www.google.com/chrome">release</a>. Every blog that matters is talking about it, so if you didn’t hear anything about it, you’d better take a look yourself. Don’t be fooled by the usual <a href="http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/">senseless ravings</a> of some weird, overly-hyped blogger though: a <em>browser</em> just came out, nothing more and nothing less. It’s not the end of Windows, it’s not the end of the Internet, it’s not the end of the world as we know it. It’s just a new player in the Browser Wars.</p> -<p>I particularly recommend reading the official <a href="http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover#PPP1,M1">Google Comic Book</a> about Chrome, however I included some of the most interesting parts of it in this article. It’s a nice 40-page comic booklet explaining how the browser works in a friendly way… I found it quite amusing and an interesting way to <del>leak</del> distribute info on a new project.</p> +<p style="float:left;"><img src="/images/google-chrome/chrome-logo.jpg" alt="" /></p> +<p>It looks like there’s a <a href="http://www.google.com/chrome">new open source browser</a> in town. As usual, + nearly everything about it <a href="http://blogoscoped.com/archive/2008-09-01-n47.html">leaked</a> <a + href="http://www.techcrunch.com/2008/09/01/first-public-screen-captures-of-google-chrome/">before</a> its <a + href="http://www.google.com/chrome">release</a>. Every blog that matters is talking about it, so if you + didn’t hear anything about it, you’d better take a look yourself. Don’t be fooled by the usual <a + href="http://www.techcrunch.com/2008/09/01/meet-chrome-googles-windows-killer/">senseless ravings</a> of some + weird, overly-hyped blogger though: a <em>browser</em> just came out, nothing more and nothing less. It’s not + the end of Windows, it’s not the end of the Internet, it’s not the end of the world as we know it. + It’s just a new player in the Browser Wars.</p> +<p>I particularly recommend reading the official <a + href="http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover#PPP1,M1">Google Comic Book</a> about + Chrome, however I included some of the most interesting parts of it in this article. It’s a nice 40-page comic + booklet explaining how the browser works in a friendly way… I found it quite amusing and an interesting way to + <del>leak</del> distribute info on a new project.</p> <h3>Getting the damn thing</h3> -<p>You can freely download Google Chromm from <a href="http://www.google.com/chrome">here</a>. You’ll get a tiny 474KB setup file which installs the browser automatically. When I say automatically I mean automatically: you double click it, and it won’t ask <em>anything</em>: it will just install it in Program Files by itself. Idiot proof. Clever. Some people may like it, I damn hated it.</p> -<p>I downloaded it and installed it fine from home, on Vista, and it was blazing fast (on <em>Vista_, imagine!). I tried to do the same thing from work and I couldn’t. The damn installer is supposed to pick up the proxy settings from your default browser, but if the proxy uses authentication (like 99% of corporate proxies) it simply won’t work. As far as I know, there’s <a href="http://groups.google.com/group/google-chrome-help-troubleshooting/browse">no way around this</a></em>thread/thread/4c07ec5124f2eebc.</p> -<p>This is the reason why this article won’t have any chrome screenshots… to protest against Google’s stupid way of doing things “too user-friendly”.</p> -<p><strong>Update 1:</strong> Actually, it is now possible to download the full Chrome setup from <a href="http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe">here</a> (Thanks <a href="http://www.thecrazyaustralian.com/installing-google-chrome-behind-a-proxy/">Crazy Australian</a>).</p> -<p><strong>Update 2:</strong> After installing Chrome, if your company uses an automatic proxy script you won’t be able to browser web sites using Chrome. If that’s your case, make sure you change IE’s proxy settings by specifying your proxy address and port explicitly.</p> +<p>You can freely download Google Chromm from <a href="http://www.google.com/chrome">here</a>. You’ll get a tiny + 474KB setup file which installs the browser automatically. When I say automatically I mean automatically: you double + click it, and it won’t ask <em>anything</em>: it will just install it in Program Files by itself. Idiot proof. + Clever. Some people may like it, I damn hated it.</p> +<p>I downloaded it and installed it fine from home, on Vista, and it was blazing fast (on <em>Vista_, imagine!). I tried + to do the same thing from work and I couldn’t. The damn installer is supposed to pick up the proxy + settings from your default browser, but if the proxy uses authentication (like 99% of corporate proxies) it + simply won’t work. As far as I know, there’s <a + href="http://groups.google.com/group/google-chrome-help-troubleshooting/browse">no way around + this</a></em>thread/thread/4c07ec5124f2eebc.</p> +<p>This is the reason why this article won’t have any chrome screenshots… to protest against Google’s + stupid way of doing things “too user-friendly”.</p> +<p><strong>Update 1:</strong> Actually, it is now possible to download the full Chrome setup from <a + href="http://cache.pack.google.com/chrome/install/149.27/chrome_installer.exe">here</a> (Thanks <a + href="http://www.thecrazyaustralian.com/installing-google-chrome-behind-a-proxy/">Crazy Australian</a>).</p> +<p><strong>Update 2:</strong> After installing Chrome, if your company uses an automatic proxy script you won’t be + able to browser web sites using Chrome. If that’s your case, make sure you change IE’s proxy settings by + specifying your proxy address and port explicitly.</p> <h3>How Google “re-invented” the browser</h3> <p>Why did Google bother? Officially because…</p> -<p><em>“[…] we believe we can add value for users and, at the same time, help drive innovation on the web.”</em><br /> -(from <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">Google Blog</a>)</p> -<p>In practice, a Google-branded browser makes sense especially because of the services offered by the search giant right now: nearly <em>every kind</em> of web application, from mail clients to <span class="caps">RSS</span> readers.</p> -<p>The philosophy of Google Chrome is fairly simple: the Web has changed since the nineties, we now have full-fledged applications instead of crappy hypertexts with animated GIFs, therefore browsers must change, too.</p> -<p>Every major browser has a fairly long development history. Think of Firefox: version 3? Not really: try adding up at least 7 versions of Netscape before that. Internet Explorer <strong>8</strong>, Opera <strong>9.5</strong>, …<br /> -Safari is probably the newest of the lot, but still not quite right.</p> -<p>All major browsers <em>evolved</em> through the years, but they never really changed: so why not to start from scratch?</p> +<p><em>“[…] we believe we can add value for users and, at the same time, help drive innovation on the + web.”</em><br /> + (from <a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html">Google Blog</a>)</p> +<p>In practice, a Google-branded browser makes sense especially because of the services offered by the search giant + right now: nearly <em>every kind</em> of web application, from mail clients to <span class="caps">RSS</span> + readers.</p> +<p>The philosophy of Google Chrome is fairly simple: the Web has changed since the nineties, we now have full-fledged + applications instead of crappy hypertexts with animated GIFs, therefore browsers must change, too.</p> +<p>Every major browser has a fairly long development history. Think of Firefox: version 3? Not really: try adding up at + least 7 versions of Netscape before that. Internet Explorer <strong>8</strong>, Opera <strong>9.5</strong>, + …<br /> + Safari is probably the newest of the lot, but still not quite right.</p> +<p>All major browsers <em>evolved</em> through the years, but they never really changed: so why not to start from + scratch?</p> <p>Starting from scratch has a lot of advantages:</p> <ul> <li>You can learn from other people’s mistakes, and try to fix them</li> <li>You can <em>get things right</em> from the very start</li> <li>You do not have to worry about breaking compatibility with previous versions</li> - <li>People won’t have extremely high expectations, and they’ll be prepared for a relatively unstable product</li> + <li>People won’t have extremely high expectations, and they’ll be prepared for a relatively unstable + product</li> </ul> -<p>Obviously building a browser from the ground up is not a weekend project, but things changed since the nineties and starting fresh does not necessarily means re-inventing the wheel!</p> +<p>Obviously building a browser from the ground up is not a weekend project, but things changed since the nineties and + starting fresh does not necessarily means re-inventing the wheel!</p> <h3>An “old” Rendering Engine</h3> -<p>Let’s just say that the main work was already done for Google by the <a href="http://webkit.org">WebKit</a> guys. The rendering engine which now powers Safari, the Nokia Series 60 browser, Gnome’s Epiphany, Adobe <span class="caps">AIR</span> has been picked by the Google guys for Chrome.</p> -<p style="float:right;"><img src="/files/google-chrome/chrome-javascript.gif" alt="" /></p> +<p>Let’s just say that the main work was already done for Google by the <a href="http://webkit.org">WebKit</a> + guys. The rendering engine which now powers Safari, the Nokia Series 60 browser, Gnome’s Epiphany, Adobe <span + class="caps">AIR</span> has been picked by the Google guys for Chrome.</p> +<p style="float:right;"><img src="/images/google-chrome/chrome-javascript.gif" alt="" /></p> <p>This is a fairly obvious choice, if you ask me. Why?</p> <ul> <li>Presto (Opera’s engine) is proprietary</li>@@ -40,27 +76,60 @@ <li>Trident (IE’s engine) is proprietary, and it sucks</li>
<li>Gecko (Mozilla’s engine) is open source, but a bit bulky</li> <li>WebKit is open source, and arguably the fastest rendering engine to date</li> </ul> -<p>The rendering engine, after all, may be considered one of the most important parts of the browser: it’s responsible of what users see, after all. <br /> -Google made the right choice, in my opinion: WebKit is also the most “embeddable” and lightweight engine available, and it is also used on the Android platform for this very reason.</p> +<p>The rendering engine, after all, may be considered one of the most important parts of the browser: it’s + responsible of what users see, after all. <br /> + Google made the right choice, in my opinion: WebKit is also the most “embeddable” and lightweight engine + available, and it is also used on the Android platform for this very reason.</p> <h3>A “new” Javascript</h3> -<p>Mozilla has a <a href="http:http://www.mozilla.org/js/spidermonkey/Javascript">fast</a> engine, which will soon become <a href="http://ejohn.org/blog/tracemonkey/">much faster</a>. WebKit has a <a href="http://webkit.org/projects/javascript/">blazing fast</a> Javascript engine too, don’t forget. So why Google didn’t just use that?</p> -<p>…Because they wanted something <em>much</em> faster than that, in their own way (as someone already <a href="http://null-logic.net/blog/2008/09/02/javascript-performance-comparison-with-chrome/">pointed out</a>).</p> -<p>Meet <strong>V8</strong>, Chrome’s very own Javascript Virtual Machine. When reading the Chrome Comic, I was particularly impressed of two improvements introduced by this new javascript VM:</p> -<p style="float:right;"><img src="/files/google-chrome/chrome-javascript-gc.gif" alt="" /></p> +<p>Mozilla has a <a href="http:http://www.mozilla.org/js/spidermonkey/Javascript">fast</a> engine, which will soon + become <a href="http://ejohn.org/blog/tracemonkey/">much faster</a>. WebKit has a <a + href="http://webkit.org/projects/javascript/">blazing fast</a> Javascript engine too, don’t forget. So why + Google didn’t just use that?</p> +<p>…Because they wanted something <em>much</em> faster than that, in their own way (as someone already <a + href="http://null-logic.net/blog/2008/09/02/javascript-performance-comparison-with-chrome/">pointed out</a>). +</p> +<p>Meet <strong>V8</strong>, Chrome’s very own Javascript Virtual Machine. When reading the Chrome Comic, I was + particularly impressed of two improvements introduced by this new javascript VM:</p> +<p style="float:right;"><img src="/images/google-chrome/chrome-javascript-gc.gif" alt="" /></p> <ul> - <li>It actually compiles Javascript to machine code via a Just-In-Time compiler (<span class="caps">JIT</span>). This means that whenever you refresh a page containing Javascript the browser won’t re-interpret the whole script, but it will simply run the compiled version of it which was generated the first time the page was loaded. New concept? Not really, Mozilla is going <em>exactly</em> in the same direction with their own engine, and <span class="caps">JIT</span> compilation will be added as of Firefox 3.1.</li> - <li>V8’s incremental garbage collection looks like a much better alternative to the current conservative garbage collection methods used for Javascript. Because of V8’s new concept of Hidden Class Transitions, V8 knows <em>exactly</em> when something is no longer needed and thus it is able to garbace-collect it more effectively.</li> + <li>It actually compiles Javascript to machine code via a Just-In-Time compiler (<span class="caps">JIT</span>). + This means that whenever you refresh a page containing Javascript the browser won’t re-interpret the whole + script, but it will simply run the compiled version of it which was generated the first time the page was + loaded. New concept? Not really, Mozilla is going <em>exactly</em> in the same direction with their own engine, + and <span class="caps">JIT</span> compilation will be added as of Firefox 3.1.</li> + <li>V8’s incremental garbage collection looks like a much better alternative to the current conservative + garbage collection methods used for Javascript. Because of V8’s new concept of Hidden Class Transitions, + V8 knows <em>exactly</em> when something is no longer needed and thus it is able to garbace-collect it more + effectively.</li> </ul> -<p>While there has been some initial <a href="http://nexus.zteo.com/2008/09/01/google-chrome-an-index-of-what-developers-need-to-know-good-and-bad/">skepticism</a> on this new Javascript implementation, it looks like Google did it right. If you don’t believe it you can <a href="http://code.google.com/apis/v8/intro.html">download</a> V8’s C++ code and try it out yourself.</p> +<p>While there has been some initial <a + href="http://nexus.zteo.com/2008/09/01/google-chrome-an-index-of-what-developers-need-to-know-good-and-bad/">skepticism</a> + on this new Javascript implementation, it looks like Google did it right. If you don’t believe it you can <a + href="http://code.google.com/apis/v8/intro.html">download</a> V8’s C++ code and try it out yourself.</p> <h3>One Process per Tab</h3> -<p>Google Chrome is the first multi-process browser. The idea is that <em>each tab</em> (because you can’t do browsers without tabs, these days, right?) has its own phisical process and it is therefore independent from each other.</p> -<p style="float:right;"><img src="/files/google-chrome/chrome-processes.gif" alt="" /></p> -<p>Hang on, isn’t that what IE 5 did? A new instance of the browser for each window? No, not quite: there’s a single instance of the browser and <em>multiple</em> tab instances. Each tab is independent in the sense that it has its own address bar, but it’s just a tab, at the end of the day.</p> -<p>This is what Internet Explorer could have done, <em>before</em> Internet Explorer 7, as an answer to the traditional concept of tabs promoted by Mozilla and Opera.</p> -<p>Actually, it turns out that <a href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx">this is <em>exactly</em> what’s planned for Internet Explorer 8</a>, as <a href="http://www.sriramkrishnan.com/blog/2008/09/thoughts-on-new-browser-wars.html">someone</a> already pointed out!</p> -<p>Additionally, Google thought of building in a mini task manager to let users monitor the <span class="caps">CPU</span> and memory usage of each tab. This is interesting, but it has a few implications discussed later on in this article.</p> -<p>What’s truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course grows according to the site it loads. You can see all this in the task manager, which also picks up similar stats for any other browser running at the same time on your machine. <br /> -This was another clever move by Google: by looking at their own task manager, and running more than one browser together, you have everything you need to instantly compare browser performance (thus discovering that Chrome does an outstanding job, it seems).</p> +<p>Google Chrome is the first multi-process browser. The idea is that <em>each tab</em> (because you can’t do + browsers without tabs, these days, right?) has its own phisical process and it is therefore independent from each + other.</p> +<p style="float:right;"><img src="/images/google-chrome/chrome-processes.gif" alt="" /></p> +<p>Hang on, isn’t that what IE 5 did? A new instance of the browser for each window? No, not quite: there’s + a single instance of the browser and <em>multiple</em> tab instances. Each tab is independent in the sense that it + has its own address bar, but it’s just a tab, at the end of the day.</p> +<p>This is what Internet Explorer could have done, <em>before</em> Internet Explorer 7, as an answer to the traditional + concept of tabs promoted by Mozilla and Opera.</p> +<p>Actually, it turns out that <a + href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx">this is <em>exactly</em> + what’s planned for Internet Explorer 8</a>, as <a + href="http://www.sriramkrishnan.com/blog/2008/09/thoughts-on-new-browser-wars.html">someone</a> already pointed + out!</p> +<p>Additionally, Google thought of building in a mini task manager to let users monitor the <span + class="caps">CPU</span> and memory usage of each tab. This is interesting, but it has a few implications + discussed later on in this article.</p> +<p>What’s truly remarkable about this is that each tab seems to have an initial overhead of 1-2KB, which of course + grows according to the site it loads. You can see all this in the task manager, which also picks up similar stats + for any other browser running at the same time on your machine. <br /> + This was another clever move by Google: by looking at their own task manager, and running more than one browser + together, you have everything you need to instantly compare browser performance (thus discovering that Chrome does + an outstanding job, it seems).</p> <p>What’s also remarkable about Chrome’s tabs is the way you can interact with them:</p> <ul> <li>You can move them around smoohtly, exactly like with Safari</li>@@ -68,98 +137,157 @@ <li>You can detach them by drag and drop</li>
<li>You can re-attach them by drag and drop (which is truly awesome!)</li> </ul> <h3><del>AwesomeBar</del> <em>OmniBox</em> and <del>Speed Dial</del> <em>New Tab Page</em></h3> -<p>Did you like Mozilla’s AwesomeBar? Well, I personally did, others didn’t so much. Meet OmniBox™ Google’s very own, semi-sentient address bar which really understands you.</p> +<p>Did you like Mozilla’s AwesomeBar? Well, I personally did, others didn’t so much. Meet OmniBox™ + Google’s very own, semi-sentient address bar which really understands you.</p> <p>Here’s what you can do with it:</p> <ul> <li>Type in URLs and view web sites (it would be damn funny if it couldn’t do that)</li> <li>Get <del>extra Google crap</del> useful suggestions while typing. This includes, but it is not limited to: - <ul> - <li>Pages you visited</li> - <li>Bookmarks</li> - <li>Popular pages (guess who decides that…)</li> - </ul></li> - <li>Custom searches: search <span class="caps">IMDB</span>, Wikipedia, Amazon and google itself with a few clicks</li> + <ul> + <li>Pages you visited</li> + <li>Bookmarks</li> + <li>Popular pages (guess who decides that…)</li> + </ul> + </li> + <li>Custom searches: search <span class="caps">IMDB</span>, Wikipedia, Amazon and google itself with a few clicks + </li> </ul> -<p><img src="/files/google-chrome/chrome-bar.gif" alt="" /></p> -<p>Unlike Firefox’s AwesomeBar, Google’s OmniBox seems more “evolved”: it doesn’t get too much in your way, it lets you go where you want to go, and it’s smart about searching. Apparently Mozilla is already planning to remove the search bar completely and incorporate it in the AwesomeBar… but Google released it first, sorry guys.</p> -<p>The other handy thing they <del>stole</del> kindly borrowed from Opera is the <em>New Tab Page</em>, basically like Opera’s Speed Dial, but with two interesting things:</p> +<p><img src="/images/google-chrome/chrome-bar.gif" alt="" /></p> +<p>Unlike Firefox’s AwesomeBar, Google’s OmniBox seems more “evolved”: it doesn’t get too + much in your way, it lets you go where you want to go, and it’s smart about searching. Apparently Mozilla is + already planning to remove the search bar completely and incorporate it in the AwesomeBar… but Google released + it first, sorry guys.</p> +<p>The other handy thing they <del>stole</del> kindly borrowed from Opera is the <em>New Tab Page</em>, basically like + Opera’s Speed Dial, but with two interesting things:</p> <ul> <li>It displays the nine <em>most visited</em> pages: you don’t have to configure it!</li> <li>It displays search boxes for the most visited sites where you searched something on.</li> </ul> -<p>While I really like how this works (it requires no configuration whatsoever), I kinda miss dragging my favorite pages in the New Tab Page. If you come from Opera, you’ll miss this too: the pages I have in my speed dial are <span class="caps">NOT</span> necessarily the pages I visited the most!</p> +<p>While I really like how this works (it requires no configuration whatsoever), I kinda miss dragging my favorite pages + in the New Tab Page. If you come from Opera, you’ll miss this too: the pages I have in my speed dial are <span + class="caps">NOT</span> necessarily the pages I visited the most!</p> <p>I guess I’ll get used to it, though…</p> <h3>Relax, it’s Google!</h3> -<p>Google is not Evil™. Google is good to everyone, from their own employees to developers and end users: and the funniest part of this whole thing is that everything they make <em>looks</em> good for you. You have absolutely no reason to fear Google.</p> -<p>They did it again: they apparently released a new browser which definitely looks inherently more secure than competitors. <br /> -Here’s why:</p> +<p>Google is not Evil™. Google is good to everyone, from their own employees to developers and end users: and the + funniest part of this whole thing is that everything they make <em>looks</em> good for you. You have absolutely no + reason to fear Google.</p> +<p>They did it again: they apparently released a new browser which definitely looks inherently more secure than + competitors. <br /> + Here’s why:</p> <ul> - <li>It has an <em>Incognito</em> mode, which lets you browse everything you want without logging anything anywhere.</li> - <li>It confines popups to the tab they belong, minimized. You can then seletively decide to drag them out and promote them to their own window.</li> - <li>Each tab is sandboxed: i.e., it has no rights to write anything to your PC. Absolutely no chance. When plugins for Java and Flash are used, however, this doesn’t apply.</li> - <li>Chrome continuously downloads lists of malicious sites, so that you’re protected against phishing in real time.</li> + <li>It has an <em>Incognito</em> mode, which lets you browse everything you want without logging anything anywhere. + </li> + <li>It confines popups to the tab they belong, minimized. You can then seletively decide to drag them out and + promote them to their own window.</li> + <li>Each tab is sandboxed: i.e., it has no rights to write anything to your PC. Absolutely no chance. When plugins + for Java and Flash are used, however, this doesn’t apply.</li> + <li>Chrome continuously downloads lists of malicious sites, so that you’re protected against phishing in real + time.</li> </ul> -<p style="float:left;"><img src="/files/google-chrome/chrome-blame.gif" alt="" /></p> -<p>Now, if everything goes wrong, you know it’s definitely <em>someone else who did it</em>. If you read the comic book between the lines, you’ll notice a not-so-subtle message to the end users:</p> +<p style="float:left;"><img src="/images/google-chrome/chrome-blame.gif" alt="" /></p> +<p>Now, if everything goes wrong, you know it’s definitely <em>someone else who did it</em>. If you read the comic + book between the lines, you’ll notice a not-so-subtle message to the end users:</p> <ul> - <li>The browser is sandboxed, so if anything goes wrong, blame others (Adobe for Flash, Sun for Java, Microsoft for some other crap)</li> - <li>You can monitor the resource consumption of each tab, <em>ergo</em> what <em>each website</em> uses. This means that if a site is slow is definitely the web developer’s fault.</li> + <li>The browser is sandboxed, so if anything goes wrong, blame others (Adobe for Flash, Sun for Java, Microsoft for + some other crap)</li> + <li>You can monitor the resource consumption of each tab, <em>ergo</em> what <em>each website</em> uses. This means + that if a site is slow is definitely the web developer’s fault.</li> </ul> -<p>This is basically what <a href="http://ejohn.org/blog/google-chrome-process-manager/">John Resig</a> immediately pointed out when the comic came out.</p> +<p>This is basically what <a href="http://ejohn.org/blog/google-chrome-process-manager/">John Resig</a> immediately + pointed out when the comic came out.</p> <h3>How it feels</h3> -<p>Google Chrome is clearly a very nice product to use. It’s as intuitive as IE for the average Windows user, it has the best of Firefox and Opera features and it’s even more sleek than Safari. The UI, in my opinion, is a true masterpiece and feels well though out.</p> -<p>Everything is aimed to be intuitive and does not get in your way: it just works. You want to download a file? You can just do it, without worrying about where to save it: it will appear in a “download bucket” at the bottom of your tabs, and you can just drag and drop what you downloaded anywhere you like, if you need to.<br /> -Why nobody thought of this before?</p> -<p>Even the program settings are simple to understand. The Options dialog is divided in “Basics”, “Minor Tweaks” and “Under the Hood”. The idea is that anyone can understand the Basics, some people may tweak a bit more, and only geeks may want to go beyond that. This is particularly evident in the Italian translation (it comes bundled with 40 localizations, by the way), where they translated “Under the Hood” with “Roba da smanettoni” which means something like “Stuff for people who fiddle with PCs”. I personally found this translation a bit irritating, but anyway…</p> +<p>Google Chrome is clearly a very nice product to use. It’s as intuitive as IE for the average Windows user, it + has the best of Firefox and Opera features and it’s even more sleek than Safari. The UI, in my opinion, is a + true masterpiece and feels well though out.</p> +<p>Everything is aimed to be intuitive and does not get in your way: it just works. You want to download a file? You can + just do it, without worrying about where to save it: it will appear in a “download bucket” at the bottom + of your tabs, and you can just drag and drop what you downloaded anywhere you like, if you need to.<br /> + Why nobody thought of this before?</p> +<p>Even the program settings are simple to understand. The Options dialog is divided in “Basics”, + “Minor Tweaks” and “Under the Hood”. The idea is that anyone can understand the Basics, some + people may tweak a bit more, and only geeks may want to go beyond that. This is particularly evident in the Italian + translation (it comes bundled with 40 localizations, by the way), where they translated “Under the Hood” + with “Roba da smanettoni” which means something like “Stuff for people who fiddle with PCs”. + I personally found this translation a bit irritating, but anyway…</p> <h3>Media Coverage and Target Audience</h3> -<p>The overall impression is that Google wanted to target end users with this browser, but also appeal geeks, too. This makes sense from a marketing point of view. While 90% of geeks switched from IE to another browser, ordinary people are still stuck with IE. Why? Because alternative browsers have gained a reputation of being geek-friendly (which, by popular belief, does not mean user-friendly).</p> +<p>The overall impression is that Google wanted to target end users with this browser, but also appeal geeks, too. This + makes sense from a marketing point of view. While 90% of geeks switched from IE to another browser, ordinary people + are still stuck with IE. Why? Because alternative browsers have gained a reputation of being geek-friendly (which, + by popular belief, does not mean user-friendly).</p> <p>Google’s marketing strategy is quite clear, and it doesn’t seem to be failing on any point:</p> <ul> <li>They targeted Windows first, because that’s what the bulk of IE aficionados uses.</li> - <li>They did their best to make it as user-friendly as possible: the sleek <span class="caps">GUI</span>, the comic book, etc.</li> - <li>They spread the world like crazy: every blog is talking about it, but also major news sites like <span class="caps">BBC</span> and <span class="caps">CNN</span>. When I got to work, a collegue of mine asked me if I tried the new Google browser and if I read the comic. She heard it at the radio. Here <em>in Italy</em>!</li> - <li>At the same time, they made the whole thing open source, released APIs and emphasized this, so that “computer fiddlers” couldn’t resist.</li> + <li>They did their best to make it as user-friendly as possible: the sleek <span class="caps">GUI</span>, the comic + book, etc.</li> + <li>They spread the world like crazy: every blog is talking about it, but also major news sites like <span + class="caps">BBC</span> and <span class="caps">CNN</span>. When I got to work, a collegue of mine asked me + if I tried the new Google browser and if I read the comic. She heard it at the radio. Here <em>in Italy</em>! + </li> + <li>At the same time, they made the whole thing open source, released APIs and emphasized this, so that + “computer fiddlers” couldn’t resist.</li> </ul> -<p>To me, it looks like Google Chrome stands a good chance to succeed where others have failed: drive most of the Internet population away from Internet Explorer.</p> +<p>To me, it looks like Google Chrome stands a good chance to succeed where others have failed: drive most of the + Internet population away from Internet Explorer.</p> <h3>Open Source, testing and quality</h3> -<p>Google is well known for its massive infrastructure. Moreover, Google is the only “entity” (let’s call it that way, shall we) who <em>knows</em> and <em>visited</em> almost every web page on the Internet. If something is not “on Google”, it may well not exist at all: this is not strictly true, but it’s the user perspective and ad the end of the day that’s all that matters.<br /> -Google, as a consequence, has virtually unlimited resources (compared to any other possible competitor) and virtually unlimited knowledge of the Internet, which makes automated testing no more than a joke.</p> +<p>Google is well known for its massive infrastructure. Moreover, Google is the only “entity” (let’s + call it that way, shall we) who <em>knows</em> and <em>visited</em> almost every web page on the Internet. If + something is not “on Google”, it may well not exist at all: this is not strictly true, but it’s + the user perspective and ad the end of the day that’s all that matters.<br /> + Google, as a consequence, has virtually unlimited resources (compared to any other possible competitor) and + virtually unlimited knowledge of the Internet, which makes automated testing no more than a joke.</p> <p>From the Google Chrome Comic:</p> -<p><em>“Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web pages”</em></p> +<p><em>“Within 20-30 minutres of each new browser build, we can teswt it on tens of thousands of different web + pages”</em></p> <p>…and that’s certainly not an understatemend: you can believe that.</p> -<p><img src="/files/google-chrome/chrome-tests.gif" alt="" /></p> -<p>Google seems very concerned of building a “rock-solid” browser rather than being the coolest guy in town, and that’s a good sign. Google is <em>smart</em>, remember?</p> -<p>As if it weren’t enough, the entire thing (the rendering engine, the javascript implementation and the whole code of the broswer) is 100% open source which means, in a nutshell:</p> +<p><img src="/images/google-chrome/chrome-tests.gif" alt="" /></p> +<p>Google seems very concerned of building a “rock-solid” browser rather than being the coolest guy in town, + and that’s a good sign. Google is <em>smart</em>, remember?</p> +<p>As if it weren’t enough, the entire thing (the rendering engine, the javascript implementation and the whole + code of the broswer) is 100% open source which means, in a nutshell:</p> <ul> <li>Free testers</li> <li>Free developers</li> <li>Good publicity</li> </ul> -<p><img src="/files/google-chrome/chrome-os.gif" alt="" /></p> -<p>If things go as planned, Chrome may become the most widely tested piece of software in the world. Let’s just see how the community takes this.</p> +<p><img src="/images/google-chrome/chrome-os.gif" alt="" /></p> +<p>If things go as planned, Chrome may become the most widely tested piece of software in the world. Let’s just + see how the community takes this.</p> <h3>Why it matters</h3> -<p>Everyone seems to have gone crazy about Chrome, even long before it was made available. Why does it matter, anyway? Isn’t it just a browser, at the end of the day? Well, yes, but:</p> +<p>Everyone seems to have gone crazy about Chrome, even long before it was made available. Why does it matter, anyway? + Isn’t it just a browser, at the end of the day? Well, yes, but:</p> <ul> - <li>It’s 100% open source. If you like something of it, you can get it, modify it, bundle it in another project and redistribute it. Give it a few weeks and extensions which use some of Google’s new <span class="caps">API</span> will flock to the ’fox like crazy.</li> - <li>It’s small, fast and very promising. Sure, it’s not perfect, but <span class="caps">YOU</span> can help improving it. Get it?</li> + <li>It’s 100% open source. If you like something of it, you can get it, modify it, bundle it in another + project and redistribute it. Give it a few weeks and extensions which use some of Google’s new <span + class="caps">API</span> will flock to the ’fox like crazy.</li> + <li>It’s small, fast and very promising. Sure, it’s not perfect, but <span class="caps">YOU</span> can + help improving it. Get it?</li> <li>It’s on Windows, so it will reach the majority of Internet users… in theory.</li> </ul> -<p>Last but not least, it comes bundled with <a href="http://gears.google.com/">Gears</a>, i.e. what Google would like you to use for RIAs. That’s perhaps the only “subliminal” message they are trying to send to their users (for now, at least).<br /> -As a matter of fact, nothing prevents them from using Chrome as a way to promote their technology and products. But at the same time nothing prevents a random developer to just fork the project and distribute a <em>neutral</em> and unbranded version of Chrome.</p> +<p>Last but not least, it comes bundled with <a href="http://gears.google.com/">Gears</a>, i.e. what Google would like + you to use for RIAs. That’s perhaps the only “subliminal” message they are trying to send to their + users (for now, at least).<br /> + As a matter of fact, nothing prevents them from using Chrome as a way to promote their technology and products. But + at the same time nothing prevents a random developer to just fork the project and distribute a <em>neutral</em> and + unbranded version of Chrome.</p> <p>See? Google is not evil at all, it’s just smarter than others.</p> <h3>The Bottom Line</h3> <p>Google showed us once more that their “innovation” can be summarized with the following:</p> <p><em><strong>“Do not invent new things, just make them better”</strong></em></p> -<p>They didn’t invent Internet search: they just made it better and smarted. The same philosophy applies to Chrome, too. Some examples? Sure:</p> +<p>They didn’t invent Internet search: they just made it better and smarted. The same philosophy applies to + Chrome, too. Some examples? Sure:</p> <ul> <li>They didn’t create a new rendering engine, they used an existing one</li> - <li>They analyzed Safari’s neat <span class="caps">GUI</span> tricks and implemented something even better.</li> + <li>They analyzed Safari’s neat <span class="caps">GUI</span> tricks and implemented something even better. + </li> <li>They added an IE8-like domain highlight in the <span class="caps">URL</span>.</li> <li>They got the Firefox’s AwesomeBar and improved it.</li> <li>They got Opera’s Speed Dial and improved it.</li> <li>They got IE8’s one-process-per-tab architecture and improved it.</li> - <li>They didn’t think of a Javascript <span class="caps">JIT</span> first, they just made it widely-available first.</li> - <li>They didn’t think about merging the address bar with the search bar, Mozilla announced it first, but Google released it before they did.</li> - <li>Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it’s only out for developers…</li> + <li>They didn’t think of a Javascript <span class="caps">JIT</span> first, they just made it widely-available + first.</li> + <li>They didn’t think about merging the address bar with the search bar, Mozilla announced it first, but + Google released it before they did.</li> + <li>Safari 4 allows users to create shortcuts for their favorite web apps, but unfortunately it’s only out for + developers…</li> </ul> <p>Google did it, again. Exactly as planned.</p>
@@ -6,46 +6,80 @@ timestamp: 1285243465
tags: "website|webdevelopment" ----- - <section class="section"> -<p>Just <a href="/articles/take-back-your-site-with-nanoc">over a year ago</a> I released the 8th version of this web site. The biggest change then was abandoning the Rails-powered <a href="http://wiki.github.com/fdv/typo/">Typo</a> blogging platform in favor of <a href="http://nanoc.stoneship.org/">nanoc</a>, arguably the most versatile static site generator out there.</p> -<p>A year later, I am still very happy with nanoc, hence there’s no need for another major release. Nonetheless, I decided to improve the site’s overall design and image, making it (hopefully) easier to use and more pleasant to the eye.</p> -<p>I always had a problem finding the right theme for my web site. I always wanted to find something related to the word <em>herald</em>, so in the last release I went for a herandry-oriented theme. For this release, I decided to go for a newspaper-style layout: after all, the word <em>herald</em> is often used in newspaper titles, and I picked the name “h3rald” after the <a href="http://global.nytimes.com/?iht">International Herald Tribune</a>.</p> -<p>Also, I was desperate to try out the new features offered by HTML5 and CSS3, and a newspaper layout seemed a good excuse to use columns.</p> <section class="section"> -<header><h1 id="h_1" class="toc">Browser Compatibility</h1></header> -<p>Although I shouldn’t really say this, the site is meant to be viewed with a WebKit-based browser, really. It works in other (modern) browsers (read: no IE6), and it degrades more or less gracefully if a particular feature is not supported.</p> -<p>That being said:</p> -<ul> - <li>IE7 and IE8 just barely render it (Javascript is used to “patch” the <span class="caps">DOM</span> with the new HTML5 elements)</li> - <li>Firefox 3+ renders pretty much everything right.</li> - <li>Safari and Chrome render the site as it is actually meant to be rendered</li> -</ul> -<p>Nobody ever died from not being able to see CSS3 rounded corners anyhow. The most important thing about this site is its content, and I made sure that whatever browser you’re using you can still read it.</p> + <p>Just <a href="/articles/take-back-your-site-with-nanoc">over a year ago</a> I released the 8th version of this + web site. The biggest change then was abandoning the Rails-powered <a + href="http://wiki.github.com/fdv/typo/">Typo</a> blogging platform in favor of <a + href="http://nanoc.stoneship.org/">nanoc</a>, arguably the most versatile static site generator out there. + </p> + <p>A year later, I am still very happy with nanoc, hence there’s no need for another major release. + Nonetheless, I decided to improve the site’s overall design and image, making it (hopefully) easier to use + and more pleasant to the eye.</p> + <p>I always had a problem finding the right theme for my web site. I always wanted to find something related to the + word <em>herald</em>, so in the last release I went for a herandry-oriented theme. For this release, I decided + to go for a newspaper-style layout: after all, the word <em>herald</em> is often used in newspaper titles, and I + picked the name “h3rald” after the <a href="http://global.nytimes.com/?iht">International Herald + Tribune</a>.</p> + <p>Also, I was desperate to try out the new features offered by HTML5 and CSS3, and a newspaper layout seemed a good + excuse to use columns.</p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">Browser Compatibility</h1> + </header> + <p>Although I shouldn’t really say this, the site is meant to be viewed with a WebKit-based browser, + really. It works in other (modern) browsers (read: no IE6), and it degrades more or less gracefully if a + particular feature is not supported.</p> + <p>That being said:</p> + <ul> + <li>IE7 and IE8 just barely render it (Javascript is used to “patch” the <span + class="caps">DOM</span> with the new HTML5 elements)</li> + <li>Firefox 3+ renders pretty much everything right.</li> + <li>Safari and Chrome render the site as it is actually meant to be rendered</li> + </ul> + <p>Nobody ever died from not being able to see CSS3 rounded corners anyhow. The most important thing about this + site is its content, and I made sure that whatever browser you’re using you can still read it.</p> -</section> -<section class="section"> -<header><h1 id="h_2" class="toc">Columns and hyphenation</h1></header> -<p>As I previously stated, I couldn’t wait to try out CSS3 columns so I kinda went crazy on the home page, but just there. Some may argue that they are not suitable for web use of course, but I think they contribute to give the site layout a unique feeling.</p> -<p>The problem with having columns is of course text alignment: justified text looks good, but unless you hyphenate text properly it shows a lot of blank space. Luckily, I discovered <a href="http://code.google.com/p/hyphenator/">hyphenator.js</a>, which solved the problem nicely.</p> + </section> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Columns and hyphenation</h1> + </header> + <p>As I previously stated, I couldn’t wait to try out CSS3 columns so I kinda went crazy on the home page, + but just there. Some may argue that they are not suitable for web use of course, but I think they contribute + to give the site layout a unique feeling.</p> + <p>The problem with having columns is of course text alignment: justified text looks good, but unless you + hyphenate text properly it shows a lot of blank space. Luckily, I discovered <a + href="http://code.google.com/p/hyphenator/">hyphenator.js</a>, which solved the problem nicely.</p> -</section> -<section class="section"> -<header><h1 id="h_3" class="toc">CSS and layout improvements</h1></header> -<p>I made a point out of improving the old stylesheet to make the site easier to read and generally prettier. Beauty is in the eye of the beholder, but still, I think the new stylesheet brings some improvements, especially concerning text (the <a href="http://scripts.sil.org/gentium">Gentium</a> font is used throughout the site) and syntax highlighting.</p> -<p>Moreover, I worked on streamlining navigations across different sections of the site, in particular on article pages:</p> -<p><img src="/img/pictures/h3rald_81_article.png" /></p> + </section> + <section class="section"> + <header> + <h1 id="h_3" class="toc">CSS and layout improvements</h1> + </header> + <p>I made a point out of improving the old stylesheet to make the site easier to read and generally prettier. + Beauty is in the eye of the beholder, but still, I think the new stylesheet brings some improvements, + especially concerning text (the <a href="http://scripts.sil.org/gentium">Gentium</a> font is used throughout + the site) and syntax highlighting.</p> + <p>Moreover, I worked on streamlining navigations across different sections of the site, in particular on + article pages:</p> + <p><img src="/images/pictures/h3rald_81_article.png" /></p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">Under the hood</h1></header> -<p>Besides appearence, the new site also features some improvements in its underlying business logic. In particular:</p> -<ul> - <li>Better nanoc <a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a></li> - <li>Improved <a href="/glyph/">Glyph</a> integration, by extending nanoc <a href="http://github.com/h3rald/h3rald/blob/master/lib/glyph_context.rb">RuleContext</a></li> - <li>Minor updates to the custom <a href="http://github.com/h3rald/h3rald/blob/master/tasks/site.rake">Rake tasks</a></li> - <li><a href="http://disqus.com/overview/">Disqus</a> comments</li> -</ul> + </section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Under the hood</h1> + </header> + <p>Besides appearence, the new site also features some improvements in its underlying business logic. In + particular:</p> + <ul> + <li>Better nanoc <a href="http://github.com/h3rald/h3rald/blob/master/Rules">Rules</a></li> + <li>Improved <a href="/glyph/">Glyph</a> integration, by extending nanoc <a + href="http://github.com/h3rald/h3rald/blob/master/lib/glyph_context.rb">RuleContext</a></li> + <li>Minor updates to the custom <a href="http://github.com/h3rald/h3rald/blob/master/tasks/site.rake">Rake + tasks</a></li> + <li><a href="http://disqus.com/overview/">Disqus</a> comments</li> + </ul> -</section> + </section> </section>
@@ -6,26 +6,40 @@ popular: true
timestamp: 1245211860 tags: "programming|vim" ----- -<p>I use <a href="http://www.vim.org">Vim</a> a lot. It’s my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile).</p> -<p>One thing I always liked about Vim was it powerful syntax highlighting: there’s probably a syntax highlighting file for every programming language ever created, even the new ones (<a href="http://force7.de/nimrod/index.html">Nimrod</a>? Sure, <a href="http://www.vim.org/scripts/script.php?script_id=2632">here</a>!).</p> -<p>Furthermore, Vim allows you to create color schemes, and that’s surprisingly easy to do. Everything you need to do is in the <a href="http://vimdoc.sourceforge.net/htmldoc/syntax.html">docs</a>, but that may put you off, so you can just start by editing an existing one — that’s what I did.h3. InfiniteRed Black</p> -<p>I’ve been using the <a href="http://blog.infinitered.com/entries/show/8">ir_black</a> color scheme for near enough a year. It’s an excellent color scheme, recommended especially for writing Ruby code:</p> +<p>I use <a href="http://www.vim.org">Vim</a> a lot. It’s my editor of choice when I code (mainly in Ruby), and + also when I write my blog post and articles (mainly in Textile).</p> +<p>One thing I always liked about Vim was it powerful syntax highlighting: there’s probably a syntax highlighting + file for every programming language ever created, even the new ones (<a + href="http://force7.de/nimrod/index.html">Nimrod</a>? Sure, <a + href="http://www.vim.org/scripts/script.php?script_id=2632">here</a>!).</p> +<p>Furthermore, Vim allows you to create color schemes, and that’s surprisingly easy to do. Everything you need to + do is in the <a href="http://vimdoc.sourceforge.net/htmldoc/syntax.html">docs</a>, but that may put you off, so you + can just start by editing an existing one — that’s what I did.h3. InfiniteRed Black</p> +<p>I’ve been using the <a href="http://blog.infinitered.com/entries/show/8">ir_black</a> color scheme for near + enough a year. It’s an excellent color scheme, recommended especially for writing Ruby code:</p> <p><img src="/images/herald.vim/ir_black_vim_example.png" alt="" /></p> <p>I honestly thought this was the best Vim color scheme until I discovered Moria…</p> <h3>Moria</h3> -<p>Recently I switched to <a href="http://www.vim.org/scripts/script.php?script_id=1464">moria</a>, mainly because I find it easier on the eyes. It’s a matter of taste, of course:</p> +<p>Recently I switched to <a href="http://www.vim.org/scripts/script.php?script_id=1464">moria</a>, mainly because I + find it easier on the eyes. It’s a matter of taste, of course:</p> <p><img src="/images/herald.vim/moria_vim_example.png" alt="" /></p> -<p>The trick is in the background: it’s not completely black. Still, I didn’t quite like the colors, so I decided to write my own…</p> +<p>The trick is in the background: it’s not completely black. Still, I didn’t quite like the colors, so I + decided to write my own…</p> <h3>Herald</h3> -<p>Meet <strong> <a href="/files/herald.vim">herald.vim</a> </strong> (this is a direct link to the raw file, but you may also want to check my <a href="http://github.com/h3rald/stash/tree/master">stash</a> on GitHub or the <a href="http://www.vim.org/scripts/script.php?script_id=2684">script page</a> on Vim.org):</p> +<p>Meet <strong> <a href="/files/herald.vim">herald.vim</a> </strong> (this is a direct link to the raw file, but you + may also want to check my <a href="http://github.com/h3rald/stash/tree/master">stash</a> on GitHub or the <a + href="http://www.vim.org/scripts/script.php?script_id=2684">script page</a> on Vim.org):</p> <p><img src="/images/herald.vim/herald_vim_example.png" alt="" /></p> <p>To sum up, here’s the <em>features</em> offered by this new color scheme:</p> <ul> - <li>It’s easier to differentiate syntax elements; in particular reserved words like <code>if</code> or <code>end</code>, constants (symbols) and identifiers (instance variables).</li> + <li>It’s easier to differentiate syntax elements; in particular reserved words like <code>if</code> or + <code>end</code>, constants (symbols) and identifiers (instance variables). + </li> <li>Operators are highlighted and easier to notice.</li> <li>Dark gray background and black column/row selectors.</li> <li>Added highlight for titles (useful for Textile)</li> <li>Comments do not stand out, unlike in most color schemes</li> - <li>Support for 256 color terminal (special thanks to <a href="http://www.frexx.de/xterm-256-notes/">Wolfgang Frisch</a> for providing all the info and tools required)</li> + <li>Support for 256 color terminal (special thanks to <a href="http://www.frexx.de/xterm-256-notes/">Wolfgang + Frisch</a> for providing all the info and tools required)</li> </ul> <p>So what do you think? Is it tool colorful perhaps? How would <strong>you</strong> improve it?</p>
@@ -4,50 +4,86 @@ content-type: article
timestamp: 1191383580 tags: "ruby|review|books" ----- -<p>After reading the very first paragraph of Mr. Neighborly’s <a href="http://www.humblelittlerubybook.com/">Humble Little Ruby Book</a> (<span class="caps">HLRB</span> for short, from now on) it was very clear to me that it was going to be quite an unconventional read:</p> +<p>After reading the very first paragraph of Mr. Neighborly’s <a + href="http://www.humblelittlerubybook.com/">Humble Little Ruby Book</a> (<span class="caps">HLRB</span> for + short, from now on) it was very clear to me that it was going to be quite an unconventional read:</p> <blockquote> -<p>“Yes, there is a Chapter 0. There is a little bit of introductory stuff we need to talk about before <br /> -we set you loose on Ruby. You wouldn’t want to get psyched about a new gadget, get it home, <br /> -and then figure out you need batteries, a grapefruit, and the ability to speak three languages to <br /> -even open the box would you?”</p> + <p>“Yes, there is a Chapter 0. There is a little bit of introductory stuff we need to talk about before <br /> + we set you loose on Ruby. You wouldn’t want to get psyched about a new gadget, get it home, <br /> + and then figure out you need batteries, a grapefruit, and the ability to speak three languages to <br /> + even open the box would you?”</p> </blockquote> -<p>That reminded me immediately of <a href="http://poignantguide.net/ruby/">Why’s Poignant Guide to Ruby</a>. without a doubt. I don’t know how it is possible that two witty, crazy, and very inventive guys grew fond of the same programming language. Anyhow, to reassure a few of you, you won’t find any foxes or chunky bacon cartoons in <span class="caps">HLRB</span>, just some very well made (although still pretty unconventional) diagrams like this one:</p> -<p><img src="/files/hlrb_diagram.png" alt="" /></p> +<p>That reminded me immediately of <a href="http://poignantguide.net/ruby/">Why’s Poignant Guide to Ruby</a>. + without a doubt. I don’t know how it is possible that two witty, crazy, and very inventive guys grew fond of + the same programming language. Anyhow, to reassure a few of you, you won’t find any foxes or chunky bacon + cartoons in <span class="caps">HLRB</span>, just some very well made (although still pretty unconventional) diagrams + like this one:</p> +<p><img src="/images/hlrb_diagram.png" alt="" /></p> <p>Got the picture? Good. Let’s move on…h3. Chapter 0: What’chu talkin’ ’bout, mister?</p> -<p>Chapter 0 is like an introduction to the book <em>and</em> a place to put all the boring stuff you have to talk about in a book about a programming language:</p> +<p>Chapter 0 is like an introduction to the book <em>and</em> a place to put all the boring stuff you have to talk about + in a book about a programming language:</p> <ul> <li>What is Ruby?</li> <li>Installation procedure (on Windows, Mac OS X and Linux)</li> <li>Hello, World!</li> </ul> -<p>Yes, you can skip this one safely without losing too much, unless of course you still need to install Ruby on your machine.</p> +<p>Yes, you can skip this one safely without losing too much, unless of course you still need to install Ruby on your + machine.</p> <h3>Chapter 1: Welcome to Ruby.</h3> <blockquote> -<p>“This section aims to introduce the syntactic sugar and linguistic misfortunes of Ruby in the <br /> -quickest manner that will still allow for a full education on the subject.”</p> + <p>“This section aims to introduce the syntactic sugar and linguistic misfortunes of Ruby in the <br /> + quickest manner that will still allow for a full education on the subject.”</p> </blockquote> -<p>As the first two lines of this chapter say, it’s time to learn the basics of Ruby. You’ll be quickly guided through strings, numbers, collections and variables. Every section with tons of code examples for your to play with. You won’t find a full list of all the 876 methods of the String class, but you’ll certainly learn the 10 most common ones at least (numbers are random, so no, don’t count them). <br /> -Sure, yes, right, whatever… <em>if you really want</em> you can skip this chapter too, but if you are already a Ruby Guru there’s probably no need for you to read books about Ruby, right? Beginners need to read this chapter. It’s compulsory, really, and pretty enjoyable, too.</p> +<p>As the first two lines of this chapter say, it’s time to learn the basics of Ruby. You’ll be quickly + guided through strings, numbers, collections and variables. Every section with tons of code examples for your to + play with. You won’t find a full list of all the 876 methods of the String class, but you’ll certainly + learn the 10 most common ones at least (numbers are random, so no, don’t count them). <br /> + Sure, yes, right, whatever… <em>if you really want</em> you can skip this chapter too, but if you are already + a Ruby Guru there’s probably no need for you to read books about Ruby, right? Beginners need to read this + chapter. It’s compulsory, really, and pretty enjoyable, too.</p> <h3>Chapter 2: Break it down now!</h3> -<p>Or “learn how to segment your code” using methods, and… blocks & <code>Proc</code> objects! Gosh. Our poor newbies will probably have a heart attack if they never heard about blocks and closures before. I almost got scared myself, because this is normally regarded as a pretty tough topic. Despite, at page 25 of the book you’ll have to face your fears and dive into it. You’ll survive, anyway.</p> -<p><strong>Purist Warning:</strong> Please be aware that sometimes the author may decide to use certain terms and construct which may not sound 100% right to your ears. Just move on, beginners will understand more things like <em>“Think of Proc objects as blocks that are pushed into variables.”</em> than anything else, guaranteed.</p> -<p>After this section you’ll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby is a <em>fully OO language</em>, so people <em>must</em> learn about classes before anything else. I must admit I was a bit confused by the ordering of the topics at first, but if someone comes from a non-OO background he’ll probably find this particular order more suitable. <br /> -This section will cover class and object basics in Ruby like defining classes, instantiating objects, access control, methods, attributes, scope, duck typing. Finally, you’ll briefly look into modules as well.</p> +<p>Or “learn how to segment your code” using methods, and… blocks & <code>Proc</code> objects! + Gosh. Our poor newbies will probably have a heart attack if they never heard about blocks and closures before. I + almost got scared myself, because this is normally regarded as a pretty tough topic. Despite, at page 25 of the book + you’ll have to face your fears and dive into it. You’ll survive, anyway.</p> +<p><strong>Purist Warning:</strong> Please be aware that sometimes the author may decide to use certain terms and + construct which may not sound 100% right to your ears. Just move on, beginners will understand more things like + <em>“Think of Proc objects as blocks that are pushed into variables.”</em> than anything else, + guaranteed.</p> +<p>After this section you’ll finally be introduced to Ruby classes. Now, this can piss someone off, no doubt. Ruby + is a <em>fully OO language</em>, so people <em>must</em> learn about classes before anything else. I must admit I + was a bit confused by the ordering of the topics at first, but if someone comes from a non-OO background he’ll + probably find this particular order more suitable. <br /> + This section will cover class and object basics in Ruby like defining classes, instantiating objects, access + control, methods, attributes, scope, duck typing. Finally, you’ll briefly look into modules as well.</p> <h3>Chapter 3: Hustle and flow (control)</h3> -<p>Finally, the author will deal with flow control. So things like <code>if</code>, <code>case</code>, conditional operators, loops and statement modifiers. In my opinion this section is truly excellent: it introduces all the control structures in a very simple and crystal clear way, often using flowcharts. A great chance even for absolute beginners to understand these basic but powerful concepts.<br /> -Towards the end of the chapter, you’ll also learn how exceptions work: a clever way to tell people “you have to learn how to use exceptions from the very beginning”. Really nicely done.</p> +<p>Finally, the author will deal with flow control. So things like <code>if</code>, <code>case</code>, conditional + operators, loops and statement modifiers. In my opinion this section is truly excellent: it introduces all the + control structures in a very simple and crystal clear way, often using flowcharts. A great chance even for absolute + beginners to understand these basic but powerful concepts.<br /> + Towards the end of the chapter, you’ll also learn how exceptions work: a clever way to tell people “you + have to learn how to use exceptions from the very beginning”. Really nicely done.</p> <h3>Chapter 4: The system beneath…</h3> -<p>Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new programming language, now finally you learn how to do <em>real things</em>. The chapter is full of complete and meaningful code snippets which will answer nearly all the questions you may have (at this time):</p> +<p>Here comes the juicy stuff. Up to now you learnt the usual boring things you need to know when learning a new + programming language, now finally you learn how to do <em>real things</em>. The chapter is full of complete and + meaningful code snippets which will answer nearly all the questions you may have (at this time):</p> <ul> <li>How do I read and write to a file?</li> <li>How do I handle threads and processes?</li> <li>How do command-line parameters and environment variables work?</li> - <li>How can I perform specific Windows-only operations, like reading and writing to the Registry? What about <span class="caps">OLE</span> automation?</li> + <li>How can I perform specific Windows-only operations, like reading and writing to the Registry? What about <span + class="caps">OLE</span> automation?</li> </ul> -<p>Some of the big books out there will not spend too much time talking about Windows-only libraries, but I found <span class="caps">HLRB</span> gives quite a comprehensive introduction about them.</p> +<p>Some of the big books out there will not spend too much time talking about Windows-only libraries, but I found <span + class="caps">HLRB</span> gives quite a comprehensive introduction about them.</p> <h3>Chapter 5: Looking beyond home</h3> -<p>More juicy stuff. If you are looking for a tutorial to learn the basics about networking, from from sockets to <span class="caps">FTP</span> to <span class="caps">POP</span> and web services, look no further: this chapter does a very remarkable job introducing various network-related libraries, with the usual well written code examples.<br /> -If that’s still not enough, you’ll also have a chance to explore the wonderful world of distributed Ruby and of databases. Granted, this chapter won’t tell you about the 1567 methods available in ActiveRecord (buy a copy of <a href="http://www.pragmaticprogrammer.com/title/rails/">Agile Web Development with Rails</a> for this), but will tell you enough to get started.</p> +<p>More juicy stuff. If you are looking for a tutorial to learn the basics about networking, from from sockets to <span + class="caps">FTP</span> to <span class="caps">POP</span> and web services, look no further: this chapter does a + very remarkable job introducing various network-related libraries, with the usual well written code examples.<br /> + If that’s still not enough, you’ll also have a chance to explore the wonderful world of distributed Ruby + and of databases. Granted, this chapter won’t tell you about the 1567 methods available in ActiveRecord (buy a + copy of <a href="http://www.pragmaticprogrammer.com/title/rails/">Agile Web Development with Rails</a> for this), + but will tell you enough to get started.</p> <h3>Chapter 6: It’s a Library!</h3> <p>The final chapter will go more in depth on some more advanced topics, like:</p> <ul>@@ -59,9 +95,21 @@ <li>Unit Testing</li>
</ul> <p>Everything with more and more useful code snippets.</p> <h3>The Appendices</h3> -<p>Last but not least, a <span class="caps">HUGE</span> collection of links and resources to learn more about Ruby, and a quick digression on C/C++ extensions… not much, but enough to wet your appetite.</p> +<p>Last but not least, a <span class="caps">HUGE</span> collection of links and resources to learn more about Ruby, and + a quick digression on C/C++ extensions… not much, but enough to wet your appetite.</p> <h3>The bottom line</h3> -<p><span class="caps">HLRB</span> is not <em>the only</em> book you need to read about Ruby. It’s better to make this clear otherwise I’ll be hunted forever by Dave Thomas, Chad Fowler, <span class="caps">DHH</span> and all the other excellent Ruby hackers who also wrote very successful books (which I bought as well). <span class="caps">HLRB</span> is <span class="caps">LITTLE</span> and <span class="caps">HUMBLE</span>, after all: it doesn’t aim at becoming the official Ruby Bible anytime soon (although a bird told me it may get updated <em>someday</em> and include more stuff), but it is still a worthwhile reading.</p> -<p>And of course I came to the very end of this review without mentioning the most important thing: this little wonder is free. All you need is to register to InfoQ (for free) and grab your <a href="http://www.infoq.com/minibooks/ruby/">free copy</a>. If you want you can buy a printed copy for just $9.95, if you feel in a good mood (please do).</p> -<p>The most obvious strengths of this book are the abundance of code examples and very useful working snippets, and the unconventional style which makes it very readable and not boring at all. If I were to name some of its weaknesses (but only if you force me to), I’d say some parts should be expanded and more info on other libraries should be provided… but you never know what the future will bring us!</p> +<p><span class="caps">HLRB</span> is not <em>the only</em> book you need to read about Ruby. It’s better to make + this clear otherwise I’ll be hunted forever by Dave Thomas, Chad Fowler, <span class="caps">DHH</span> and all + the other excellent Ruby hackers who also wrote very successful books (which I bought as well). <span + class="caps">HLRB</span> is <span class="caps">LITTLE</span> and <span class="caps">HUMBLE</span>, after all: it + doesn’t aim at becoming the official Ruby Bible anytime soon (although a bird told me it may get updated + <em>someday</em> and include more stuff), but it is still a worthwhile reading.</p> +<p>And of course I came to the very end of this review without mentioning the most important thing: this little wonder + is free. All you need is to register to InfoQ (for free) and grab your <a + href="http://www.infoq.com/minibooks/ruby/">free copy</a>. If you want you can buy a printed copy for just + $9.95, if you feel in a good mood (please do).</p> +<p>The most obvious strengths of this book are the abundance of code examples and very useful working snippets, and the + unconventional style which makes it very readable and not boring at all. If I were to name some of its weaknesses + (but only if you force me to), I’d say some parts should be expanded and more info on other libraries should + be provided… but you never know what the future will bring us!</p> <p>Well done, <a href="http://www.jeremymcanally.com/">Mr. Neighborly</a>!</p>
@@ -6,160 +6,325 @@ popular: true
timestamp: 1156307004 tags: "travelling" ----- -<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother Caspar was happy to host us at his place, for free.<a name="top"></a></p> +<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since + I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother + Caspar was happy to host us at his place, for free.<a name="top"></a></p> <h3>Table of Contents</h3> <ul> <li><a href="#pre">Preamble</a></li> <li><a href="#trans">Transportation</a> - <ul> - <li><a href="#planes">Planes</a></li> - <li><a href="#trains">Trains, coaches and cabs</a></li> - <li><a href="#tube">The tube and buses</a></li> - </ul></li> + <ul> + <li><a href="#planes">Planes</a></li> + <li><a href="#trains">Trains, coaches and cabs</a></li> + <li><a href="#tube">The tube and buses</a></li> + </ul> + </li> <li><a href="#food">Food</a> - <ul> - <li><a href="#rubbish">Rubbish Food</a></li> - <li><a href="#healthy">Healthy Food</a></li> - <li><a href="#brick">Brick Lane</a></li> - </ul></li> + <ul> + <li><a href="#rubbish">Rubbish Food</a></li> + <li><a href="#healthy">Healthy Food</a></li> + <li><a href="#brick">Brick Lane</a></li> + </ul> + </li> <li><a href="#enter">Entertainment</a> - <ul> - <li><a href="#club">Clubbing</a></li> - <li><a href="#museums">Museums</a></li> - <li><a href="#theatres">Theatres</a></li> - <li><a href="#shop">Shopping</a></li> - </ul></li> + <ul> + <li><a href="#club">Clubbing</a></li> + <li><a href="#museums">Museums</a></li> + <li><a href="#theatres">Theatres</a></li> + <li><a href="#shop">Shopping</a></li> + </ul> + </li> </ul> <p><a name="pre"></a> <a href="#top">[Back to Top]</a></p> <h3>Preamble</h3> -<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother Caspar was happy to host us at his place, for free.</p> -<p>Although we obviously had to pay for our flight, transport, food, etc. etc., we didn’t have to pay for accommodation, which was indeed quite an achievement, considering the prices of hotels and flats in London. The bad news is that this Guide, although already lacking a lot of information (try describing everything you can do in London in a single, not-too-boring article), will not contain any particular hints and tips on how to find accommodation in one of the most interesting cities in Europe – unless of course you get to stay at Caspar’s place.</p> +<p>This summer I finally had a chance to spend <em>a whole week</em> in London. The city itself was not new to me, since + I visited it 6 times before this one, but this summer was different, in a word: Roxy (my fiancee)’s brother + Caspar was happy to host us at his place, for free.</p> +<p>Although we obviously had to pay for our flight, transport, food, etc. etc., we didn’t have to pay for + accommodation, which was indeed quite an achievement, considering the prices of hotels and flats in London. The bad + news is that this Guide, although already lacking a lot of information (try describing everything you can do in + London in a single, not-too-boring article), will not contain any particular hints and tips on how to find + accommodation in one of the most interesting cities in Europe – unless of course you get to stay at + Caspar’s place.</p> <p><a name="trans"></a> <a href="#top">[Back to Top]</a></p> <h3>Transportation</h3> -<p>Getting there is relatively easy and if you come from Europe there’s a quick answer to the universal traveller’s question:</p> +<p>Getting there is relatively easy and if you come from Europe there’s a quick answer to the universal + traveller’s question:</p> <p><em>“Is there any cheap, reliable and on-time airline?”</em></p> <p><a name="planes"></a> <a href="#top">[Back to Top]</a></p> <h4>Planes</h4> -<p>Yes, there is. Apparently some Irish man thought he could make millions by buying loads of Boeing 737-800 and selling cheap flight tickets to everyone going to or from London, and he actually did. <a href="http://www.ryanair.com">RyanAir</a> is the answer: a cheap-but-reliable airline which will make you arrive even early than you expected by paying tickets as low as 1p (plus 20-30 Euro airport taxes). Unfortunately they don’t provide full meals aboard, they don’t have any cutlery on board for you to steal, unlike <a href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a><em>, and flight attendants are not hot either, unlike <a href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a></em>, but since I’m happily engaged and Roxanne doesn’t fancy me stealing BA cutlery it’s better this way indeed. <br /> -Unfortunately we booked only a month before and thus the flight for both of us (return) was about 80 Euro in the end, but still not bad.</p> -<p>Luggage check? Not bad, unless you plan to arrive or depart right after an unfoiled bomb plot like I did: I had to take off my shoes, got checked everywhere, they emptied out my hand luggage, turned on and off my laptop and confiscated my gel-ink pen. Way to go!</p> +<p>Yes, there is. Apparently some Irish man thought he could make millions by buying loads of Boeing 737-800 and selling + cheap flight tickets to everyone going to or from London, and he actually did. <a + href="http://www.ryanair.com">RyanAir</a> is the answer: a cheap-but-reliable airline which will make you arrive + even early than you expected by paying tickets as low as 1p (plus 20-30 Euro airport taxes). Unfortunately they + don’t provide full meals aboard, they don’t have any cutlery on board for you to steal, unlike <a + href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a><em>, and flight attendants + are not hot either, unlike <a + href="http://www.britishairways.com/travel/globalgateway.jsp/global/public/en">BA</a></em>, but since + I’m happily engaged and Roxanne doesn’t fancy me stealing BA cutlery it’s better this way indeed. + <br /> + Unfortunately we booked only a month before and thus the flight for both of us (return) was about 80 Euro in the + end, but still not bad.</p> +<p>Luggage check? Not bad, unless you plan to arrive or depart right after an unfoiled bomb plot like I did: I had to + take off my shoes, got checked everywhere, they emptied out my hand luggage, turned on and off my laptop and + confiscated my gel-ink pen. Way to go!</p> <p><a name="trains"></a> <a href="#top">[Back to Top]</a></p> <h4>Trains, coaches and cabs</h4> -<p style="float:left;"><img src="/img/pictures/london/cab.jpg" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/london/cab.jpg" alt="" /></p> <p>The next question of the London newbie arriving in Stansted airport is:</p> <p><em>“Cool, now I’m in the middle of nowhere in England, where’s London then?”</em></p> -<p>Nice innit? They sell you a cheap flight and then it seems you still have a 45-minutes journey to get to the actual city, and this is possible – apparently – only through the Stansted Express, the <em>fastest</em> way to get to London from Stansted. Dear as hell (about 25 <span class="caps">ENGLISH</span> <span class="caps">POUNDS</span> return, per head!). <br /> -Luckily there’s an alternative in the form of an endless amount coaches going from Stansted to London and vice-versa every now and then. I went with <a href="http://www.terravision.it/">Terravision</a> but there are many others. Significantly cheaper (34 Euro for two people return!).<br /> -The Stansted Express is the first example of how trains in the UK can be a lot dearer than you expect, especially if you come from Italy where you can go from Genoa to the Cinque Terre for as low as five Euro (for 100Km that is). Considering that Roxy and I spent about two pounds for about 15 Km to get from Victoria Station to Bromley South one way, well, yes, it is more expensive!</p> -<p>Once we got to Liverpool Street Station from Stansted with a load of (empty) suitcases, a weird pakistani guy in a a black leather jacket turns up out of nowhere and heads towards us. Damn airport regulations: unfortunately my almighty Victorinox pocket knife was in my suitcase. Luckily the guy approaches and simply asks:</p> +<p>Nice innit? They sell you a cheap flight and then it seems you still have a 45-minutes journey to get to the actual + city, and this is possible – apparently – only through the Stansted Express, the <em>fastest</em> way to + get to London from Stansted. Dear as hell (about 25 <span class="caps">ENGLISH</span> <span + class="caps">POUNDS</span> return, per head!). <br /> + Luckily there’s an alternative in the form of an endless amount coaches going from Stansted to London and + vice-versa every now and then. I went with <a href="http://www.terravision.it/">Terravision</a> but there are many + others. Significantly cheaper (34 Euro for two people return!).<br /> + The Stansted Express is the first example of how trains in the UK can be a lot dearer than you expect, especially if + you come from Italy where you can go from Genoa to the Cinque Terre for as low as five Euro (for 100Km that is). + Considering that Roxy and I spent about two pounds for about 15 Km to get from Victoria Station to Bromley South one + way, well, yes, it is more expensive!</p> +<p>Once we got to Liverpool Street Station from Stansted with a load of (empty) suitcases, a weird pakistani guy in a a + black leather jacket turns up out of nowhere and heads towards us. Damn airport regulations: unfortunately my + almighty Victorinox pocket knife was in my suitcase. Luckily the guy approaches and simply asks:</p> <p>Him: “Hey mate, need a taxi? …A taxi mate? A taxi?”<br /> -Me: “How much”<br /> -Him: “Where to?”<br /> -Me: “[Somewhere in Hackney]”<br /> -Him: “20 pounds”<br /> -Me: “Bye”</p> -<p>Just an unregistered cab driver. There are apparently millions around and they can spot a foreigner (especially Italians, it seems) from miles. Be prepared, and be aware that a cab from Liverpool Street for a 5-minutes drive in the night should not cost more than 6 pounds…</p> + Me: “How much”<br /> + Him: “Where to?”<br /> + Me: “[Somewhere in Hackney]”<br /> + Him: “20 pounds”<br /> + Me: “Bye”</p> +<p>Just an unregistered cab driver. There are apparently millions around and they can spot a foreigner (especially + Italians, it seems) from miles. Be prepared, and be aware that a cab from Liverpool Street for a 5-minutes drive in + the night should not cost more than 6 pounds…</p> <p><a name="tube"></a> <a href="#top">[Back to Top]</a></p> <h4>The tube and buses</h4> <p>Here are some tips for smooth travalling via the underground or buses:<br /> -1. Do not use a bus unless you can’t use the Tube for some particular reason (e.g. you need to go to Zone 3 or 4 and your Oyster card can be used only in zone 1 and 2)<br /> -2. Do not catch the Circle Line, always try a combination of two or more (e.g. District and Central) instead, because delays are frequent<br /> -3. Get down at Leicester Square if you’re going to Covent Garden: it’s just 300 metres away and Covent Garden station is small and packed<br /> -4. Always check whether the line you’re catching is marked with “Good Service”, try another route if there delays are expected<br /> -5. Keep right on escalators – there’s always some lunatic running up/down on the left side, from time to time, and trust me, he <span class="caps">WILL</span> mind being stopped for no valid reason<br /> -6. Mind the gap! (Especially at Bank station)<br /> -7. Mind the sweaty guys wearing suite and holding a briefcase, at peek hours, they can be deadly especially on escalators (See 5.).</p> + 1. Do not use a bus unless you can’t use the Tube for some particular reason (e.g. you need to go to Zone 3 or + 4 and your Oyster card can be used only in zone 1 and 2)<br /> + 2. Do not catch the Circle Line, always try a combination of two or more (e.g. District and Central) instead, + because delays are frequent<br /> + 3. Get down at Leicester Square if you’re going to Covent Garden: it’s just 300 metres away and Covent + Garden station is small and packed<br /> + 4. Always check whether the line you’re catching is marked with “Good Service”, try another route + if there delays are expected<br /> + 5. Keep right on escalators – there’s always some lunatic running up/down on the left side, from time to + time, and trust me, he <span class="caps">WILL</span> mind being stopped for no valid reason<br /> + 6. Mind the gap! (Especially at Bank station)<br /> + 7. Mind the sweaty guys wearing suite and holding a briefcase, at peek hours, they can be deadly especially on + escalators (See 5.).</p> <p><a name="food"></a> “> Back to Top <”:#top</p> <h3>Food</h3> -<p>I already noticed this during the previous visits: in London you can eat everywhere. Quite literally, both in the city centre and surrounding areas. If you can – and also if you feel brave enough to try at random – the areas surrounding the city centre are probably cheaper than the 4-million different food chains providing any kind of meal near Oxford Street & Co. and possibly – arguably – more tasty.</p> -<p>If you dare to venture in the land of the Turkish/Bangladesh/Indian food shops you’re more than welcome to do so, but be prepared to a potentially long trial-and-error process: in the end you’ll eventually find the right one. Caspar recommended a particular one, and the <a href="http://www.astray.com/recipes/?show=Humus%20sandwich%20spread">humus sandwitch</a> was really great. Doner Kebab? Roxy insisted with the rumors they use roadkill for those (she’s vegetarian anyway) so she didn’t let me have one, aww.</p> +<p>I already noticed this during the previous visits: in London you can eat everywhere. Quite literally, both in the + city centre and surrounding areas. If you can – and also if you feel brave enough to try at random – the + areas surrounding the city centre are probably cheaper than the 4-million different food chains providing any kind + of meal near Oxford Street & Co. and possibly – arguably – more tasty.</p> +<p>If you dare to venture in the land of the Turkish/Bangladesh/Indian food shops you’re more than welcome to do + so, but be prepared to a potentially long trial-and-error process: in the end you’ll eventually find the right + one. Caspar recommended a particular one, and the <a + href="http://www.astray.com/recipes/?show=Humus%20sandwich%20spread">humus sandwitch</a> was really great. Doner + Kebab? Roxy insisted with the rumors they use roadkill for those (she’s vegetarian anyway) so she didn’t + let me have one, aww.</p> <p><a name="rubbish"></a> <a href="#top">[Back to Top]</a></p> <h4>Rubbish Food</h4> -<p>I recently came across an interesting <a href="http://www.princeton.edu/%7Eina/infographics/starbucks.html">image</a> which gave me a better picture of how horrendously sick the world has become when it comes to rubbish food. <br /> -Yes, <a href="http://www.mcdonalds.com/">McDonald’s</a>, <a href="http://www.starbucks.com/">Starbucks</a> & their nasty friends (<a href="http://www.pizzahut.com/">Pizza Hut</a>, <a href="http://www.kfc.com/"><span class="caps">KFC</span></a>, <a href="http://www.bk.com/">Burger King</a>…) are still there making millions at every corner, in London as well. Well, not quite: I noticed they were less last time, and apart from a few kids fretting for their <em>Happy Meal</em>, they weren’t so packed. I was pleased to notice that a load of new-ish healthier alternative are now available (see next section).</p> +<p>I recently came across an interesting <a href="http://www.princeton.edu/%7Eina/infographics/starbucks.html">image</a> + which gave me a better picture of how horrendously sick the world has become when it comes to rubbish food. <br /> + Yes, <a href="http://www.mcdonalds.com/">McDonald’s</a>, <a href="http://www.starbucks.com/">Starbucks</a> + & their nasty friends (<a href="http://www.pizzahut.com/">Pizza Hut</a>, <a href="http://www.kfc.com/"><span + class="caps">KFC</span></a>, <a href="http://www.bk.com/">Burger King</a>…) are still there making + millions at every corner, in London as well. Well, not quite: I noticed they were less last time, and apart from a + few kids fretting for their <em>Happy Meal</em>, they weren’t so packed. I was pleased to notice that a load + of new-ish healthier alternative are now available (see next section).</p> <p><a name="healthy"></a> <a href="#top">[Back to Top]</a></p> <h4>Healthy Food</h4> -<p style="float:right;"><img src="/img/pictures/london/pret.png" alt="" /></p> -<p>This was the relatively new surprise. Relatively new because I already noticed some of them last year, but this time I had a chance to try them all: they <em>healthy food gang</em>! This is the <span class="caps">REAL</span> food trend for London, it seems, and I was very glad about it.<br /> -The first one seems to have been <a href="http://www.pret.com/">Pret a Manger</a> a London-established company which is now spreading – apparently – in the US as well. They <a href="http://www.pret.com/about/">preach and believe</a> in the importance of healthy food and fight a silent – but effective – quest against aforementioned Rubbish Food Giants.</p> +<p style="float:right;"><img src="/images/pictures/london/pret.png" alt="" /></p> +<p>This was the relatively new surprise. Relatively new because I already noticed some of them last year, but this time + I had a chance to try them all: they <em>healthy food gang</em>! This is the <span class="caps">REAL</span> food + trend for London, it seems, and I was very glad about it.<br /> + The first one seems to have been <a href="http://www.pret.com/">Pret a Manger</a> a London-established company which + is now spreading – apparently – in the US as well. They <a href="http://www.pret.com/about/">preach and + believe</a> in the importance of healthy food and fight a silent – but effective – quest against + aforementioned Rubbish Food Giants.</p> <p>bq.<br /> -“Pret operates a bit like a restaurant. Every Pret has its own kitchen (except for one or two of the tiny ones). You won’t find ‘sell by’ dates on our fresh sandwiches and salads. We don’t sell ‘factory’ stuff. We offer our food to charity at the end of each day rather than keep it over.”</p> -<p>Sounds like a good plan. The food is indeed very nice and tasty and they even <em>apologize</em> for charging <span class="caps">VAT</span> when eating in. A carefully-thought marketing campaign or the just plain simple truth (Wot!)? Only time will tell, let’s hope for the best.<br /> -Another example of healthy food around London? Well, real, tasty <a href="http://www.westcornwallpasty.co.uk/flash.html">Cornish pasties</a> can be bought for a few quid around in the biggest stations and streets, for example. Freshly baked in Cornwall, and brought all over England the same day – or so they make out.</p> + “Pret operates a bit like a restaurant. Every Pret has its own kitchen (except for one or two of the tiny + ones). You won’t find ‘sell by’ dates on our fresh sandwiches and salads. We don’t sell + ‘factory’ stuff. We offer our food to charity at the end of each day rather than keep it over.” +</p> +<p>Sounds like a good plan. The food is indeed very nice and tasty and they even <em>apologize</em> for charging <span + class="caps">VAT</span> when eating in. A carefully-thought marketing campaign or the just plain simple truth + (Wot!)? Only time will tell, let’s hope for the best.<br /> + Another example of healthy food around London? Well, real, tasty <a + href="http://www.westcornwallpasty.co.uk/flash.html">Cornish pasties</a> can be bought for a few quid around in + the biggest stations and streets, for example. Freshly baked in Cornwall, and brought all over England the same day + – or so they make out.</p> <p><em>“Hey, what the hell is a pasty man?”</em><br /> -“Go back where you belong, you <a href="http://www.urbandictionary.com/define.php?term=emmet">emmit</a>!”</p> -<p>Roxanne and Caspar both lived in (West!) Cornwall for years, and they really appreciated their fellow pirates trying to take over the world.</p> -<p><a name="brick"></a> <a href="#top">[Back to Top]</a></p> + “Go back where you belong, you <a + href="http://www.urbandictionary.com/define.php?term=emmet">emmit</a>!”</p> +<p>Roxanne and Caspar both lived in (West!) Cornwall for years, and they really appreciated their fellow pirates trying + to take over the world.</p> +<p><a name="brick"></a> <a href="#top">[Back to Top]</a></p> <h4>Brick Lane</h4> <p><em>“Come in my restaurant… good food, cheap…”</em><br /> -“No.”<br /> -<em>“C’mon, I make a discount for you”</em><br /> -“How much?”<br /> -<em>“15% off”</em><br /> -“No way mate, last time it was 25% with a free round of drinks!”<br /> -<em>“You came here before? Impossible, we don’t do 25% off, we do 20% off maximum”</em><br /> -“No, 25% off, it was 25% off, but doesn’t matter, I’ll go somewhere else…”<br /> -<em>“No wait, 20% off and free drinks, ok?”</em><br /> -“25%”<br /> -<em>“OK, 25% and free drinks, but you come in OK? Good food!”</em></p> -<p>This is just an example of conversation between a guy working for a restaurant in <a href="http://www.visitbricklane.com/">Brick Lane</a> and a “potential customer”. Brick Lane (aka Banglatown) is a street in London which became popular for the moltitude of Indian/Bangladesh restaurants. There are literally dozens of them, and this fierce competition causes the owner to repeteadly offer “deals” to potential customers: getting 25% off the bill is not unusual, and sometimes if you can argue it well you can even get free drinks. Caspar took us to a really good place he went before, and the curry and rice and other typical dishes were absolutely fabulous. Price? 11 pounds per head for a filling (and spicy!) dinner.</p> -<p><a name="enter"></a> <a href="#top">[Back to Top]</a></p> + “No.”<br /> + <em>“C’mon, I make a discount for you”</em><br /> + “How much?”<br /> + <em>“15% off”</em><br /> + “No way mate, last time it was 25% with a free round of drinks!”<br /> + <em>“You came here before? Impossible, we don’t do 25% off, we do 20% off maximum”</em><br /> + “No, 25% off, it was 25% off, but doesn’t matter, I’ll go somewhere else…”<br /> + <em>“No wait, 20% off and free drinks, ok?”</em><br /> + “25%”<br /> + <em>“OK, 25% and free drinks, but you come in OK? Good food!”</em> +</p> +<p>This is just an example of conversation between a guy working for a restaurant in <a + href="http://www.visitbricklane.com/">Brick Lane</a> and a “potential customer”. Brick Lane (aka + Banglatown) is a street in London which became popular for the moltitude of Indian/Bangladesh restaurants. There are + literally dozens of them, and this fierce competition causes the owner to repeteadly offer “deals” to + potential customers: getting 25% off the bill is not unusual, and sometimes if you can argue it well you can even + get free drinks. Caspar took us to a really good place he went before, and the curry and rice and other typical + dishes were absolutely fabulous. Price? 11 pounds per head for a filling (and spicy!) dinner.</p> +<p><a name="enter"></a> <a href="#top">[Back to Top]</a></p> <h3>Entertainment</h3> -<p>So what can you do in London, other than meandering with the underground to get the most out of your Oyster card and eat out every day? Well, you can have fun of course! There’s loads to do for every taste. This is an <em>incomplete</em> guide, so I’ll just mention a few possibilities, but be aware that there’s much, much more than this.</p> -<p><a name="club"></a> <a href="#top">[Back to Top]</a></p> +<p>So what can you do in London, other than meandering with the underground to get the most out of your Oyster card and + eat out every day? Well, you can have fun of course! There’s loads to do for every taste. This is an + <em>incomplete</em> guide, so I’ll just mention a few possibilities, but be aware that there’s much, + much more than this.</p> +<p><a name="club"></a> <a href="#top">[Back to Top]</a></p> <h4>Clubbing</h4> <p>Each weekend, the following equation holds, for the average Londoner aged 20-30 at least:</p> <p><code>100 pounds + Club + Friends = Loads of booze + Fun + Terrible hangover and amnesia the day after</code></p> -<p>That’s basically what the traditional Londoners (or maybe we shall generalise to all of England…) do every saturday night: they get trashed. Why? It’s not clever, it’s not good… but it’s bloody good fun!<br /> -Clubs, pubs and bars are the best place for this kind of activity: they are comfortable, there’s normally cool music on, air conditioning, totally hyper staff, and a huge bouncer too! <br /> -We went to <a href="http://www.ditchbar.com/">The Ditch</a>, a recently renovated place in Shoreditch (obviously). I must say I really liked the environment more than any club in Italy:</p> +<p>That’s basically what the traditional Londoners (or maybe we shall generalise to all of England…) do + every saturday night: they get trashed. Why? It’s not clever, it’s not good… but it’s bloody + good fun!<br /> + Clubs, pubs and bars are the best place for this kind of activity: they are comfortable, there’s normally cool + music on, air conditioning, totally hyper staff, and a huge bouncer too! <br /> + We went to <a href="http://www.ditchbar.com/">The Ditch</a>, a recently renovated place in Shoreditch (obviously). I + must say I really liked the environment more than any club in Italy:</p> <ul> <li>Good music and deejay</li> <li>Enough people inside, but not too crowded</li> <li>Good drinks</li> <li>Small & comfy <span class="caps">VIP</span> room, obviously for us (no kidding)</li> - <li>A competent bouncer who kindly reminded us to “watch over” one of our friends, after she suddenly ordered four Vodka-RedBull at once…</li> + <li>A competent bouncer who kindly reminded us to “watch over” one of our friends, after she suddenly + ordered four Vodka-RedBull at once…</li> </ul> -<p>No wonders why Caspar & his friends carefully picked this place as their ideal candidate for their own upcoming DJ mini-event in November: it’s an ideal place to spend your night.</p> -<p>Pity that English blokes (and birds too!) get way too trashed in the end: I reckon if you could place a single half-sober, decent-looking Italian guy in a club like that, he’d have pulled almost all the (decent-looking) girls available by the end of the night. I’ll definetely recommend some of my <em>free</em> (not as in software) friends to go over to London next summer.</p> -<p><a name="museums"></a> <a href="#top">[Back to Top]</a></p> +<p>No wonders why Caspar & his friends carefully picked this place as their ideal candidate for their own upcoming + DJ mini-event in November: it’s an ideal place to spend your night.</p> +<p>Pity that English blokes (and birds too!) get way too trashed in the end: I reckon if you could place a single + half-sober, decent-looking Italian guy in a club like that, he’d have pulled almost all the (decent-looking) + girls available by the end of the night. I’ll definetely recommend some of my <em>free</em> (not as in + software) friends to go over to London next summer.</p> +<p><a name="museums"></a> <a href="#top">[Back to Top]</a></p> <h4>Museums</h4> <p>Enough clubbing and equally shallow activities, let’s focus on culture, at once!<br /> -London is the best city in Europe (OK, <em>followed</em> by Paris) for museums, and the best thing is that they are (nearly) all free. This time we didn’t go to the <a href="http://www.thebritishmuseum.ac.uk/">National Gallery</a>, which hosts one of the most outstanding painting galleries in all over the world, because we already visited it too many times, so we went straight for the <a href="http://www.thebritishmuseum.ac.uk/">British Museum</a>. I originally went there a few years ago, and I forgot what was in it, exactly, and yes, I was amazed and perplexed at the same time:</p> -<p style="float:left;"><img src="/img/pictures/london/rosetta.jpg" alt="" /></p> -<p>I was amazed at the amount of stuff those British folks <em>nicked</em> from all over the world: I’m not talking about a few mummies from Egypt like we did in for our mini Egyptian museum in Turin, but rather stuff like the original sarcophagus of Cleopatra (& others), the Rosetta Stone, the Ur Standard, whole monuments from Greece, gargantuan gateways from some Assirian city, and <em><span class="caps">ALL</span> <span class="caps">THE</span> <span class="caps">SCULPTURE</span> <span class="caps">DECORATIONS</span> OF ATHEN’S <span class="caps">PARTHENON</span>!</em> That was shocking really, but after all it was Napoleon who stole the Monna Lisa from us. Damn the French. (No discrimination intended, please mind the sarcasm)</p> -<p>The <a href="http://www.tate.org.uk/modern/">Tate Modern</a> was impressive as well for a few Dali’s and Kandinski’s paintings etc. etc., but I don’t think it can ever be as breath-taking as the other ones. I certainly don’t understand certain kinds of modern art, but I can’t understand how a random guy could get loads of money and ovation for the critics for putting a few basket-balls in a glass box. Clever.</p> -<p style="float:right;"><img src="/img/pictures/london/nh.jpg" alt="" /></p> -<p>To conclude this brief and silly overview of London’s most remarkable museums, let’s say something about the <a href="http://www.nhm.ac.uk/">National History Museum</a>. <br /> -First of all it must be noted that we have a decent equivalent in Genoa, so Roxy and I visited it not long prior to our departure for England. She liked it, and was impressed by the amount of stuffed animals on display, but she told me that the National History Museum in London was supposed to be <em>way better</em>.<br /> -We both expected, especially judging from outside this enourmous building which was built for the purpose, big halls full of taxidermist’s masterpieces, but alas, nothing like this at all. Yes, sure, there were a few stuffed animals here and there, and the minerals section was truly outstanding for completeness. The rest – in my very, very humble opinion – was a real insult to Science and to the dignity of the visitors over five years old.<br /> -They insisted in “renovating” the interior of a marvellous building, making almost every room pitch black only to allow a kid in a million to press a button to highlight a five-lines explanation for a absolutely pointless diagram. Well done. That was a real achievement, wasn’t it? I really don’t understand who could ever conceive such an abomination: a formerly very respected museum turned into a poorly-designed theme park.<br /> -OK, they probably wanted to involve younger generations into scientifical subjects through “interactivity”, and that’s understandable – in theory. In practice though, there are a few elements which weren’t obviously considered when developing such a subtly cunning marketing strategy:</p> + London is the best city in Europe (OK, <em>followed</em> by Paris) for museums, and the best thing is that they are + (nearly) all free. This time we didn’t go to the <a href="http://www.thebritishmuseum.ac.uk/">National + Gallery</a>, which hosts one of the most outstanding painting galleries in all over the world, because we + already visited it too many times, so we went straight for the <a href="http://www.thebritishmuseum.ac.uk/">British + Museum</a>. I originally went there a few years ago, and I forgot what was in it, exactly, and yes, I was amazed + and perplexed at the same time:</p> +<p style="float:left;"><img src="/images/pictures/london/rosetta.jpg" alt="" /></p> +<p>I was amazed at the amount of stuff those British folks <em>nicked</em> from all over the world: I’m not + talking about a few mummies from Egypt like we did in for our mini Egyptian museum in Turin, but rather stuff like + the original sarcophagus of Cleopatra (& others), the Rosetta Stone, the Ur Standard, whole monuments from + Greece, gargantuan gateways from some Assirian city, and <em><span class="caps">ALL</span> <span + class="caps">THE</span> <span class="caps">SCULPTURE</span> <span class="caps">DECORATIONS</span> OF + ATHEN’S <span class="caps">PARTHENON</span>!</em> That was shocking really, but after all it was Napoleon + who stole the Monna Lisa from us. Damn the French. (No discrimination intended, please mind the sarcasm)</p> +<p>The <a href="http://www.tate.org.uk/modern/">Tate Modern</a> was impressive as well for a few Dali’s and + Kandinski’s paintings etc. etc., but I don’t think it can ever be as breath-taking as the other ones. I + certainly don’t understand certain kinds of modern art, but I can’t understand how a random guy could + get loads of money and ovation for the critics for putting a few basket-balls in a glass box. Clever.</p> +<p style="float:right;"><img src="/images/pictures/london/nh.jpg" alt="" /></p> +<p>To conclude this brief and silly overview of London’s most remarkable museums, let’s say something about + the <a href="http://www.nhm.ac.uk/">National History Museum</a>. <br /> + First of all it must be noted that we have a decent equivalent in Genoa, so Roxy and I visited it not long prior to + our departure for England. She liked it, and was impressed by the amount of stuffed animals on display, but she told + me that the National History Museum in London was supposed to be <em>way better</em>.<br /> + We both expected, especially judging from outside this enourmous building which was built for the purpose, big halls + full of taxidermist’s masterpieces, but alas, nothing like this at all. Yes, sure, there were a few stuffed + animals here and there, and the minerals section was truly outstanding for completeness. The rest – in my + very, very humble opinion – was a real insult to Science and to the dignity of the visitors over five years + old.<br /> + They insisted in “renovating” the interior of a marvellous building, making almost every room pitch + black only to allow a kid in a million to press a button to highlight a five-lines explanation for a absolutely + pointless diagram. Well done. That was a real achievement, wasn’t it? I really don’t understand who + could ever conceive such an abomination: a formerly very respected museum turned into a poorly-designed theme + park.<br /> + OK, they probably wanted to involve younger generations into scientifical subjects through + “interactivity”, and that’s understandable – in theory. In practice though, there are a few + elements which weren’t obviously considered when developing such a subtly cunning marketing strategy:</p> <ul> - <li>The average kid up to 5 years old enjoys pushing buttons, listening to sounds and looking at easy-to-understand (but <span class="caps">ARE</span> <span class="caps">THEY</span>?) pictures, but alas, can’t really bother to read, right?</li> - <li>The average kid over 5 years old would probably like reading some explanation about some weird phenomena, but alas, he really can’t be bothered to push button, move levers, etc. etc. only to highlight some text. Wake up dude, we never heard of Computer Graphics? Animation? even Educational Software, maybe with things like touchscreens etc. These kids are from the <span class="caps">XXI</span> century, not from the seventies ffs! Grow up (the museum’s managers, not the kids of course)!</li> - <li>Instead of ruining an historical building, they could have devoted just a few rooms to kids, investing in something slightly more amazing than out-of-fashin “interactive” toys.</li> + <li>The average kid up to 5 years old enjoys pushing buttons, listening to sounds and looking at easy-to-understand + (but <span class="caps">ARE</span> <span class="caps">THEY</span>?) pictures, but alas, can’t really + bother to read, right?</li> + <li>The average kid over 5 years old would probably like reading some explanation about some weird phenomena, but + alas, he really can’t be bothered to push button, move levers, etc. etc. only to highlight some text. Wake + up dude, we never heard of Computer Graphics? Animation? even Educational Software, maybe with things like + touchscreens etc. These kids are from the <span class="caps">XXI</span> century, not from the seventies ffs! + Grow up (the museum’s managers, not the kids of course)!</li> + <li>Instead of ruining an historical building, they could have devoted just a few rooms to kids, investing in + something slightly more amazing than out-of-fashin “interactive” toys.</li> </ul> <p><em>“Yes, but hey, we still have a huge queue of kids & families at the entrance!”</em></p> -<p>And you know why? You know what are all these people queueing for? For a damn cheesy T-rex <a href="http://science.howstuffworks.com/animatronic.htm">animatronic</a>! Yes, really! And no, not the one from Jurassic Park, but only its rather shitty English-made cousin. <br /> -The funniest thing of the whole visit? They tell you to donate “at least” three quid for their wonders, same as for the British Museum and the National Gallery. You know what? I’d rather give <em>thirty</em> quid to a random kid if he promise not to visit such “museum”…</p> -<p><a name="theatres"></a> <a href="#top">[Back to Top]</a></p> +<p>And you know why? You know what are all these people queueing for? For a damn cheesy T-rex <a + href="http://science.howstuffworks.com/animatronic.htm">animatronic</a>! Yes, really! And no, not the one from + Jurassic Park, but only its rather shitty English-made cousin. <br /> + The funniest thing of the whole visit? They tell you to donate “at least” three quid for their wonders, + same as for the British Museum and the National Gallery. You know what? I’d rather give <em>thirty</em> quid + to a random kid if he promise not to visit such “museum”…</p> +<p><a name="theatres"></a> <a href="#top">[Back to Top]</a></p> <h4>Theatres</h4> -<p>Luckily London theatres are still great. Unfortunately I didn’t have a chance to go to a musical this time, but I’ll definitely try to make it for one during my next visit. Adverts for the shows are all over the place, from streets to underground stations, and there are truly a lot of places where it is possible to buy tickets at discounted price while apparently buying full price tickets doesn’t seem to be possible…<br /> -Anyhow, not only we didn’t manage to go to a musical, but we also missed another theatrical performance by <a href="http://www.imdb.com/name/nm0001772/">Patrick Stewart</a>, who, for those who don’t know, happens to be one of the best Shakespearean actors alive… when he doesn’t <a href="http://en.wikipedia.org/wiki/Star_Trek:_First_Contact">fight against the Borg</a> or <a href="http://en.wikipedia.org/wiki/X-Men_(film)">plays funny tricks on a wheelchair</a>, of course (cheesy, cheesy joke).</p> -<p>Nevertheless we <em>did</em> manage to go and see a play, namely Shakespeare’s Antony and Cleopatra at the <a href="http://www.shakespeares-globe.org/navigation/framesetNS.htm">Globe</a>. The Globe Theatre is an almost-perfect reconstruction of the famous London Theatre where Shakespeare’s plays used to be acted. Like in the <span class="caps">XVII</span> century, you have two choices:</p> +<p>Luckily London theatres are still great. Unfortunately I didn’t have a chance to go to a musical this time, but + I’ll definitely try to make it for one during my next visit. Adverts for the shows are all over the place, + from streets to underground stations, and there are truly a lot of places where it is possible to buy tickets at + discounted price while apparently buying full price tickets doesn’t seem to be possible…<br /> + Anyhow, not only we didn’t manage to go to a musical, but we also missed another theatrical performance by <a + href="http://www.imdb.com/name/nm0001772/">Patrick Stewart</a>, who, for those who don’t know, happens to + be one of the best Shakespearean actors alive… when he doesn’t <a + href="http://en.wikipedia.org/wiki/Star_Trek:_First_Contact">fight against the Borg</a> or <a + href="http://en.wikipedia.org/wiki/X-Men_(film)">plays funny tricks on a wheelchair</a>, of course (cheesy, + cheesy joke).</p> +<p>Nevertheless we <em>did</em> manage to go and see a play, namely Shakespeare’s Antony and Cleopatra at the <a + href="http://www.shakespeares-globe.org/navigation/framesetNS.htm">Globe</a>. The Globe Theatre is an + almost-perfect reconstruction of the famous London Theatre where Shakespeare’s plays used to be acted. Like in + the <span class="caps">XVII</span> century, you have two choices:</p> <p>a. Book your seat (26 pounds)<br /> -b. Stand up on the ground, near the stage (5 pounds)</p> -<p style="float:left;"><img src="/img/pictures/london/globe.jpg" alt="" /></p> -<p>We obviously went for option b, of course, since we didn’t fancy the idea of paying that much – although it can be worthwhile. Only one thing to keep in mind: <em>always check the duration of the play you’re going to see beforehand</em> – if you don’t like standing up for a long time, you have to go for option a. <br /> -We obviously <em>didn’t</em> check how long the play was going to be – although we could have imagined it – so we ended up standing up for approx three hours (with a 15 minutes break). And you <em>have</em> to stand up, you can’t sit on the stairs and neither on the floor, and the staff is ready to enforce this rule at all costs: a 70-year-old lady brought a folded chair and decided to sit on it, only to be <em>kindly reminded</em> by the staff that it wasn’t allowed to do so. Go figure. <br /> -Anyhow, after all I must say it was the cheapest and the very best Shakespeare play I’ve ever been to so far, although I must also say that most of the ones I’ve been to before were acted in (yikes!) Italian (yes, we do dub theatrical works, <em>as well</em>). A really, really good idea for students and half-broke youth who shouldn’t be denied of the pleasure of watching Shakespeare’s masterpieces at the theatre. Please, keep it up.</p> -<p><a name="shop"></a> <a href="#top">[Back to Top]</a></p> + b. Stand up on the ground, near the stage (5 pounds)</p> +<p style="float:left;"><img src="/images/pictures/london/globe.jpg" alt="" /></p> +<p>We obviously went for option b, of course, since we didn’t fancy the idea of paying that much – although + it can be worthwhile. Only one thing to keep in mind: <em>always check the duration of the play you’re going + to see beforehand</em> – if you don’t like standing up for a long time, you have to go for option a. + <br /> + We obviously <em>didn’t</em> check how long the play was going to be – although we could have imagined + it – so we ended up standing up for approx three hours (with a 15 minutes break). And you <em>have</em> to + stand up, you can’t sit on the stairs and neither on the floor, and the staff is ready to enforce this rule at + all costs: a 70-year-old lady brought a folded chair and decided to sit on it, only to be <em>kindly reminded</em> + by the staff that it wasn’t allowed to do so. Go figure. <br /> + Anyhow, after all I must say it was the cheapest and the very best Shakespeare play I’ve ever been to so far, + although I must also say that most of the ones I’ve been to before were acted in (yikes!) Italian (yes, we do + dub theatrical works, <em>as well</em>). A really, really good idea for students and half-broke youth who + shouldn’t be denied of the pleasure of watching Shakespeare’s masterpieces at the theatre. Please, keep + it up.</p> +<p><a name="shop"></a> <a href="#top">[Back to Top]</a></p> <h4>Shopping</h4> -<p>Last but not least, I felt compelled to include a short section about <em>shopping</em> in London. The universal answer to the question “Where can I find [insert random item here]” is normally <a href="http://www.oxfordstreet.co.uk/">Oxford Street</a>. When I visited it for the first time (I was about 14 years old, I believe) it all seemed huge… those never-ending malls et al, but now it just seems “normal”. Probably because now going to malls and megastores is just the plain normality, while in the nineties (in Italy) it was rather unusual. <br /> -Oxford Street has them all: computer shops, endless fashion shops, gargantuan bookshops etc. etc. <br /> -Biggest and most expensive shop in Oxford Street? Probably <a href="http://www.selfridges.com/">Selfridges</a> <br /> -Biggest bookshop? Definitely <a href="http://www.amazon.co.uk/exec/obidos/tg/stores/static/-/waterstones/waterstones-info/202-4070483-1661418">Waterstone</a> although the biggest bookshop in London (and in Europe) is the Waterstone one in Piccadilly, just round the corner.<br /> -<a href="http://www.harrods.com/Cultures/en-GB/homepageindex.htm">Harrods</a>? – it’s not far from there.</p> -<p>What if you like more traditional and less glamorous shopping? <a href="http://www.coventgardenlife.com/">Covent Garden</a> and its whereabouts is probably the best choice, also for souvenirs.</p> -<p>Had enough yet? Well, yes, let’s call it a day for this article, but be aware that there’s much, <span class="caps">MUCH</span> more to see and do in London than you can ever imagine. Unless you’re from the US, of course.</p> +<p>Last but not least, I felt compelled to include a short section about <em>shopping</em> in London. The universal + answer to the question “Where can I find [insert random item here]” is normally <a + href="http://www.oxfordstreet.co.uk/">Oxford Street</a>. When I visited it for the first time (I was about 14 + years old, I believe) it all seemed huge… those never-ending malls et al, but now it just seems + “normal”. Probably because now going to malls and megastores is just the plain normality, while in the + nineties (in Italy) it was rather unusual. <br /> + Oxford Street has them all: computer shops, endless fashion shops, gargantuan bookshops etc. etc. <br /> + Biggest and most expensive shop in Oxford Street? Probably <a href="http://www.selfridges.com/">Selfridges</a> + <br /> + Biggest bookshop? Definitely <a + href="http://www.amazon.co.uk/exec/obidos/tg/stores/static/-/waterstones/waterstones-info/202-4070483-1661418">Waterstone</a> + although the biggest bookshop in London (and in Europe) is the Waterstone one in Piccadilly, just round the + corner.<br /> + <a href="http://www.harrods.com/Cultures/en-GB/homepageindex.htm">Harrods</a>? – it’s not far from + there. +</p> +<p>What if you like more traditional and less glamorous shopping? <a href="http://www.coventgardenlife.com/">Covent + Garden</a> and its whereabouts is probably the best choice, also for souvenirs.</p> +<p>Had enough yet? Well, yes, let’s call it a day for this article, but be aware that there’s much, <span + class="caps">MUCH</span> more to see and do in London than you can ever imagine. Unless you’re from the + US, of course.</p>
@@ -4,28 +4,50 @@ content-type: article
timestamp: 1270834239 tags: "glyph|ruby|frameworks|writing" ----- -<p>I’ve been writing technical documents for a living for the past four years, and I can tell you: there is no easy way to go about it.</p> +<p>I’ve been writing technical documents for a living for the past four years, and I can tell you: there is no + easy way to go about it.</p> <p>For example, you can use:</p> <ul> - <li><strong>a Word Processor</strong> like MS Word, for example — anyone can do that, right? Sure, but no, thanks: I strongly believe that Word Processors should not be used for writing technical documents as I firmly don’t believe GUIs are suitable for doing this at a professional level.</li> - <li><strong>a Document Authoring Software</strong> like Adobe Framemaker, Robohelp, etc. Still GUIs, only more complicated to use.</li> - <li><strong><span class="caps">XML</span>, like <span class="caps">DITA</span> or DocBook, or other markups</strong>, like ReStructuredText. Better, but still not easily extensible and flexible enough.</li> - <li><strong>your company’s tools</strong>, if you have them. That’s great if they are usable enough and the result makes your boss happy.</li> + <li><strong>a Word Processor</strong> like MS Word, for example — anyone can do that, right? Sure, but no, + thanks: I strongly believe that Word Processors should not be used for writing technical documents as I firmly + don’t believe GUIs are suitable for doing this at a professional level.</li> + <li><strong>a Document Authoring Software</strong> like Adobe Framemaker, Robohelp, etc. Still GUIs, only more + complicated to use.</li> + <li><strong><span class="caps">XML</span>, like <span class="caps">DITA</span> or DocBook, or other + markups</strong>, like ReStructuredText. Better, but still not easily extensible and flexible enough.</li> + <li><strong>your company’s tools</strong>, if you have them. That’s great if they are usable enough and + the result makes your boss happy.</li> <li><strong>LaTeX</strong>, and that’s probably your best option, if you know what you’re doing.</li> - <li><strong><span class="caps">XHTML</span> and CSS3</strong>, in conjunction with a <span class="caps">PDF</span> renderer like <a href="http://www.princexml.com/">Prince <span class="caps">XML</span></a> — that’s great if you know <span class="caps">HTML</span> and <span class="caps">CSS</span>, and you don’t mind hand-crafting the structure of the document.</li> + <li><strong><span class="caps">XHTML</span> and CSS3</strong>, in conjunction with a <span class="caps">PDF</span> + renderer like <a href="http://www.princexml.com/">Prince <span class="caps">XML</span></a> — that’s + great if you know <span class="caps">HTML</span> and <span class="caps">CSS</span>, and you don’t mind + hand-crafting the structure of the document.</li> </ul> <h3>Lightweight markups</h3> -<p>I love Textile and Markdown. When people aren’t looking, I even use them at work to generate <span class="caps">HTML</span> code, because it’s just so much faster. Textile in particular can be used as a drop-in replacement for <span class="caps">HTML</span> (and a bit of LaTeX, too), as it can produce most inline <span class="caps">HTML</span> tags effortlessly and some block-level tags, too.</p> -<p>For things like <code><div></code> tags and <code><tables></code> though, Textile is not the best thing in the world, so you normally end up falling back to <span class="caps">HTML</span>.</p> -<p>Another “problem” is that <strong>Textile</strong> or other similar lightweight markups cannot be extended easily, simply because they were not meant to be extended in the first place.</p> -<p>Moreover, if you are producing a book, Textile can’t help you if you want to generate things like a Table of Contents automatically or validate links: those things are simply not part of Textile’s job.</p> +<p>I love Textile and Markdown. When people aren’t looking, I even use them at work to generate <span + class="caps">HTML</span> code, because it’s just so much faster. Textile in particular can be used as a + drop-in replacement for <span class="caps">HTML</span> (and a bit of LaTeX, too), as it can produce most inline + <span class="caps">HTML</span> tags effortlessly and some block-level tags, too.</p> +<p>For things like <code><div></code> tags and <code><tables></code> though, Textile is not the best thing + in the world, so you normally end up falling back to <span class="caps">HTML</span>.</p> +<p>Another “problem” is that <strong>Textile</strong> or other similar lightweight markups cannot be + extended easily, simply because they were not meant to be extended in the first place.</p> +<p>Moreover, if you are producing a book, Textile can’t help you if you want to generate things like a Table of + Contents automatically or validate links: those things are simply not part of Textile’s job.</p> <h3>How Glyph can help</h3> -<p style="float:right;"><img src="/img/pictures/glyph.png" alt="" /></p> -<p>There are a few projects on the Internet that tackle structured document generation. One of them is <a href="http://github.com/fnando/kitabu">Kitabu</a>, which looks promising and is able to produce pretty documents using Textile and Prince for <span class="caps">PDF</span> rendering… but again, it’s not extensible because it relies too much on Textile and Markdown.</p> -<p><a href="/glyph/">Glyph</a> is different. For one, it is much younger than any other, therefore it is most likely full of bugs.</p> -<p>Jokes aside, Glyph follows a much more radical approach, which consists in using a <em>macro language</em> on top of Textile or Markdown. The good thing about it is that this macro language is very simple to learn and — most importantly — very easy to extend.</p> +<p style="float:right;"><img src="/images/pictures/glyph.png" alt="" /></p> +<p>There are a few projects on the Internet that tackle structured document generation. One of them is <a + href="http://github.com/fnando/kitabu">Kitabu</a>, which looks promising and is able to produce pretty documents + using Textile and Prince for <span class="caps">PDF</span> rendering… but again, it’s not extensible + because it relies too much on Textile and Markdown.</p> +<p><a href="/glyph/">Glyph</a> is different. For one, it is much younger than any other, therefore it is most likely + full of bugs.</p> +<p>Jokes aside, Glyph follows a much more radical approach, which consists in using a <em>macro language</em> on top of + Textile or Markdown. The good thing about it is that this macro language is very simple to learn and — most + importantly — very easy to extend.</p> <p>Here’s an example:</p> -<div class='text'><pre><code>section[header[Something about Glyph] +<div class='text'> + <pre><code>section[header[Something about Glyph] You can use Glyph macros in conjunction with _Textile_ or _Markdown_ to produce HTML files effortlessly.@@ -35,8 +57,11 @@ file, converting it to PDF is
extremely easy with a 3rd-party renderer like =>[http://www.princexml.com|Prince]. ] -]</code></pre></div><p>Which translates to:</p> -<div class='html'><pre><code><div class="section"> +]</code></pre> +</div> +<p>Which translates to:</p> +<div class='html'> + <pre><code><div class="section"> <h2 id="h_1">Something about Glyph</h2> <p>You can use Glyph macros in conjunction with <em>Textile</em> or <em>Markdown</em> to@@ -48,15 +73,20 @@ file, converting it to PDF is
extremely easy with a 3rd-party renderer like <a href="http://www.princexml.com">Prince</a>.</p> </div> -</div></code></pre></div><p>Glyph macros can be used to:</p> +</div></code></pre> +</div> +<p>Glyph macros can be used to:</p> <ul> - <li>Generate block-level <span class="caps">HTML</span> tags not commonly managed by lightweight markups, like <code>head</code>, <code>body</code>, <code>div</code> and <code>table</code>.</li> + <li>Generate block-level <span class="caps">HTML</span> tags not commonly managed by lightweight markups, like + <code>head</code>, <code>body</code>, <code>div</code> and <code>table</code>.</li> <li>Create and validate internal and external links.</li> <li>Include and validate images and figures.</li> <li>Automatically determine header levels based on the document structure.</li> <li>Automatically generate a Table of Contents based on the document structure.</li> - <li>Store common snippets of text in a single <span class="caps">YAML</span> file and use them anywhere in your document, as many times as you need.</li> - <li>Store configuration settings in a <span class="caps">YAML</span> file and use them anywhere in your document, as many times as you need.</li> + <li>Store common snippets of text in a single <span class="caps">YAML</span> file and use them anywhere in your + document, as many times as you need.</li> + <li>Store configuration settings in a <span class="caps">YAML</span> file and use them anywhere in your document, as + many times as you need.</li> <li>Evaluate Ruby code within your document.</li> <li>Call macros from other macros (including snippets), carefully avoiding mutual calls.</li> <li>Include text files in other text files.</li>@@ -64,16 +94,22 @@ <li>Include the contents of configuration settings (author, title) in the document.</li>
<li>Filter input explicitly or implicitly, based on file extensions when including files.</li> <li>Manage comments and todo items.</li> </ul> -<p>An example Glyph project? Sure, Glyph’s own guide (<a href="https://github.com/h3rald/glyph/tree/master/book/">source</a> — <a href="http://cloud.github.com/downloads/h3rald/glyph/glyph.pdf"><span class="caps">PDF</span> output</a>).</p> +<p>An example Glyph project? Sure, Glyph’s own guide (<a + href="https://github.com/h3rald/glyph/tree/master/book/">source</a> — <a + href="http://cloud.github.com/downloads/h3rald/glyph/glyph.pdf"><span class="caps">PDF</span> output</a>).</p> <h3>Technical Details</h3> <p>Glyph is built on top of the following Ruby Gems:</p> <ul> <li><a href="http://github.com/davetron5000/gli">gli</a> — For the high-level command line interface.</li> <li><a href="http://rake.rubyforge.org/">rake</a> — For the mid-level interdependent task layer.</li> - <li><a href="http://treetop.rubyforge.org/">treetop</a> — For parsing Glyph Language, whose grammar is <a href="http://github.com/h3rald/glyph/blob/master/lib/glyph/glyph_language.treetop">ridiculously simple</a>, but it seems to work so far.</li> + <li><a href="http://treetop.rubyforge.org/">treetop</a> — For parsing Glyph Language, whose grammar is <a + href="http://github.com/h3rald/glyph/blob/master/lib/glyph/glyph_language.treetop">ridiculously simple</a>, + but it seems to work so far.</li> <li><a href="http://rubyforge.org/projects/extlib/">extlib</a> — Because I can’t leave without it.</li> </ul> <h3>Disclaimer</h3> -<p>Glyph is <strong>alpha software</strong> (hence the 0.1.0 version number) — handle with care and be aware that <em>everything</em> could change tomorrow. If you want to keep up-to-date and/or provide feedback, feel free to join <a href="http://groups.google.com/group/glyph-framework">Glyph’s User Group</a>.</p> +<p>Glyph is <strong>alpha software</strong> (hence the 0.1.0 version number) — handle with care and be aware that + <em>everything</em> could change tomorrow. If you want to keep up-to-date and/or provide feedback, feel free to join + <a href="http://groups.google.com/group/glyph-framework">Glyph’s User Group</a>.</p> <h3>For more information…</h3> <p>…head over to <a href="/glyph/">Glyph’s homepage</a>.</p>
@@ -29,7 +29,7 @@ <p>Thanks to the wonderful <a href="http://chronic.rubyforge.org/">Chronic</a> library, you can specify your time frames
using natural language expressions like “8 in the morning”, “this tuesday”, “last month” and so on…</p> <p>Here’s a screenshot showing RedBook in action:</p> -<p><img src="/files/redbook.png" alt="" /></p> +<p><img src="/images/redbook.png" alt="" /></p> <p>RedBook is of course free, open source software licensed under the terms of the <span class="caps">BSD</span> license. It can be installed on any machine able to run Ruby and there’s also an <span class="caps">EXE</span> version for the lazy windows folks who don’t want to install Ruby, packed with <a
@@ -4,35 +4,55 @@ content-type: article
timestamp: 1257434357 tags: "review|web20|internet|software" ----- -<p>Since I started using <a href="http://www.twitter.com">Twitter</a> on a regular basis, I felt overwhelmed by the endless stream of data generated by the people I was following.</p> -<p>The official Twitter page quickly became inadequate to manage my tweets, so I began to search for an alternative through the myriad of Twitter clients available out there, both web and desktop based. After trying out a few desktop clients, I decided to restrict the search to web clients only: between work and home, I may use up to 4 different computers and 3 different operating system, and I really didn’t fancy the idea of keeping the <em>same</em> client up-to-date everywhere — even if such client existed.</p> -<p>Over the past months I tried dozens of different web-based Twitter clients, and narrowed the list of <em>must-have</em> features to the following:</p> +<p>Since I started using <a href="http://www.twitter.com">Twitter</a> on a regular basis, I felt overwhelmed by the + endless stream of data generated by the people I was following.</p> +<p>The official Twitter page quickly became inadequate to manage my tweets, so I began to search for an alternative + through the myriad of Twitter clients available out there, both web and desktop based. After trying out a few + desktop clients, I decided to restrict the search to web clients only: between work and home, I may use up to 4 + different computers and 3 different operating system, and I really didn’t fancy the idea of keeping the + <em>same</em> client up-to-date everywhere — even if such client existed.</p> +<p>Over the past months I tried dozens of different web-based Twitter clients, and narrowed the list of + <em>must-have</em> features to the following:</p> <ul> <li>The interface should be simple to use and not too cluttered.</li> <li>I should be able to categorize tweets in columns (à la TweetDeck).</li> <li>I should be able to know, when visiting the site, how many <em>new</em> tweets I have to go through.</li> <li>I should be able to mark tweets as read.</li> <li>It should display media files (at least pictures) inline with the tweets.</li> - <li>The interface should provide all the most common twitter actions like reply, retweet, follow/unfollow, shorten url, upload pictures etc. etc.</li> + <li>The interface should provide all the most common twitter actions like reply, retweet, follow/unfollow, shorten + url, upload pictures etc. etc.</li> </ul> -<p>The good news is that I found at least <em>one</em> web-based client able to do all this: <a href="http://www.journotwit.com">JournoTwit</a>.</p> +<p>The good news is that I found at least <em>one</em> web-based client able to do all this: <a + href="http://www.journotwit.com">JournoTwit</a>.</p> <h3>Introducing JournoTwit</h3> <p>JournoTwit was born – as many software projects – to scratch an itch:</p> <blockquote> -<p>Probably the last thing anyone was expecting me to do — even myself, was to create my own twitter client. However, I’ve been a little fed up with not having the features I wanted and running 5 or 6 accounts, I was getting annoyed at using several different applications just to have them logged in concurrently. […] In under 24 hours I put together a twitter client that functioned enough for me to call it my one and only. A few more days and I added in enough features that I felt it was good enough for public consumption. It is however, not perfect and I have plenty of improvements on my to do list for it.</p> + <p>Probably the last thing anyone was expecting me to do — even myself, was to create my own twitter client. + However, I’ve been a little fed up with not having the features I wanted and running 5 or 6 accounts, I + was getting annoyed at using several different applications just to have them logged in concurrently. […] + In under 24 hours I put together a twitter client that functioned enough for me to call it my one and only. A + few more days and I added in enough features that I felt it was good enough for public consumption. It is + however, not perfect and I have plenty of improvements on my to do list for it.</p> </blockquote> -<p style="padding-left:3em;"><cite><a href="http://www.spodesabode.com/discussion/280/journotwit-the-twitter-client-thats-not-just-for-journalists/">JournoTwit’s introductory post</a></cite> by Andrew Spode Miller (<a href="http://twitter.com/spode">@spode</a>)</p> -<p>After months of <em>public consumption</em>, JournoTwit became a feature-packed Twitter client able to compete with a lot of mainstream alternatives – albeit remaining always relatively unknown to the masses. You can call it a <em>niche</em> Twitter client, able to satisfy a few basic needs:</p> +<p style="padding-left:3em;"><cite><a + href="http://www.spodesabode.com/discussion/280/journotwit-the-twitter-client-thats-not-just-for-journalists/">JournoTwit’s + introductory post</a></cite> by Andrew Spode Miller (<a href="http://twitter.com/spode">@spode</a>)</p> +<p>After months of <em>public consumption</em>, JournoTwit became a feature-packed Twitter client able to compete with a + lot of mainstream alternatives – albeit remaining always relatively unknown to the masses. You can call it a + <em>niche</em> Twitter client, able to satisfy a few basic needs:</p> <ul> <li>The ability to manage multiple Twitter accounts at once.</li> - <li>The ability to categorize all incoming tweets automatically, according to the type of information within them.</li> + <li>The ability to categorize all incoming tweets automatically, according to the type of information within them. + </li> <li>The ability to keep track of unread tweets.</li> </ul> -<p>These three features alone were enough to make JournoTwit my one and only Twitter client. And no, it’s not only for journalists and writers.</p> +<p>These three features alone were enough to make JournoTwit my one and only Twitter client. And no, it’s not only + for journalists and writers.</p> <h3>Interface overview</h3> <p>After logging in, JournoTwit looks like this:</p> -<p><img src="/img/pictures/journotwit/interface.png" alt="" /></p> -<p><b>Note:</b> I am using the <em> <a href="http://www.journotwit.com/edge/">edge</a> </em> version of JournoTwit, a sort of development snapshot with the latest features.</p> +<p><img src="/images/pictures/journotwit/interface.png" alt="" /></p> +<p><b>Note:</b> I am using the <em> <a href="http://www.journotwit.com/edge/">edge</a> </em> version of JournoTwit, a + sort of development snapshot with the latest features.</p> <p>At the top, some more-or-less intuitive icons allow you to perform all the most common <em>global</em> actions:</p> <ul> <li>Tweet</li>@@ -43,14 +63,16 @@ <li>Quick search</li>
<li>Edit settings</li> <li>Logout</li> </ul> -<p>Next to this global toolbar, there’s a list of links, each corresponding to a column. Clicking a link toggles the visibility of the corresponding column.</p> +<p>Next to this global toolbar, there’s a list of links, each corresponding to a column. Clicking a link toggles + the visibility of the corresponding column.</p> <p>In each column, tweets are displayed in different column according to their state:</p> <ul> <li>Read</li> <li>Unread</li> <li>Selected</li> </ul> -<p>You can select one tweet at a time by clicking the <strong>+</strong> icon. This toggles the tweet-specific actions:</p> +<p>You can select one tweet at a time by clicking the <strong>+</strong> icon. This toggles the tweet-specific actions: +</p> <ul> <li>Reply</li> <li>Send a direct message</li>@@ -60,57 +82,81 @@ <li>Translate</li>
</ul> <p>Pretty intuitive and easy to use, so far.</p> <h3>Default columns</h3> -<p>When you login, you’ll notice that all your tweets are <em>not</em> presented in the traditional, disorganized single-column stream layout. Instead, they are <em>sorted automatically</em> into different columns, according to their type:</p> +<p>When you login, you’ll notice that all your tweets are <em>not</em> presented in the traditional, disorganized + single-column stream layout. Instead, they are <em>sorted automatically</em> into different columns, according to + their type:</p> <dl> <dt>My Feed</dt> <dd>All the tweets <em>you</em> sent. By default, this column is minimized.</dd> <dt>No-Mention</dt> - <dd>All tweets containing your username without the “@”, i.e. every time someone mentions you sneakily, without sending you a reply.</dd> + <dd>All tweets containing your username without the “@”, i.e. every time someone mentions you sneakily, + without sending you a reply.</dd> <dt>Messages</dt> <dd>All the direct messages you sent and received.</dd> <dt>Mentions</dt> <dd>All the tweets containing your twitter username (with “@”), such as replies to your tweets.</dd> <dt>Statuses</dt> - <dd>All the tweets posted by people you follow that do not contain any link or cannot be categorized through other columns.</dd> + <dd>All the tweets posted by people you follow that do not contain any link or cannot be categorized through other + columns.</dd> <dt>News</dt> <dd>All the tweets posted by people you follow containing links to articles or non-multimedia web pages.</dd> <dt>Retweets</dt> <dd>All the retweets posted by people you follow.</dd> <dt>Visual</dt> - <dd>All the tweets posted by people you follow containing links to pictures or videos. Where possible, media is displayed inside the tweet.</dd> + <dd>All the tweets posted by people you follow containing links to pictures or videos. Where possible, media is + displayed inside the tweet.</dd> <dt>Audio</dt> <dd>Same as above, but for audio items.</dd> <dt>Chatter</dt> <dd>Attempts to collect all conversations involving you or people you follow.</dd> </dl> -<p>Surprisingly, these default columns are enough to make your Twitter experience easier and more manageable, without configure a single setting. They’re obviously not perfect: some images are not resolved automatically, for example, but it works well otherwise.</p> -<p>Still this may not be enough for your needs or maybe simply not the right thing. No problem: JournoTwit is extremely flexible when it comes to organizing and sorting out your tweets.</p> +<p>Surprisingly, these default columns are enough to make your Twitter experience easier and more manageable, without + configure a single setting. They’re obviously not perfect: some images are not resolved automatically, for + example, but it works well otherwise.</p> +<p>Still this may not be enough for your needs or maybe simply not the right thing. No problem: JournoTwit is extremely + flexible when it comes to organizing and sorting out your tweets.</p> <h3>Adding new columns</h3> -<p>All columns except for <em>Mentions</em> and <em>Messages</em> can be modified as you see fit. These two columns cannot be modified simply because there’s nothing you <em>need</em> to modify it, if you think about it. But they can be deleted, of course (and re-created in a blink, if you delete them by mistake).</p> +<p>All columns except for <em>Mentions</em> and <em>Messages</em> can be modified as you see fit. These two columns + cannot be modified simply because there’s nothing you <em>need</em> to modify it, if you think about it. But + they can be deleted, of course (and re-created in a blink, if you delete them by mistake).</p> <p>Let’s go through the slightly geeky process of creating a column.</p> -<p>When you click the <b>Add New Columns</b> icon on the top-left corner you’ll be prompted to further clarify whether you want to add a…</p> +<p>When you click the <b>Add New Columns</b> icon on the top-left corner you’ll be prompted to further clarify + whether you want to add a…</p> <ul> - <li>Set of Columns: i.e. the default columns provided by journotwit <em>or</em> a single column containing all the tweets. Useful if you mess things up and you want to start over again.</li> - <li>Preset Column: choose from many different columns according to your needs, from different tweet types to memes (#followfriday, #musicmonday, etc.).</li> + <li>Set of Columns: i.e. the default columns provided by journotwit <em>or</em> a single column containing all the + tweets. Useful if you mess things up and you want to start over again.</li> + <li>Preset Column: choose from many different columns according to your needs, from different tweet types to memes + (#followfriday, #musicmonday, etc.).</li> <li>Custom Column: create your own personal column, according to your specific needs.</li> </ul> -<p>Because the overwhelming majority of my readers is composed by geeks, I’ll just describe how to create a custom column, so that you can fully understand the power of this tool, in the right hands.</p> +<p>Because the overwhelming majority of my readers is composed by geeks, I’ll just describe how to create a custom + column, so that you can fully understand the power of this tool, in the right hands.</p> <h3>Adding a custom column</h3> -<p style="float:right;"><img src="/img/pictures/journotwit/custom_column.png" alt="" /></p> -<p>The creation of a custom column doesn’t take long, but there are quite a few things you can configure. First off, you have to specify whether you want the column to collect <em>local</em> or <em>global</em> tweets: local means the people you follow, while global means everyone on the planet. Simple enough.</p> -<p>Then comes the juicy geeky part: search terms and tags. Simply type a valid <a href="http://search.twitter.com/operators">Twitter Search query</a> in the textbox, so something like this:</p> +<p style="float:right;"><img src="/images/pictures/journotwit/custom_column.png" alt="" /></p> +<p>The creation of a custom column doesn’t take long, but there are quite a few things you can configure. First + off, you have to specify whether you want the column to collect <em>local</em> or <em>global</em> tweets: local + means the people you follow, while global means everyone on the planet. Simple enough.</p> +<p>Then comes the juicy geeky part: search terms and tags. Simply type a valid <a + href="http://search.twitter.com/operators">Twitter Search query</a> in the textbox, so something like this:</p> <p><code>from:jonobacon OR #ubuntu -jaunty</code></p> -<p>…will hopefully fetch all tweets posted by <a href="http://www.twitter.com/jonobacon">@jonobacon</a> or tweets about Ubuntu, but not related to the Jaunty Jackalope release. You can also add more text box and thus perform more search queries within the same column.</p> -<p>Then you can filter by tweet type, enabling or disabling Statuses, Visual, Links, Audio, ReTweets and Chatter. Useful to remove the noise (if you follow <a href="http://www.twitter.com/brentspiner">@brentspiner</a>, make sure you disable <em>ReTweets</em>…).</p> +<p>…will hopefully fetch all tweets posted by <a href="http://www.twitter.com/jonobacon">@jonobacon</a> or tweets + about Ubuntu, but not related to the Jaunty Jackalope release. You can also add more text box and thus perform more + search queries within the same column.</p> +<p>Then you can filter by tweet type, enabling or disabling Statuses, Visual, Links, Audio, ReTweets and Chatter. Useful + to remove the noise (if you follow <a href="http://www.twitter.com/brentspiner">@brentspiner</a>, make sure you + disable <em>ReTweets</em>…).</p> <p>Finally, you only have to configure a few more settings:</p> <ul> <li>Whether you want to be alerted with a <em>beep</em> when there are new tweets in this column.</li> <li>Whether you want the column to display tweets, a tag cloud or even an image slideshow.</li> <li>The name of the column.</li> </ul> -<p>That’s all. Simple enough. As a side note, the “No-Mention” column is nothing but a custom column in disguise: if you try to edit it, you’ll see it’s nothing but a search for “<em>username</em> -<em>@username</em> -from:<em>username</em>”.</p> +<p>That’s all. Simple enough. As a side note, the “No-Mention” column is nothing but a custom column + in disguise: if you try to edit it, you’ll see it’s nothing but a search for “<em>username</em> + -<em>@username</em> -from:<em>username</em>”.</p> <h3>Other features and advanced settings</h3> -<p>For the tweakers, JournoTwit also exposes the a set of global settings you can modify to enhance your experience or disable annoying behaviors (depends how you look at it):</p> +<p>For the tweakers, JournoTwit also exposes the a set of global settings you can modify to enhance your experience or + disable annoying behaviors (depends how you look at it):</p> <h4>Behavior</h4> <ul> <li>Unhide column when new tweets arrive? (default: yes)</li>@@ -126,20 +172,29 @@ <li>Show “Did You Know?” messages on refresh? (default: yes)</li>
<li>Slide show transition time(s) (default: 5)</li> </ul> <h4>Display Adjustment</h4> -<p>If you are unsatisfied by JournoTwit’s default look and feel, you can change the fond size, the color theme (there are 18 possible choices) and even match the color of the icons with the current theme.</p> +<p>If you are unsatisfied by JournoTwit’s default look and feel, you can change the fond size, the color theme + (there are 18 possible choices) and even match the color of the icons with the current theme.</p> <h4>Black Listing</h4> <p>Straight from the contextual help:</p> <blockquote> -<p>“Here you globally black list a #hashtag, such as #microsoft, or a search phrase such as “Windows 7”. Remember to separate them with a space and that you can block on a per column basis too."</p> + <p>“Here you globally black list a #hashtag, such as #microsoft, or a search phrase such as “Windows + 7”. Remember to separate them with a space and that you can block on a per column basis too."</p> </blockquote> <p>This is just what you need when you want to filter out pointless tweets. Use with care though!</p> <h3>Conclusion</h3> -<p>Maybe it’s just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more productive: everything <em>just works, and fast</em>, unlike some of its more feature-boasting competitors. I have been using it on a daily basis for weeks, and I’ve never missed a single tweet since (unless <em>I explicitly wanted to do so</em>).</p> +<p>Maybe it’s just me being a geek, but I think JournoTwit nailed it when it comes to making Twitter more + productive: everything <em>just works, and fast</em>, unlike some of its more feature-boasting competitors. I have + been using it on a daily basis for weeks, and I’ve never missed a single tweet since (unless <em>I explicitly + wanted to do so</em>).</p> <p>That being said, there are a few small features I’d like to see:</p> <ul> - <li>I’d like to be able to mark <em>single tweets</em>, not entire columns, as read. In this way, when I go on vacation and come back, I can catch up with unread tweets more gradually, like I do with Google Reader.</li> + <li>I’d like to be able to mark <em>single tweets</em>, not entire columns, as read. In this way, when I go on + vacation and come back, I can catch up with unread tweets more gradually, like I do with Google Reader.</li> <li>I’d like to use shortcut keys to navigate the interface, like with Google Reader.</li> - <li>I’d like to configure tweets so that they only show up in one column, not in more than one (for example in Chatter, My Feed, and Mentions at the same time).</li> + <li>I’d like to configure tweets so that they only show up in one column, not in more than one (for example in + Chatter, My Feed, and Mentions at the same time).</li> <li>Support for Twitter Lists…</li> </ul> -<p>I already told <a href="http://twitter.com/spode">@spode</a> about some of these, and he said he’ll look into it, we’ll see what happens. Anyhow, just <a href="http://www.journotwit.com">give it a try</a>, and see if you like it!</p> +<p>I already told <a href="http://twitter.com/spode">@spode</a> about some of these, and he said he’ll look into + it, we’ll see what happens. Anyhow, just <a href="http://www.journotwit.com">give it a try</a>, and see if you + like it!</p>
@@ -6,51 +6,88 @@ timestamp: 1195971780
tags: "review|programming|software" ----- <p><a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"><br /> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> -</a></p> + <img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> + </a></p> <p><em>What’s your favorite code editor?</em></p> -<p>This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it’s not only one program but several, depending on the language and on the features needed at the time.<br /> -Yes, great, but how do you choose your favorite editor?<br /> -By trying a lot of them of course: that’s what I’ve been doing since I started programming. Lately I’ve become fond of <a href="http://www.vim.org">Vim</a> (or better, gVim), although I have a few other editors I may recommend, e.g.:</p> +<p>This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every + programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of + the times it’s not only one program but several, depending on the language and on the features needed at the + time.<br /> + Yes, great, but how do you choose your favorite editor?<br /> + By trying a lot of them of course: that’s what I’ve been doing since I started programming. Lately + I’ve become fond of <a href="http://www.vim.org">Vim</a> (or better, gVim), although I have a few other + editors I may recommend, e.g.:</p> <ul> <li><a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a></li> <li><a href="http://intype.info/home/index.php">Intype</a></li> <li><a href="http://scintilla.sourceforge.net/SciTE.html">SciTE</a></li> </ul> -<p>Recently, however, I came across my <em>n^th^</em> “what’s your favorite editor” thread and someone mentioned <a href="http://www.activestate.com/Products/komodo_edit/">Komodo Edit</a>. I knew of it already, actually, but I never had a chance to give it a <em>proper</em> try. <br /> -ActiveState is well known mainly for two things:</p> +<p>Recently, however, I came across my <em>n^th^</em> “what’s your favorite editor” thread and someone + mentioned <a href="http://www.activestate.com/Products/komodo_edit/">Komodo Edit</a>. I knew of it already, + actually, but I never had a chance to give it a <em>proper</em> try. <br /> + ActiveState is well known mainly for two things:</p> <ul> <li>Their effort in offering a lot of commercial, windows-based Perl libraries</li> - <li>Their commercial <span class="caps">IDE</span>, Komodo <span class="caps">IDE</span>, which I personally tried quite a long time ago</li> + <li>Their commercial <span class="caps">IDE</span>, Komodo <span class="caps">IDE</span>, which I personally tried + quite a long time ago</li> </ul> <p>The problems of Komodo <span class="caps">IDE</span> are foundamentally two:</p> <ul> <li>It costs money – this is not great in a world where Eclipse and Netbeans are free</li> <li>It is an <span class="caps">IDE</span> – which normally means <em>‘heavy as hell’</em>.</li> </ul> -<p>It’s a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an <span class="caps">IDE</span> may be the best solution, despite its potential slowness and bulk.</p> +<p>It’s a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, + while sometimes an <span class="caps">IDE</span> may be the best solution, despite its potential slowness and bulk. +</p> <p>Komodo Edit solves the above-mentioned problems because:</p> <ul> <li>It’s free</li> <li>It’s an editor</li> </ul> -<p>Actually I wouldn’t call it an editor, because it offers quite a lot of features which are normally absent in editors — it’s something in-between, which definitely deserves a try.</p> +<p>Actually I wouldn’t call it an editor, because it offers quite a lot of features which are normally absent in + editors — it’s something in-between, which definitely deserves a try.</p> <h2>User interface</h2> -<p>Komodo Edit’s interface is one of the most clear I’ve ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you <span class="caps">REALLY</span> need, unlike Notepad++’s 31-button-bar).</p> -<p><img src="/files/komodo_main.png" alt="" /></p> -<p>The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that’s up to you really.</p> -<p style="float:left;"><img src="/files/komodo_show-hide_pane.png" alt="" /></p> -<p>Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of <span class="caps">IDE</span> do, but this is <strong><span class="caps">NOT</span></strong> an <span class="caps">IDE</span>, remember? It’s an <em>editor</em>, or at least it is advertised as such.</p> -<p>In reality it has <em>most</em> of the power of a full-blown <span class="caps">IDE</span> though normally remaining under the 60K memory usage (out of 2GB of total <span class="caps">RAM</span>) — which is not that bad, considering what Eclipse and NetBeans need.<br /> -Out of all the <a href="http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex">extra features</a> offered by Komodo <span class="caps">IDE</span>, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/<span class="caps">IDE</span> of choice (when gVim isn’t looking, of course…)</p> +<p>Komodo Edit’s interface is one of the most clear I’ve ever come across. It is organized in four main + areas plus the top menu and toolbar (which only has the buttons you <span class="caps">REALLY</span> need, unlike + Notepad++’s 31-button-bar).</p> +<p><img src="/images/komodo_main.png" alt="" /></p> +<p>The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the + bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show + and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and + Command Output panes hidden, but that’s up to you really.</p> +<p style="float:left;"><img src="/images/komodo_show-hide_pane.png" alt="" /></p> +<p>Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best + editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, + saving you a lot of time. Granted, a lot of <span class="caps">IDE</span> do, but this is <strong><span + class="caps">NOT</span></strong> an <span class="caps">IDE</span>, remember? It’s an <em>editor</em>, + or at least it is advertised as such.</p> +<p>In reality it has <em>most</em> of the power of a full-blown <span class="caps">IDE</span> though normally remaining + under the 60K memory usage (out of 2GB of total <span class="caps">RAM</span>) — which is not that bad, + considering what Eclipse and NetBeans need.<br /> + Out of all the <a href="http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex">extra features</a> offered + by Komodo <span class="caps">IDE</span>, the only one I truly miss is the Code Browser. Other than that, it quickly + became my editor/<span class="caps">IDE</span> of choice (when gVim isn’t looking, of course…)</p> <p>Lets find out why…</p> <h2>Editing features</h2> -<p>Komodo Edit comes with all the editing features of ever average editor, so <em>“[…] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on “save”."</em>, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting.</p> -<p>This is good, of course, as Scintilla is an excellent editing component, but – I have to say this – not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can’t really complain!).<br /> -As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn’t mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy.</p> +<p>Komodo Edit comes with all the editing features of ever average editor, so <em>“[…] Code commenting, + auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character + as raw literal, repeat next keystroke and clean line endings on “save”."</em>, it uses + Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when + it comes to understanding languages and syntax highlighting.</p> +<p>This is good, of course, as Scintilla is an excellent editing component, but – I have to say this – not + as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can’t really + complain!).<br /> + As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color + scheme to something more stimulating and energy-saving. This doesn’t mean I have to manually re-set the color + of each element, it actually comes with a black-background scheme, which is handy.</p> <h3>Supported Languages & Syntax Highlighting</h3> -<p>Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, <span class="caps">PHP</span>, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or <span class="caps">RHTML</span>.<br /> -Like every scintilla-based editors, it sports a nice <span class="caps">HTML</span> multi-highlighter which allows you to keep putting all the Javascript, <span class="caps">CSS</span> and server-side scripting into the same file, <span class="caps">GREAT</span>! No, you probably wouldn’t want to do that, but it’s a good thing to have.</p> +<p>Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, + Java, <span class="caps">PHP</span>, Python, Ruby, Perl) but it also smart enough to notice framework-specific + syntaxes like Smarty, Django or <span class="caps">RHTML</span>.<br /> + Like every scintilla-based editors, it sports a nice <span class="caps">HTML</span> multi-highlighter which allows + you to keep putting all the Javascript, <span class="caps">CSS</span> and server-side scripting into the same file, + <span class="caps">GREAT</span>! No, you probably wouldn’t want to do that, but it’s a good thing to + have.</p> <h3>Auto-completion</h3> <p>What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports:</p> <ul>@@ -62,32 +99,56 @@ <li><span class="caps">XSLT</span></li>
<li><span class="caps">XML</span></li> <li>Tcl</li> </ul> -<p>Why is this so special? Well, because if you want this you normally need an <span class="caps">IDE</span>, and if you want it for Ruby <span class="caps">AND</span> Python <span class="caps">AND</span> Perl your choices are very limited. <br /> -I played with the Ruby auto-completion features quite a bit, and I’m actually really impressed.</p> -<p style="float:right;"><img src="/files/komodo_auto-completion.png" alt="" /></p> -<p>It can suggest what to write through calltips after a <code>require</code> directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you’re writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with “soft characters support”, which means it will try to match ( [ { when possible, allowing you to <em>write over</em> the completed character if you want to.</p> +<p>Why is this so special? Well, because if you want this you normally need an <span class="caps">IDE</span>, and if you + want it for Ruby <span class="caps">AND</span> Python <span class="caps">AND</span> Perl your choices are very + limited. <br /> + I played with the Ruby auto-completion features quite a bit, and I’m actually really impressed.</p> +<p style="float:right;"><img src="/images/komodo_auto-completion.png" alt="" /></p> +<p>It can suggest what to write through calltips after a <code>require</code> directive, after a . and a ::, and hitting + CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you’re writing, be it a + language keyword, a variable of any kind or a method. Additionally, it comes with “soft characters + support”, which means it will try to match ( [ { when possible, allowing you to <em>write over</em> the + completed character if you want to.</p> <h3>Syntax Checking, Vi/Emacs key bindings and code folding</h3> -<p>The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. <br /> -It also offers “vi emulation”, which is constantly improving through every release – so you won’t forget Vim’s keys when I don’t use it: very nice, and again, hard to find in other editors, nevermind IDEs!</p> +<p>The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding + chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the + script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. <br /> + It also offers “vi emulation”, which is constantly improving through every release – so you + won’t forget Vim’s keys when I don’t use it: very nice, and again, hard to find in other editors, + nevermind IDEs!</p> <h2>Projects and Tools</h2> -<p style="float:right;"><img src="/files/komodo_toolbox.png" alt="" /></p> -<p>The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like <a href="http://www.pspad.com/en/">PSPad</a> do indeed have “projects”, but most of the others don’t. A <em>project</em> in Komodo Edit is normally composed by:</p> +<p style="float:right;"><img src="/images/komodo_toolbox.png" alt="" /></p> +<p>The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found + in editors. Granted, some editors like <a href="http://www.pspad.com/en/">PSPad</a> do indeed have + “projects”, but most of the others don’t. A <em>project</em> in Komodo Edit is normally composed + by:</p> <ul> <li>Some <em>Live Folders</em> including all the source files of the application you’re developing</li> - <li>An optional set of tools, commands, snippets and other goodies which may help you coding that particular application.</li> + <li>An optional set of tools, commands, snippets and other goodies which may help you coding that particular + application.</li> </ul> -<p>It is possible to create these tools by clicking the <strong>Add Item to current project</strong> button in the Projects toolbar or by clicking the <strong>Add Item to Toolbox</strong> button just over the toolbox. <br /> -Either way, you can choose among the following:</p> +<p>It is possible to create these tools by clicking the <strong>Add Item to current project</strong> button in the + Projects toolbar or by clicking the <strong>Add Item to Toolbox</strong> button just over the toolbox. <br /> + Either way, you can choose among the following:</p> <h4>File/Remote File</h4> -<p>Add a file on your local machine or a remote file hosted on a server you configured via <strong>Edit > Preferences > Servers</strong>. Supported protocols are: <span class="caps">FTP</span>,<span class="caps">FTPS</span>, <span class="caps">SFTP</span>, <span class="caps">SCP</span>.</p> +<p>Add a file on your local machine or a remote file hosted on a server you configured via <strong>Edit > Preferences + > Servers</strong>. Supported protocols are: <span class="caps">FTP</span>,<span class="caps">FTPS</span>, + <span class="caps">SFTP</span>, <span class="caps">SCP</span>.</p> <h4>Folder</h4> -<p>This will <em>not</em> link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files.</p> +<p>This will <em>not</em> link to a folder and import local files in Komodo, instead, it will create a container for + other tools, not for local files.</p> <h4>Live Folder</h4> -<p>On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties.</p> +<p>On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it + are automatically imported. Note that it is possible to choose to include or exclude certain files or directories + from being imported by right-clicking the folder and editing its properties.</p> <h4>Command</h4> -<p>This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc.</p> +<p>This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it + will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. + etc.</p> <h4>Snippet</h4> -<p>TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify “tabstops” to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet).</p> +<p>TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to + specify “tabstops” to automatically select certain words when tab is pressed (so you can effectively + fill in only particular fields of the snippet).</p> <h4>Template</h4> <p>A simple but effective way to create code templates.</p> <h4>Url</h4>@@ -95,10 +156,16 @@ <p>A link which will open a given url.</p>
<h4>Open… Shortcut</h4> <p>This will popup an <strong>Open File</strong> dialog in a direcxtory of your choice.</p> <h4>Macro</h4> -<p>For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers.</p> +<p>For those who require even more customization, it is also possible to record or code macros in Python or javascript, + and then configure their key bindings and triggers.</p> <h4>Custom Menu/Custom toolbar</h4> -<p>This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if <em>the editor itself</em> could make those tools available by default in a toolbar or a menu. Well, that’s possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice!</p> -<p>This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application:</p> +<p>This was really impressive. Sure you can group all your tools in folders in your current project or you can create + them in the toolbox to make them available all the time, but it would be cool if <em>the editor itself</em> could + make those tools available by default in a toolbar or a menu. Well, that’s possible: all you need to do is + create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice!</p> +<p>This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, + Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application: +</p> <ul> <li>Create/delete database</li> <li>Generators</li>@@ -107,12 +174,28 @@ <li>Run server</li>
<li>Example view snippets</li> </ul> <h2>Conclusion</h2> -<p>Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice.<br /> -Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there’s still room for improvement, if you’re really fussy.</p> -<p>Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their <span class="caps">IDE</span> to someone at some point!</p> -<p>Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and <span class="caps">VIM</span> both offer. Whydoes it bothers me so much? Well, because I’d like a <a href="http://textism.com/tools/textile/">Textile</a> syntax highlighting scheme for writing blogs and articles. <span class="caps">VIM</span> and Intype seem to be the only ones which offer it out-of-the-box, but there’s no trace of it in Komodo Edit.</p> -<p>Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via <a href="http://community.activestate.com/addons"><span class="caps">XUL</span> extensions</a>, exactly like Firefox. After a closer look, the Django syntax was added in this way.</p> -<p>Unfortunately there aren’t that many extensions available for Komodo Edit, yet, but the <a href="http://community.activestate.com/">Activestate Community</a> seems very active, so you never know. Additionally, the recently-started <a href="http://www.openkomodo.com/">OpenKomodo</a> is a new project created by ActiveState to “[…] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo <span class="caps">IDE</span>, to create the Open Komodo code base”. A new competitor for Eclipse and Netbeans will be available soon?</p> +<p>Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a + smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a + serious coding session, Komodo is the right choice.<br /> + Its close attention to details and its ease of use make developing an even more pleasant experience, although + perhaps there’s still room for improvement, if you’re really fussy.</p> +<p>Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but + after all, ActiveState must sell their <span class="caps">IDE</span> to someone at some point!</p> +<p>Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and + <span class="caps">VIM</span> both offer. Whydoes it bothers me so much? Well, because I’d like a <a + href="http://textism.com/tools/textile/">Textile</a> syntax highlighting scheme for writing blogs and articles. + <span class="caps">VIM</span> and Intype seem to be the only ones which offer it out-of-the-box, but there’s + no trace of it in Komodo Edit.</p> +<p>Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via <a + href="http://community.activestate.com/addons"><span class="caps">XUL</span> extensions</a>, exactly like + Firefox. After a closer look, the Django syntax was added in this way.</p> +<p>Unfortunately there aren’t that many extensions available for Komodo Edit, yet, but the <a + href="http://community.activestate.com/">Activestate Community</a> seems very active, so you never know. + Additionally, the recently-started <a href="http://www.openkomodo.com/">OpenKomodo</a> is a new project created by + ActiveState to “[…] create an open source platform for building developer environments. ActiveState has + open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo <span + class="caps">IDE</span>, to create the Open Komodo code base”. A new competitor for Eclipse and Netbeans + will be available soon?</p> <p><a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"><br /> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> -</a></p> + <img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /><br /> + </a></p>
@@ -41,13 +41,14 @@ <li>Four <em>frames</em>, each describing a lean practice or personal quality</li>
<li>A <em>portrait</em> of a leader</li> <li><em>Your Shot</em>, i.e. some questions and exercises for the readers</li> </ul> - <p><img src="/img/pictures/books/leadingleanswdev.jpg" style="float:right" /></p> + <p><img src="/images/pictures/books/leadingleanswdev.jpg" style="float:right" /></p> <p>In total, the book contains 24 frames constituting the “Big Picture”, which is actually a very powerful framework for lean software leadership. You can read the book’s <span class="caps">TOC</span> <a href="http://www.poppendieck.com/llsd.htm">online</a> on the Poppendieck website and read the book’s Introduction (<a href="http://www.poppendieck.com/pdfs/LLSD_intro.pdf"><span class="caps">PDF</span> link</a>) on the whole concept of <em>framing</em> (yes, both the authors do - love photography!).</p> + love photography!). + </p> <p>When I started my career as a technical writer I used to love carefully-structured, simmetrical manuals. After a while, however, I understood that such rigorous structuring can even be dangerous if it becomes an obsession: you end up adding extra “padding writing” to make sections roughly match in length,@@ -120,7 +121,8 @@ </header>
<p>Chapter 4 starts with a brief history of the checklist, which was invented in 1935, to be used by airplane pilots. It then moves on to its usage in hospitals, describing how checklists helped dropping infections caused by inserting central venous catheters incorrectly. Why all this? To focus on the concept of - <em>process standards</em>, or better, how <em>we</em> can improve processes to accomplish our goals.</p> + <em>process standards</em>, or better, how <em>we</em> can improve processes to accomplish our goals. + </p> <p>Basically, this us what Toyota does: regulations should not be written on stone, but they should reviewed and updated frequently for continuous improvement or <a href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>. </p>@@ -171,7 +173,8 @@ high-level decisions. When it comes to facing changes, leaders should look at the <a
href="http://www.bbrt.org/beyond-budgeting/bbprinc.html">12 principles</a> of the <a href="http://www.bbrt.org/"><span class="caps">BBRT</span></a> leadership model.</p> <p>The final portrait, <em>Leaders at all Levels</em>, well summarizes the key to successful leadership: - <q>leadership is about example, coaching and helping others to achieve their goals</q>.</p> + <q>leadership is about example, coaching and helping others to achieve their goals</q>. + </p> </section> <section class="section">@@ -194,7 +197,8 @@ also because they do teach some very important values or strategies that you <em>must</em> assimilate.</p>
<p>The general message that stands out when reading this book is <em>focus on people</em>. Customers, of course, but also employees: every single successful company mentioned in this book, from Toyota to Southwest Airlines, became successful because they always focused on developing people <em>first</em>, and - <em>then</em> products.</p> + <em>then</em> products. + </p> </section>
@@ -7,101 +7,190 @@ tags: "review|books|software"
pdf: true ----- - <section class="section"> -<p>When this book came out, it was immediately followed by a lot of buzz. Positive reviews started popping up almost instantly, a lot of people blogged about it, it was surrended by a lot of… what’s that word again? Oh yes, <em>hype</em>. The title pissed me off really: who on Earth wants to title his book <a href="http://bit.ly/b08auR">Making it Big in Software</a>? Steve Jobs? Bill Gates?</p> -<p>No, just a guy named <a href="http://lightstone.x10hosting.com/">Sam Lightstone</a>. When I was offered a review copy, I was a bit reluctant to even bother: I thought it was one of those overly-hyped titles that claim to make you famous and successful, but all they do stating the obvious: work hard, be innovative, use your money wisely, etc. Well, this book is not one of them.</p> -<p>When I got my copy, I immediately read the author’s bio on the second-last page of the book: Sam Lightstone runs a site called <a href="http://makingitbigcareers.com/">Making it Big Careers</a> (again, I got instantly worried by this), <em>but</em> also happens to be one of the brightest minds in <span class="caps">IBM</span>, a <a href="http://en.wikipedia.org/wiki/IBM_Master_Inventor"><span class="caps">IBM</span> Master Inventor</a>, author and co-author of 30+ patents.</p> +<section class="section"> + <p>When this book came out, it was immediately followed by a lot of buzz. Positive reviews started popping up almost + instantly, a lot of people blogged about it, it was surrended by a lot of… what’s that word again? + Oh yes, <em>hype</em>. The title pissed me off really: who on Earth wants to title his book <a + href="http://bit.ly/b08auR">Making it Big in Software</a>? Steve Jobs? Bill Gates?</p> + <p>No, just a guy named <a href="http://lightstone.x10hosting.com/">Sam Lightstone</a>. When I was offered a review + copy, I was a bit reluctant to even bother: I thought it was one of those overly-hyped titles that claim to make + you famous and successful, but all they do stating the obvious: work hard, be innovative, use your money wisely, + etc. Well, this book is not one of them.</p> + <p>When I got my copy, I immediately read the author’s bio on the second-last page of the book: Sam Lightstone + runs a site called <a href="http://makingitbigcareers.com/">Making it Big Careers</a> (again, I got instantly + worried by this), <em>but</em> also happens to be one of the brightest minds in <span class="caps">IBM</span>, a + <a href="http://en.wikipedia.org/wiki/IBM_Master_Inventor"><span class="caps">IBM</span> Master Inventor</a>, + author and co-author of 30+ patents.</p> -<p><img src="/img/pictures/books/making-it-big.jpg" class="right" /><br /> -The 17 exclusive interviews with software gurus, visionaries, minor and major deities of the IT world are definitely worth the 24.99$ this book costs <em>on their own</em>. This was one of the major selling points of the book itself (as the merry-looking pictures of Marissa Mayer, James Gosling, Steve Wozniak and John Schwarz on the cover suggest), but far from being the only one. The interviews are strategically placed throughout the book, as supporting material for the author’s advice: if you don’t believe him, you will believe those who <em>made it</em>. Anyhow, let’s say something about the book itself, shall we?</p> -<p><em>Making it Big with Software</em> is divided into three parts:</p> -<ul> - <li><strong>Part I: Fundamentals</strong> — all you need to know to get hired. Finish school, learn new things, and get a job in the Software industry.</li> - <li><strong>Part II: Leadership</strong> — tips on what to do to start climbing the corporate ladder, from junior to senior manager.</li> - <li><strong>Part <span class="caps">III</span>: Greatness</strong> — go beyond a successful career and become a luminary in IT, an example for future generations (and earn the big bucks).</li> -</ul> + <p><img src="/images/pictures/books/making-it-big.jpg" class="right" /><br /> + The 17 exclusive interviews with software gurus, visionaries, minor and major deities of the IT world are + definitely worth the 24.99$ this book costs <em>on their own</em>. This was one of the major selling points of + the book itself (as the merry-looking pictures of Marissa Mayer, James Gosling, Steve Wozniak and John Schwarz + on the cover suggest), but far from being the only one. The interviews are strategically placed throughout the + book, as supporting material for the author’s advice: if you don’t believe him, you will believe + those who <em>made it</em>. Anyhow, let’s say something about the book itself, shall we?</p> + <p><em>Making it Big with Software</em> is divided into three parts:</p> + <ul> + <li><strong>Part I: Fundamentals</strong> — all you need to know to get hired. Finish school, learn new + things, and get a job in the Software industry.</li> + <li><strong>Part II: Leadership</strong> — tips on what to do to start climbing the corporate ladder, from + junior to senior manager.</li> + <li><strong>Part <span class="caps">III</span>: Greatness</strong> — go beyond a successful career and + become a luminary in IT, an example for future generations (and earn the big bucks).</li> + </ul> <section class="section"> -<header><h1 id="h_1" class="toc">Part I: Fundamentals</h1></header> -<p>After two introductory chapters, aimed at answering questions like “Why bother?” or “What do big shots in software do?”, the book starts analyzing what graduates get when they get out of school. I was really taken by the following paragraph, outlining the main difference between school and work:</p> -<blockquote> -<p>[…] although schools encourage students to do their own work, on penalty of expulsion or severe reprimand, professional work is saturated with the ubiquitous mantra of “teamwork.” In school, your success depends on individual effort, whereas professional life depends frequently on your ability to work in teams.</p> -</blockquote> -<p>So true. I never thought about it until I read it in this book. And this is a common causes of failure in the workplace: not being able to work in a team. It’s understandable: after years of striving to be the best, to do things for yourself, you’re suddenly asked to work for and with others.</p> -<p>The author gives junior graduates some useful tips to get a job in software development (or the software industry in general), with some useful tips on how to create a proper résumé, how to survive interviews, the usual. Hell I wish I had this book when I started!</p> -<p>Readers like me who already have a job should not dismiss this part. Maybe skim through the first few chapters, but towards the end there are some useful suggestions on how to build essential interpersonal skills and a nicely-written chapter about <em>career killers</em>.</p> + <header> + <h1 id="h_1" class="toc">Part I: Fundamentals</h1> + </header> + <p>After two introductory chapters, aimed at answering questions like “Why bother?” or “What + do big shots in software do?”, the book starts analyzing what graduates get when they get out of + school. I was really taken by the following paragraph, outlining the main difference between school and + work:</p> + <blockquote> + <p>[…] although schools encourage students to do their own work, on penalty of expulsion or severe + reprimand, professional work is saturated with the ubiquitous mantra of “teamwork.” In + school, your success depends on individual effort, whereas professional life depends frequently on your + ability to work in teams.</p> + </blockquote> + <p>So true. I never thought about it until I read it in this book. And this is a common causes of failure in the + workplace: not being able to work in a team. It’s understandable: after years of striving to be the + best, to do things for yourself, you’re suddenly asked to work for and with others.</p> + <p>The author gives junior graduates some useful tips to get a job in software development (or the software + industry in general), with some useful tips on how to create a proper résumé, how to survive + interviews, the usual. Hell I wish I had this book when I started!</p> + <p>Readers like me who already have a job should not dismiss this part. Maybe skim through the first few + chapters, but towards the end there are some useful suggestions on how to build essential interpersonal + skills and a nicely-written chapter about <em>career killers</em>.</p> -</section> + </section> <section class="section"> -<header><h1 id="h_2" class="toc">Part II: Leadership</h1></header> -<p>The second part of the book opens with <strong>Chapter 9</strong>, Working the Org, which I found most amusing for the funny, but insightful, <em>Negotiating 101</em> section. Again, particular emphasis is put on non-technical skills, which are however essential for success. I particularly enjoyed reading this part of the book, because I could relate to it, being a Technical Leader myself.</p> -<p><strong>Chapter 12</strong> is a must-read, as the author himself says:</p> -<blockquote> -<p>If you read only one chapter in this book, this should probably be the one.</p> -</blockquote> -<p>If you never read anything about time management, you rhave to read this, as it helps you realize how much time you waste, why, and what you can do to improve the situation. I attended a course on the subject at work, a while ago, and I was shocked to read most of the stuff I learned at that course so tidily organized in no-nonsense prose in this chapter. Granted, it doesn’t substitute a time management course or practical experience with managing your priorities, but it is a good starting point.</p> -<p><strong>Chapter 14</strong> deals with <em>Zen and the critical art of balance [between work and personal life]</em>. The diagram on page 249 scared the hell out of me. Here it is, transposed in tabular form:</p> -<table> -<tr> - <th>Desired State</th> - <th>Current State</th> -</tr> -<tr> - <td>Work: 9 hours</td> - <td>Work: 13 hours</td> -</tr> -<tr> - <td>Sleep: 8 hours</td> - <td>Sleep: 6 hours</td> -</tr> -<tr> - <td>Travel: 1 hour</td> - <td>Travel: 2 hours</td> -</tr> -<tr> - <td>Family & Leisure: 4 hours</td> - <td>Family & Leisure: 1 hours</td> -</tr> -<tr> - <td>Chores & Hygiene: 2 hours</td> - <td>Chores & Hygiene: 2 hours</td> -</tr> -</table> -<p><em>Thirtheen hours</em>? Really? If <em>you</em> work 13-hour days then you have to read this chapter <em>and put it into practice</em> instantly or you’ll regret it. Luckily <em>I</em> manage to work most of the time for 8 hours a day (as everyone should, by law).</p> -<p>Another chapter I particularly enjoyed (and will re-read periodically) is <strong>Chapter16</strong>, which contains the best definition of leadership I ever came across:</p> -<blockquote> -<p>“Leadership is communicating to people their worth and potential so clearly that they come to see it in themselves.”</p> -</blockquote> - <p style="margin-left: 4em">– Stephen Covey</p> -<p>Again, this chapter teaches you the basics on leadership and management. If you didn’t take a course on the subject yet, it’s definitely worth a read.</p> + <header> + <h1 id="h_2" class="toc">Part II: Leadership</h1> + </header> + <p>The second part of the book opens with <strong>Chapter 9</strong>, Working the Org, which I found most + amusing for the funny, but insightful, <em>Negotiating 101</em> section. Again, particular emphasis is put + on non-technical skills, which are however essential for success. I particularly enjoyed reading this part + of the book, because I could relate to it, being a Technical Leader myself.</p> + <p><strong>Chapter 12</strong> is a must-read, as the author himself says:</p> + <blockquote> + <p>If you read only one chapter in this book, this should probably be the one.</p> + </blockquote> + <p>If you never read anything about time management, you rhave to read this, as it helps you realize how much + time you waste, why, and what you can do to improve the situation. I attended a course on the subject at + work, a while ago, and I was shocked to read most of the stuff I learned at that course so tidily organized + in no-nonsense prose in this chapter. Granted, it doesn’t substitute a time management course or + practical experience with managing your priorities, but it is a good starting point.</p> + <p><strong>Chapter 14</strong> deals with <em>Zen and the critical art of balance [between work and personal + life]</em>. The diagram on page 249 scared the hell out of me. Here it is, transposed in tabular form: + </p> + <table> + <tr> + <th>Desired State</th> + <th>Current State</th> + </tr> + <tr> + <td>Work: 9 hours</td> + <td>Work: 13 hours</td> + </tr> + <tr> + <td>Sleep: 8 hours</td> + <td>Sleep: 6 hours</td> + </tr> + <tr> + <td>Travel: 1 hour</td> + <td>Travel: 2 hours</td> + </tr> + <tr> + <td>Family & Leisure: 4 hours</td> + <td>Family & Leisure: 1 hours</td> + </tr> + <tr> + <td>Chores & Hygiene: 2 hours</td> + <td>Chores & Hygiene: 2 hours</td> + </tr> + </table> + <p><em>Thirtheen hours</em>? Really? If <em>you</em> work 13-hour days then you have to read this chapter + <em>and put it into practice</em> instantly or you’ll regret it. Luckily <em>I</em> manage to work + most of the time for 8 hours a day (as everyone should, by law).</p> + <p>Another chapter I particularly enjoyed (and will re-read periodically) is <strong>Chapter16</strong>, which + contains the best definition of leadership I ever came across:</p> + <blockquote> + <p>“Leadership is communicating to people their worth and potential so clearly that they come to see + it in themselves.”</p> + </blockquote> + <p style="margin-left: 4em">– Stephen Covey</p> + <p>Again, this chapter teaches you the basics on leadership and management. If you didn’t take a course on + the subject yet, it’s definitely worth a read.</p> -</section> + </section> <section class="section"> -<header><h1 id="h_3" class="toc">Part III: Greatness</h1></header> -<p>I particularly enjoyed the first two chapters of this last part: <strong>Chapter 17</strong> and <strong>Chapter 18</strong> are about <em>innovation</em>, which I found to be the fastest and best way to get noticed in a company.</p> -<p>These two chapters won’t teach you to become a genius or an inventor, but they do provide help on the subject: why innovating is important, how to innovate and what to do once your idea gets a shape. The <em>Patenting</em>, <em>Publishing</em> and <em>Public Speaking</em> sections in chapter 8 are useful and practical, and deserve a good read. Again, the book does not go too in-depth, but the author provides just enough information to make you aware of the main issues.</p> -<p>The final chapters of the book felt a bit distant from my current work reality. Business talk, stock options, startups, acquisitions… They may interest some readers with an enterpreneurial mindset, but not me, at least not now. Nonetheless, business and politics pay a very important role in any IT job, so it’s wise to be aware of them.</p> + <header> + <h1 id="h_3" class="toc">Part III: Greatness</h1> + </header> + <p>I particularly enjoyed the first two chapters of this last part: <strong>Chapter 17</strong> and + <strong>Chapter 18</strong> are about <em>innovation</em>, which I found to be the fastest and best way to + get noticed in a company.</p> + <p>These two chapters won’t teach you to become a genius or an inventor, but they do provide help on the + subject: why innovating is important, how to innovate and what to do once your idea gets a shape. The + <em>Patenting</em>, <em>Publishing</em> and <em>Public Speaking</em> sections in chapter 8 are useful and + practical, and deserve a good read. Again, the book does not go too in-depth, but the author provides just + enough information to make you aware of the main issues.</p> + <p>The final chapters of the book felt a bit distant from my current work reality. Business talk, stock options, + startups, acquisitions… They may interest some readers with an enterpreneurial mindset, but not me, at + least not now. Nonetheless, business and politics pay a very important role in any IT job, so it’s + wise to be aware of them.</p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">The Interviews</h1></header> -<p>The 17 interviews with software gurus, miracle workers and other extremely successful chaps make up for about the 20% of the book. They are carefully placed by the author in specific places of the book where they make the most sense (well, most of the time). Every person had to answer a similar set of questions, like “How did you get started in software”, “How do you stay on top of technology trends and innovation?” or “Technical leaders and executives are famous for being time-strapped. What strategies do you use to stay sane and use your time effectively?”.</p> -<p>Every interviews has at least one personal anecdotes. Some feel almost legendary, like the following:</p> -<blockquote> -<p>In 1967, at the age of 12, I dreamed of making a difference in the field of computer science. I went off to the local <span class="caps">IBM</span> office, literally knocked on their door, and said, “I will do anything for the summer-empty trash cans, you name it.” They said, “Go away kid.” But there was a sales guy who took pity upon me and threw me a nice Fortran IV [<span class="caps">IBM</span> Mathematical Formula Translating System] manual, with the expectation that I’d probably read it and get bored and never come back. But much to his surprise, I came back the following Monday and said, “Hey, this is cool! I just wrote a program and I want to run it.” The sales guy was so impressed that he found me an open computer to work on where I could teach myself how to keypunch, program, and debug for what I still recall as a delightful summer.</p> -</blockquote> - <p style="margin-left: 4em">– Grady Booch, <span class="caps">IBM</span> Fellow and Chief Scientist for Software Engineering, <span class="caps">IBM</span> Research</p> -<p>Every interview provides at least a good piece of advice for newcomers to the field. The last chapter of the book summarizes the interviews attempting to draw the profile of the successful IT professional: some founded their own companies, other climbed up the corporate ladder, a few contributed with key inventions (email, the Internet, …) that changed society as we know it. Different levels of greatness, and different ways to reach it: this is what this book is really about.</p> + </section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">The Interviews</h1> + </header> + <p>The 17 interviews with software gurus, miracle workers and other extremely successful chaps make up for about + the 20% of the book. They are carefully placed by the author in specific places of the book where they make + the most sense (well, most of the time). Every person had to answer a similar set of questions, like + “How did you get started in software”, “How do you stay on top of technology trends and + innovation?” or “Technical leaders and executives are famous for being time-strapped. What + strategies do you use to stay sane and use your time effectively?”.</p> + <p>Every interviews has at least one personal anecdotes. Some feel almost legendary, like the following:</p> + <blockquote> + <p>In 1967, at the age of 12, I dreamed of making a difference in the field of computer science. I went off + to the local <span class="caps">IBM</span> office, literally knocked on their door, and said, “I + will do anything for the summer-empty trash cans, you name it.” They said, “Go away + kid.” But there was a sales guy who took pity upon me and threw me a nice Fortran IV [<span + class="caps">IBM</span> Mathematical Formula Translating System] manual, with the expectation that + I’d probably read it and get bored and never come back. But much to his surprise, I came back the + following Monday and said, “Hey, this is cool! I just wrote a program and I want to run it.” + The sales guy was so impressed that he found me an open computer to work on where I could teach myself + how to keypunch, program, and debug for what I still recall as a delightful summer.</p> + </blockquote> + <p style="margin-left: 4em">– Grady Booch, <span class="caps">IBM</span> Fellow and Chief Scientist for + Software Engineering, <span class="caps">IBM</span> Research</p> + <p>Every interview provides at least a good piece of advice for newcomers to the field. The last chapter of the + book summarizes the interviews attempting to draw the profile of the successful IT professional: some + founded their own companies, other climbed up the corporate ladder, a few contributed with key inventions + (email, the Internet, …) that changed society as we know it. Different levels of greatness, and + different ways to reach it: this is what this book is really about.</p> -</section> -<section class="section"> -<header><h1 id="h_5" class="toc">Final Thoughts</h1></header> -<p><em>Making it Big in Software</em> is very well organized, in its three main parts. Unless you’re already the <span class="caps">CEO</span> of a multi-million-dollar company, you can learn something from this book, and even if you are, learning how other people <em>made it</em> is always beneficial.</p> -<p>It is not a specialized book, and as such it does not go in depth on anything specific. This is a good thing though, because after you read some of the chapters you feel motivated to learn more about this or that particular topic, skill or problem. In a way, it can be a good surrogate for more specialized books about résumé creation, job interviews, time management, leadership etc.</p> -<p>Overall, I recommend this book to everyone who wants to become successful in the software industry. Success can come to different degrees of course (or not come at all), but if you’re motivated enough and interested in your work, it is definitely within your grasp. <em>Be goal oriented</em>. It’s not enough, but it’s a good start.</p> + </section> + <section class="section"> + <header> + <h1 id="h_5" class="toc">Final Thoughts</h1> + </header> + <p><em>Making it Big in Software</em> is very well organized, in its three main parts. Unless you’re + already the <span class="caps">CEO</span> of a multi-million-dollar company, you can learn something from + this book, and even if you are, learning how other people <em>made it</em> is always beneficial.</p> + <p>It is not a specialized book, and as such it does not go in depth on anything specific. This is a good thing + though, because after you read some of the chapters you feel motivated to learn more about this or that + particular topic, skill or problem. In a way, it can be a good surrogate for more specialized books about + résumé creation, job interviews, time management, leadership etc.</p> + <p>Overall, I recommend this book to everyone who wants to become successful in the software industry. Success + can come to different degrees of course (or not come at all), but if you’re motivated enough and + interested in your work, it is definitely within your grasp. <em>Be goal oriented</em>. It’s not + enough, but it’s a good start.</p> -</section> + </section> </section>
@@ -4,66 +4,135 @@ content-type: article
timestamp: 1197686520 tags: "review|books|rails|ruby" ----- -<p>If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard of <a href="http://mongrel.rubyforge.org/index.html">Mongrel</a> before. If you didn’t, I’d recommend you learn more about it because up to now it proved to be one of the few essential ingredients for deploying <em>scalable</em> Rails applications.</p> -<p>Mongrel is a creation of <a href="http://www.zedshaw.com/">Zed Shaw</a> who started writing a replacement for FastCGI to use with Rails, and ended up creating a brand new, <span class="caps">HTTP</span> web server who turned out to be one of the best things the Rails community ever saw happening.</p> -<p>It was created to be simple to use and configure, nevertheless it <em>does</em> require some skill to set it up and tune it. Documentation is there, along with plenty of blog posts, but there’s also an interesting <a href="http://www.informit.com/store/product.aspx?isbn=0321483502&rl=1">book</a> from <a href="http://www.awprofessional.com/">Addison Wesley Professional</a> which is definetely worth a read.</p> -<p style="float:right;"><img src="/files/mongrel_shortcut.jpeg" alt="" /></p> -<p>“Mongrel: Serving, Deploying, and Extending Your Ruby Applications” – that’s the title of the book. A <em>Digital Shortcut</em>, 100-odd pages long, in <em>landscape</em> format to make it easier to read on a computer, straight to the point with no added sugar for just 15$ (<span class="caps">PDF</span> only). I must say Addison Wesley got it right: the book’s format is, as a matter of fact, <em>optimized for web developers</em>, especially those who can’t afford to read a 500-pages book covering everything about a subject just to find that one thing they don’t know about.<br /> -This <em>shortcut</em> can be seen, essentially, as an expanded cheatsheet which will teach you the basics about Mongrel and also give you plenty of advice on how to learn more about it.</p> +<p>If you ever considered about developing an deploying a Rails application in the last year or so, you must have heard + of <a href="http://mongrel.rubyforge.org/index.html">Mongrel</a> before. If you didn’t, I’d recommend + you learn more about it because up to now it proved to be one of the few essential ingredients for deploying + <em>scalable</em> Rails applications.</p> +<p>Mongrel is a creation of <a href="http://www.zedshaw.com/">Zed Shaw</a> who started writing a replacement for FastCGI + to use with Rails, and ended up creating a brand new, <span class="caps">HTTP</span> web server who turned out to be + one of the best things the Rails community ever saw happening.</p> +<p>It was created to be simple to use and configure, nevertheless it <em>does</em> require some skill to set it up and + tune it. Documentation is there, along with plenty of blog posts, but there’s also an interesting <a + href="http://www.informit.com/store/product.aspx?isbn=0321483502&rl=1">book</a> from <a + href="http://www.awprofessional.com/">Addison Wesley Professional</a> which is definetely worth a read.</p> +<p style="float:right;"><img src="/images/mongrel_shortcut.jpeg" alt="" /></p> +<p>“Mongrel: Serving, Deploying, and Extending Your Ruby Applications” – that’s the title of the + book. A <em>Digital Shortcut</em>, 100-odd pages long, in <em>landscape</em> format to make it easier to read on a + computer, straight to the point with no added sugar for just 15$ (<span class="caps">PDF</span> only). I must say + Addison Wesley got it right: the book’s format is, as a matter of fact, <em>optimized for web developers</em>, + especially those who can’t afford to read a 500-pages book covering everything about a subject just to find + that one thing they don’t know about.<br /> + This <em>shortcut</em> can be seen, essentially, as an expanded cheatsheet which will teach you the basics about + Mongrel and also give you plenty of advice on how to learn more about it.</p> <p>Let’s have a closer look at it.</p> <h3>Overview, Introduction & Getting Started</h3> -<p>The first three <del>chapters</del> sections (there are no chapters, just <em>sections</em>) of the book are meant to be a gentle introduction to Mongrel and its world. The main author is <a href="http://www.informit.com/authors/bio.aspx?a=0260912e-6ed8-4ed1-882a-c357e644feec">Matt Pelletier</a>, but Zed Show’s contributions are definitely one of the book’s best selling points. <br /> -Zed’s thoughts are scattered here and there in many <em>sidebars</em> throughout the book (there’s at least one in each section): you’ll see an odd-looking face (Zed’s self-caricature) with some text next to it; when you read it, you’ll notice that they are <em>actually</em> Zed’s own thoughts, straight from his mind, with no editorial filter whatsoever in-between. <br /> -Be warned: the text included within the <strong>Zed Sez</strong> sidebars is highly opinionated, that’s precisely what Zed <em>feels</em> to say about something, and he’ll just say it: just the plain, simple thoughts of an experienced programmer. As the author explains in <strong>Section 1</strong>: <em>“[…] You may not agree with everything he says, but you probably should.”</em></p> -<p><strong>Section 2</strong> is a general introduction about Mongrel. It explains <em>what</em> it is, <em>when</em> and <em>why</em> it was made, and <em>how</em> it works. There’s nothing new to learn if you already used Mongrel before, probably, but it’s definitely the first thing to show to someone who’s new to Mongrel and its world, and possibly a bit skeptical about it. <br /> -The last subsection <em>“What can Mongrel do for me”</em> is an attempt to <del>brainwash</del> persuade you to fully embrace Mongrel and its philosophy, whether you are a developer, a sysadmin or even a manager: assertions like <em>“Mongrel is pretty damned secure.”</em> and <em>“Mongrel’s license is capitalist-friendly.”</em> will definitaly make some of you (managers) happy.</p> -<p><strong>Section 3</strong> is slightly more juicy than the previous one, as it explains how to install and use Mongrel. Basically that’s what everyone who ever used it already knows, but it’s still necessary for the book’s consistency, after all. After reading this section, you’ll probably have your first Mongrel up and running and serving your little Rails application’s pages, and you’ll begin to wonder why the hell you need to keep reading this book now that everything seems to work already…</p> +<p>The first three <del>chapters</del> sections (there are no chapters, just <em>sections</em>) of the book are meant to + be a gentle introduction to Mongrel and its world. The main author is <a + href="http://www.informit.com/authors/bio.aspx?a=0260912e-6ed8-4ed1-882a-c357e644feec">Matt Pelletier</a>, but + Zed Show’s contributions are definitely one of the book’s best selling points. <br /> + Zed’s thoughts are scattered here and there in many <em>sidebars</em> throughout the book (there’s at + least one in each section): you’ll see an odd-looking face (Zed’s self-caricature) with some text next + to it; when you read it, you’ll notice that they are <em>actually</em> Zed’s own thoughts, straight from + his mind, with no editorial filter whatsoever in-between. <br /> + Be warned: the text included within the <strong>Zed Sez</strong> sidebars is highly opinionated, that’s + precisely what Zed <em>feels</em> to say about something, and he’ll just say it: just the plain, simple + thoughts of an experienced programmer. As the author explains in <strong>Section 1</strong>: <em>“[…] + You may not agree with everything he says, but you probably should.”</em></p> +<p><strong>Section 2</strong> is a general introduction about Mongrel. It explains <em>what</em> it is, <em>when</em> + and <em>why</em> it was made, and <em>how</em> it works. There’s nothing new to learn if you already used + Mongrel before, probably, but it’s definitely the first thing to show to someone who’s new to Mongrel + and its world, and possibly a bit skeptical about it. <br /> + The last subsection <em>“What can Mongrel do for me”</em> is an attempt to <del>brainwash</del> persuade + you to fully embrace Mongrel and its philosophy, whether you are a developer, a sysadmin or even a manager: + assertions like <em>“Mongrel is pretty damned secure.”</em> and <em>“Mongrel’s license is + capitalist-friendly.”</em> will definitaly make some of you (managers) happy.</p> +<p><strong>Section 3</strong> is slightly more juicy than the previous one, as it explains how to install and use + Mongrel. Basically that’s what everyone who ever used it already knows, but it’s still necessary for the + book’s consistency, after all. After reading this section, you’ll probably have your first Mongrel up + and running and serving your little Rails application’s pages, and you’ll begin to wonder why the hell + you need to keep reading this book now that everything seems to work already…</p> <h3>Section 4: Configurations</h3> -<p>…aka “a truly useful Mongrel cheatsheet”. This section dives deep(er) into Mongrel’s configuration by explaining what each start parameter does in detail. The parameters are presented in tabular form in a very well-organized way. As you would expect from an high-quality cheatsheet.</p> +<p>…aka “a truly useful Mongrel cheatsheet”. This section dives deep(er) into Mongrel’s + configuration by explaining what each start parameter does in detail. The parameters are presented in tabular form + in a very well-organized way. As you would expect from an high-quality cheatsheet.</p> <p>Then the author will explore a few commonly used deployment scenarios, in particular:</p> <ul> - <li><strong>Standalone</strong> – The simplest configuration possible, with just one Mongrel instance serving both static and dynamic pages.</li> - <li><strong>mongrel_cluster</strong> – How to use <em>“a pack of mongrels”</em> together to handle more traffic.</li> - <li><strong>Behind a static web server</strong> – The most common (and most scalable) option, used to serve static content faster using a front-end server and use Mongrel only to handle Ruby pages.</li> + <li><strong>Standalone</strong> – The simplest configuration possible, with just one Mongrel instance serving + both static and dynamic pages.</li> + <li><strong>mongrel_cluster</strong> – How to use <em>“a pack of mongrels”</em> together to + handle more traffic.</li> + <li><strong>Behind a static web server</strong> – The most common (and most scalable) option, used to serve + static content faster using a front-end server and use Mongrel only to handle Ruby pages.</li> </ul> -<p>Towards the end of the section, for the developer’s delight, the author will discuss two common, useful scenarios where Mongrel can be used:</p> +<p>Towards the end of the section, for the developer’s delight, the author will discuss two common, useful + scenarios where Mongrel can be used:</p> <ul> <li><strong>Apache 2 + mod_proxy_balancer + mongrel_cluster</strong></li> <li><strong>Nginx + mongrel_cluster</strong></li> </ul> -<p>The difference here is that detailed instructions are provided on how to setup and configure each server, including example file sources. This can be particularly useful for the Nginx example, as most of the documentation for this fantastic, lightweight Mongrel fron-end is scattered around the web (or written in Russian in a <a href="http://sysoev.ru/nginx/">well known place</a>).</p> +<p>The difference here is that detailed instructions are provided on how to setup and configure each server, including + example file sources. This can be particularly useful for the Nginx example, as most of the documentation for this + fantastic, lightweight Mongrel fron-end is scattered around the web (or written in Russian in a <a + href="http://sysoev.ru/nginx/">well known place</a>).</p> <h3>Section 5: Production Deployment</h3> -<p>This section introduces one of the most important part of the life cycle of a Rails application: the deployment on a production server. The author is pretty honest about the whole subject:</p> +<p>This section introduces one of the most important part of the life cycle of a Rails application: the deployment on a + production server. The author is pretty honest about the whole subject:</p> <blockquote> -<p><em>“You will not do this in a day. If you are expecting to code until 1 minute before your deadline and then simply point and click and have an instant server then you need to take some kind of<br /> -medication because you are violently hallucinating. You will need at least a week of 8 hours days to make sure your first deployment works and to have the time to do it right.”</em></p> + <p><em>“You will not do this in a day. If you are expecting to code until 1 minute before your deadline and + then simply point and click and have an instant server then you need to take some kind of<br /> + medication because you are violently hallucinating. You will need at least a week of 8 hours days to make + sure your first deployment works and to have the time to do it right.”</em></p> </blockquote> -<p>Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared? Probably, if you never deployed a Rails application “properly” before, but at least the book comes to the rescue by providing an overview of what you need to perform a deployment and why it is such a complex and delicate process.</p> -<p>Not only this, but also a “Best Practices Rubric” is also provided for the developer’s own private enjoyement. It’s written as a list of questions like:</p> -<p><em>11. Do you have a shared location where you can document the deployment, such as a Wiki or <span class="caps">CMS</span>?</em><br /> -<em>12. Do you know how to use httperf or ab and know what the statistics mean?</em></p> +<p>Sounds terribly true. Especially for larger projects demanding good performance under heavy traffic. Scared? + Probably, if you never deployed a Rails application “properly” before, but at least the book comes to + the rescue by providing an overview of what you need to perform a deployment and why it is such a complex and + delicate process.</p> +<p>Not only this, but also a “Best Practices Rubric” is also provided for the developer’s own private + enjoyement. It’s written as a list of questions like:</p> +<p><em>11. Do you have a shared location where you can document the deployment, such as a Wiki or <span + class="caps">CMS</span>?</em><br /> + <em>12. Do you know how to use httperf or ab and know what the statistics mean?</em> +</p> <p>After these 13 questions, the author provides the key to give a meaning to your answers:</p> <blockquote> -<p><em>"For each question you answer with “NO”, add 10 hours to your time estimate for completion. This may seem unrealistic, since saying “NO” to everything means it’ll take 190 hours (about one<br /> -month), but this estimate is actually low according to most first deployment experiences."</em></p> + <p><em>"For each question you answer with “NO”, add 10 hours to your time estimate for completion. + This may seem unrealistic, since saying “NO” to everything means it’ll take 190 hours + (about one<br /> + month), but this estimate is actually low according to most first deployment experiences."</em></p> </blockquote> -<p>If you answered “NO” too many times to these questions, you may want to read on through the next subsection which states 17 “worst practices”: an invaluable read for beginners!</p> -<p>But after all this section is not only about stating the obvious (…right?): a full example scenario is describedand examined throughly to give you an idea of how a deployment <em>should</em> be made, using three different machines:</p> +<p>If you answered “NO” too many times to these questions, you may want to read on through the next + subsection which states 17 “worst practices”: an invaluable read for beginners!</p> +<p>But after all this section is not only about stating the obvious (…right?): a full example scenario is + describedand examined throughly to give you an idea of how a deployment <em>should</em> be made, using three + different machines:</p> <ul> <li>One for Apache (as a front-end to Mongrel)</li> <li>One for the Mongrel cluster and the Rails application</li> <li>One for the database</li> </ul> -<p>Maybe something you’ll never do if you just want to run your grandma’s site on Rails, but certainly something you may want to start looking at if your grandma becomes really popular and your small server gets grounded by several thousands of visitors per day.</p> -<p>The last part of the section will give you a brief introduction on monitoring your applications and on which tools you should be using, although it does not discuss the subject in detail at all, it’s just meant to point you to the right direction.</p> +<p>Maybe something you’ll never do if you just want to run your grandma’s site on Rails, but certainly + something you may want to start looking at if your grandma becomes really popular and your small server gets + grounded by several thousands of visitors per day.</p> +<p>The last part of the section will give you a brief introduction on monitoring your applications and on which tools + you should be using, although it does not discuss the subject in detail at all, it’s just meant to point you + to the right direction.</p> <h3>Section 6: Extending Mongrel</h3> -<p>This section digs deeper into the software code internals and describes <em>how to teach new tricks to your Mongrel</em>, i.e. how to extend its functionality.</p> +<p>This section digs deeper into the software code internals and describes <em>how to teach new tricks to your + Mongrel</em>, i.e. how to extend its functionality.</p> <p>Before you begin, though, don’t forget what Zed himself has to say about Mongrel’s simplicity:</p> <blockquote> -<p><em>“I’ve always had a different aesthetic sense when I write my software. I value simplicity and directness and try to write software that follows this approach. I jokingly call it the Shibumi School of Software Structure. All I do is apply this rule: When given two possible designs with equal end results, pick the simpler one. I then ruthlessly strip the solution down to its finest elements, but no more.”</em></p> + <p><em>“I’ve always had a different aesthetic sense when I write my software. I value simplicity and + directness and try to write software that follows this approach. I jokingly call it the Shibumi School of + Software Structure. All I do is apply this rule: When given two possible designs with equal end results, + pick the simpler one. I then ruthlessly strip the solution down to its finest elements, but no + more.”</em></p> </blockquote> -<p>Mongrel’s architecture is not that complex, and this section is sufficient to get you started by providing an overview of the main classes involved (HttpServer, HttpRequest, HttpResponse, HttpHandler, URIClassifier), and how they work together.<br /> -Note that the book won’t describe anything about the APIs of these classes. but after all, the project’s <a href="http://mongrel.rubyforge.org/rdoc/files/README.html">RDoc documentation</a> should cover all the details you need.</p> +<p>Mongrel’s architecture is not that complex, and this section is sufficient to get you started by providing an + overview of the main classes involved (HttpServer, HttpRequest, HttpResponse, HttpHandler, URIClassifier), and how + they work together.<br /> + Note that the book won’t describe anything about the APIs of these classes. but after all, the project’s + <a href="http://mongrel.rubyforge.org/rdoc/files/README.html">RDoc documentation</a> should cover all the details + you need.</p> <p>The rest of the section focuses on how to extend Mongrel, by:</p> <ul> <li>Writing custom handlers in Ruby</li>@@ -73,32 +142,62 @@ </ul>
<p>Two working examples are also provided:</p> <ul> <li>An example handler to deflate content (if the browser supports deflate)</li> - <li>An example “duck” plugin, to make Mongrel quack like a duck when it’s started (not the most useful thing in the world, but serves the purpose)</li> + <li>An example “duck” plugin, to make Mongrel quack like a duck when it’s started (not the most + useful thing in the world, but serves the purpose)</li> </ul> <h3>Debugging, Performance & Security</h3> -<p>The last three sections deals with other important aspects concerning the deployment of your application, how to debug, how to improve performance and how to secure your application.</p> +<p>The last three sections deals with other important aspects concerning the deployment of your application, how to + debug, how to improve performance and how to secure your application.</p> <p><strong>Section 7</strong> introduces two debugging modes:</p> <ul> <li>Dash-Bee logging (-B)</li> <li>USR1 logging (lighter)</li> </ul> -<p>And also gives you an idea on what to look for when debugging an application. Nothing too detailed, granted, but enough to make sure you are pointed in the right direction.</p> +<p>And also gives you an idea on what to look for when debugging an application. Nothing too detailed, granted, but + enough to make sure you are pointed in the right direction.</p> <p>Again, Zed’s wisdom and wit are remarkable:</p> <blockquote> -<p><em>“These people’s problem is they suffer from Potpourri Turd Syndrome—a belief that their you-know-what don’t stink and smells like fine dew on freshly cut grass. Whenever there’s a bug, they go<br /> -running like kids in a candy store to other people’s code trying to find fault and just assume that it’s nothing they wrote.<br /> -[…]<br /> -When you run into a problem with your application, always assume it’s your fault first. Mongrel’s not perfect, but its code is minuscule compared to the size of Rails and most likely even your own appli-cation code. Mongrel also powers many large and medium deployments without any problems. If there’s an error, the evidence already says it’s in your code, so bite the bullet and start investigating it as if it’s your problem.”</em></p> + <p><em>“These people’s problem is they suffer from Potpourri Turd Syndrome—a belief that their + you-know-what don’t stink and smells like fine dew on freshly cut grass. Whenever there’s a bug, + they go<br /> + running like kids in a candy store to other people’s code trying to find fault and just assume that + it’s nothing they wrote.<br /> + […]<br /> + When you run into a problem with your application, always assume it’s your fault first. + Mongrel’s not perfect, but its code is minuscule compared to the size of Rails and most likely even + your own appli-cation code. Mongrel also powers many large and medium deployments without any problems. If + there’s an error, the evidence already says it’s in your code, so bite the bullet and start + investigating it as if it’s your problem.”</em></p> </blockquote> -<p>Similarly, <strong>Section 8</strong> is a short but useful overview on performance tips and tricks and deployment tuning. The most useful thing is probably the checklist of the “tuning process”, which illustrates the simple steps to take to tune your application.</p> -<p>Finally, <strong>Section 9</strong> addresses some common security concerns and clarifies how Mongrel deals with them. The answer is normally “Mongrel strictly does this” or “Mongrel doesn’t support this feature”. After all, you should have understood by now that Mongrel is an example of simplicity and that it deliberately does not aim to offer all the feature you’d expect by a server like Apache:</p> +<p>Similarly, <strong>Section 8</strong> is a short but useful overview on performance tips and tricks and deployment + tuning. The most useful thing is probably the checklist of the “tuning process”, which illustrates the + simple steps to take to tune your application.</p> +<p>Finally, <strong>Section 9</strong> addresses some common security concerns and clarifies how Mongrel deals with + them. The answer is normally “Mongrel strictly does this” or “Mongrel doesn’t support this + feature”. After all, you should have understood by now that Mongrel is an example of simplicity and that it + deliberately does not aim to offer all the feature you’d expect by a server like Apache:</p> <blockquote> -<p><em>"As you probably see, Mongrel say, “No” in many places where most Web servers say, “Yes, OK.” Sometimes this is because no one using Mongrel has needed it yet, sometimes it’s because there’s a<br /> -better, simpler way to accomplish the same goal. Mongrel is a different kind of Web server, and frequently you can solve your problem with a different solution."</em></p> + <p><em>"As you probably see, Mongrel say, “No” in many places where most Web servers say, + “Yes, OK.” Sometimes this is because no one using Mongrel has needed it yet, sometimes + it’s because there’s a<br /> + better, simpler way to accomplish the same goal. Mongrel is a different kind of Web server, and frequently + you can solve your problem with a different solution."</em></p> </blockquote> <h3>Conclusion</h3> -<p>If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project’s philosopy of simplicity above everything else. It’s an interesting read and it won’t bore you to death by deliberately skipping long and potentially tedious subjects and adding interesting insights instead (like the Zed Sez sidebars). Perhaps it is a bit too direct towards certain people, who may get even get offended (as planned) by some of the author’s assertions.</p> -<p>Despite being a 100-pages book, this <em>shortcut</em> covers pretty much everything you need to know <strong>about Mongrel</strong>. It will <em>not</em> teach you everything about deployment, security, performance tweaks and debugging though: as the authors often state throughout the book, a lot of (big) books are available on those subject, and it wouldn’t make sense to even attempt to discuss them in this shortcut.</p> -<p>Similarly, you won’t find complex examples either, but that’s acceptable because simple examples are often the only thing you need to grasp the basics of a concept or feature, and then use them as a “scaffold” for your own code.</p> -<p>Globally, the book is well balanced and <em>optimized</em> for its size: lightweight introductory sections at first, then the “real juice” in the middle, and a few overview sections on advanced topics towards the end. You can read it easily in a few hours, perhaps less, and whenever you need to look something up in a hurry it will be fairly easy to locate.</p> +<p>If Mongrel is opinionated software, this is definitely an opinionated book which fully embraces the project’s + philosopy of simplicity above everything else. It’s an interesting read and it won’t bore you to death + by deliberately skipping long and potentially tedious subjects and adding interesting insights instead (like the Zed + Sez sidebars). Perhaps it is a bit too direct towards certain people, who may get even get offended (as planned) by + some of the author’s assertions.</p> +<p>Despite being a 100-pages book, this <em>shortcut</em> covers pretty much everything you need to know <strong>about + Mongrel</strong>. It will <em>not</em> teach you everything about deployment, security, performance tweaks and + debugging though: as the authors often state throughout the book, a lot of (big) books are available on those + subject, and it wouldn’t make sense to even attempt to discuss them in this shortcut.</p> +<p>Similarly, you won’t find complex examples either, but that’s acceptable because simple examples are + often the only thing you need to grasp the basics of a concept or feature, and then use them as a + “scaffold” for your own code.</p> +<p>Globally, the book is well balanced and <em>optimized</em> for its size: lightweight introductory sections at first, + then the “real juice” in the middle, and a few overview sections on advanced topics towards the end. You + can read it easily in a few hours, perhaps less, and whenever you need to look something up in a hurry it will be + fairly easy to locate.</p> <p>A good read, and a <em>must</em> for everyone who wants to learn more about Mongrel or Rails deployment.</p>
@@ -4,79 +4,139 @@ content-type: article
timestamp: 1213853400 tags: "rails|ruby|writing|review" ----- -<p>When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, actually: there are a lot of very interesting and fairly comprehensive books out there after all.</p> -<p>I actually never bought a book to learn <span class="caps">PHP</span>, in the past though. Why’s that? Well, for two simple reasons:</p> +<p>When you decided to learn Ruby on Rails (if you did, that is), chances are that you bought a book. I did, too, + actually: there are a lot of very interesting and fairly comprehensive books out there after all.</p> +<p>I actually never bought a book to learn <span class="caps">PHP</span>, in the past though. Why’s that? Well, + for two simple reasons:</p> <ul> - <li>The <a href="http://www.php.net/manual/en/"><span class="caps">PHP</span> manual</a> can easily be searched and provides enough documentation, in most cases.</li> - <li>When the documentation is not enough, there’s always plenty of comments by experienced developers to save your day.</li> + <li>The <a href="http://www.php.net/manual/en/"><span class="caps">PHP</span> manual</a> can easily be searched and + provides enough documentation, in most cases.</li> + <li>When the documentation is not enough, there’s always plenty of comments by experienced developers to save + your day.</li> </ul> -<p>That being said, <span class="caps">PHP</span> is still an awfully disorganized language, but believe it or not, coming from <span class="caps">PHP</span> I didn’t find <a href="http://api.rubyonrails.org/">Rails documentation</a> useful enough simply because it didn’t have these two simple but very powerful features.</p> -<p>Sure, there’s the <a href="http://www.railsdocumentation.org/">Rails Documentation Project</a> which provides more organized docs, and <a href="http://www.noobkit.com/">Noobkit</a> does a nice job with its search-as-you-type feature… but still is not quite enough: you’d expect something much better than that for something like Rails!h3. Introducing Rails-Doc.org</p> -<p style="float:right;"><img src="/files/railsdoc_logo_sm.png" alt="" /></p> -<p><a href="http://www.rails-doc.org">Rails-Doc.org</a> focuses on providing a better interface to Rails documentation by offering two key features:</p> +<p>That being said, <span class="caps">PHP</span> is still an awfully disorganized language, but believe it or not, + coming from <span class="caps">PHP</span> I didn’t find <a href="http://api.rubyonrails.org/">Rails + documentation</a> useful enough simply because it didn’t have these two simple but very powerful features. +</p> +<p>Sure, there’s the <a href="http://www.railsdocumentation.org/">Rails Documentation Project</a> which provides + more organized docs, and <a href="http://www.noobkit.com/">Noobkit</a> does a nice job with its search-as-you-type + feature… but still is not quite enough: you’d expect something much better than that for something like + Rails!h3. Introducing Rails-Doc.org</p> +<p style="float:right;"><img src="/images/railsdoc_logo_sm.png" alt="" /></p> +<p><a href="http://www.rails-doc.org">Rails-Doc.org</a> focuses on providing a better interface to Rails documentation + by offering two key features:</p> <ul> <li>A powerful, fast and useful document search</li> <li>The possibility to add notes to Rails documentation</li> </ul> <p>When the app went live, I immediately registered (it’s free of course) and started playing with it…</p> <h4>Search as you type…</h4> -<p>The first thing I did was trying the search features, of course. I started typing “rout” for Routing, and I was immediately shown a list of matches:</p> -<p><img src="/files/rails-doc_search.gif" alt="" /></p> -<p>It took a small fraction of a second to load the matches, which makes me think that definitely they have all the names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are not that refined!</p> +<p>The first thing I did was trying the search features, of course. I started typing “rout” for Routing, and + I was immediately shown a list of matches:</p> +<p><img src="/images/rails-doc_search.gif" alt="" /></p> +<p>It took a small fraction of a second to load the matches, which makes me think that definitely they have all the + names indexed somewhere. Nevertheless, it was a pleasant surprise: normally, these search-as-you-type utilities are + not that refined!</p> <p>All you need to do is start typing at least three letters, and you get results, if any. <br /> -if you press <span class="caps">ENTER</span>, you get automatically redirected to the first result. This can be good, but maybe it would have been nicer to load a “traditional” list of results, but it depends on your taste, really.</p> + if you press <span class="caps">ENTER</span>, you get automatically redirected to the first result. This can be + good, but maybe it would have been nicer to load a “traditional” list of results, but it depends on your + taste, really.</p> <h4>…or browse through the namespaces</h4> -<p>Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or module: the <strong>Browse</strong> page does just that: it lists <em>all</em> Rails classes and modules, regardless of the nesting. But there’s more: a little roundy icon precedes each class name, to indicate whether the documentation is present, and to what degree:</p> -<p><img src="/files/rails-doc_icons.gif" alt="" /></p> -<p>This is an interesting concept: in this way, in theory, people should contribute to the documentation where it’s more needed.</p> -<p>Each reference page is very neatly re-formatted: you can hardly imagine it’s actually the same content included in Rails’ RDoc pages!</p> -<p><img src="/files/rails-doc_document.gif" alt="" /></p> -<p>Finally, another nice addition is the <strong>Related</strong> column, which lists links to other items which are related to the current topic:</p> -<p><img src="/files/rails-doc-related.gif" alt="" /></p> +<p>Alternatively, it is possible to browse the docs in the more traditional way, i.e. according to their class or + module: the <strong>Browse</strong> page does just that: it lists <em>all</em> Rails classes and modules, regardless + of the nesting. But there’s more: a little roundy icon precedes each class name, to indicate whether the + documentation is present, and to what degree:</p> +<p><img src="/images/rails-doc_icons.gif" alt="" /></p> +<p>This is an interesting concept: in this way, in theory, people should contribute to the documentation where + it’s more needed.</p> +<p>Each reference page is very neatly re-formatted: you can hardly imagine it’s actually the same content included + in Rails’ RDoc pages!</p> +<p><img src="/images/rails-doc_document.gif" alt="" /></p> +<p>Finally, another nice addition is the <strong>Related</strong> column, which lists links to other items which are + related to the current topic:</p> +<p><img src="/images/rails-doc-related.gif" alt="" /></p> <h3>Contribute, contribute, contribute!</h3> -<p>You have to register for something, don’t you? Yes. If you register, you can post notes to any document. Simple enough, all you have to do is to click the <strong>Add Note</strong> button and a form will slide down for you to fill in:</p> -<p><img src="/files/rails-doc_note1.gif" alt="" /></p> -<p>As you start typing, you’ll notice that a preview of the note is displayed instantly: as you can use SimpleMarkup to write notes, exactly like in RDoc, this feature can be very handy:</p> -<p><img src="/files/rails-doc_note2.gif" alt="" /></p> -<p>What if there’s no documentation for a particular class or method? You’ll get a warning like this one:</p> -<p><img src="/files/rails-doc_nodoc.gif" alt="" /></p> -<p>The idea behind this is that, if you provide some useful insights, they’ll eventually end up in Rails core documentation.</p> +<p>You have to register for something, don’t you? Yes. If you register, you can post notes to any document. Simple + enough, all you have to do is to click the <strong>Add Note</strong> button and a form will slide down for you to + fill in:</p> +<p><img src="/images/rails-doc_note1.gif" alt="" /></p> +<p>As you start typing, you’ll notice that a preview of the note is displayed instantly: as you can use + SimpleMarkup to write notes, exactly like in RDoc, this feature can be very handy:</p> +<p><img src="/images/rails-doc_note2.gif" alt="" /></p> +<p>What if there’s no documentation for a particular class or method? You’ll get a warning like this one: +</p> +<p><img src="/images/rails-doc_nodoc.gif" alt="" /></p> +<p>The idea behind this is that, if you provide some useful insights, they’ll eventually end up in Rails core + documentation.</p> <h3>An Short Interview with Mikael Roos, from Nodeta</h3> -<p>Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. Here’s the full interview…</p> +<p>Before the application went live, I was lucky enough to get Mikael Roos to answer to some of my questions. + Here’s the full interview…</p> <h4>What are you actually trying to do on Rails-Doc.org?</h4> -<p>The initial goal of the project is to provide the existing documentation in a more accessible way, most importantly to provide a lightning fast search feature that gives weighted results based on the<br /> -quality and amount of documentation. This we have already accomplished, and all remaining issues are related to browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to<br /> -the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to draw knowledge from.</p> -<p>Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for the active members of the Rails community to improve the existing documentation based on the posted notes<br /> -to create an extended documentation that could optimally even be made in to a patch and would find its way back into the actual Rails source.</p> -<p>Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I mentioned above.</p> -<h4>Could you spend a few words on the “development process” followed by your company to develop this app? Did I read the word “Scrum” somewhere? Am I correct?</h4> -<p>Yes, our development process of choice is Scrum. The core team is only three members, one backend developer, one backed/frontend develope and one frontend developer/UI specialist. I feel the team is optimal in many ways.<br /> -The team also has a few more experienced developers who are primarily active in other projects to ask questions from, one of whom is also the acting product owner on the Rails-doc project (that’s me!).</p> +<p>The initial goal of the project is to provide the existing documentation in a more accessible way, most importantly + to provide a lightning fast search feature that gives weighted results based on the<br /> + quality and amount of documentation. This we have already accomplished, and all remaining issues are related to + browser compatibility. Another initial goal is to present a smooth interface for creating inline notes to<br /> + the documentation so that Rails developers can post notes about certain methods etc. for themselves and others to + draw knowledge from.</p> +<p>Our longer-term goal (N.B. we are an agile project, so long-term means, say, three months) is to provide a way for + the active members of the Rails community to improve the existing documentation based on the posted notes<br /> + to create an extended documentation that could optimally even be made in to a patch and would find its way back into + the actual Rails source.</p> +<p>Another clear and obvious goal is to keep improving the service steadily as we progress toward the goals that I + mentioned above.</p> +<h4>Could you spend a few words on the “development process” followed by your company to develop this app? + Did I read the word “Scrum” somewhere? Am I correct?</h4> +<p>Yes, our development process of choice is Scrum. The core team is only three members, one backend developer, one + backed/frontend develope and one frontend developer/UI specialist. I feel the team is optimal in many ways.<br /> + The team also has a few more experienced developers who are primarily active in other projects to ask questions + from, one of whom is also the acting product owner on the Rails-doc project (that’s me!).</p> <h4>Did you develop it in three months, or…?</h4> -<p>The first release was developed in three <span class="caps">SPRINTS</span>, not months – so what I’m saying is the first release was developed in five weeks (first sprint was mostly introductory and lasted a week, the next two sprints, first<br /> -development and then stabilization, were two weeks each). However, it is a <span class="caps">FIRST</span> <span class="caps">RELEASE</span>, which means the app is by all means not complete, but since we make software in a very agile way, it’a all about “Ship, ship, ship!”.</p> +<p>The first release was developed in three <span class="caps">SPRINTS</span>, not months – so what I’m + saying is the first release was developed in five weeks (first sprint was mostly introductory and lasted a week, the + next two sprints, first<br /> + development and then stabilization, were two weeks each). However, it is a <span class="caps">FIRST</span> <span + class="caps">RELEASE</span>, which means the app is by all means not complete, but since we make software in a + very agile way, it’a all about “Ship, ship, ship!”.</p> <h4>What is <a href="http://www.nodeta.fi">Nodeta</a>, exactly? My Finnish is a bit rusty nowadays…</h4> -<p>Nodeta is a software development company that focuses on web software. We employ a highly agile and effective process. We have worked both on light independent projects and in the environment of large global enterprises.<br /> -There are currently 10 Nodetans.</p> +<p>Nodeta is a software development company that focuses on web software. We employ a highly agile and effective + process. We have worked both on light independent projects and in the environment of large global enterprises.<br /> + There are currently 10 Nodetans.</p> <p>Rails-Doc.org is a pilot project for your new shiny app, ApiDock. Is it an open source app?</p> -<p>Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that it won’t be open source, but rather it would optimally be offered as a service, which after all is what<br /> -the word “app” on the web means these days. Open source projects could however use it for free, sort of in the spirit of GitHub.</p> +<p>Unfortunately, I cannot go into details about APIdoc yet. What I can tell is that it is developed with Rails and that + it won’t be open source, but rather it would optimally be offered as a service, which after all is what<br /> + the word “app” on the web means these days. Open source projects could however use it for free, sort of + in the spirit of GitHub.</p> <p>It will also most likely be separately targeted to larger companies.</p> -<h4>Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging documentation beforehand?</h4> -<p>There will probably be a blog post on the <a href="http://blog.nodeta.fi">Nodeta blog</a> about the search and how it works after the first release comes out.</p> -<h4>What about the social side of it: you’re hoping people will contribute with notes, which will then be collected and integrated in the documentation correct? Do you have any moderation or anti-spam precaution?</h4> -<p>The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks are showed in a more prominent way. Registration will be required in order to post notes and the registration will feature a captcha.</p> +<h4>Can you give me more technical details about the way keyword search is performed? Are you indexing/tagging + documentation beforehand?</h4> +<p>There will probably be a blog post on the <a href="http://blog.nodeta.fi">Nodeta blog</a> about the search and how it + works after the first release comes out.</p> +<h4>What about the social side of it: you’re hoping people will contribute with notes, which will then be + collected and integrated in the documentation correct? Do you have any moderation or anti-spam precaution?</h4> +<p>The quality of notes is judged in a social way. Notes can be thanked by other users and notes that get many thanks + are showed in a more prominent way. Registration will be required in order to post notes and the registration will + feature a captcha.</p> <h4>Will contributors be credited somehow? Who can contribute and at what level?</h4> -<p>Anybody can post notes and good notes get thanks and thus so do their posters. Users that get lots of thanks will be later asked to become core users that can alter the extended documentation (not in the first<br /> -release.)</p> -<h4>You want to blow out competition and that you don’t want to fail: sounds a good plan! How is Rails-Docs different from other similar apps?</h4> -<p>We think that our app is the first that is serious about making things happen. We think about users first and above all at this stage our search feature is frankly unparallelled.</p> +<p>Anybody can post notes and good notes get thanks and thus so do their posters. Users that get lots of thanks will be + later asked to become core users that can alter the extended documentation (not in the first<br /> + release.)</p> +<h4>You want to blow out competition and that you don’t want to fail: sounds a good plan! How is Rails-Docs + different from other similar apps?</h4> +<p>We think that our app is the first that is serious about making things happen. We think about users first and above + all at this stage our search feature is frankly unparallelled.</p> <h4>Do you have DHH’s seal of approval? Will you? Is there any copyright issue with your domain name?</h4> -<p>Time will tell what <span class="caps">DHH</span> thinks. We did contact him just a few days ago to ask what his thoughts about all this are and are waiting for his comments. I doubt there is any wrinkles with copyright as Rails-doc itself is a completely non-profit project.</p> +<p>Time will tell what <span class="caps">DHH</span> thinks. We did contact him just a few days ago to ask what his + thoughts about all this are and are waiting for his comments. I doubt there is any wrinkles with copyright as + Rails-doc itself is a completely non-profit project.</p> <h4>What about doing something similar for the whole Ruby language? Ruby docs may also be easier, in a way…</h4> <p>It is possible that we might do just that but right now it’s all about Rails.</p> <h3>The Bottom Line</h3> -<p>Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered service. Sure, it’s not open source and this can be a bit of a letdown for some: but after all people flocked to GitHub when it opened, didn’t they?</p> -<p>The search capabilities of Rails-Doc.org are definitely a very important step forward in making Rails documentation more accessible and easier to use, but the killer feature is definitely the possibility to add notes, if used wisely.</p> -<p>I’ll be watching this project closely and I’ll pay particular attention on what happens to the community’s contributions: will it really be useful? Will it really help creating documentation patches to Rails core? Only time will tell, of course.</p> +<p>Rails-Doc.org is definitely an interesting project, which has all the potential to become a powerful, Rails-powered + service. Sure, it’s not open source and this can be a bit of a letdown for some: but after all people flocked + to GitHub when it opened, didn’t they?</p> +<p>The search capabilities of Rails-Doc.org are definitely a very important step forward in making Rails documentation + more accessible and easier to use, but the killer feature is definitely the possibility to add notes, if used + wisely.</p> +<p>I’ll be watching this project closely and I’ll pay particular attention on what happens to the + community’s contributions: will it really be useful? Will it really help creating documentation patches to + Rails core? Only time will tell, of course.</p>
@@ -22,7 +22,7 @@ to Ruby on Rails<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>, but don’t call them
<em>clones</em> or <em>ports</em> as some of their creators may get offended. </p> </blockquote> -<p style="float:left;"><img src="/img/pictures/rails.gif" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/rails.gif" alt="" /></p> <p>Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you <em>have</em> to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that@@ -46,7 +46,7 @@ class="caps">PRADO</span>, Qcodo, eZComponents, or even Mojavi: it’s not that they are
“bad”, they’ve just been left out because they are not pertinent to this article</em></p> </blockquote> <h3>CakePHP</h3> -<p style="float:right;"><img src="/img/pictures/CakePHP_1.0.png" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/CakePHP_1.0.png" alt="" /></p> <p><strong>Website:</strong> <a href="http://www.cakephp.org/">www.cakephp.org</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> <strong>License:</strong> <span class="caps">MIT</span><sup class="footnote" id="fnr5"><a@@ -97,7 +97,7 @@ without forcing developers into complex and pointless adaptations, and evolving into a great framework created
<em>in <span class="caps">PHP</span>, for <span class="caps">PHP</span></em>. </p> <h3>Symfony</h3> -<p style="float:right;"><img src="/img/pictures/symfony.gif" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/symfony.gif" alt="" /></p> <p><strong>Website:</strong> <a href="http://www.symfony-project.com/">www.synfony.project.com</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP5<br /> <strong>License:</strong> Symfony<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup><br />@@ -144,7 +144,7 @@ components, command line generators and <span class="caps">YAML</span>/Propel configuration files, but perhaps a bit
<em>disorganized</em> in its internal structure, unlike its wonderful documentation and support section. </p> <h3><span class="caps">PHP</span> on Trax</h3> -<p style="float:right;"><img src="/img/pictures/phpontrax.jpg" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/phpontrax.jpg" alt="" /></p> <p><strong>Website:</strong> <a href="http://www.phpontrax.com/">www.phpontrax.com</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP5<br /> <strong>License:</strong> <span class="caps">MIT</span><br />@@ -187,7 +187,7 @@ that? Well, Ruby programmers <em>forced</em> to develop in <span class="caps">PHP</span>, maybe. Not too good, but
not too bad either. </p> <h3>Code Igniter</h3> -<p style="float:right;"><img src="/img/pictures/codeigniter.jpg" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/codeigniter.jpg" alt="" /></p> <p><strong>Website:</strong> <a href="http://www.codeigniter.com/">www.codeigniter.org</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> <strong>License:</strong> CodeIgniter<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup><br />@@ -230,7 +230,7 @@ I personally think this can be a true bless for small/medium sized projects, however, I’d opt for CakePHP or
Symfony for a large scale application: something is missing, e.g., most notably, table associations. </p> <h3>Biscuit</h3> -<p style="float:right;"><img src="/img/pictures/biscuit.gif" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/biscuit.gif" alt="" /></p> <p><strong>Website:</strong> <a href="http://biscuitproject.tigris.org/">biscuitproject.tigris.org</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP4 and PHP5<br /> <strong>License:</strong> <span class="caps">MIT</span><sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>@@ -262,7 +262,7 @@ This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I’m not
sure whether the project is still active or not, since the last “release” on the former’s developer site is dated August 2005. Still in early stage – or dead.</p> <h3>Pipeline</h3> -<p style="float:right;"><img src="/img/pictures/livepipe.jpg" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/livepipe.jpg" alt="" /></p> <p><strong>Website:</strong> <a href="http://livepipe.net/pipeline/">livepipe.net/pipeline/</a><br /> <strong><span class="caps">PHP</span> version:</strong> PHP5<br /> <strong>License:</strong> Pipeline<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup><br />
@@ -8,94 +8,232 @@ tags: "opensource|programming|italy"
pdf: true ----- - <section class="section"> -<p>I am an avid <a href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a> listener. Sometimes I may fall behind by a few episodes, but I normally manage to catch up: Randal Schwartz’ show is by far my favorite podcast.</p> -<p>You can imagine my reaction when I discovered that Randal was in Genoa, my city, ready to leave for yet another <a href="http://www.insightcruises.com/">InsightCruise</a>: I had to meet the guy, at all costs!</p> -<p>It turned out to be easier than I thought: I simply <a href="http://twitter.com/#!/h3rald/status/28962418438">asked him</a> if he fancied a pizza out on the way back from his cruise, and he said yes.</p> -<p>I also decided to invite <a href="http://www.agilesensei.com/">Claudio Perrone</a> as well, seeing that he’s back in Genoa on one of his Agile/Lean gigs. He said he didn’t know much about Perl, but he’d have liked to come as well. So there I was lining up a dinner out with two IT gurus at the same time.</p> -<p>Randal was staying at the <a href="http://www.hotelbristolpalace.it/">Bristol Palace Hotel</a>, and we met him at the lobby bar. In the end I persuaded my wife to come along as well, although she doesn’t know much about Perl either.<br /> -We shook hands with Capt. Neil [Bauman, of InsightCruises.com] and a few others of the cruise gang, then we were off to the restaurant.</p> -<p>It only took five minutes to realize that Randal was exactly like he sounds on his show: cheerful and chatty, eager to talk about technology and science. When you meet famous people face-to-face, there’s always a chance that they are not nice at all, but luckily this wasn’t the case: within minutes Randal was telling us all about <a href="http://news.motionx.com/category/motionx-gps/">MotionX-<span class="caps">GPS</span></a> (a very neat iPhone app that I highly recommend) like we had been buddies for ages.</p> +<section class="section"> + <p>I am an avid <a href="http://twit.tv/FLOSS"><span class="caps">FLOSS</span> Weekly</a> listener. Sometimes I may + fall behind by a few episodes, but I normally manage to catch up: Randal Schwartz’ show is by far my + favorite podcast.</p> + <p>You can imagine my reaction when I discovered that Randal was in Genoa, my city, ready to leave for yet another + <a href="http://www.insightcruises.com/">InsightCruise</a>: I had to meet the guy, at all costs!</p> + <p>It turned out to be easier than I thought: I simply <a + href="http://twitter.com/#!/h3rald/status/28962418438">asked him</a> if he fancied a pizza out on the way + back from his cruise, and he said yes.</p> + <p>I also decided to invite <a href="http://www.agilesensei.com/">Claudio Perrone</a> as well, seeing that + he’s back in Genoa on one of his Agile/Lean gigs. He said he didn’t know much about Perl, but + he’d have liked to come as well. So there I was lining up a dinner out with two IT gurus at the same time. + </p> + <p>Randal was staying at the <a href="http://www.hotelbristolpalace.it/">Bristol Palace Hotel</a>, and we met him at + the lobby bar. In the end I persuaded my wife to come along as well, although she doesn’t know much about + Perl either.<br /> + We shook hands with Capt. Neil [Bauman, of InsightCruises.com] and a few others of the cruise gang, then we were + off to the restaurant.</p> + <p>It only took five minutes to realize that Randal was exactly like he sounds on his show: cheerful and chatty, + eager to talk about technology and science. When you meet famous people face-to-face, there’s always a + chance that they are not nice at all, but luckily this wasn’t the case: within minutes Randal was telling + us all about <a href="http://news.motionx.com/category/motionx-gps/">MotionX-<span class="caps">GPS</span></a> + (a very neat iPhone app that I highly recommend) like we had been buddies for ages.</p> -After a rather bumpy bus ride (Italian evening drivers are well known for this), we got to <a href="http://www.ristorantepiedigrotta.it">Piedigrotta</a>, ordered some pizzas, and started talking. Little did we know that Randal loves talking and sharing stories about almost anything: we were chatting non stop for hours, and after dinner my wife and I invited everyone up to our place, to continue talking happily in front of a glass of our wine and... freshly-microwaved popcorn. + After a rather bumpy bus ride (Italian evening drivers are well known for this), we got to <a + href="http://www.ristorantepiedigrotta.it">Piedigrotta</a>, ordered some pizzas, and started talking. Little did + we know that Randal loves talking and sharing stories about almost anything: we were chatting non stop for hours, + and after dinner my wife and I invited everyone up to our place, to continue talking happily in front of a glass of + our wine and... freshly-microwaved popcorn. -Here's what we talked about, organized by topic for your convenience. I didn't record the conversation even if it would have made a hell of a show, but I'll do my best to quote him as faithfully as I can remember or paraphrase him without changing the meaning of his words. + Here's what we talked about, organized by topic for your convenience. I didn't record the conversation even if it + would have made a hell of a show, but I'll do my best to quote him as faithfully as I can remember or paraphrase him + without changing the meaning of his words. -<aside class="important"> -<span class="note-title">Important</span>Randal, if you're reading this and you come across any misquotation, please let me know so I can amend them! + <aside class="important"> + <span class="note-title">Important</span>Randal, if you're reading this and you come across any misquotation, + please let me know so I can amend them! -</aside> + </aside> -<section class="section"> -<header><h3 id="h_1" class="toc">Something more about Randal</h3></header> -<p><a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a> is a world-famous Perl guru, author of the <a href="http://www.oreillynet.com/pub/au/335">best Perl programming</a> on the market, and a very prolific <a href="http://www.stonehenge.com/merlyn/columns.html">column writer</a>.</p> -<p>Randal is not a full-time writer though (<q>“writing books doesn’t pay”</q>). His day job consists in being a “guru on-demand”: you can hire him to fix your code, refractor complex enterprise applications, or simply provide useful advice to IT managers. <br /> -Being the host of <span class="caps">FLOSS</span> Weekly is not a job, and Randal doesn’t do it for the money of course, but for passion: <q>“I’m trying my best to do one show per week, even when I am away”</q>, he said, and he does go off traveling around the world a lot!</p> -<p><q>“Once I was at home for 8 weeks and it felt really strange. I kept thinking I had to pack to go somewhere else”</q>. He’s been on nearly every Geek/Insight Cruises (51, if I remember correctly) and his <a href="http://www.stonehenge.com/merlyn/dot-plan.txt">travel plan</a> is always very busy.</p> -<p>I was extremely lucky to catch him on the way back from one of the few cruises in the Mediterranean! It must be a sign of some sort.</p> + <section class="section"> + <header> + <h3 id="h_1" class="toc">Something more about Randal</h3> + </header> + <p><a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a> is a world-famous Perl guru, author of the <a + href="http://www.oreillynet.com/pub/au/335">best Perl programming</a> on the market, and a very prolific + <a href="http://www.stonehenge.com/merlyn/columns.html">column writer</a>.</p> + <p>Randal is not a full-time writer though (<q>“writing books doesn’t pay”</q>). His day job + consists in being a “guru on-demand”: you can hire him to fix your code, refractor complex + enterprise applications, or simply provide useful advice to IT managers. <br /> + Being the host of <span class="caps">FLOSS</span> Weekly is not a job, and Randal doesn’t do it for + the money of course, but for passion: <q>“I’m trying my best to do one show per week, even when + I am away”</q>, he said, and he does go off traveling around the world a lot!</p> + <p><q>“Once I was at home for 8 weeks and it felt really strange. I kept thinking I had to pack to go + somewhere else”</q>. He’s been on nearly every Geek/Insight Cruises (51, if I remember + correctly) and his <a href="http://www.stonehenge.com/merlyn/dot-plan.txt">travel plan</a> is always very + busy.</p> + <p>I was extremely lucky to catch him on the way back from one of the few cruises in the Mediterranean! It must + be a sign of some sort.</p> -</section> + </section> -<section class="section"> -<header><h3 id="h_2" class="toc">Open Source</h3></header> -<p>I have always tried to raise awareness about Open Source and Free Software among my friends, co-workers, and even managers. Sometimes it’s easy to make people realize that Free, Libre, Open Source Software matters, other times is much harder.</p> -<p>When Randal got half way through his pizza, I asked him if he had any tips on open source advocacy and on overcoming corporate resistance. I explained that the main concerns I get when I talk about open source in an enterprise environment are:</p> -<ul> - <li>the cost or support/training</li> - <li>the immaturity of the product and fear of it being abandoned at some point</li> - <li>overall, a high Total Cost of Ownership</li> -</ul> -<p>Randal was almost laughing at one point: <q>“why are people concerned about paying for support for open source software? Don’t they pay it already for proprietary applications?”</q>, also <q>“the chances for open source software being discontinued are the same, if not lower, than proprietary software. Plus, proprietary software often forces compulsory upgrades, and similar things that can eventually damage your business”</q>. Additionally, if I may add, in the unfortunate case that an open source project is abandoned or turns nasty, it is often forked, so at worst you always have the source code anyway.</p> -<p>Randal also pointed out that what really matters about an open source project is the community built around it. He mentioned that the <a href="http://www.mongodb.org/">MongoDb</a> guys that came on <a href="http://twit.tv/floss105"><span class="caps">FLOSS</span> Weekly #105</a> were really enthusiastic of having embraced open source. Unfortunately, some projects just don’t seem to get the whole idea behind open source at all: <em>community</em> vs. <em>enterprise</em> editions always makes me suspicious, and Randal agreed to an extent.</p> -<p><strong>In a nutshell, Open Source is not about the company or the license, it’s about the people and the community behind a project.</strong></p> -<p><q>“You should [re-]listen to one of my very first podcasts, the one with ”http://www.webmink.net/“>Simon Phipps</a>, the former Chief Open Source Officer at Sun”</q>, Randal told me in the end, and he’s right: <a href="http://twit.tv/floss39"><span class="caps">FLOSS</span> #39</a> is a must for anyone truly interested in the subject.</p> -<p>Seeing that Randal seemed to be perfectly happy to play with his iPhone, I went for the obvious question and asked him what he thought about Apple, and at the same time Claudio asked him what was his operating system of choice.</p> -<p><q>“OS X”</q>, admitted Randal, <q>“I use what gets the job done”</q>. In all things, there’s no point in being an extremist for the sake of argument, and being an open source advocate does not mean that you have to condemn every piece of proprietary software (at this point, Richard Stallman would have thrown up his pizza, had he been there —but he wasn’t).</p> -<p><q>“From a <span class="caps">GUI</span> point of view, Apple is still ahead of the competition: if others want to win, they have to come up with something better, and different. […]Ubuntu is getting there, but not quite yet.”</q></p> -<p>Randal also pointed out the importance of contributing to open source projects: <q>“you don’t have to code, you can just provide feedback, submit bug reports, write documentation, or test… I am the one who checks if git builds on a Mac, for example”</q>.</p> + <section class="section"> + <header> + <h3 id="h_2" class="toc">Open Source</h3> + </header> + <p>I have always tried to raise awareness about Open Source and Free Software among my friends, co-workers, and + even managers. Sometimes it’s easy to make people realize that Free, Libre, Open Source Software + matters, other times is much harder.</p> + <p>When Randal got half way through his pizza, I asked him if he had any tips on open source advocacy and on + overcoming corporate resistance. I explained that the main concerns I get when I talk about open source in + an enterprise environment are:</p> + <ul> + <li>the cost or support/training</li> + <li>the immaturity of the product and fear of it being abandoned at some point</li> + <li>overall, a high Total Cost of Ownership</li> + </ul> + <p>Randal was almost laughing at one point: <q>“why are people concerned about paying for support for open + source software? Don’t they pay it already for proprietary applications?”</q>, also + <q>“the chances for open source software being discontinued are the same, if not lower, than + proprietary software. Plus, proprietary software often forces compulsory upgrades, and similar things + that can eventually damage your business”</q>. Additionally, if I may add, in the unfortunate case + that an open source project is abandoned or turns nasty, it is often forked, so at worst you always have the + source code anyway.</p> + <p>Randal also pointed out that what really matters about an open source project is the community built around + it. He mentioned that the <a href="http://www.mongodb.org/">MongoDb</a> guys that came on <a + href="http://twit.tv/floss105"><span class="caps">FLOSS</span> Weekly #105</a> were really enthusiastic + of having embraced open source. Unfortunately, some projects just don’t seem to get the whole idea + behind open source at all: <em>community</em> vs. <em>enterprise</em> editions always makes me suspicious, + and Randal agreed to an extent.</p> + <p><strong>In a nutshell, Open Source is not about the company or the license, it’s about the people and + the community behind a project.</strong></p> + <p><q>“You should [re-]listen to one of my very first podcasts, the one with + ”http://www.webmink.net/“>Simon Phipps</a>, the former Chief Open Source Officer at + Sun”</q>, Randal told me in the end, and he’s right: <a href="http://twit.tv/floss39"><span + class="caps">FLOSS</span> #39</a> is a must for anyone truly interested in the subject.</p> + <p>Seeing that Randal seemed to be perfectly happy to play with his iPhone, I went for the obvious question and + asked him what he thought about Apple, and at the same time Claudio asked him what was his operating system + of choice.</p> + <p><q>“OS X”</q>, admitted Randal, <q>“I use what gets the job done”</q>. In all things, + there’s no point in being an extremist for the sake of argument, and being an open source advocate + does not mean that you have to condemn every piece of proprietary software (at this point, Richard Stallman + would have thrown up his pizza, had he been there —but he wasn’t).</p> + <p><q>“From a <span class="caps">GUI</span> point of view, Apple is still ahead of the competition: if + others want to win, they have to come up with something better, and different. […]Ubuntu is + getting there, but not quite yet.”</q></p> + <p>Randal also pointed out the importance of contributing to open source projects: <q>“you don’t + have to code, you can just provide feedback, submit bug reports, write documentation, or test… I + am the one who checks if git builds on a Mac, for example”</q>.</p> -</section> + </section> -<section class="section"> -<header><h3 id="h_3" class="toc">Programming</h3></header> -<p>Programming was another major topic of our discussion. Randal, after all, is a living Perl legend having written 6 Perl books and over 250 magazine columns. Unfortunately I don’t know much about Perl, and neither does Claudio. I am quite open-minded about languages—although I am slightly favorable towards Ruby—so I enjoyed every little bit of the discussion anyway.</p> -<p>Most of the discussion was about Perl 6, which was recently featured on <a href="http://twit.tv/floss140"><span class="caps">FLOSS</span> Weekly #140</a>. After listening to what Randal had to say about it, I am definitely going to try it out at some point (hopefully skipping Perl 5 altogether). <br /> -<q>“We [Perl programmers] say that Ruby is an alpha version of Perl 6”</q> said Randal, joking about the similarities between the two languages and the amount of time it took to come up with a working Perl 6 (which to date is still unfinished). He reckons Perl 6 will be used in production for small and medium projects within a few months, and he’s going to write a book about it.</p> -<p>He then briefly described what makes Perl 6 so special. The top feature we were talking about was grammars: the language offers the possibility to create grammars to parse other languages and even Perl 6 itself. Moreover, the Rakudo implementation running on the Parrot VM aims to implement the full Perl 6 specification in Perl 6 itself <q>“[…] therefore, at run time, a program is able to access the its syntax tree itself…”</q>, he said, while playing with an imaginary Perl 6 parse tree in the air.</p> -<p>We then moved on to Smalltalk, and both Claudio and I asked him a few questions about it, in particular about the whole concept of <em>image</em>, particularly in reference to the Squeak implementation. We observed how many programmers of other languages (Ruby included) end up going back to the origins (Smalltalk) and how Smalltalk is far from dead. <q>“It’s only a matter of getting used to it”</q>, said Randal when I asked him how to work with a Smalltalk image and how to distribute it, <q>“you program as you would in any other language, you can communicate with the rest of the world just fine. What you get in Smalltalk that you don’t get in most other languages, is the ability to inspect and work with the underlying source code of the objects at run time, thanks to the amazing reflection features the language offers”</q>.</p> -<p>At one point I had to asked Randal what he though about Haskell, having tried to learn it three times without succeeding: <q>“I have tried <em>ten</em> times to learn it myself, with no luck”</q>, he said. At least I’m not alone!</p> -<p>The discussion then shifted towards tools, and then of course text editors. I just had to remind him that I am a Vim guy. Randal looked at me smiling, and said: <q>“That’s fine. You <span class="caps">WILL</span> join us. Sooner or later you will join us… join us…”</q>.</p> -<p>Randal’s involvement in Emacs dates way back to the end of the 80s, and he has been using it ever since. He even contributed to it, back then, by writing pp.el, the pretty printer module.<br /> -<q>“I posted my code to the emacs mailing list, and Richard Stallman himself replied asking if he could include my code in Emacs. If you read Emacs acknowledgements, I’m there as well”</q>, said Randal, proudly.</p> -<p>I confess I almost felt the urge to give Emacs another try. I often get hyped up about things like this. If I had received such a reply from Richard Stallman, I would have probably sworn not to touch the Editor of the Beast ever again.</p> -<p><q>“Just try out Org mode. I didn’t know it very well myself until I had a show about it, but now realize why people should always load up an Emacs instance just to run Org mode.”</q>, said Randal again, talking about yet another <a href="http://twit.tv/floss136">recent show</a>.</p> + <section class="section"> + <header> + <h3 id="h_3" class="toc">Programming</h3> + </header> + <p>Programming was another major topic of our discussion. Randal, after all, is a living Perl legend having + written 6 Perl books and over 250 magazine columns. Unfortunately I don’t know much about Perl, and + neither does Claudio. I am quite open-minded about languages—although I am slightly favorable towards + Ruby—so I enjoyed every little bit of the discussion anyway.</p> + <p>Most of the discussion was about Perl 6, which was recently featured on <a + href="http://twit.tv/floss140"><span class="caps">FLOSS</span> Weekly #140</a>. After listening to what + Randal had to say about it, I am definitely going to try it out at some point (hopefully skipping Perl 5 + altogether). <br /> + <q>“We [Perl programmers] say that Ruby is an alpha version of Perl 6”</q> said Randal, joking + about the similarities between the two languages and the amount of time it took to come up with a working + Perl 6 (which to date is still unfinished). He reckons Perl 6 will be used in production for small and + medium projects within a few months, and he’s going to write a book about it. + </p> + <p>He then briefly described what makes Perl 6 so special. The top feature we were talking about was grammars: + the language offers the possibility to create grammars to parse other languages and even Perl 6 itself. + Moreover, the Rakudo implementation running on the Parrot VM aims to implement the full Perl 6 specification + in Perl 6 itself <q>“[…] therefore, at run time, a program is able to access the its syntax tree + itself…”</q>, he said, while playing with an imaginary Perl 6 parse tree in the air.</p> + <p>We then moved on to Smalltalk, and both Claudio and I asked him a few questions about it, in particular about + the whole concept of <em>image</em>, particularly in reference to the Squeak implementation. We observed how + many programmers of other languages (Ruby included) end up going back to the origins (Smalltalk) and how + Smalltalk is far from dead. <q>“It’s only a matter of getting used to it”</q>, said Randal + when I asked him how to work with a Smalltalk image and how to distribute it, <q>“you program as you + would in any other language, you can communicate with the rest of the world just fine. What you get in + Smalltalk that you don’t get in most other languages, is the ability to inspect and work with the + underlying source code of the objects at run time, thanks to the amazing reflection features the + language offers”</q>.</p> + <p>At one point I had to asked Randal what he though about Haskell, having tried to learn it three times without + succeeding: <q>“I have tried <em>ten</em> times to learn it myself, with no luck”</q>, he said. + At least I’m not alone!</p> + <p>The discussion then shifted towards tools, and then of course text editors. I just had to remind him that I + am a Vim guy. Randal looked at me smiling, and said: <q>“That’s fine. You <span + class="caps">WILL</span> join us. Sooner or later you will join us… join us…”</q>. + </p> + <p>Randal’s involvement in Emacs dates way back to the end of the 80s, and he has been using it ever + since. He even contributed to it, back then, by writing pp.el, the pretty printer module.<br /> + <q>“I posted my code to the emacs mailing list, and Richard Stallman himself replied asking if he + could include my code in Emacs. If you read Emacs acknowledgements, I’m there as well”</q>, + said Randal, proudly. + </p> + <p>I confess I almost felt the urge to give Emacs another try. I often get hyped up about things like this. If I + had received such a reply from Richard Stallman, I would have probably sworn not to touch the Editor of the + Beast ever again.</p> + <p><q>“Just try out Org mode. I didn’t know it very well myself until I had a show about it, but now + realize why people should always load up an Emacs instance just to run Org mode.”</q>, said Randal + again, talking about yet another <a href="http://twit.tv/floss136">recent show</a>.</p> -</section> + </section> -<section class="section"> -<header><h3 id="h_4" class="toc">Technical Writing</h3></header> -<p>After our pizza, we all went back to my place, which is literally around the corner for the restaurant. It was only when we were happily starting the second glass of my family’s very own home-made wine that Randal looks at me and says: <q>“You know that I started off as a Technical Writer myself, don’t you?”</q></p> -<p>I was baffled. I did brush up on Randal’s life on his web site, Wikipedia and similar, like any good fan meeting his hero, but I never came across this tiny detail. This triggered yet another round of questions on my part, as I have been working full time as a technical writer for years now. Randal shared a couple of anecdotes about his early technical writing career.</p> -<p><q>“When I joined, I had a boss called Lyle. He used to say that the manual itself is <em>the</em> product. If it’s not in the manual, it simply doesn’t exist for the customer.”</q> A statement that can come handy as as a reminder for Product Managers, Project Leaders and similar when they try to belittle documentation, and for writers themselves, when they feel that they can be sloppy because no one cares.</p> -<p>I really enjoyed when Randal told us about his first encounter with his editor, Jack:</p> -<blockquote>“He was a big guy. 6 ft tall, with huge hands. He used to hold his pencil like this… [shows a fist grabbing a pencil] …he starts reading my first draft and crosses a word, then a paragraph, and another, and so on. Then he looks at me and says: ‘OK, what did you <em>really</em> want to say here?’<br /> -<br /> -I said ‘Well, that you set option -s to enable <span class="caps">XYZ</span>’, and he starts writing down on my document ‘Set option -s to enable <span class="caps">XYZ</span>…’, and so on."</blockquote> -<p>When you start as a Technical Writer, you often end up writing a lot trying to be thorough, making even really simple things complicated. Jack reminded me of a great editor that was hired at my company for a summer, and revolutionized the whole department by applying some principles and vocabulary of <a href="http://en.wikipedia.org/wiki/Simplified_English">Simplified English</a>. As it turns out, instructions written in a plain and simple language are far easier to understand than anything else.</p> + <section class="section"> + <header> + <h3 id="h_4" class="toc">Technical Writing</h3> + </header> + <p>After our pizza, we all went back to my place, which is literally around the corner for the restaurant. It + was only when we were happily starting the second glass of my family’s very own home-made wine that + Randal looks at me and says: <q>“You know that I started off as a Technical Writer myself, don’t + you?”</q></p> + <p>I was baffled. I did brush up on Randal’s life on his web site, Wikipedia and similar, like any good + fan meeting his hero, but I never came across this tiny detail. This triggered yet another round of + questions on my part, as I have been working full time as a technical writer for years now. Randal shared a + couple of anecdotes about his early technical writing career.</p> + <p><q>“When I joined, I had a boss called Lyle. He used to say that the manual itself is <em>the</em> + product. If it’s not in the manual, it simply doesn’t exist for the customer.”</q> A + statement that can come handy as as a reminder for Product Managers, Project Leaders and similar when they + try to belittle documentation, and for writers themselves, when they feel that they can be sloppy because no + one cares.</p> + <p>I really enjoyed when Randal told us about his first encounter with his editor, Jack:</p> + <blockquote>“He was a big guy. 6 ft tall, with huge hands. He used to hold his pencil like this… + [shows a fist grabbing a pencil] …he starts reading my first draft and crosses a word, then a + paragraph, and another, and so on. Then he looks at me and says: ‘OK, what did you <em>really</em> + want to say here?’<br /> + <br /> + I said ‘Well, that you set option -s to enable <span class="caps">XYZ</span>’, and he starts + writing down on my document ‘Set option -s to enable <span class="caps">XYZ</span>…’, and + so on." + </blockquote> + <p>When you start as a Technical Writer, you often end up writing a lot trying to be thorough, making even + really simple things complicated. Jack reminded me of a great editor that was hired at my company for a + summer, and revolutionized the whole department by applying some principles and vocabulary of <a + href="http://en.wikipedia.org/wiki/Simplified_English">Simplified English</a>. As it turns out, + instructions written in a plain and simple language are far easier to understand than anything else.</p> -</section> + </section> -<section class="section"> -<header><h3 id="h_5" class="toc">Wrapping it up</h3></header> -<p>We spent the whole evening talking non-stop. We met at his hotel at 7:30 PM and I drove him back around 11 PM. The guy does talk a lot. Luckily, I got a chance to take a couple of pictures and get a funny autographed note, as long as I promised not to use it for cheques, that reads: “To Fabio, without whom this note will make no sense”.</p> -<p><img src="/img/pictures/rls/rls1_small.png" style="float:right;" /></p> -<p>There’s obviously a lot of stuff we talked about that I didn’t write about, mainly because I was trying to keep this article focused on IT-related topics. Before his cruise, Randal visited the <span class="caps">CERN</span> in Geneva, so for a good half hour we talked about the <span class="caps">LHC</span>, experiments, neutrinos being shot from Geneva and collected in Rome, things like that.</p> -<p>We also talked a lot about Randal’s day job, then about his company <a href="http://www.stonehenge.com">Stonehenge.com</a>, then his trip to England (and to the real Stonehenge); and we talked about Italy, both about good things (food?) and bad things (bureaucracy, backwards mentality mainly in relation to IT, lack of English speakers, etc.).</p> -<p>The evening couldn’t have gone better. Especially considering Randal and I don’t agree on some <span class="caps">EXTREMELY</span> important matters (programming languages and text editors). It was a great chance to learn from each other. I doubt he will be ditching Perl in favor of Ruby, but at least I hope to have made it very clear to him that Ruby is much more than Rails, at least for some of us.</p> -<p><code>sudo apt-get install emacs</code></p> -<p>Damn! Wrong terminal. Sorry about that…</p> + <section class="section"> + <header> + <h3 id="h_5" class="toc">Wrapping it up</h3> + </header> + <p>We spent the whole evening talking non-stop. We met at his hotel at 7:30 PM and I drove him back around 11 + PM. The guy does talk a lot. Luckily, I got a chance to take a couple of pictures and get a funny + autographed note, as long as I promised not to use it for cheques, that reads: “To Fabio, without whom + this note will make no sense”.</p> + <p><img src="/images/pictures/rls/rls1_small.png" style="float:right;" /></p> + <p>There’s obviously a lot of stuff we talked about that I didn’t write about, mainly because I was + trying to keep this article focused on IT-related topics. Before his cruise, Randal visited the <span + class="caps">CERN</span> in Geneva, so for a good half hour we talked about the <span + class="caps">LHC</span>, experiments, neutrinos being shot from Geneva and collected in Rome, things + like that.</p> + <p>We also talked a lot about Randal’s day job, then about his company <a + href="http://www.stonehenge.com">Stonehenge.com</a>, then his trip to England (and to the real + Stonehenge); and we talked about Italy, both about good things (food?) and bad things (bureaucracy, + backwards mentality mainly in relation to IT, lack of English speakers, etc.).</p> + <p>The evening couldn’t have gone better. Especially considering Randal and I don’t agree on some + <span class="caps">EXTREMELY</span> important matters (programming languages and text editors). It was a + great chance to learn from each other. I doubt he will be ditching Perl in favor of Ruby, but at least I + hope to have made it very clear to him that Ruby is much more than Rails, at least for some of us.</p> + <p><code>sudo apt-get install emacs</code></p> + <p>Damn! Wrong terminal. Sorry about that…</p> -</section> + </section> </section>
@@ -19,7 +19,7 @@ this seems to have become a trend, lately: programmers don’t like reading bullshit after all. By the
authors’ own admission, this book contains roughly the same material and the same examples of the original Java book, plus some slightly more Ruby-specific content.</p> <h3>Getting started</h3> -<p style="float:right;"><img src="/img/pictures/refactoring-ruby-ed.jpg" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/refactoring-ruby-ed.jpg" alt="" /></p> <p>The first chapter, <em>Refactoring, a first example</em>, is not a first chapter. Well, it is in a literal sense, but it doesn’t look like one: no theory, no padding, you’re immediately thrown in the middle of the battle, dealing with a small program in desperate need of refactoring. It literally contains quite a lot of code: the same@@ -55,7 +55,8 @@ the following sections (which should have been a list, but I’m just being pedantic now), so you know what to
expect.</p> <p>Each technique described has a very meaningful and immediate name that reflects its purpose, like Extract Method or Split Temporary Variable. A code example introduces the code smell and the proposed refactoring, followed by a - <em>Mechanics</em> section with a list of actions to perform and an explanatory <em>Motivation</em> section.</p> + <em>Mechanics</em> section with a list of actions to perform and an explanatory <em>Motivation</em> section. +</p> <p>Tipically, each refactoring has its own, self-contained code snippets. Depending on the complexity of the refactoring technique examined, the authors may spend half to five or six pages just to show all code iterations to get to the result. When things get too complicated, <span class="caps">UML</span> diagrams are used to make the technique@@ -95,7 +96,8 @@ <p>They are basically all about reducing bloat and unnecessary complexity, and — to me, that is — they all
sounded pretty obvious. <em>Of course</em> I’m going to separate domain from presentation! Didn’t Rails teach us anything at all? I must say I was somehow disappointed by this chapter. I was going to bet there was something slightly more advanced, maybe something about replacing traditional object instantiation with an internal - <span class="caps">DSL</span>? Nope, sorry.</p> + <span class="caps">DSL</span>? Nope, sorry. +</p> <p>Chapter 13, on the other hand, is an excellent conclusion to the book: it really helps the reader to understand when to refactor and how to do so, depending on the situation.</p> <h3>Conclusion</h3>
@@ -7,109 +7,219 @@ tags: "review|books|software"
pdf: true ----- - <section class="section"> -<p>When I was offered to review this book, I was a bit skeptical: a book on <em>management</em>? I normally read and review books on programming and software development methodologies. However, I work as a Documentation Technical Leader, and while I don’t technically <em>manage</em> a whole team yet (damn economic crisis!), someday I may end up doing just that, so I gave <a href="http://www.informit.com/store/product.aspx?isbn=032171153X">Reflections on Management</a> a try.</p> -<p><em>It’s short, after all, I’ll probably read it in a couple of weeks and move on</em> — I thought. Well, beware of short books: I thought exactly the same thing when I picked up <a href="http://en.wikipedia.org/wiki/The_Elements_of_Style">The Elements of Style</a>, and it still follows me around everywhere, so that I can re-read bits of it whenever I need to.</p> -<p>This short but dense masterpiece by Watts S. Humphrey and William R. Thomas is one those books you always end up carrying around in your pocket (or stored in your favorite ebook reader). It’s a short but very dense collection of tips and tricks to succeed as a leader and a manager — of <em>anything</em>: <q>Your Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn’t “just” help forging great managers and leaders, it also explains, with practical examples and no-nonsense explanations, how to deal with those annoying people in suits who constantly keep asking you for impossible things…</p> - - - <section class="section"> -<header><h1 id="h_1" class="toc">About Watts S. Humphrey</h1></header> -<p>Generally, I don’t bother writing anything about the authors in my reviews: you can easily find this kind of information online if you want to. I’ll make an exception in this case, you’ll understand why as you read along.</p> -<p><a href="http://www.sei.cmu.edu/watts/index.cfm?WT.ac=watts">Watts S. Humphrey</a> was a true legend in Software Engineering, he’s often referred to as <em>The Father of Software Quality</em>. He worked at <span class="caps">IBM</span> for 27 years and eventually became Vice President of Technical Development. In the 80s, he arrived at the <a href="http://www.sei.cmu.edu/">Software Engineering Institute (<span class="caps">SEI</span>)</a> where he developed some key development processes of our time: the Software Capability Maturity Model (<span class="caps">CMM</span>), the Personal Software Process (<span class="caps">PSP</span>), and the Team Software Process (<span class="caps">TSP</span>). He received many awards, culminating with the <em>National Medal of Technology</em> in 2005.</p> -<p>He wrote several books focusing mainly on software development and managing software projects through his <span class="caps">PSP</span> and <span class="caps">TSP</span> methodologies. <em>Reflections on Management — How to Manage Your Software Projects, Your Teams, Your Boss, and Yourself</em> was the last book published while he was alive. <a href="http://www.informit.com/title/0321624505">Leadership, Teamwork, and Trust: Building a Competitive Software Capability</a>, co-authored with James W. Over, was published posthumously.</p> -<p>Watts S. Humphrey <a href="http://www.sei.cmu.edu/newsitems/Humphrey_obituary.cfm">died</a> on October 28, 2010.</p> + <p>When I was offered to review this book, I was a bit skeptical: a book on <em>management</em>? I normally read and + review books on programming and software development methodologies. However, I work as a Documentation Technical + Leader, and while I don’t technically <em>manage</em> a whole team yet (damn economic crisis!), someday I + may end up doing just that, so I gave <a + href="http://www.informit.com/store/product.aspx?isbn=032171153X">Reflections on Management</a> a try.</p> + <p><em>It’s short, after all, I’ll probably read it in a couple of weeks and move on</em> — I + thought. Well, beware of short books: I thought exactly the same thing when I picked up <a + href="http://en.wikipedia.org/wiki/The_Elements_of_Style">The Elements of Style</a>, and it still follows me + around everywhere, so that I can re-read bits of it whenever I need to.</p> + <p>This short but dense masterpiece by Watts S. Humphrey and William R. Thomas is one those books you always end up + carrying around in your pocket (or stored in your favorite ebook reader). It’s a short but very dense + collection of tips and tricks to succeed as a leader and a manager — of <em>anything</em>: <q>Your + Software Projects, Your Teams, Your Boss, and Yourself</q>, as the book subtitle says. It doesn’t + “just” help forging great managers and leaders, it also explains, with practical examples and + no-nonsense explanations, how to deal with those annoying people in suits who constantly keep asking you for + impossible things…</p> -</section> -<section class="section"> -<header><h1 id="h_2" class="toc">Structure and Organization</h1></header> -<p>In many ways, <em>Reflections on Management</em> can be seen as the <em>summa</em> of Humphrey’s work on <span class="caps">PSP</span>, <span class="caps">TSP</span> and management of software projects, condensed in a very readable 288-page-book, co-written with <a href="http://www.sei.cmu.edu/about/people/wrt.cfm">William R. Thomas</a>, Senior Technical Writer and manager of SEI’s Technical Publications Team.</p> -<p><img src="/img/pictures/books/reflmgmt.jpg" style="float:right" /></p> -<p>I noticed the tech writer’s touch simply by flicking through the pages of the book when I first got it: its structure is impeccable.</p> -<p>Organized into four parts, totalling 8 chapters, an Epilogue and an Appendix, this book is a prime example of order and readability: pick any section title (just the title) of any section in any chapter, and you get a clear idea of their content and purpose, and a key principle of management. Examples? Sure:</p> -<ul> - <li>Chapter 8: Learning to Lead - <ul> - <li>8.1 How You Behave Affects Your Team</li> - <li>8.2 Leaders Set an Example for Their Teams</li> - <li>8.3 Learn to Avoid the Symptoms of Poor Leadership</li> - <li>[…]</li> - </ul></li> -</ul> -<p>If you print the Table of Contents alone you get a priceless cheat sheet on management and leadership. If you want slightly more detail, each chapter contains a summary table of all its sections, with a two-line summary of its contents. There are no subsections, only first-level sections, which make the book much easier to understand and “digest”.</p> -<p>You can read it all at once, then you should keep it readily available for consultation. It will take you only a few seconds to look through the contents and pick the most relevant section in a time of need.</p> -</section> -<section class="section"> -<header><h1 id="h_3" class="toc">Writing Style</h1></header> -<p>The book is very clear and simple to read, always. Each section is self-contained, and always aims to make a point, usually expressed right in its title. If I were to find a common pattern in most of the chapters of this book, it would be the following:</p> -<ol> - <li>Identification of the problem – a particular situation or aspect is described in a way that problems are self-esplanatory.</li> - <li>Labeling and classification – the situation is analized and often a set of causes are presented to the reader, often labeled or classified.</li> - <li>List of possible solutions – a list possible solutions is presented to the reader, often as a definition list.</li> - <li>Solution details – more details are provided to prove the effectiveness of the solution, often including personal anecdotes.</li> -</ol> -<p>By doing so, the author makes sure that everything he writes about can be easily understood and accepted, because proven by personal experience.</p> -</section> -<section class="section"> -<header><h1 id="h_4" class="toc">Contents</h1></header> -<section class="section"> -<header><h1 id="h_5" class="toc">Part I: Managing Your Projects</h1></header> -<p>The book starts with a general introduction on Software Quality. If you are new to the subject (and you <em>shouldn’t</em> be), this is probably one of the best and to-the-point overviews you’ll ever find, written by the man who almost came up with the concept.</p> -<p>The second chapter is about planning. Actually, the whole book is about planning at different levels, so no, you should not dismiss this part. <em>Good</em> plans are important, and they are your best weapon against management, if you excuse the expression.</p> -<p>Someone may object that if you’re working in an <em>agile</em> team, you shouldn’t spend a lot of energy in long-term planning, but rather focus on dealing with frequent requirement changes and deliver often and regularly. While this can be true, planning is still important: you won’t produce any rigorous schedule or design documents, but you still have to be able to provide accurate estimates and very often!</p> + <section class="section"> + <header> + <h1 id="h_1" class="toc">About Watts S. Humphrey</h1> + </header> + <p>Generally, I don’t bother writing anything about the authors in my reviews: you can easily find this + kind of information online if you want to. I’ll make an exception in this case, you’ll + understand why as you read along.</p> + <p><a href="http://www.sei.cmu.edu/watts/index.cfm?WT.ac=watts">Watts S. Humphrey</a> was a true legend in + Software Engineering, he’s often referred to as <em>The Father of Software Quality</em>. He worked at + <span class="caps">IBM</span> for 27 years and eventually became Vice President of Technical Development. In + the 80s, he arrived at the <a href="http://www.sei.cmu.edu/">Software Engineering Institute (<span + class="caps">SEI</span>)</a> where he developed some key development processes of our time: the + Software Capability Maturity Model (<span class="caps">CMM</span>), the Personal Software Process (<span + class="caps">PSP</span>), and the Team Software Process (<span class="caps">TSP</span>). He received + many awards, culminating with the <em>National Medal of Technology</em> in 2005.</p> + <p>He wrote several books focusing mainly on software development and managing software projects through his + <span class="caps">PSP</span> and <span class="caps">TSP</span> methodologies. <em>Reflections on Management + — How to Manage Your Software Projects, Your Teams, Your Boss, and Yourself</em> was the last book + published while he was alive. <a href="http://www.informit.com/title/0321624505">Leadership, Teamwork, and + Trust: Building a Competitive Software Capability</a>, co-authored with James W. Over, was published + posthumously.</p> + <p>Watts S. Humphrey <a href="http://www.sei.cmu.edu/newsitems/Humphrey_obituary.cfm">died</a> on October 28, + 2010.</p> -</section> - + </section> <section class="section"> -<header><h1 id="h_6" class="toc">Part II: Managing Your Teams</h1></header> -<p>The second part of the book focuses the <em>Team</em>, the people in it, their roles, their responsability and its leadership. Chapter 3 introduces Tom DeMarco’s concept of <em>Jelled Team</em>, i.e. a team that is more than the sum of its parts, and is characterized by cohesion, challenging goals, frequent feedback, a common working framework and good communication.</p> -<p>The Holy Grail. The dream of every team leader and its members. The good news is, it can be done. Any team can jell, and teams <em>like to jell</em> furthermore, if the proper conditions exist, and the three chapter in this third part will teach you everything from being a good team member to becoming a great team leader.</p> -<p>In many ways, this was my favorite part of the book. It’s amazing how a lifetime of experience is distilled in just a few pages. Chapter 5 (Leading and Coaching your Teams) is very, very inspiring and very helpful in understanding how to become a good team leader, how to motivate and involve people, and how to manage them rationally.</p> -<p>The story of Humphrey’s high school wrestling coach Umbach is a classic example of a truly dedicated, inspiring, and successful leader:</p> - <blockquote>“The workouts were so tough that the matches seemed easy. By the end of the year, several of us were undefeated, the team took the 13-state championship, and we were campus heroes. All of this from a ragtag bunch of inexperienced recruits. It was Coach Umbach who made the team.<br /> -<br /> -Our coach’s dedication, commitment and energy were amazing, but what I found most inspiring was that he really cared about how each of us did. I have always remembered how he made a small band of raw recruits into a championship team and how he fostered the kind of cohesive team spirit that made losing simply unthinkable."</blockquote> + <header> + <h1 id="h_2" class="toc">Structure and Organization</h1> + </header> + <p>In many ways, <em>Reflections on Management</em> can be seen as the <em>summa</em> of Humphrey’s work + on <span class="caps">PSP</span>, <span class="caps">TSP</span> and management of software projects, + condensed in a very readable 288-page-book, co-written with <a + href="http://www.sei.cmu.edu/about/people/wrt.cfm">William R. Thomas</a>, Senior Technical Writer and + manager of SEI’s Technical Publications Team.</p> + <p><img src="/images/pictures/books/reflmgmt.jpg" style="float:right" /></p> + <p>I noticed the tech writer’s touch simply by flicking through the pages of the book when I first got it: + its structure is impeccable.</p> + <p>Organized into four parts, totalling 8 chapters, an Epilogue and an Appendix, this book is a prime example of + order and readability: pick any section title (just the title) of any section in any chapter, and you get a + clear idea of their content and purpose, and a key principle of management. Examples? Sure:</p> + <ul> + <li>Chapter 8: Learning to Lead + <ul> + <li>8.1 How You Behave Affects Your Team</li> + <li>8.2 Leaders Set an Example for Their Teams</li> + <li>8.3 Learn to Avoid the Symptoms of Poor Leadership</li> + <li>[…]</li> + </ul> + </li> + </ul> + <p>If you print the Table of Contents alone you get a priceless cheat sheet on management and leadership. If you + want slightly more detail, each chapter contains a summary table of all its sections, with a two-line + summary of its contents. There are no subsections, only first-level sections, which make the book much + easier to understand and “digest”.</p> + <p>You can read it all at once, then you should keep it readily available for consultation. It will take you + only a few seconds to look through the contents and pick the most relevant section in a time of need.</p> -</section> - + </section> <section class="section"> -<header><h1 id="h_7" class="toc">Part III: Managing Your Boss</h1></header> -<p>The third part consists of a single chapter: <em>Negotiation your projects and defending your plans</em>. It doesn’t matter if you want to pretend otherwise: as soon as you become a team leader and you have to deal with management, you’ll have to deal with complex internal politics.</p> -<p>This chapter is about learing to be pragmatically diplomatic and deal with management. It’s about creating good plans that can survive confrontation with your managers, no matter what their demands are.</p> -<p>There’s no silver bullet: I appreciated the honesty of the author when providing solutions. Section 6.6 (What to do when a project is doomed) is an example of this:</p> -<blockquote> -<p>You’re on a project and it’s headeing south. While everubody is trying their hardest, and you’re doing your level best to help, you can feel it in your bones: the project is doomed to fail. What can you do? You have three choices.</p> -<ol> - <li>Keep plugging away and hope things will improve.</li> - <li>Look for another job.</li> - <li>Try to fix the problems.</li> -</ol> -</blockquote> -<p>That’s right. Look for another job. That almost made me laugh, but it made me understand that in some extreme situation that may just be the best solution.</p> + <header> + <h1 id="h_3" class="toc">Writing Style</h1> + </header> + <p>The book is very clear and simple to read, always. Each section is self-contained, and always aims to make a + point, usually expressed right in its title. If I were to find a common pattern in most of the chapters of + this book, it would be the following:</p> + <ol> + <li>Identification of the problem – a particular situation or aspect is described in a way that + problems are self-esplanatory.</li> + <li>Labeling and classification – the situation is analized and often a set of causes are presented to + the reader, often labeled or classified.</li> + <li>List of possible solutions – a list possible solutions is presented to the reader, often as a + definition list.</li> + <li>Solution details – more details are provided to prove the effectiveness of the solution, often + including personal anecdotes.</li> + </ol> + <p>By doing so, the author makes sure that everything he writes about can be easily understood and accepted, + because proven by personal experience.</p> -</section> - + </section> <section class="section"> -<header><h1 id="h_8" class="toc">Part IV: Managing Yourself</h1></header> -<p>The last part of the book is about you. I would probably have moved it earlier on in the book, maybe right after the first part, but it serves as a good ending for the book. Chapter 7 (Taking Control of Your Work) is a must-read for anyone. It teaches you how to manage your working life, from time management (The 18 Hour Work Week) to psychological aspects (What Do You Want From Life?).</p> -<p>Chapter 8 (Learning to Lead), is a nice writeup on the essence of Leadership, and what it measn to be a good leader rather than a manager. A great read.</p> + <header> + <h1 id="h_4" class="toc">Contents</h1> + </header> + <section class="section"> + <header> + <h1 id="h_5" class="toc">Part I: Managing Your Projects</h1> + </header> + <p>The book starts with a general introduction on Software Quality. If you are new to the subject (and you + <em>shouldn’t</em> be), this is probably one of the best and to-the-point overviews you’ll + ever find, written by the man who almost came up with the concept.</p> + <p>The second chapter is about planning. Actually, the whole book is about planning at different levels, so + no, you should not dismiss this part. <em>Good</em> plans are important, and they are your best weapon + against management, if you excuse the expression.</p> + <p>Someone may object that if you’re working in an <em>agile</em> team, you shouldn’t spend a + lot of energy in long-term planning, but rather focus on dealing with frequent requirement changes and + deliver often and regularly. While this can be true, planning is still important: you won’t + produce any rigorous schedule or design documents, but you still have to be able to provide accurate + estimates and very often!</p> -</section> + </section> -</section> -<section class="section"> -<header><h1 id="h_9" class="toc">Final Thoughts</h1></header> -<p>Reading certain sections of this book felt a little bit weird at first. <span class="caps">TSP</span>, <span class="caps">PSP</span>, heavy planning and documents… are they still relevant in a “real world” now dominated by <em>agile</em> practices, Scrum, Kanban and similar? Do you really have to provide detailed plans and documentation to convince management?</p> -<ul> - <li>You may not have detailed design documents, but you still have user stories.</li> - <li>You may not be required to plan ahead of 6 months, but you still have to plan frequently and provide accurate estimates.</li> - <li>You may not be required to trace and track everything you do, but at the very least you have to monitor your <em>velocity</em> and produce <em>burndown charts</em>.</li> -</ul> -<p>Yes, you read “<span class="caps">PSP</span>” and “<span class="caps">TSP</span>” everywhere in the book, but they are just labels. The methodologies and processes may change, but <em>the principles</em> will always remain true. This book is about understanding the very essence of management and leadership, and it will remain an invaluable resource for anyone who wants to build a career in the Software Industry.</p> + <section class="section"> + <header> + <h1 id="h_6" class="toc">Part II: Managing Your Teams</h1> + </header> + <p>The second part of the book focuses the <em>Team</em>, the people in it, their roles, their + responsability and its leadership. Chapter 3 introduces Tom DeMarco’s concept of <em>Jelled + Team</em>, i.e. a team that is more than the sum of its parts, and is characterized by cohesion, + challenging goals, frequent feedback, a common working framework and good communication.</p> + <p>The Holy Grail. The dream of every team leader and its members. The good news is, it can be done. Any + team can jell, and teams <em>like to jell</em> furthermore, if the proper conditions exist, and the + three chapter in this third part will teach you everything from being a good team member to becoming a + great team leader.</p> + <p>In many ways, this was my favorite part of the book. It’s amazing how a lifetime of experience is + distilled in just a few pages. Chapter 5 (Leading and Coaching your Teams) is very, very inspiring and + very helpful in understanding how to become a good team leader, how to motivate and involve people, and + how to manage them rationally.</p> + <p>The story of Humphrey’s high school wrestling coach Umbach is a classic example of a truly + dedicated, inspiring, and successful leader:</p> + <blockquote>“The workouts were so tough that the matches seemed easy. By the end of the year, several + of us were undefeated, the team took the 13-state championship, and we were campus heroes. All of this + from a ragtag bunch of inexperienced recruits. It was Coach Umbach who made the team.<br /> + <br /> + Our coach’s dedication, commitment and energy were amazing, but what I found most inspiring was + that he really cared about how each of us did. I have always remembered how he made a small band of raw + recruits into a championship team and how he fostered the kind of cohesive team spirit that made losing + simply unthinkable." + </blockquote> -</section> + </section> + + <section class="section"> + <header> + <h1 id="h_7" class="toc">Part III: Managing Your Boss</h1> + </header> + <p>The third part consists of a single chapter: <em>Negotiation your projects and defending your plans</em>. + It doesn’t matter if you want to pretend otherwise: as soon as you become a team leader and you + have to deal with management, you’ll have to deal with complex internal politics.</p> + <p>This chapter is about learing to be pragmatically diplomatic and deal with management. It’s about + creating good plans that can survive confrontation with your managers, no matter what their demands are. + </p> + <p>There’s no silver bullet: I appreciated the honesty of the author when providing solutions. Section + 6.6 (What to do when a project is doomed) is an example of this:</p> + <blockquote> + <p>You’re on a project and it’s headeing south. While everubody is trying their hardest, and + you’re doing your level best to help, you can feel it in your bones: the project is doomed to + fail. What can you do? You have three choices.</p> + <ol> + <li>Keep plugging away and hope things will improve.</li> + <li>Look for another job.</li> + <li>Try to fix the problems.</li> + </ol> + </blockquote> + <p>That’s right. Look for another job. That almost made me laugh, but it made me understand that in + some extreme situation that may just be the best solution.</p> + + </section> + + <section class="section"> + <header> + <h1 id="h_8" class="toc">Part IV: Managing Yourself</h1> + </header> + <p>The last part of the book is about you. I would probably have moved it earlier on in the book, maybe + right after the first part, but it serves as a good ending for the book. Chapter 7 (Taking Control of + Your Work) is a must-read for anyone. It teaches you how to manage your working life, from time + management (The 18 Hour Work Week) to psychological aspects (What Do You Want From Life?).</p> + <p>Chapter 8 (Learning to Lead), is a nice writeup on the essence of Leadership, and what it measn to be a + good leader rather than a manager. A great read.</p> + + </section> + + </section> + <section class="section"> + <header> + <h1 id="h_9" class="toc">Final Thoughts</h1> + </header> + <p>Reading certain sections of this book felt a little bit weird at first. <span class="caps">TSP</span>, <span + class="caps">PSP</span>, heavy planning and documents… are they still relevant in a “real + world” now dominated by <em>agile</em> practices, Scrum, Kanban and similar? Do you really have to + provide detailed plans and documentation to convince management?</p> + <ul> + <li>You may not have detailed design documents, but you still have user stories.</li> + <li>You may not be required to plan ahead of 6 months, but you still have to plan frequently and provide + accurate estimates.</li> + <li>You may not be required to trace and track everything you do, but at the very least you have to monitor + your <em>velocity</em> and produce <em>burndown charts</em>.</li> + </ul> + <p>Yes, you read “<span class="caps">PSP</span>” and “<span class="caps">TSP</span>” + everywhere in the book, but they are just labels. The methodologies and processes may change, but <em>the + principles</em> will always remain true. This book is about understanding the very essence of management + and leadership, and it will remain an invaluable resource for anyone who wants to build a career in the + Software Industry.</p> + + </section> </section>
@@ -4,6 +4,14 @@ content-type: article
timestamp: 1152258748 tags: "cakephp|rails|tutorial" ----- -<p>This article is an attempt to port a famous Ruby on Rails tutorial to <span class="caps">PHP</span> using an emerging <span class="caps">PHP</span> <span class="caps">MVC</span> framework, CakePHP. CakePHP was inspired by Rails’ philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on Rails popular in a very short time. Although Ruby’s syntax and way of doing things is known to be much more elegant than other programming languages, there is yet hope for <span class="caps">PHP</span> to get more organized and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create a simple, yet fully functional, web application.<br /> -Register on the <a href="http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html">International <span class="caps">PHP</span> Magazine</a> to read the full article.<br /> -<img src="/img/thumbs/phpmag0706.gif" alt="" /></p> +<p>This article is an attempt to port a famous Ruby on Rails tutorial to <span class="caps">PHP</span> using an emerging + <span class="caps">PHP</span> <span class="caps">MVC</span> framework, CakePHP. CakePHP was inspired by Rails’ + philosophy of Rapid Application Development. It implements a lot of the features and concepts that made Ruby on + Rails popular in a very short time. Although Ruby’s syntax and way of doing things is known to be much more + elegant than other programming languages, there is yet hope for <span class="caps">PHP</span> to get more organized + and effi cient. This tutorial will follow its Rails counterpart step-by-step, covering the essential steps to create + a simple, yet fully functional, web application.<br /> + Register on the <a href="http://www.php-mag.net/magphpde/psecom,id,20,archive,2,noeid,20,.html">International <span + class="caps">PHP</span> Magazine</a> to read the full article.<br /> + <img src="/images/thumbs/phpmag0706.gif" alt="" /> +</p>
@@ -5,20 +5,35 @@ timestamp: 1183786980
tags: "rails|website|web20" ----- <p>The first thing I do when I start developing a new application is write down some ideas.</p> -<p>Pen and paper normally do the job, but nowadays there are some valid online and offline applications which work as good if not (probably) better.</p> -<p>I’ve never been a fan of <a href="http://en.wikipedia.org/wiki/Mind_Mapping">Mind Mapping</a>. I’ve been to a seminar on problem solving and creativity and they were showing how mind mapping can unleash your creativity, but it didn’t really work for me. I found the concept-idea-concept-idea sequences a bit too restrictive for my liking.</p> -<p>So I decided to try something different: bubbles! <a href="http://www.bubbl.us/">Bubbl.us</a> is an interesting online flash application which lets you create bubbles. You can create bubbles and relationships between them, change their color, their dimensions etc. And above all it’s absolutely fun to use. I created two bubble sheets, the first one to define how content will be organized in the next version of ItalySimply:</p> -<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"><br /> -<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> -<param name="quality" value="high" /><br /> -<param name="SeamlessTabbing" value="false" /><br /> -<param name="AllowScriptAccess" value="always" /><br /> -<param name="FlashVars" value="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> -<embed src="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" FlashVars="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed><br /> -</object></p> +<p>Pen and paper normally do the job, but nowadays there are some valid online and offline applications which work as + good if not (probably) better.</p> +<p>I’ve never been a fan of <a href="http://en.wikipedia.org/wiki/Mind_Mapping">Mind Mapping</a>. I’ve been + to a seminar on problem solving and creativity and they were showing how mind mapping can unleash your creativity, + but it didn’t really work for me. I found the concept-idea-concept-idea sequences a bit too restrictive for my + liking.</p> +<p>So I decided to try something different: bubbles! <a href="http://www.bubbl.us/">Bubbl.us</a> is an interesting + online flash application which lets you create bubbles. You can create bubbles and relationships between them, + change their color, their dimensions etc. And above all it’s absolutely fun to use. I created two bubble + sheets, the first one to define how content will be organized in the next version of ItalySimply:</p> +<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" + height="340" id="bblviewer"><br /> + <param name="movie" value="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> + <param name="quality" value="high" /><br /> + <param name="SeamlessTabbing" value="false" /><br /> + <param name="AllowScriptAccess" value="always" /><br /> + <param name="FlashVars" + value="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" /><br /> + <embed src="http://bubbl.us/sys/view.swf?sid=26306&pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" + FlashVars="_sid=26306&_title=ItalySimply%20v3%20-%20Content&_z=75&_pw=yaeyI.megNtZcMTh3azVsVjhwVEt0TQ" + quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" + type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" + SeamlessTabbing="false" name="bblviewer"></embed><br /> + </object></p> <p>The diagram identifies three main types of content:</p> <ul> - <li>Houses – basically what the site is about: house listing with information and pictures about houses for sale or rent.</li> + <li>Houses – basically what the site is about: house listing with information and pictures about houses for + sale or rent.</li> <li>Links – Either swapped with partners or suggested by users.</li> <li>Pages – Static content.</li> </ul>@@ -29,25 +44,41 @@ <li>Categories</li>
<li>An internal search engine, allowing people to filter houses according to some criteria.</li> </ul> <p>The other sheet focuses on relationships between content and users.</p> -<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" height="340" id="bblviewer"><br /> -<param name="movie" value="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /><br /> -<param name="quality" value="high" /><br /> -<param name="SeamlessTabbing" value="false" /><br /> -<param name="AllowScriptAccess" value="always" /><br /> -<param name="FlashVars" value="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /><br /> -<embed src="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" FlashVars="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" SeamlessTabbing="false" name="bblviewer"></embed><br /> -</object></p> -<p>At the far sides we have users and administrators, and in the middle how they interact between themselves or with content, in particular:</p> +<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="450" + height="340" id="bblviewer"><br /> + <param name="movie" value="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /><br /> + <param name="quality" value="high" /><br /> + <param name="SeamlessTabbing" value="false" /><br /> + <param name="AllowScriptAccess" value="always" /><br /> + <param name="FlashVars" + value="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" /> + <br /> + <embed src="http://bubbl.us/sys/view.swf?sid=26307&pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" + FlashVars="_sid=26307&_title=ItalySimply%20v3%20-%20Communication&_z=75&_pw=yaeyI.megNtZcMTgxeUw0S0FSNzhFNg" + quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" + type="application/x-shockwave-flash" width="450" height="340" allowscriptaccess="always" + SeamlessTabbing="false" name="bblviewer"></embed><br /> + </object></p> +<p>At the far sides we have users and administrators, and in the middle how they interact between themselves or with + content, in particular:</p> <ul> <li>Users will be able to access house feeds and be notified automatically of new additions</li> <li>Users will be able to ask questions or comments to each house (they’ll be moderated, of course).</li> - <li>Users will be able to suggest links, or contact administrators using a “House Preferences” form or a more generic contact form.</li> + <li>Users will be able to suggest links, or contact administrators using a “House Preferences” form or a + more generic contact form.</li> </ul> -<p>Bubbles are fun, but while I was creating these two diagrams, I felt I absolutely needed to name the relationships between each entity or concept, so I spend some time trying to find a tool who would let me do so in an easy and fast way.</p> -<p>Yep, I needed to create a <a href="http://en.wikipedia.org/wiki/Domain_model">domain model</a> to move a bit closer to create the database architecture of the site.<br /> -It turns out that this magic tool exists, and it’s free for non-commercial use: <a href="http://cmap.ihmc.us/download/">CmapTools</a>.<br /> -It’s not web based, and it’s a 59MB Java desktop application which can be used to create <a href="http://en.wikipedia.org/wiki/Concept_map">Concept Maps</a>.</p> +<p>Bubbles are fun, but while I was creating these two diagrams, I felt I absolutely needed to name the relationships + between each entity or concept, so I spend some time trying to find a tool who would let me do so in an easy and + fast way.</p> +<p>Yep, I needed to create a <a href="http://en.wikipedia.org/wiki/Domain_model">domain model</a> to move a bit closer + to create the database architecture of the site.<br /> + It turns out that this magic tool exists, and it’s free for non-commercial use: <a + href="http://cmap.ihmc.us/download/">CmapTools</a>.<br /> + It’s not web based, and it’s a 59MB Java desktop application which can be used to create <a + href="http://en.wikipedia.org/wiki/Concept_map">Concept Maps</a>.</p> <p>Within minutes I was able to create a simple but pretty and functional enough domain model for my site:</p> -<p><img src="/files/ItalySimply-v3_domain-model.jpg" alt="" /></p> -<p>Basically all the concepts I used are going to become models, and all the named relationships will become model associations in Rails.</p> +<p><img src="/images/ItalySimply-v3_domain-model.jpg" alt="" /></p> +<p>Basically all the concepts I used are going to become models, and all the named relationships will become model + associations in Rails.</p> <p>Next step: database architecture.</p>
@@ -17,8 +17,8 @@ <p>Anyhow, back to our weekly series. After creating a <a href=/articles/simply-on-rails-1-concepts-map">concept
map</a>, it’s time of <em>get real</em> and try to figure out a database architecture. The tool of choice this week is obviously the widely popular <a href="http://fabforce.net/dbdesigner4/">DbDesigner 4</a>. It’s free, it’s easy to use, and the results are pretty enough. There:</p> -<p><a href="/files/italysimply_database-architecture.png"><img src="/files/italysimply_database-architecture_thumb.png" - alt="" /></a></p> +<p><a href="/images/italysimply_database-architecture.png"><img + src="/images/italysimply_database-architecture_thumb.png" alt="" /></a></p> <p>It’s amazing how a relatively simple concept map can lead to such a complex database architecture, isn’t it?<br /> Well, it’s normal. One of the reasons of this is that I totally forgot about geographical information about
@@ -6,94 +6,190 @@ tags: "review|productivity|books|software"
pdf: true ----- - <section class="section"> -<blockquote> -<p>“This is not a book for those who are completely new to <em>Scrum</em> or <em>agile</em>. There are other books, classes, and even websites for that. If you are completely new to <em>Scrum</em>, start with one of those.”</p> -</blockquote> -<p style="padding-left:5em;">— Mike Cohn, <em>Succeeding with Agile</em></p> -<p>Great. That’s just great. Good job I started with the <em>Introduction</em> first, otherwise the first chapters of this book would have been way too overwhelming!</p> -<p><a href="http://www.succeedingwithagile.com/"><em>Succeeding with Agile</em></a> is a book that <em>doesn’t</em> teach you about <em>Scrum</em> or <em>agile</em> methodologies, it won’t give you a definition of ScrumMaster, sprint, or backlog… instead, it takes all that for granted and teaches how to pragmatically adopt — or better, <acronym title="Awareness, Desire, Ability, Promotion, Transfer"><span class="caps">ADAPT</span></acronym> to — <em>Scrum</em>, in the context of yourself, your team, and even your entire organization.</p> -<blockquote> -<p>“[…] this book draws on my experience with <em>Scrum</em> over the past 15 years, but especialle the last 4. For the last 4 years, every evening after I spent the day with one of my clients, I would go back to my hotel room and make notes about problems they were facing, the question they asked, and the advice I gave.”</p> -</blockquote> -<p>Indeed, this book is a gold mine of information, anecdotes, tips and tricks about everything you could possibly want to know about making <em>Scrum</em> work, at any level. If you have some knowledge about <em>agile</em> development you definitely have some questions: <em>will it work?</em> … <em>is it really more productive?</em> … <em>how can I make my boss understant this?</em>. This book has all the answers you need. Most definitely, it also answer questions you didn’t think of.</p> -<p>If you don’t know what all this is about, then you’d better do your homework first:</p> -<ul> - <li><a href="http://www.mountaingoatsoftware.com/topics/scrum">Introduction to <em>Scrum</em> – An Agile Process</a></li> - <li><a href="http://en.wikipedia.org/wiki/_Scrum__(development)"><em>Scrum</em> (Wikipedia Page)</a></li> - <li><a href="http://www.scrumalliance.org/"><em>Scrum</em> Alliance</a></li> - <li><a href="http://www.scrum.org/"><em>Scrum</em>.org</a></li> -</ul> - <section class="section"> -<header><h1 id="h_1" class="toc">Overview</h1></header> -<img src="/img/pictures/succeeding-with-agile.jpg" style="float:left;" /> -<p>The book is organized into five parts of different length, ranging from 20 to over 100 pages. If you read the book from the start till the very end, you’ll notice that the start of each part is like a new milestone in <em>Scrum</em> adoption: first the author makes sure that <em>you</em> are prepared (Part 1), then moves on to deal with individuals and initial resistance (Part 2), then teams (Part 3) and finally the whole organization (Part 4), until you can finally taste the fruits of you labor (Part 5).</p> -<p>In a way, you may well want to carry this book in your briefcase every day you go to work, and read it bit by bit, as you make progress in your quest for <em>Scrum</em> adoption.</p> + <blockquote> + <p>“This is not a book for those who are completely new to <em>Scrum</em> or <em>agile</em>. There are + other books, classes, and even websites for that. If you are completely new to <em>Scrum</em>, start with + one of those.”</p> + </blockquote> + <p style="padding-left:5em;">— Mike Cohn, <em>Succeeding with Agile</em></p> + <p>Great. That’s just great. Good job I started with the <em>Introduction</em> first, otherwise the first + chapters of this book would have been way too overwhelming!</p> + <p><a href="http://www.succeedingwithagile.com/"><em>Succeeding with Agile</em></a> is a book that + <em>doesn’t</em> teach you about <em>Scrum</em> or <em>agile</em> methodologies, it won’t give you a + definition of ScrumMaster, sprint, or backlog… instead, it takes all that for granted and teaches how to + pragmatically adopt — or better, <acronym title="Awareness, Desire, Ability, Promotion, Transfer"><span + class="caps">ADAPT</span></acronym> to — <em>Scrum</em>, in the context of yourself, your team, + and even your entire organization.</p> + <blockquote> + <p>“[…] this book draws on my experience with <em>Scrum</em> over the past 15 years, but especialle + the last 4. For the last 4 years, every evening after I spent the day with one of my clients, I would go + back to my hotel room and make notes about problems they were facing, the question they asked, and the + advice I gave.”</p> + </blockquote> + <p>Indeed, this book is a gold mine of information, anecdotes, tips and tricks about everything you could possibly + want to know about making <em>Scrum</em> work, at any level. If you have some knowledge about <em>agile</em> + development you definitely have some questions: <em>will it work?</em> … <em>is it really more + productive?</em> … <em>how can I make my boss understant this?</em>. This book has all the answers you + need. Most definitely, it also answer questions you didn’t think of.</p> + <p>If you don’t know what all this is about, then you’d better do your homework first:</p> + <ul> + <li><a href="http://www.mountaingoatsoftware.com/topics/scrum">Introduction to <em>Scrum</em> – An Agile + Process</a></li> + <li><a href="http://en.wikipedia.org/wiki/_Scrum__(development)"><em>Scrum</em> (Wikipedia Page)</a></li> + <li><a href="http://www.scrumalliance.org/"><em>Scrum</em> Alliance</a></li> + <li><a href="http://www.scrum.org/"><em>Scrum</em>.org</a></li> + </ul> <section class="section"> -<header><h1 id="h_2" class="toc">Part I: Getting Started</h1></header> -<p>Part I is about making sure you know <em>why</em> becoming gile is important and beneficial to you and your work environment. It will teach you how to promote <em>Scrum</em>, its advantages and challenges, and the different ways to go about it: Start Small or Go All In? Stealth or Public Display? Things like that. Pointless theory? Not really: everything is well documented, with success stories to support one way or the other.</p> + <header> + <h1 id="h_1" class="toc">Overview</h1> + </header> + <img src="/images/pictures/succeeding-with-agile.jpg" style="float:left;" /> + <p>The book is organized into five parts of different length, ranging from 20 to over 100 pages. If you read the + book from the start till the very end, you’ll notice that the start of each part is like a new + milestone in <em>Scrum</em> adoption: first the author makes sure that <em>you</em> are prepared (Part 1), + then moves on to deal with individuals and initial resistance (Part 2), then teams (Part 3) and finally the + whole organization (Part 4), until you can finally taste the fruits of you labor (Part 5).</p> + <p>In a way, you may well want to carry this book in your briefcase every day you go to work, and read it bit by + bit, as you make progress in your quest for <em>Scrum</em> adoption.</p> -</section> + <section class="section"> + <header> + <h1 id="h_2" class="toc">Part I: Getting Started</h1> + </header> + <p>Part I is about making sure you know <em>why</em> becoming gile is important and beneficial to you and + your work environment. It will teach you how to promote <em>Scrum</em>, its advantages and challenges, + and the different ways to go about it: Start Small or Go All In? Stealth or Public Display? Things like + that. Pointless theory? Not really: everything is well documented, with success stories to support one + way or the other.</p> - <section class="section"> -<header><h1 id="h_3" class="toc">Part II: Individuals</h1></header> -<p>This part was very interesting from a psychological point of view: it deals with individuals and their possible reactions to becoming <em>agile</em>. You’ll meet <em>skeptics</em>, <em>followers</em>, <em>saboteurs</em> and <em>diehards</em> — no hope? Well, of course not: you’ll learn how to deal with each one of them in the best way possible. This part will also introduce you to new roles and responsabilities related to <em>Scrum</em>.</p> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_3" class="toc">Part II: Individuals</h1> + </header> + <p>This part was very interesting from a psychological point of view: it deals with individuals and their + possible reactions to becoming <em>agile</em>. You’ll meet <em>skeptics</em>, <em>followers</em>, + <em>saboteurs</em> and <em>diehards</em> — no hope? Well, of course not: you’ll learn how to + deal with each one of them in the best way possible. This part will also introduce you to new roles and + responsabilities related to <em>Scrum</em>.</p> - <section class="section"> -<header><h1 id="h_4" class="toc">Part III: Teams</h1></header> -<p>Up next, Teams. You’re no longer dealing with single-minded individuals, but with more complex groups. New challenges emerge, mostly related to communication and people interactions. I particularly enjoyed <strong>Chapter 13 — The Product Backlog</strong>, which provides invaluable insights on this important everyday tool. <strong>Chapter 15 — Planning</strong> is another interesting read: it teaches you a lot about planning vs. estimating, and coming to compromises to meet deadlines.</p> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_4" class="toc">Part III: Teams</h1> + </header> + <p>Up next, Teams. You’re no longer dealing with single-minded individuals, but with more complex + groups. New challenges emerge, mostly related to communication and people interactions. I particularly + enjoyed <strong>Chapter 13 — The Product Backlog</strong>, which provides invaluable insights on + this important everyday tool. <strong>Chapter 15 — Planning</strong> is another interesting read: + it teaches you a lot about planning vs. estimating, and coming to compromises to meet deadlines.</p> - <section class="section"> -<header><h1 id="h_5" class="toc">Part IV: The Organization</h1></header> -<p>If you made it up to here, then you’re nearly done. You probably know most of the tricks by now, but there’s still a lot to learn. <strong>Chapter 17 — Scaling <em>Scrum</em></strong> is definitely worth reading, even just for the analysis between <em>formal</em> and <em>informal communities</em>, while <strong>Chapter 19 —Cohexisting with Other Approaches</strong> almost feels heretical at times: mixing <em>Scrum</em> with Waterfall? Is that even conceivable? Yes. Sometimes it’s the only way, especially when you have to deal with compliance to standards like ISO9001. Once again, the author has a nice success story on how a company passed an ISO9001 audit by providing documentation in form of photocopied notes and by adding a single failing test to persuade the auditor that the automated test suite was not rigged. Priceless.</p> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_5" class="toc">Part IV: The Organization</h1> + </header> + <p>If you made it up to here, then you’re nearly done. You probably know most of the tricks by now, + but there’s still a lot to learn. <strong>Chapter 17 — Scaling <em>Scrum</em></strong> is + definitely worth reading, even just for the analysis between <em>formal</em> and <em>informal + communities</em>, while <strong>Chapter 19 —Cohexisting with Other Approaches</strong> almost + feels heretical at times: mixing <em>Scrum</em> with Waterfall? Is that even conceivable? Yes. Sometimes + it’s the only way, especially when you have to deal with compliance to standards like ISO9001. + Once again, the author has a nice success story on how a company passed an ISO9001 audit by providing + documentation in form of photocopied notes and by adding a single failing test to persuade the auditor + that the automated test suite was not rigged. Priceless.</p> - <section class="section"> -<header><h1 id="h_6" class="toc">Part V: Next Steps</h1></header> -<p>Only two chapters in this part of the book, which mainly deals with (self) assessment and progress analysis. Still worth a read, but you can safely leave it out for when you succeeded with <em>agile</em>.</p> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_6" class="toc">Part V: Next Steps</h1> + </header> + <p>Only two chapters in this part of the book, which mainly deals with (self) assessment and progress + analysis. Still worth a read, but you can safely leave it out for when you succeeded with + <em>agile</em>.</p> -</section> + </section> -<section class="section"> -<header><h1 id="h_7" class="toc">Technical Analysis</h1></header> -<p>I’m not exaggerating when I say that this is <em>by far</em> the best book I’ve read in the past few years when it comes to the way it is organized. Start by reading the <a href="http://my.safaribooksonline.com/9780321660534?portal=informit">table of contents</a>: if you take each chapter out and make a bulletted list of each section you’ll end up with a handy (and free!) cheat sheet on how to promote and adopt Agile methodologies.</p> -<p>This doesn’t mean the book isn’t a worthwhile read, but rather that it can also be used as a reference when needed.</p> + </section> -<section class="section"> -<header><h1 id="h_8" class="toc">Formatting and Readability</h1></header> -<p>From a technical writing point of view, this book is spotless. I should keep it on my desk to remind me how technical documentation should be written, except that… it’s not a technical manual of course. But the formatting and the way content is laid out can make the most skilled technical writer very jealous: there’s never a huge blob of boring text, never a series of pointless pictures: Mike Cohn (or his editors) did a terrific job composing this book.</p> -<p>You can start reading it from any point and it still makes sense, diagrams are simple and clear, and yet extremely useful, and so are the reference tables and spreadsheets. They never hurt, they are always in the right place, at the right time. And bold text is aptly used at the start of list items, so that even if you skim through the key concepts will still make it to your brain. Excellent.</p> + <section class="section"> + <header> + <h1 id="h_7" class="toc">Technical Analysis</h1> + </header> + <p>I’m not exaggerating when I say that this is <em>by far</em> the best book I’ve read in the past + few years when it comes to the way it is organized. Start by reading the <a + href="http://my.safaribooksonline.com/9780321660534?portal=informit">table of contents</a>: if you take + each chapter out and make a bulletted list of each section you’ll end up with a handy (and free!) + cheat sheet on how to promote and adopt Agile methodologies.</p> + <p>This doesn’t mean the book isn’t a worthwhile read, but rather that it can also be used as a + reference when needed.</p> -</section> + <section class="section"> + <header> + <h1 id="h_8" class="toc">Formatting and Readability</h1> + </header> + <p>From a technical writing point of view, this book is spotless. I should keep it on my desk to remind me + how technical documentation should be written, except that… it’s not a technical manual of + course. But the formatting and the way content is laid out can make the most skilled technical writer + very jealous: there’s never a huge blob of boring text, never a series of pointless pictures: Mike + Cohn (or his editors) did a terrific job composing this book.</p> + <p>You can start reading it from any point and it still makes sense, diagrams are simple and clear, and yet + extremely useful, and so are the reference tables and spreadsheets. They never hurt, they are always in + the right place, at the right time. And bold text is aptly used at the start of list items, so that even + if you skim through the key concepts will still make it to your brain. Excellent.</p> -<section class="section"> -<header><h1 id="h_9" class="toc">Style and Contents</h1></header> -<p>Reading this book is like listening to a seminar hold by some charismatic icon like <a href="http://en.wikipedia.org/wiki/David_Allen_(author)">David Allen</a> or <a href="http://en.wikipedia.org/wiki/JoAnn_Hackos">JoAnn Hackos</a>: you never get bored, and you constantly learn something. Mike’s informal and conversational style is one of the main reasons why you should read this book instead of others on the subject: he is a great communicator, and he knows how to make his point across.</p> -<p>As an added value, Mike also uses two types of <em>boxes</em> throughout the book:</p> -<ul> - <li><strong>Things to try now</strong> — Whenever a new strategy or practice is introduced, you’ll find one of these boxes containing a bulleted list. <em>“Commit to running the next two or three sprints without any overtime”</em>, “Do you understand what motivates every other person on your team? If not, find out. How? Ask them.”, … these are just examples of some of the author’s reccommendations to put you in the right track.</li> - <li><strong>Objection</strong> — Either actual quotes from customers and employees, or possible statements which may come out throughout the process of adopting <em>Scrum</em>. Things like <em>“If the product includes less than what we’ve planned, no one will buy it”</em>, or <em>“My team won’t self organize; team members are too passive and look to me to lead”</em>, … of course, what makes these objection boxes valuable is not the statement themselves, but the tips on how what to do about them. There’s not a single one left unanswered: you really feel you’re covered in any situation.</li> -</ul> + </section> -</section> + <section class="section"> + <header> + <h1 id="h_9" class="toc">Style and Contents</h1> + </header> + <p>Reading this book is like listening to a seminar hold by some charismatic icon like <a + href="http://en.wikipedia.org/wiki/David_Allen_(author)">David Allen</a> or <a + href="http://en.wikipedia.org/wiki/JoAnn_Hackos">JoAnn Hackos</a>: you never get bored, and you + constantly learn something. Mike’s informal and conversational style is one of the main reasons + why you should read this book instead of others on the subject: he is a great communicator, and he knows + how to make his point across.</p> + <p>As an added value, Mike also uses two types of <em>boxes</em> throughout the book:</p> + <ul> + <li><strong>Things to try now</strong> — Whenever a new strategy or practice is introduced, + you’ll find one of these boxes containing a bulleted list. <em>“Commit to running the + next two or three sprints without any overtime”</em>, “Do you understand what + motivates every other person on your team? If not, find out. How? Ask them.”, … these + are just examples of some of the author’s reccommendations to put you in the right track.</li> + <li><strong>Objection</strong> — Either actual quotes from customers and employees, or possible + statements which may come out throughout the process of adopting <em>Scrum</em>. Things like + <em>“If the product includes less than what we’ve planned, no one will buy + it”</em>, or <em>“My team won’t self organize; team members are too passive + and look to me to lead”</em>, … of course, what makes these objection boxes valuable + is not the statement themselves, but the tips on how what to do about them. There’s not a + single one left unanswered: you really feel you’re covered in any situation.</li> + </ul> -</section> + </section> + + </section> -<section class="section"> -<header><h1 id="h_10" class="toc">Final Thoughts</h1></header> -<p>I really enjoyed this book. It took me ages to read it, not only because it’s quite long (450 pages), but also because it’s very dense of information. Another author could have made it three times longer, but I was glad Mike didn’t. I’m pretty certain I’ll keep it near me and read bits from it when I need to: it’s pretty much the Bible of <em>Scrum</em> adoption.</p> -<p>What’s wrong with it then? Not much. Perhaps the only thing I really missed was an introductory 50-page-chapter on <em>Scrum</em> and <em>agile</em>. I know this is not meant to be a book for beginners, but some basic glossary or <em>Scrum</em> cheat sheet would have made it accessible to an even wider audience, at virtually no cost for the author or the readers, who could have just skipped that part.</p> -<p>Anyhow, I give it a 9 out of 10.</p> + <section class="section"> + <header> + <h1 id="h_10" class="toc">Final Thoughts</h1> + </header> + <p>I really enjoyed this book. It took me ages to read it, not only because it’s quite long (450 pages), + but also because it’s very dense of information. Another author could have made it three times longer, + but I was glad Mike didn’t. I’m pretty certain I’ll keep it near me and read bits from it + when I need to: it’s pretty much the Bible of <em>Scrum</em> adoption.</p> + <p>What’s wrong with it then? Not much. Perhaps the only thing I really missed was an introductory + 50-page-chapter on <em>Scrum</em> and <em>agile</em>. I know this is not meant to be a book for beginners, + but some basic glossary or <em>Scrum</em> cheat sheet would have made it accessible to an even wider + audience, at virtually no cost for the author or the readers, who could have just skipped that part.</p> + <p>Anyhow, I give it a 9 out of 10.</p> -</section> + </section> </section>
@@ -66,10 +66,11 @@ href="http://nanoc.stoneship.org/migrating/">migration guide</a>. If this is still not enough and you don’t
mind spending some time extending the system, nanoc’s <a href="http://nanoc.stoneship.org/doc/3.0.0/">RDoc documentation</a> is very comprehensive compared to other Ruby projects.</p> <h4>Sites, Items and data sources</h4> -<p style="float:right;"><img src="/img/pictures/nanoc-structure.png" alt="" /></p> +<p style="float:right;"><img src="/images/pictures/nanoc-structure.png" alt="" /></p> <p>nanoc ships with a really neat command line tool that can do most of the work for you. <code>Nanoc3 create_site h3rald</code> will create a new web site in a folder called h3rald. The contents of this - folder are laid out according to a particular logic (<em>convention over configuration</em>, remember?) So:</p> + folder are laid out according to a particular logic (<em>convention over configuration</em>, remember?) So: +</p> <ul> <li><strong>content</strong> – your articles, pages, stylesheets, images, …all the site content and assets.</li>@@ -155,7 +156,8 @@ </div>
<p>This source code snippet shows quite a few features of nanoc’s layouts:</p> <ul> <li>You can access the metadata of the page which is being rendered using the <code>@item</code>, so - <code>@item[:title]</code> returns the page’s title, for example.</li> + <code>@item[:title]</code> returns the page’s title, for example. + </li> <li>Layouts can be nested, and behave like Rails’s partials. The <code>render</code> takes a string parameter (the name of the layout to render) and an optional hash parameter to pass variables to the layout.</li> <li>The <code>yield</code> method is used to include the content of a page.</li>@@ -205,7 +207,8 @@ <li>You don’t have to upgrade all the time, but it is <em>really</em> painless if you decide to</li>
<li>You can use git and similar: your content is in plain old text files</li> </ul> <p>Rants are beside the point, suffice to say I recently convinced myself that switching from Typo to nanoc was a - <em>good thing</em>, so let’s see how it worked out.</p> + <em>good thing</em>, so let’s see how it worked out. +</p> <h4>Posts, pages and comments</h4> <p>Out of Typo’s MySQL database, I just wanted to get the following data:</p> <ul>@@ -251,7 +254,8 @@ <code>get_filter</code> methods in a separate <a
href="http://github.com/h3rald/h3rald/tree/master/lib/utils.rb">utility file</a>. Nothing special really, just a few convenience methods wrapping queries or simply processing data. Note how all information, including tags and legacy comments, is saved in each page’s metadata. The <code>write_page</code> method simply creates a file in the - <code>/contents</code> folder.</p> + <code>/contents</code> folder. +</p> <h4>Filters and highlighters</h4> <p>On my old site, I used mainly Textile and Markdown to write posts. However, some of my really old articles used BBCode, whose corresponding filter is not available in nanoc. No worries, I soon found out that creating a new nanoc@@ -399,7 +403,7 @@ <p>I was very happy of switching to nanoc. It didn’t take me long, and I spent most of the time with non-nanoc
issues (brushing up jQuery, <span class="caps">CSS</span>, graphics, etc.). Of course knowing the Ruby programming language helps, and if you’re not comfortable with hacking your way a little bit, then maybe it’s not for you.</p> -<p style="float:left;"><img src="/img/pictures/nanoc-compile.png" alt="" /></p> +<p style="float:left;"><img src="/images/pictures/nanoc-compile.png" alt="" /></p> <p>Personally, I’ve been waiting for something like nanoc for a long time: its simple and yet powerful architecture makes you able to do virtually anything with it. For the first time in a long time, I feel like I’m in complete control of my web site, I know every bits of it and if I want to change the way it works or looks I only
@@ -6,33 +6,81 @@ tags: "internet|writing|travelling"
----- <p>Recently I got this rather short email from a guy named Daniel Lampinen:</p> <blockquote> -<p>Hi. Respect for being an internet addict – that’s good. I have moved to India just to afford and get time to be on the internet as much as possible:</p> -<p><a href="http://www.ropix.org/english.html">http://www.ropix.org/english.html</a></p> + <p>Hi. Respect for being an internet addict – that’s good. I have moved to India just to afford and get + time to be on the internet as much as possible:</p> + <p><a href="http://www.ropix.org/english.html">http://www.ropix.org/english.html</a></p> </blockquote> -<p>Spam? Yeah, must be: I get this kind of stuff all the time, and this looked like another person asking for money. Or maybe not? After all this guy is not asking for anything in his mail, he’s just telling me something about myself and perhaps try to get me to visit his site<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. I did indeed – after all it was just one click away – mostly for curiosity.That website was one of the most plain ones I’ve ever come across, perhaps to help the visitor to understand that <em>content</em> is the only think that matters, not <em>design</em>. Daniel seems to be Swedish, and he immediately apologizes for his imperfect English: indeed there are some mistakes here and there, but I could understand <em>enough</em> about him, his way of living and his beliefs that I decided to write this article about him.</p> +<p>Spam? Yeah, must be: I get this kind of stuff all the time, and this looked like another person asking for money. Or + maybe not? After all this guy is not asking for anything in his mail, he’s just telling me something about + myself and perhaps try to get me to visit his site<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. I did + indeed – after all it was just one click away – mostly for curiosity.That website was one of the most + plain ones I’ve ever come across, perhaps to help the visitor to understand that <em>content</em> is the only + think that matters, not <em>design</em>. Daniel seems to be Swedish, and he immediately apologizes for his imperfect + English: indeed there are some mistakes here and there, but I could understand <em>enough</em> about him, his way of + living and his beliefs that I decided to write this article about him.</p> <h3>An Internet Philosopher</h3> <p><em>“I’m trying to live for my opinions and ideas”</em></p> -<p style="float:right;"><img src="/img/pictures/lampinen/piccadilly.jpg" alt="" /></p> -<p>This is Daniel’s “statement” which guides his entire life. He lives for his opinions and ideas, he lives to debate them with others, to talk to others about them, and eventually getting money for doing so: that would be his ideal way of living, and he partly realized it already.<br /> -It all started last year (2005), when he was a mailman in Stockholm: that was a boring job, probably like a million other jobs anywhere in the world. He didn’t want to do that, and – believe it or not – he didn’t want a business career either: he just wanted to spend time on the Internet, creating <em>things</em>. Not cool websites or successful e-businesses, just express his own opinions, thoughts and ideas and spread them online, he defines himself a <em>philosopher</em>, and yet I could not find anything better to define him: he literally lives for his thoughts.</p> -<p>A few months ago the Italian Telecom broadcasted one of the most peculiar adverts I’ve ever seen: they were portraying an hypothetical past, where Gandhi was appearing on TV, on the Internet, on mobile phones, on big screens in the streets pronouncing one of his famous speeches. The advert ends with a sentence like <em>“Imagine what could have happened if he could have used our communication systems”</em>, trying to promote Telecom’s services, and it has been criticized<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> many times for this. <br /> -I immediately thought about this advert while reading Daniel’s homepage. Obviously he’s far from being Gandhi, but at least he attempts to live in a simple and honest way and tries to communicate with as many people as possible. And he lives in India, he recently moved there from Sweden mainly because it’s much, <span class="caps">MUCH</span> cheaper than any country in Europe or in the rest of the Rich World.</p> -<p style="float:left;"><img src="/img/pictures/lampinen/cow.jpg" alt="" /></p> -<p>From what I could read about him, his life is quite simple: he tries to spend as little money as possible and not in futile things. He lives in a cheap hotel in Puri, India, where he can access the Internet – that’s all that matters. Perhaps it may sound a bit freaky, but certainly not as freaky as going out getting trashed every night, buying drugs or waste money on trendy clothes – at least from someone’s point of view.</p> +<p style="float:right;"><img src="/images/pictures/lampinen/piccadilly.jpg" alt="" /></p> +<p>This is Daniel’s “statement” which guides his entire life. He lives for his opinions and ideas, he + lives to debate them with others, to talk to others about them, and eventually getting money for doing so: that + would be his ideal way of living, and he partly realized it already.<br /> + It all started last year (2005), when he was a mailman in Stockholm: that was a boring job, probably like a million + other jobs anywhere in the world. He didn’t want to do that, and – believe it or not – he + didn’t want a business career either: he just wanted to spend time on the Internet, creating <em>things</em>. + Not cool websites or successful e-businesses, just express his own opinions, thoughts and ideas and spread them + online, he defines himself a <em>philosopher</em>, and yet I could not find anything better to define him: he + literally lives for his thoughts.</p> +<p>A few months ago the Italian Telecom broadcasted one of the most peculiar adverts I’ve ever seen: they were + portraying an hypothetical past, where Gandhi was appearing on TV, on the Internet, on mobile phones, on big screens + in the streets pronouncing one of his famous speeches. The advert ends with a sentence like <em>“Imagine what + could have happened if he could have used our communication systems”</em>, trying to promote + Telecom’s services, and it has been criticized<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup> many + times for this. <br /> + I immediately thought about this advert while reading Daniel’s homepage. Obviously he’s far from being + Gandhi, but at least he attempts to live in a simple and honest way and tries to communicate with as many people as + possible. And he lives in India, he recently moved there from Sweden mainly because it’s much, <span + class="caps">MUCH</span> cheaper than any country in Europe or in the rest of the Rich World.</p> +<p style="float:left;"><img src="/images/pictures/lampinen/cow.jpg" alt="" /></p> +<p>From what I could read about him, his life is quite simple: he tries to spend as little money as possible and not in + futile things. He lives in a cheap hotel in Puri, India, where he can access the Internet – that’s all + that matters. Perhaps it may sound a bit freaky, but certainly not as freaky as going out getting trashed every + night, buying drugs or waste money on trendy clothes – at least from someone’s point of view.</p> <p><em>“Yeah, OK, it’s all good so far but how can he live like that? Has he got a job?”</em></p> -<p>Yes and no – not in a traditional way, at least. He sells stuff, his thoughts, ideas and writings to be more precise, and no, there are no set prices: he goes <em>“[…] by this principle (the Annalakshmi<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup> principle): pay as much as you think my work is worth.<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>”</em>.<br /> -It’s quite similar to charity and it’s an interesting idea, whose success highly depends on the conscience of the giver: <em>the more honest his soul his, the more he’ll give</em>.</p> +<p>Yes and no – not in a traditional way, at least. He sells stuff, his thoughts, ideas and writings to be more + precise, and no, there are no set prices: he goes <em>“[…] by this principle (the Annalakshmi<sup + class="footnote" id="fnr3"><a href="#fn3">3</a></sup> principle): pay as much as you think my work is + worth.<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>”</em>.<br /> + It’s quite similar to charity and it’s an interesting idea, whose success highly depends on the + conscience of the giver: <em>the more honest his soul his, the more he’ll give</em>.</p> <h3>Business Talk</h3> -<p>Don’t call him a beggar. Daniel has his own way of seeing the economy of the Rich World and also his own views when it comes to money:</p> -<p style="float:right;"><img src="/img/pictures/lampinen/money.jpg" alt="" /></p> +<p>Don’t call him a beggar. Daniel has his own way of seeing the economy of the Rich World and also his own views + when it comes to money:</p> +<p style="float:right;"><img src="/images/pictures/lampinen/money.jpg" alt="" /></p> <blockquote> -<p>“This should be mentioned: give money to Unicef instead of to me. But give money to me instead of buying a expensive new couch.<br /> -[…] If I can inspire you to consume less, it may be worth some money. How would the world look like if everybody payed each other because they wanted to, not only because they legally had to? Pretty good, right? On some places in the world there’s today restaurants where you can pay as much as you thought that the food was worth. See this like a newspaper or a book that you can choose to pay for.</p> -<p>There’s plenty of different policies on what you should put your money on. On of the policies is to follow the market totally (except when it comes to classic charity). That one use to result in that you think it’s ok to buy a Gucci bag for $1000 but think it’s out of the question to give something to someone that “doesn’t wanna work for the money”.</p> -<p>[…] It can even be fun to get fooled by a souvenir salesman in a warm country – if you let go of some of the pride and the “millimeter justice”. Do that. You can still give as much or more to Unicef. I prefer a society where people put money on other people – both those struck by a catastrophe and rich people in your country – instead of buying un-necessary stuff.<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>"</p> + <p>“This should be mentioned: give money to Unicef instead of to me. But give money to me instead of buying a + expensive new couch.<br /> + […] If I can inspire you to consume less, it may be worth some money. How would the world look like if + everybody payed each other because they wanted to, not only because they legally had to? Pretty good, right? On + some places in the world there’s today restaurants where you can pay as much as you thought that the food + was worth. See this like a newspaper or a book that you can choose to pay for.</p> + <p>There’s plenty of different policies on what you should put your money on. On of the policies is to follow + the market totally (except when it comes to classic charity). That one use to result in that you think + it’s ok to buy a Gucci bag for $1000 but think it’s out of the question to give something to someone + that “doesn’t wanna work for the money”.</p> + <p>[…] It can even be fun to get fooled by a souvenir salesman in a warm country – if you let go of some + of the pride and the “millimeter justice”. Do that. You can still give as much or more to Unicef. I + prefer a society where people put money on other people – both those struck by a catastrophe and rich + people in your country – instead of buying un-necessary stuff.<sup class="footnote" id="fnr5"><a + href="#fn5">5</a></sup>"</p> </blockquote> -<p>Daniel accepts donations in many ways<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>, and it must be noted is that his supporters may even choose how he should use his money, you can tell him what to buy or not to buy, and he’ll respect your decision: someone told him not to buy drugs and he never did, while another asked him to buy good food, and maybe a beer at local restaurants, and he did exactly that<sup class="footnote" id="fnr7"><a href="#fn7">7</a></sup>.<br /> -If you’re curious about what he buys, Daniel added a list of expenses<sup class="footnote" id="fnr8"><a href="#fn8">8</a></sup> to his site which diligently updates every time he spends money. Prices are in indian rupees (1$ is about 45 rupees!), and it looks like this:</p> +<p>Daniel accepts donations in many ways<sup class="footnote" id="fnr6"><a href="#fn6">6</a></sup>, and it must be noted + is that his supporters may even choose how he should use his money, you can tell him what to buy or not to buy, and + he’ll respect your decision: someone told him not to buy drugs and he never did, while another asked him to + buy good food, and maybe a beer at local restaurants, and he did exactly that<sup class="footnote" id="fnr7"><a + href="#fn7">7</a></sup>.<br /> + If you’re curious about what he buys, Daniel added a list of expenses<sup class="footnote" id="fnr8"><a + href="#fn8">8</a></sup> to his site which diligently updates every time he spends money. Prices are in + indian rupees (1$ is about 45 rupees!), and it looks like this:</p> <ul> <li>10 Bread</li> <li>9 Tip to roomservice</li>@@ -53,62 +101,121 @@ <li>15 Tip roomservice</li>
</ul> <p>In a nutshell, when it comes to money and buying things, Daniel lives by this simple rule:</p> <blockquote> -<p>“Work with unwanted things as little as possible, consume as little as possible, communicate as much as possible”</p> + <p>“Work with unwanted things as little as possible, consume as little as possible, communicate as much as + possible”</p> </blockquote> -<p>But is it really that simple? Could <em>you</em> live like him and still be happy? Certainly he has a big advantage: he lives in India, where everything costs much less than in Europe or the US. If you decide to try, he can help: he can give anybody suggestions on how to live cheaper and even keep you motivated to do so, and all he asks in exchange is what <span class="caps">YOU</span> think his suggestions are worth. All the payments for this service must be made through a Swedish company<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup>, which is technically his employer.</p> -<p>He can also sell “ideas” in the same way: you start emailing him explaining your situation and your needs, and he’ll try his best to come up with a solution and his own opinions. You won’t believe it, but a Swedish company<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup> was really pleased to hear his opinions and thoughts about innovation and used his suggestions to improve their services.</p> +<p>But is it really that simple? Could <em>you</em> live like him and still be happy? Certainly he has a big advantage: + he lives in India, where everything costs much less than in Europe or the US. If you decide to try, he can help: he + can give anybody suggestions on how to live cheaper and even keep you motivated to do so, and all he asks in + exchange is what <span class="caps">YOU</span> think his suggestions are worth. All the payments for this service + must be made through a Swedish company<sup class="footnote" id="fnr9"><a href="#fn9">9</a></sup>, which is + technically his employer.</p> +<p>He can also sell “ideas” in the same way: you start emailing him explaining your situation and your + needs, and he’ll try his best to come up with a solution and his own opinions. You won’t believe it, but + a Swedish company<sup class="footnote" id="fnr10"><a href="#fn10">10</a></sup> was really pleased to hear his + opinions and thoughts about innovation and used his suggestions to improve their services.</p> <h3>An Internet Addict</h3> -<p style="float:left;"><img src="/img/pictures/lampinen/view.jpg" alt="" /></p> -<p>Perhaps one of the most interesting things about Daniel’s website is his journal. Not a proper blog, but just a single static webpage hosting all his daily thoughts: you can’t comment to them, but reading some passages may be interesting enough. <br /> -The best way to do so is trying to search for a particular word (in Firefox it’s pretty easy) and read what he wrote about that, I tried with “Internet” and here’s something I came across:</p> +<p style="float:left;"><img src="/images/pictures/lampinen/view.jpg" alt="" /></p> +<p>Perhaps one of the most interesting things about Daniel’s website is his journal. Not a proper blog, but just a + single static webpage hosting all his daily thoughts: you can’t comment to them, but reading some passages may + be interesting enough. <br /> + The best way to do so is trying to search for a particular word (in Firefox it’s pretty easy) and read what he + wrote about that, I tried with “Internet” and here’s something I came across:</p> <blockquote> -<p>“Now I’m finally realizing my two year old plans to be in a poor country. The only thing I’m gonna do is thinking, and surfing on the internet, see how long my money will last, and try to get new money to my <span class="caps">VISA</span> card by doing work that can be done with a brain and internet, for example producing ideas and point of views to companies in rich countrys. What’s good for everybody, is that I don’t need many dollars/euros to survive.”</p> + <p>“Now I’m finally realizing my two year old plans to be in a poor country. The only thing I’m + gonna do is thinking, and surfing on the internet, see how long my money will last, and try to get new money to + my <span class="caps">VISA</span> card by doing work that can be done with a brain and internet, for example + producing ideas and point of views to companies in rich countrys. What’s good for everybody, is that I + don’t need many dollars/euros to survive.”</p> </blockquote> <p>This was one of his early posts, and yes, that’s exactly what he started to do…</p> <blockquote> -<p>So, I’m living at the internet. Hotel room, beach, internet. That’s pretty monotonous. But all together better than better than s[**]t job. I’m gonna contact medias that cover the internet and offer to write things in behalf of a person that have filled his life with only internet.</p> + <p>So, I’m living at the internet. Hotel room, beach, internet. That’s pretty monotonous. But all + together better than better than s[**]t job. I’m gonna contact medias that cover the internet and offer to + write things in behalf of a person that have filled his life with only internet.</p> </blockquote> <blockquote> -<p>Internet, internet, internet. I’m happily addicted to something that makes me smarter and finding the right people. The only thing you need is a cable. People are crowding at the internet cafes here at the tourist street by the beach, and it’s a nice atmosphere.</p> + <p>Internet, internet, internet. I’m happily addicted to something that makes me smarter and finding the right + people. The only thing you need is a cable. People are crowding at the internet cafes here at the tourist street + by the beach, and it’s a nice atmosphere.</p> </blockquote> -<p>An happy internet addict. Although how good this addiction is can be debatable, Daniel seems to have found his perfect way of living, and the only thing he needs is an Internet connection and his brain.</p> +<p>An happy internet addict. Although how good this addiction is can be debatable, Daniel seems to have found his + perfect way of living, and the only thing he needs is an Internet connection and his brain.</p> <blockquote> -<p>“Yesterday I searched on Google for the swedish words for “I am an internet addict” and e-mailed the words “respect for being an internet addict – that is good” to the bloggers that had written the sentence “I am an internet addict” during the last year."</p> + <p>“Yesterday I searched on Google for the swedish words for “I am an internet addict” and + e-mailed the words “respect for being an internet addict – that is good” to the bloggers that + had written the sentence “I am an internet addict” during the last year."</p> </blockquote> -<p>Yes, that’s exactly the message I got by email a few days ago. At first I must say I found it even a bit offensive: <em>“I am not an Internet addict! You might be, but I’m not.”</em> – He obviously didn’t mean to insult neither me nor any other blogger he mailed: for him, “being an internet addict” is probably one of the best things people – especially young people – can do.</p> -<p>Shocked? Yes, it’s understandable: we hear a lot about Internet addiction in these days, and I was reading in a recent study<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which pointed out that:</p> +<p>Yes, that’s exactly the message I got by email a few days ago. At first I must say I found it even a bit + offensive: <em>“I am not an Internet addict! You might be, but I’m not.”</em> – He obviously + didn’t mean to insult neither me nor any other blogger he mailed: for him, “being an internet + addict” is probably one of the best things people – especially young people – can do.</p> +<p>Shocked? Yes, it’s understandable: we hear a lot about Internet addiction in these days, and I was reading in a + recent study<sup class="footnote" id="fnr11"><a href="#fn11">11</a></sup> which pointed out that:</p> <blockquote> -<p>“[…] When 54 percent of Internet addicts say they have a history of depression, 52 percent drug or alcohol abuse and 34 percent an anxiety disorder, it seems even clearer that cyberspace is just another place for unhealthy and self-destructive behaviors to manifest themselves.”</p> + <p>“[…] When 54 percent of Internet addicts say they have a history of depression, 52 percent drug or + alcohol abuse and 34 percent an anxiety disorder, it seems even clearer that cyberspace is just another place + for unhealthy and self-destructive behaviors to manifest themselves.”</p> </blockquote> -<p>Is it though? Daniel Lampinen truly admints he’s an Internet addict, but he most definitely doesn’t have any history of drug or alcohol abuse:</p> +<p>Is it though? Daniel Lampinen truly admints he’s an Internet addict, but he most definitely doesn’t have + any history of drug or alcohol abuse:</p> <blockquote> -<p>“On [the] Give me money [page] there’s now a list of demands from the givers. The first demand come from the latest giver: no drugs. Which I’m fine with. As you can see on What I’m buying, I’ve only bought one joint (in Christiania in Copenhagen). And that was just a statement because I think others is gonna be free to do it. I never take anything to “get away from reality”, or to “have fun”. Not even beer, which I only take to relax. That’s how dull I am. The reality rules."</p> + <p>“On [the] Give me money [page] there’s now a list of demands from the givers. The first demand come + from the latest giver: no drugs. Which I’m fine with. As you can see on What I’m buying, I’ve + only bought one joint (in Christiania in Copenhagen). And that was just a statement because I think others is + gonna be free to do it. I never take anything to “get away from reality”, or to “have + fun”. Not even beer, which I only take to relax. That’s how dull I am. The reality rules."</p> </blockquote> <p>There you are. <br /> -So why did he choose to become an Internet addict? Well, most definitely because he was tired of the Rich World’s society: he had a boring job which he didn’t enjoy, and he simply realised that the Internet <em>could</em> – at least sometimes – be better than ordinary life. He openly admits he’s a weird human being, and he’s fine with that, but you can be sure of two things:</p> + So why did he choose to become an Internet addict? Well, most definitely because he was tired of the Rich + World’s society: he had a boring job which he didn’t enjoy, and he simply realised that the Internet + <em>could</em> – at least sometimes – be better than ordinary life. He openly admits he’s a weird + human being, and he’s fine with that, but you can be sure of two things:</p> <ul> - <li>he’s totally, absolutely honest, in anything he does, and he’s not afraid to express his own opinions without adjusting them according to the people around him</li> + <li>he’s totally, absolutely honest, in anything he does, and he’s not afraid to express his own + opinions without adjusting them according to the people around him</li> <li>he maintained his individuality at the cost of living in a poorer country</li> </ul> <p>How many people in the Rich World can accomplish either of these things? Please raise your hands…</p> <h3>Notes</h3> -<p>Very special thanks to Daniel Lampinen for allowing me to write about him and providing all the pictures for this article.</p> -<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Daniel Lampinen’s <a href="http://www.ropix.org/english.html">website</a>, English version.</p> -<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a href="http://www.zeusnews.it/index.php3?ar=stampa&cod=3432">Gandhi e Telecom Italia</a> – Comments on the famous Italian advert. [Italian]</p> -<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a href="http://www.annalakshmi.org/index.php">Annalakshmi</a> – <em>A non-profit organization dedicated to bringing the joy of Indian culinary, visual and performing arts to one and all.</em><br /> -<em>Annalakshmi is an international chain of vegetarian restaurants that augments its dining experience by showcasing Indian arts and handicrafts as well as cultural dance and music performances. Inspired by the Hindu concept for Abundance, Annalakshmi operates on the basis of “Eat as you Want, Pay as you Wish” where the guest decides not just what to order but also how much to pay.</em></p> -<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> From Daniel Lampinen’s <a href="http://www.ropix.org/ideas.html">UI Ideas</a> page.</p> -<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> From Daniel Lampinen’s <a href="http://www.ropix.org/money.html">Money</a> page.</p> -<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> Daniel’s <a href="http://www.ropix.org/money.html">Money page</a> lists all possible ways to dive him money, most notably:</p> +<p>Very special thanks to Daniel Lampinen for allowing me to write about him and providing all the pictures for this + article.</p> +<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> Daniel Lampinen’s <a + href="http://www.ropix.org/english.html">website</a>, English version.</p> +<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> <a + href="http://www.zeusnews.it/index.php3?ar=stampa&cod=3432">Gandhi e Telecom Italia</a> – Comments on + the famous Italian advert. [Italian]</p> +<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> <a + href="http://www.annalakshmi.org/index.php">Annalakshmi</a> – <em>A non-profit organization dedicated to + bringing the joy of Indian culinary, visual and performing arts to one and all.</em><br /> + <em>Annalakshmi is an international chain of vegetarian restaurants that augments its dining experience by + showcasing Indian arts and handicrafts as well as cultural dance and music performances. Inspired by the Hindu + concept for Abundance, Annalakshmi operates on the basis of “Eat as you Want, Pay as you Wish” where + the guest decides not just what to order but also how much to pay.</em> +</p> +<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> From Daniel Lampinen’s <a + href="http://www.ropix.org/ideas.html">UI Ideas</a> page.</p> +<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> From Daniel Lampinen’s <a + href="http://www.ropix.org/money.html">Money</a> page.</p> +<p class="footnote" id="fn6"><a href="#fnr6"><sup>6</sup></a> Daniel’s <a + href="http://www.ropix.org/money.html">Money page</a> lists all possible ways to dive him money, most notably: +</p> <ul> - <li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=800825%40gmail%2ecom&item_name=Ropix&no_shipping=0&no_note=1&tax=0&currency_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8">Paypal</a></li> + <li><a + href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=800825%40gmail%2ecom&item_name=Ropix&no_shipping=0&no_note=1&tax=0&currency_code=USD&bn=PP%2dDonationsBF&charset=UTF%2d8">Paypal</a> + </li> <li>His <span class="caps">IBAN</span> bank account number (an international number):<br /> -SE1580000008201644439081<br /> -With this code: <span class="caps">BIC</span>. <span class="caps">SWEDSESS</span></li> + SE1580000008201644439081<br /> + With this code: <span class="caps">BIC</span>. <span class="caps">SWEDSESS</span></li> <li>His <a href="http://www.ropix.org/free.html">free page</a>.</li> </ul> -<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> It’s documented in the <a href="http://www.ropix.org/gustav100kr.html">Gustav 100Kr</a> page.</p> -<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Daniel’s <a href="http://www.ropix.org/expenses.html">list</a> of expenses.</p> -<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.f-bolaget.se/index.html">F-Bolaget AB</a></p> +<p class="footnote" id="fn7"><a href="#fnr7"><sup>7</sup></a> It’s documented in the <a + href="http://www.ropix.org/gustav100kr.html">Gustav 100Kr</a> page.</p> +<p class="footnote" id="fn8"><a href="#fnr8"><sup>8</sup></a> Daniel’s <a + href="http://www.ropix.org/expenses.html">list</a> of expenses.</p> +<p class="footnote" id="fn9"><a href="#fnr9"><sup>9</sup></a> <a href="http://www.f-bolaget.se/index.html">F-Bolaget + AB</a></p> <p class="footnote" id="fn10"><a href="#fnr10"><sup>10</sup></a> <a href="http://www.intip.se/">Intip</a></p> -<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a href="http://arstechnica.com/news.ars/post/20060510-6795.html">Is Internet addiction a real problem?</a> – Arstecnica.com</p> +<p class="footnote" id="fn11"><a href="#fnr11"><sup>11</sup></a> <a + href="http://arstechnica.com/news.ars/post/20060510-6795.html">Is Internet addiction a real problem?</a> – + Arstecnica.com</p>
@@ -4,34 +4,88 @@ content-type: article
timestamp: 1258452936 tags: "ruby|books|review" ----- -<p>When I first picked up this book I was surprised by its length. Somehow, after reading <a href="/articles/the-rails-way-review">The Rails Way</a>, I got stuck in my mind that <a href="http://my.safaribooksonline.com/9780321601636">The Merb Way</a> had to be almost equally voluminous. Instead, this book is about 300 page long, roughly as long as the sum of the chapters devoted to <em>ActiveRecord</em> in Obie Fernandez’s acclaimed Rails bible.</p> -<p>Apparently it only takes 300 pages to describe a web framework nowadays! I couldn’t help but feeling a bit skeptical at first. Even in the foreword, Obie Fernandez presents the book – and the whole <a href="http://www.merbivore.com">Merb</a> framework – with some initial skepticism: isn’t Ruby on Rails enough? Why do we need yet another Ruby web framework? And above all, seeing that Merb is going to eventually be <a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3">merged into Rails 3</a>, why on Earth do we need a book about Merb, <em>now</em>?</p> +<p>When I first picked up this book I was surprised by its length. Somehow, after reading <a + href="/articles/the-rails-way-review">The Rails Way</a>, I got stuck in my mind that <a + href="http://my.safaribooksonline.com/9780321601636">The Merb Way</a> had to be almost equally voluminous. + Instead, this book is about 300 page long, roughly as long as the sum of the chapters devoted to + <em>ActiveRecord</em> in Obie Fernandez’s acclaimed Rails bible.</p> +<p>Apparently it only takes 300 pages to describe a web framework nowadays! I couldn’t help but feeling a bit + skeptical at first. Even in the foreword, Obie Fernandez presents the book – and the whole <a + href="http://www.merbivore.com">Merb</a> framework – with some initial skepticism: isn’t Ruby on + Rails enough? Why do we need yet another Ruby web framework? And above all, seeing that Merb is going to eventually + be <a href="http://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3">merged into Rails 3</a>, why on + Earth do we need a book about Merb, <em>now</em>?</p> <p>Needless to say, Foy Savas proved that both Merb and its book cannot be dismissed just like that.</p> <h3>Getting started</h3> -<p style="float:right;"><img src="/img/pictures/therailsway.jpg" alt="" /></p> -<p>The book starts with the original <a href="http://pastie.org/14416">Merb Pastie</a>, a single page of Ruby code able to sort out <span class="caps">HTTP</span> requests, dispatch them to the appropriate controllers and render a web page. This piece of code is enough to convey what Merb is: a new breed of web framework, almost as simple as it can get but very poweful and flexible at the same time.</p> -<p>As you start diving in through the first chapter, you realize you’re reading about a <em>Hacker’s Web Framework</em>. That’s precisely what Merb is: a very versatile tool to get the job done, in the simplest way possible. Similarly, <em>The Merb Way</em> immediately feels like a <em>Hacker’s Handbook</em> rather than an ordinary guide on how to develop web applications. You won’t learn what <span class="caps">MVC</span> is by reading this book, and don’t expect to be taught what a <em>mixin</em> is; you are reading a book about a Ruby web framework that was born after the <em>Rails Revolution</em>, so it is safe (for the author) to assume that:</p> +<p style="float:right;"><img src="/images/pictures/therailsway.jpg" alt="" /></p> +<p>The book starts with the original <a href="http://pastie.org/14416">Merb Pastie</a>, a single page of Ruby code able + to sort out <span class="caps">HTTP</span> requests, dispatch them to the appropriate controllers and render a web + page. This piece of code is enough to convey what Merb is: a new breed of web framework, almost as simple as it can + get but very poweful and flexible at the same time.</p> +<p>As you start diving in through the first chapter, you realize you’re reading about a <em>Hacker’s Web + Framework</em>. That’s precisely what Merb is: a very versatile tool to get the job done, in the simplest + way possible. Similarly, <em>The Merb Way</em> immediately feels like a <em>Hacker’s Handbook</em> rather than + an ordinary guide on how to develop web applications. You won’t learn what <span class="caps">MVC</span> is by + reading this book, and don’t expect to be taught what a <em>mixin</em> is; you are reading a book about a Ruby + web framework that was born after the <em>Rails Revolution</em>, so it is safe (for the author) to assume that:</p> <ul> <li>You know the Ruby programming language</li> <li>You know what Ruby on Rails is and you tried it out, at the very least</li> </ul> -<p>The first few chapters are about the core functionalities provided by an an <span class="caps">MVC</span> framework: after a comprehensive first chapter about Merb’s fundamentals (from the layout of a Merb application to an overview of Merb internals) you are quite abruptly “introduced” to routing, controllers, views and models. These chapters do not aim to provide a comprehensive description of each component, they simply tell you: <em>here’s how Merb does this</em>.</p> -<p>Out of the first five chapters, favorite is definitely the one about <em>Models</em>. Although Merb is <span class="caps">ORM</span>-agnostic, DataMapper is the <em>de facto standard</em> for Merb applications, and it fully embrace the framework’s design and extreme flexibility without being <em>in the way</em> of your code.<br /> -Foy does an excellent job in this chapter by strategically describing DataMapper’s code from the top to the very bottom, from the highest abstractions to raw <span class="caps">SQL</span> code, using a plethora of snippets taken from the actual Merb code.</p> +<p>The first few chapters are about the core functionalities provided by an an <span class="caps">MVC</span> framework: + after a comprehensive first chapter about Merb’s fundamentals (from the layout of a Merb application to an + overview of Merb internals) you are quite abruptly “introduced” to routing, controllers, views and + models. These chapters do not aim to provide a comprehensive description of each component, they simply tell you: + <em>here’s how Merb does this</em>.</p> +<p>Out of the first five chapters, favorite is definitely the one about <em>Models</em>. Although Merb is <span + class="caps">ORM</span>-agnostic, DataMapper is the <em>de facto standard</em> for Merb applications, and it + fully embrace the framework’s design and extreme flexibility without being <em>in the way</em> of your + code.<br /> + Foy does an excellent job in this chapter by strategically describing DataMapper’s code from the top to the + very bottom, from the highest abstractions to raw <span class="caps">SQL</span> code, using a plethora of snippets + taken from the actual Merb code.</p> <h3>It’s about how Merb works, not how to work with Merb</h3> -<p>After reading the <em>Models</em> chapter I decided to go back and re-examine the previous chapters. I didn’t notice until then, but the author sneakily <em>smuggled</em> a consistent amount of Merb source code into this book. This is rather unusual for books about web frameworks: they normally tell you how to use the framework, not how it was built! While this can be disappointing for people used to read Rails books, it came as a very pleasant surprise to me.</p> -<p>About 40-50% of this entire book (and I’m not exaggerating) is Ruby source code. In a good way, it feels like a collection of strategically-positioned code snippets glued together with explanations of the most tricky bits and digressions on how the framework was <em>designed</em>. In other words, it probably contains just enough text to make sure that the average reader understands the code, but remember that the <em>average reader</em> of this book must know Ruby failry well.</p> -<p>There is no pointless prose in this book, no explanations of obvious methods, no fancy words, no useless boasting on how cool the framework is: just an objective description of how Merb works and of the key design decisions behind it. If I may, the only thing that doesn’t feel quite right with this book is its title: <em>Merb Internals</em> would have been a better choice. Once you realize this, the book suddenly makes sense, and can even make you a better Ruby programmer.</p> -<p><em>The Merb Way</em> does an excellent job in describing how to design a web framework, or any real-world Ruby application for that matter. It teaches you that modularity is the key to flexibility by showing how the Merb stack is organized. Sure, it doesn’t teach you how to create a blog in five minutes, but perhaps a thorough explanation of how anthentication is implemented (Chapter 9) will actually be useful in two months time, when you’ll have to create your own Merb plugin from scratch.</p> +<p>After reading the <em>Models</em> chapter I decided to go back and re-examine the previous chapters. I didn’t + notice until then, but the author sneakily <em>smuggled</em> a consistent amount of Merb source code into this book. + This is rather unusual for books about web frameworks: they normally tell you how to use the framework, not how it + was built! While this can be disappointing for people used to read Rails books, it came as a very pleasant surprise + to me.</p> +<p>About 40-50% of this entire book (and I’m not exaggerating) is Ruby source code. In a good way, it feels like a + collection of strategically-positioned code snippets glued together with explanations of the most tricky bits and + digressions on how the framework was <em>designed</em>. In other words, it probably contains just enough text to + make sure that the average reader understands the code, but remember that the <em>average reader</em> of this book + must know Ruby failry well.</p> +<p>There is no pointless prose in this book, no explanations of obvious methods, no fancy words, no useless boasting on + how cool the framework is: just an objective description of how Merb works and of the key design decisions behind + it. If I may, the only thing that doesn’t feel quite right with this book is its title: <em>Merb + Internals</em> would have been a better choice. Once you realize this, the book suddenly makes sense, and can + even make you a better Ruby programmer.</p> +<p><em>The Merb Way</em> does an excellent job in describing how to design a web framework, or any real-world Ruby + application for that matter. It teaches you that modularity is the key to flexibility by showing how the Merb stack + is organized. Sure, it doesn’t teach you how to create a blog in five minutes, but perhaps a thorough + explanation of how anthentication is implemented (Chapter 9) will actually be useful in two months time, when + you’ll have to create your own Merb plugin from scratch.</p> <h3>Some constructive criticism</h3> -<p>The idea behind this book is clever but a bit dangerous. I flipped through the pages in front of my wife and asked her what was wrong with it. <em>“There’s too much code!”</em> she said, without hesitation. Precisely.</p> -<p>It is damn good Ruby code, but sometimes you wish there was more text describing how to use it in practice. Or maybe some code examples on <em>using</em> the framework on a real-world application. Not a chance. Of all that holy code, there’s not much featuring something other than Merb itself. Basically the exact opposite of all the other books about Rails or other web frameworks!</p> -<p>Even accepting the fact that you are not reading a book about developing web applications, there are two more things which could be improved:</p> +<p>The idea behind this book is clever but a bit dangerous. I flipped through the pages in front of my wife and asked + her what was wrong with it. <em>“There’s too much code!”</em> she said, without hesitation. + Precisely.</p> +<p>It is damn good Ruby code, but sometimes you wish there was more text describing how to use it in practice. Or maybe + some code examples on <em>using</em> the framework on a real-world application. Not a chance. Of all that holy code, + there’s not much featuring something other than Merb itself. Basically the exact opposite of all the other + books about Rails or other web frameworks!</p> +<p>Even accepting the fact that you are not reading a book about developing web applications, there are two more things + which could be improved:</p> <ul> - <li>Merb’s design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams here and there and more in-depth digressions on the subjects would have been nice.</li> - <li>Besides DataMapper, what I really wanted to read about were Slices and Parts – unfortunately the chapters about them are far too short and shallow. The reasoning behind this is that <em>their future may be uncertain</em> due to the Rails 3 merge. Pity.</li> + <li>Merb’s design is very intriguing, and you grasp the essentials by reading this book, but a few diagrams + here and there and more in-depth digressions on the subjects would have been nice.</li> + <li>Besides DataMapper, what I really wanted to read about were Slices and Parts – unfortunately the chapters + about them are far too short and shallow. The reasoning behind this is that <em>their future may be + uncertain</em> due to the Rails 3 merge. Pity.</li> </ul> <h3>Conclusion</h3> -<p>The death of Merb has been greatly exaggerated. Too bad I <a href="/articles/take-back-your-site-with-nanoc/">gave up web frameworks altogether</a> for my site, because after reading this book I would have gone for Merb <em>today</em> rather than waiting to see the wonders of Rails 3 <em>tomorrow</em>. Even a book with this title could have been written in a very different way, I would still recommend it if you want to become a better Ruby programmer by learning from the best: Merb code really stands out, even compared to Rails, and Foy Savas does a great job presenting and describing it.</p> - - +<p>The death of Merb has been greatly exaggerated. Too bad I <a href="/articles/take-back-your-site-with-nanoc/">gave up + web frameworks altogether</a> for my site, because after reading this book I would have gone for Merb + <em>today</em> rather than waiting to see the wonders of Rails 3 <em>tomorrow</em>. Even a book with this title + could have been written in a very different way, I would still recommend it if you want to become a better Ruby + programmer by learning from the best: Merb code really stands out, even compared to Rails, and Foy Savas does a + great job presenting and describing it.</p>
@@ -15,7 +15,7 @@ That being said, _The Rails Way_ by [Obie Fernandez](http://obiefernandez.com/) is still the best and most comprehensive book on Rails v2 currently on the market. It's the book you simply cannot afford to ignore, if you are using (or are planning to use) this popular Ruby web framework.
### Contents -<div style="float:right"><img src="/files/therailsway.jpeg" alt="cover" /></div> +<div style="float:right"><img src="/images/therailsway.jpeg" alt="cover" /></div> Before proceeding any further, I'd like to point out that is probably one of the longest programming books I've ever come across. With its 910 pages, _The Rails Way_ definitely cannot fit in your pocket and you cannot take it around with you easily. It's a book made to sit on your desk constantly and remain there, ready to be accessed at the right time, when needed. Unlike with other books I reviewed, this time I won't even attempt to go through every chapter and every section: it would not be meaningful for the review and it will probably bore you to death. For completeness' sake, however, here's a very trimmed-down table of contents listing _only_ the first level headings:
@@ -31,7 +31,7 @@ <section class="section">
<header> <h1 id="h_1" class="toc">What's New</h1> </header> - <figure style="float:left;"><img src="/img/pictures/books/rails3way/compare.jpg" /> + <figure style="float:left;"><img src="/images/pictures/books/rails3way/compare.jpg" /> <figcaption>The Rails Way vs. The Rails 3 Way</figcaption> </figure> <p>If you put <em>The Rails 3 Way</em> and the original <em>The Rails Way</em> one next to the other, you can@@ -57,7 +57,7 @@ <section class="section">
<header> <h1 id="h_2" class="toc">Contents</h1> </header> - <figure style="float:right;"><img src="/img/pictures/books/rails3way/sections.jpg" /> + <figure style="float:right;"><img src="/images/pictures/books/rails3way/sections.jpg" /> <figcaption>Active Record makes up for over 24% of the book</figcaption> </figure> <p>The first thing you notice once you read the first few pages, is that this book is <em>even more@@ -81,7 +81,7 @@ Chapter 2 (Routes) mentions <a href="http://rack.rubyforge.org/">Rack</a>, and so does Chapter 4
(Controllers). If you want a nice and to-the-point practical introduction to <a href="http://relishapp.com/rspec">RSpec</a>, the first part of Chapter 18 covers that.</p> - <figure style="float:left;"><img src="/img/pictures/books/rails3way/reference.jpg" /> + <figure style="float:left;"><img src="/images/pictures/books/rails3way/reference.jpg" /> <figcaption>About 40% of the book is reference material</figcaption> </figure> <p>Then there’s reference material. Plenty of it, a good 40% I daresay. The good thing is that (unlike the@@ -98,14 +98,15 @@ <p>Finally, some words about the code examples. The code/text ratio is almost 1:1, but Obie’s choice of
<em>not</em> turning this book into a huge tutorial by implementing a single example application was absolutely right: The code snippets used in throughout the book are concise and relevant to the text around them and won’t distrupt your reading. If you want to play with them, they’re even <a - href="https://github.com/obie/tr3w_time_and_expenses">on GitHub</a> for you to clone and fork.</p> + href="https://github.com/obie/tr3w_time_and_expenses">on GitHub</a> for you to clone and fork. + </p> </section> <section class="section"> <header> <h1 id="h_3" class="toc">Organization and Writing Style</h1> </header> - <figure style="float:right;"><img src="/img/pictures/books/rails3way/flick.jpg" /> + <figure style="float:right;"><img src="/images/pictures/books/rails3way/flick.jpg" /> <figcaption>Yes, it’s a long book. But you don’t<br />have to read it from start to finish! </figcaption> </figure>
@@ -11,7 +11,7 @@ <ul>
<li>You can finally use Firefox because it finally doesn’t eat up all your <span class="caps">RAM</span></li> <li>You can finally use Opera because it is finally “understand” ajaxified web sites like Gmail</li> </ul> -<p>Amazingly, these two releases have a lot in common…<img src="/files/opera_sharp.png" alt="" /></p> +<p>Amazingly, these two releases have a lot in common…<img src="/images/opera_sharp.png" alt="" /></p> <h3>A fresh new look</h3> <p>Both browsers needed a new look, let’s be honest. Both didn’t really care that much in the past releases, but suddenly things changed: the new Opera theme, Sharp, looks truly awesome on any platform, and the Mozilla@@ -40,7 +40,7 @@ <h3>Address Bar 2.0</h3>
<p>Both browser struggled to add more features to the Address Bar: Opera now supports search-as-you-type history search and Firefox… well, let’s just say that Firefox Developers built something truly wonderful with the new “AwesomeBar”: it is now possible to search history items <em>tagged pages and bookmarks</em>.</p> -<p><img src="/files/awesomebar.png" alt="" /></p> +<p><img src="/images/awesomebar.png" alt="" /></p> <p>But there’s more: you’ll notice that the AwesomeBar does an outstanding job in retrieving results ordered by relevance, frequency and access time, and it also allows the user to restrict search to specific page types.</p> <p>As an Opera user, I must admit that Firefox is really way ahead with this. Unfortunately, Opera toolbar still is not@@ -88,7 +88,7 @@ <li>The new Downloads dialog supports (finally!) download resumes, even across different browsing sessions</li>
<li>It is very easy to access information on web site, especially with the new identity button (that’s where the web site favicon is displayed).</li> </ul> -<p><img src="/files/places.png" alt="" /></p> +<p><img src="/images/places.png" alt="" /></p> <p>Another trend introduced by Firefox 3 is the ability to <em>search-as-you-type</em> in all these dialogs and in many others (like the Cookie Manager). This makes finding information much easier.</p> <p>Opera didn’t need any major overhaul, but I would have liked to have cookies and preference in tabs, too (they@@ -120,7 +120,7 @@ <p>One of the most frequently-missed feature was a Firebug equivalent for Opera. Luckily, this was fixed in this release
with the introduction of <a href="http://www.opera.com/products/dragonfly/">DragonFly</a>, which is already bundled with the browser itself. <br /> I’m pretty sure this will make <em>a lot</em> of web developers very happy.</p> -<p><img src="/files/opera_dragonfly.png" alt="" /></p> +<p><img src="/images/opera_dragonfly.png" alt="" /></p> <p>Personally, I still miss an equivalent of the del.icio.us extension in Opera, but I guess I can survive with just a bookmarklet, if needed.</p> <h3>Choose your winner</h3>
@@ -6,39 +6,66 @@ popular: true
timestamp: 1183109280 tags: "review|software" ----- -<p>If you asked me what file manager I used on Windows, up to a month ago I’d have answered something like: <a href="http://www.primitus.us/a43/">A43</a> or <a href="http://www.cubicreality.com/">CubicExplorer</a>, for sure <em>anything but Windows Explorer</em>.<br /> -Well, it turns out that I had to change my mind after all…</p> -<p>There’s a multitude of “Explorer Replacements” which aim to be more feature-rich, more user-friendly, less bloated than Bill’s favorite, and I indeed tried quite a few of them, mostly the free ones of course.</p> -<p>The only problem is that whenever I got close to choose “the one”, I noticed that there always was one or two features missing somewhere, which were present in another and vice versa. Additionally, to be totally honest, the level of integration with Windows and other applications was never <em>complete</em>.</p> -<p>These are a few stupid, silly things which tend to be lacking or at least are not 100% functioning — not in all the file managers I tried, but at least in some:</p> +<p>If you asked me what file manager I used on Windows, up to a month ago I’d have answered something like: <a + href="http://www.primitus.us/a43/">A43</a> or <a href="http://www.cubicreality.com/">CubicExplorer</a>, for sure + <em>anything but Windows Explorer</em>.<br /> + Well, it turns out that I had to change my mind after all…</p> +<p>There’s a multitude of “Explorer Replacements” which aim to be more feature-rich, more + user-friendly, less bloated than Bill’s favorite, and I indeed tried quite a few of them, mostly the free ones + of course.</p> +<p>The only problem is that whenever I got close to choose “the one”, I noticed that there always was one or + two features missing somewhere, which were present in another and vice versa. Additionally, to be totally honest, + the level of integration with Windows and other applications was never <em>complete</em>.</p> +<p>These are a few stupid, silly things which tend to be lacking or at least are not 100% functioning — not in all + the file managers I tried, but at least in some:</p> <ul> - <li>Environment variables integration — Alternative file managers normally are not able to parse Windows environment variables.</li> + <li>Environment variables integration — Alternative file managers normally are not able to parse Windows + environment variables.</li> <li>Icon overlays — Some file managers can’t render Subversion’s icon overlays.</li> - <li>Strange context menus — Sometimes right-clicking on a file or a directory may not open the standard Explorer context menu</li> - <li>Open Folder — Third-party application allowing you to open a folder, will always open it through Windows Explorer</li> + <li>Strange context menus — Sometimes right-clicking on a file or a directory may not open the standard + Explorer context menu</li> + <li>Open Folder — Third-party application allowing you to open a folder, will always open it through Windows + Explorer</li> <li>auto complete address bar….</li> - <li>Special Folders — Some special folders (e.g. Control Panel) are now accessible using alternative file manager, but others may not (e.g. Network Connections). At any rate, typing “Control Panel” will <em>not</em> open the Control Panel in an alternative file manager.</li> + <li>Special Folders — Some special folders (e.g. Control Panel) are now accessible using alternative file + manager, but others may not (e.g. Network Connections). At any rate, typing “Control Panel” will + <em>not</em> open the Control Panel in an alternative file manager.</li> </ul> <p><em>What about trying to “patch” Windows Explorer instead of using another program altogether?</em></p> -<p>I never really thought of that until <a href="http://lifehacker.com/software/featured-windows-download/add-tabs-to-windows-explorer-with-qt-tabbar-260926.php">LifeHacker</a> featured the QT TabBar shell extension by <a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html">Quizo</a>. That was my epiphany: I immediately thought I was going to “patch” Windows Explorer using a few really useful (and free, of course) Windows Shell Extensions.</p> +<p>I never really thought of that until <a + href="http://lifehacker.com/software/featured-windows-download/add-tabs-to-windows-explorer-with-qt-tabbar-260926.php">LifeHacker</a> + featured the QT TabBar shell extension by <a + href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html">Quizo</a>. That was my epiphany: I + immediately thought I was going to “patch” Windows Explorer using a few really useful (and free, of + course) Windows Shell Extensions.</p> <p>Here’s <em>my</em> file manager now:</p> -<p><img src="/files/tweaked_explorer.jpg" alt="" /></p> +<p><img src="/images/tweaked_explorer.jpg" alt="" /></p> <p>Yes, it is Windows Explorer, with just a few addons:</p> <ul> - <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qttab">QT TabBar</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> - <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtadr">QT Address Bar</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> - <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtt2">QU ToolBar 2</a> (Requires .<span class="caps">NET</span> framework 2.0)</li> - <li><a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html"><span class="caps">NTFS</span> Link Shell Extension</a></li> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qttab">QT TabBar</a> (Requires .<span + class="caps">NET</span> framework 2.0)</li> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtadr">QT Address Bar</a> (Requires .<span + class="caps">NET</span> framework 2.0)</li> + <li><a href="http://members.at.infoseek.co.jp/Quizo/freeware/indexEn.html#qtt2">QU ToolBar 2</a> (Requires .<span + class="caps">NET</span> framework 2.0)</li> + <li><a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html"><span class="caps">NTFS</span> Link + Shell Extension</a></li> <li><a href="http://www.lopesoft.com/en/fmtools/info.html">FileMenu Tools</a></li> </ul> <h3>Explorer Tabs</h3> -<p>For an instant gratification, download and install QT TabBar first, logoff and logon again for the changes to take effect (or install all the other extensions first, otherwise you’ll have to re-logon after installing nearly each one). As the name implies, this will add tabs to Windows Explorer, just the way you expect them to be: clean, stable and really smart.</p> -<p><img src="/files/tabs.gif" alt="" /></p> -<p>After the installation, right-click anywhere in an existing window toolbar and enable the <strong>QT Tab Standard Buttons</strong> and voilá, a the tab bar will appear. You can click CTRL+N a few times to open new tabs. Take your time to position QT TabBar wherever is more convenient for you.</p> -<p>Whenever you’re ready, take your time to configure QT TabBar (right-click on it and choose “Options”) General options:</p> -<p><img src="/files/tabbar_general.gif" alt="" /></p> +<p>For an instant gratification, download and install QT TabBar first, logoff and logon again for the changes to take + effect (or install all the other extensions first, otherwise you’ll have to re-logon after installing nearly + each one). As the name implies, this will add tabs to Windows Explorer, just the way you expect them to be: clean, + stable and really smart.</p> +<p><img src="/images/tabs.gif" alt="" /></p> +<p>After the installation, right-click anywhere in an existing window toolbar and enable the <strong>QT Tab Standard + Buttons</strong> and voilá, a the tab bar will appear. You can click CTRL+N a few times to open new tabs. + Take your time to position QT TabBar wherever is more convenient for you.</p> +<p>Whenever you’re ready, take your time to configure QT TabBar (right-click on it and choose + “Options”) General options:</p> +<p><img src="/images/tabbar_general.gif" alt="" /></p> <p>…and at least the Window options:</p> -<p><img src="/files/tabbar_window.gif" alt="" /></p> +<p><img src="/images/tabbar_window.gif" alt="" /></p> <p><strong>How do you create tabs?</strong> There are many different ways to do it, choose whatever is best for you:</p> <ul> <li>CTRL+N keyboard shortcut</li>@@ -47,27 +74,36 @@ <li>Right click on an tab and choose “Clone this”</li>
</ul> <p>Other features? Sure, there’s plenty more, e.g.:</p> <ul> - <li><strong>Single Instance</strong> — By enabling the appropriate option, you’ll only have a single instance of Windows explorer, everything will be opened in new tabs. A must.</li> + <li><strong>Single Instance</strong> — By enabling the appropriate option, you’ll only have a single + instance of Windows explorer, everything will be opened in new tabs. A must.</li> <li><strong>Rearrange tabs</strong> — Tabs can be rearranged by dragging and dropping.</li> <li><strong>Lock/Unlock</strong> — Lock a tab (right-click > Lock) to avoid closing it accidentally.</li> - <li><strong>Folder Memo</strong> — It is possible to set a “folder memo” for a specific folder, which can be visualized and edited afterwards (right-click > Memo for this folder).</li> - <li><strong>Folder Password</strong> — Password-protect a particular tab (right-click > Set Password…).</li> + <li><strong>Folder Memo</strong> — It is possible to set a “folder memo” for a specific folder, + which can be visualized and edited afterwards (right-click > Memo for this folder).</li> + <li><strong>Folder Password</strong> — Password-protect a particular tab (right-click > Set + Password…).</li> <li><strong>Picture Preview</strong> — Preview image files simply by hovering on them with the mouse.</li> - <li><strong>Groups</strong> — It is possible to group more tabs together by adding them to groups (right-click > Add to Group > [Group Name]) which can be configured via the QT TabBar option dialog.</li> - <li><strong>Keyboard Shortcuts</strong> — Open the folder in which you unzipped QT TabBar and run QTShortcutKeyEditor.exe and enable as many as you like (they are too many to list hered), the possibilities are endless.</li> + <li><strong>Groups</strong> — It is possible to group more tabs together by adding them to groups (right-click + > Add to Group > [Group Name]) which can be configured via the QT TabBar option dialog.</li> + <li><strong>Keyboard Shortcuts</strong> — Open the folder in which you unzipped QT TabBar and run + QTShortcutKeyEditor.exe and enable as many as you like (they are too many to list hered), the possibilities are + endless.</li> </ul> <h3>Customizing Toolbars</h3> -<p>Windows Explorer allows users to choose the buttons which will be displayed in the <strong>Standar Buttons</strong> toolbar. To do so, proceed as follows:</p> +<p>Windows Explorer allows users to choose the buttons which will be displayed in the <strong>Standar Buttons</strong> + toolbar. To do so, proceed as follows:</p> <ol> - <li>If necessary, enable the Standard Buttons toolbar by selecting <em>View > Toolbars > Standard Buttons</em> from the Explorer menu.</li> + <li>If necessary, enable the Standard Buttons toolbar by selecting <em>View > Toolbars > Standard Buttons</em> + from the Explorer menu.</li> <li>Select <em>View > Toolbars > Customize</em> from the Explorer menu.</li> <li>Choose the buttons you want to display.</li> </ol> <p>I picked the following:</p> -<p><img src="/files/standard_explorer_buttons.gif" alt="" /></p> -<p>i.e.: Up , Refresh, Search, Folders, History, Favorites, Undo, Delete, Cut, Copy, Paste, Properties, View, Map Drive and Disconnect. It’s really up to you what you choose really.<br /> -I placed this toolbar right under the menu, on the top-left side.</p> -<p style="float:right;"><img src="/files/tabbar_buttons.gif" alt="" /></p> +<p><img src="/images/standard_explorer_buttons.gif" alt="" /></p> +<p>i.e.: Up , Refresh, Search, Folders, History, Favorites, Undo, Delete, Cut, Copy, Paste, Properties, View, Map Drive + and Disconnect. It’s really up to you what you choose really.<br /> + I placed this toolbar right under the menu, on the top-left side.</p> +<p style="float:right;"><img src="/images/tabbar_buttons.gif" alt="" /></p> <p>Right next to it I placed some of the buttons available for <strong>QT TabBar</strong>:</p> <ul> <li>Groups — Load an existing tab group (configurable in the options)</li>@@ -77,47 +113,96 @@ <li>Close — Close current tab</li>
<li>Lock — Lock current tab</li> <li>Topmost — Force explorer to stay on top of other windows</li> </ul> -<p>Then I decided to enable the <strong>Links</strong> Explorer toolbar, which can be configured to display bookarks and shortcuts placed in the Favorites > Links folder. As shortcuts, I dragged each drive available on my system and voilĂ : poor man’s Drive Toolbar! Unfortunately, unlike in the <em>proper</em> drive toolbars offered by alternative file managers, all drive shortcuts will remain there (with a red question mark) even when the drive is not connected to the system. I can live with that.</p> -<p style="float:right;"><img src="/files/toolbar2.gif" alt="" /></p> -<p>Right to the address bar (we’re going to substitute it in the next section though), I decided to place <strong>QT ToolBar 2</strong>, which is available – hear, hear – after installing the QT ToolVar 2 extension.<br /> -At first it looks like a search filter toolbar, and yes, it can be used for this <em>as well</em>. Just type .jpg in the search box and it will show only the <span class="caps">JPG</span> files in the current folder. Easy enough.</p> -<p>Of course there’s (much) more to it. A <em>search helper</em> is provided (click the little arrow pointing downwards at the end of the toolbar and select Search Helper) to perform more complex searches:</p> -<p><img src="/files/toolbar2_search.gif" alt="" /></p> -<p>Additionally, ToolBar allows you to display a handy copy file name/path button and up to two buttons to access two applications you use frequently. To configure them select <em>Option</em> from the dropdown menu accessible at the end of the toolbar, and configure your applications like this:</p> -<p><img src="/files/toolbar2_apps.gif" alt="" /></p> -<p>I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the “arguments for user application” and the the file path (if a file is selected) or the folder path will be passed automatically to the application, so my A43 file manage will open in the current folder. If you want to have more than two custom applications at your fingertips, all you have to do is to configure as many as you like in the Options tab of QT TabBar, and they’ll become available via the Applications button.</p> -<p>Two little utilities can also be used through QT TabBar 2, <em>MD5</em>, which instantly calculates the MD5 checksum of the selected file:</p> -<p><img src="/files/toolbar2_md5.gif" alt="" /></p> -<p>and <em>Folder Analyze</em>, which finds out the size of the current folder and how it is distributed across folders and files. A bit like a little <a href="windirstat.info">WinDirStat</a> but for the current folder only. It looks like this:</p> -<p><img src="/files/toolbar2_folder.gif" alt="" /></p> +<p>Then I decided to enable the <strong>Links</strong> Explorer toolbar, which can be configured to display bookarks and + shortcuts placed in the Favorites > Links folder. As shortcuts, I dragged each drive available on my system and + voilĂ : poor man’s Drive Toolbar! Unfortunately, unlike in the <em>proper</em> drive toolbars offered by + alternative file managers, all drive shortcuts will remain there (with a red question mark) even when the drive is + not connected to the system. I can live with that.</p> +<p style="float:right;"><img src="/images/toolbar2.gif" alt="" /></p> +<p>Right to the address bar (we’re going to substitute it in the next section though), I decided to place + <strong>QT ToolBar 2</strong>, which is available – hear, hear – after installing the QT ToolVar 2 + extension.<br /> + At first it looks like a search filter toolbar, and yes, it can be used for this <em>as well</em>. Just type .jpg in + the search box and it will show only the <span class="caps">JPG</span> files in the current folder. Easy enough.</p> +<p>Of course there’s (much) more to it. A <em>search helper</em> is provided (click the little arrow pointing + downwards at the end of the toolbar and select Search Helper) to perform more complex searches:</p> +<p><img src="/images/toolbar2_search.gif" alt="" /></p> +<p>Additionally, ToolBar allows you to display a handy copy file name/path button and up to two buttons to access two + applications you use frequently. To configure them select <em>Option</em> from the dropdown menu accessible at the + end of the toolbar, and configure your applications like this:</p> +<p><img src="/images/toolbar2_apps.gif" alt="" /></p> +<p>I choose the Command Prompt and the A43 file manager. The cool thing is that you can enable the “arguments for + user application” and the the file path (if a file is selected) or the folder path will be passed + automatically to the application, so my A43 file manage will open in the current folder. If you want to have more + than two custom applications at your fingertips, all you have to do is to configure as many as you like in the + Options tab of QT TabBar, and they’ll become available via the Applications button.</p> +<p>Two little utilities can also be used through QT TabBar 2, <em>MD5</em>, which instantly calculates the MD5 checksum + of the selected file:</p> +<p><img src="/images/toolbar2_md5.gif" alt="" /></p> +<p>and <em>Folder Analyze</em>, which finds out the size of the current folder and how it is distributed across folders + and files. A bit like a little <a href="windirstat.info">WinDirStat</a> but for the current folder only. It looks + like this:</p> +<p><img src="/images/toolbar2_folder.gif" alt="" /></p> <h3>Navigation Improvements</h3> <p>Is there any way to make navigation through folder easier in Windows Explorer? Yep, more than one:</p> <h4>Breadcrumbs</h4> -<p>Vista offers a <a href="http://www.zdnet.com.au/insight/software/soa/Investigating-Windows-Vista-s-breadcrumb-bar-/0,139023769,139218189,00.htm">Breadcrumb Bar</a>, and XP doesn’t. Quizo fixed it of course, with his <strong>QT Address Bar</strong>, which brings breadcrumbs navigation to Windows XP. Use it as an Explorer address bar replacement. By default breadcrumbs are displayed:</p> -<p><img src="/files/address-bar1.gif" alt="" /></p> -<p>…allowing you to navigate through your folder three within submenus without changing the current directory. Clicking it toggles the standard path:</p> -<p><img src="/files/address-bar2.gif" alt="" /></p> +<p>Vista offers a <a + href="http://www.zdnet.com.au/insight/software/soa/Investigating-Windows-Vista-s-breadcrumb-bar-/0,139023769,139218189,00.htm">Breadcrumb + Bar</a>, and XP doesn’t. Quizo fixed it of course, with his <strong>QT Address Bar</strong>, which brings + breadcrumbs navigation to Windows XP. Use it as an Explorer address bar replacement. By default breadcrumbs are + displayed:</p> +<p><img src="/images/address-bar1.gif" alt="" /></p> +<p>…allowing you to navigate through your folder three within submenus without changing the current directory. + Clicking it toggles the standard path:</p> +<p><img src="/images/address-bar2.gif" alt="" /></p> <p>A nice thing to have.</p> <h4>Take back your Favorites!</h4> -<p>I don’t use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I’m forced to do so. Hence I <em>hardly ever</em> used Internet Explorer’s Favorites, an I almost forgot about it, until I decided to begin tweaking Windows Explorer, and I (re-)discovered that Favorites are shared between the two… What’s that got to do with anything? Well, you can simply put Favorites to good use and use them to store <em>only</em> Windows Explorer folders.</p> -<p>Simple and effective: click the Favorites button in the toolbar, they’ll be loaded in a sidebar on the left, then simply drag a folder to QT TabBar and you’ll get there.</p> +<p>I don’t use IE, I use Firefox, Opera, even Safari sometimes, but not IE unless I’m forced to do so. Hence + I <em>hardly ever</em> used Internet Explorer’s Favorites, an I almost forgot about it, until I decided to + begin tweaking Windows Explorer, and I (re-)discovered that Favorites are shared between the two… What’s + that got to do with anything? Well, you can simply put Favorites to good use and use them to store <em>only</em> + Windows Explorer folders.</p> +<p>Simple and effective: click the Favorites button in the toolbar, they’ll be loaded in a sidebar on the left, + then simply drag a folder to QT TabBar and you’ll get there.</p> <h4>Wormholes, anyone?</h4> -<p>Finally, <strong><span class="caps">NTFS</span> Link Shell Extension</strong> does something totally different altogether: it can be used to create hardlinks (a bit like Unix symlinks, but for <span class="caps">NTFS</span> drives only) junctions and symbolic links (Vista only). For an explanation of what each object is, refer to the explanations provided on the <a href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#hardlinks">shell extension homepage</a>. For our purposes, we’ll just use junctions now:</p> -<p>bq.“[…] Junctions are wormholes in the tree structure of a directed graph. By browsing a Junction a maybe far distant location in the file system is made available. Modifying, Creating, Renaming and Deleting files within a junction tree structure operates at the junction target, i.e. if you delete a file in a Junction it is deleted at the original location. […]”</p> +<p>Finally, <strong><span class="caps">NTFS</span> Link Shell Extension</strong> does something totally different + altogether: it can be used to create hardlinks (a bit like Unix symlinks, but for <span class="caps">NTFS</span> + drives only) junctions and symbolic links (Vista only). For an explanation of what each object is, refer to the + explanations provided on the <a + href="http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#hardlinks">shell extension homepage</a>. + For our purposes, we’ll just use junctions now:</p> +<p>bq.“[…] Junctions are wormholes in the tree structure of a directed graph. By browsing a Junction a maybe + far distant location in the file system is made available. Modifying, Creating, Renaming and Deleting files within a + junction tree structure operates at the junction target, i.e. if you delete a file in a Junction it is deleted at + the original location. […]”</p> <p>Consider the following example.</p> -<p style="float:right;"><img src="/files/junction.gif" alt="" /></p> +<p style="float:right;"><img src="/images/junction.gif" alt="" /></p> <p>1) Create a directory called “Gateway” in C:\. <br /> -2) With <span class="caps">NTFS</span> Link Shell Extension installed, right-click a directory “far, far away”, on any of your <span class="caps">NTFS</span> drives, for example D:\My\Very\Long\Path\MyDirectory, and select “Pick Link Source”.<br /> -3) Go back in your Gateway folder, right-click and select “Drop As > Junction”. A folder with a small chain overlay will be created.<br /> -4) You will now be able to access all the contents in D:\My\Very\Long\Path\MyDirectory directly from C:\Gateway.</p> -<p><strong>Important</strong> – No, creating a shortcut is <em>not</em> the same thing. the path C:\Gateway\MyDirectory is an actual <em>valid path</em>, i.e. you can use it to attach files to emails, and going up one level in C:\Gateway\MyDirectory will take you simply to C:\Gateway\, <em>not</em> to D:\My\Very\Long\Path\.</p> -<p>Both at home and at work, I use a “Gateway” folder containing junctions leading to commonly-accessed directories, and this speeds up navigations a lot. Just remember to delete junctions “properly” (right-click > Delete Junction), not like an ordinary directory… ;-)</p> + 2) With <span class="caps">NTFS</span> Link Shell Extension installed, right-click a directory “far, far + away”, on any of your <span class="caps">NTFS</span> drives, for example D:\My\Very\Long\Path\MyDirectory, and + select “Pick Link Source”.<br /> + 3) Go back in your Gateway folder, right-click and select “Drop As > Junction”. A folder with a small + chain overlay will be created.<br /> + 4) You will now be able to access all the contents in D:\My\Very\Long\Path\MyDirectory directly from C:\Gateway.</p> +<p><strong>Important</strong> – No, creating a shortcut is <em>not</em> the same thing. the path + C:\Gateway\MyDirectory is an actual <em>valid path</em>, i.e. you can use it to attach files to emails, and going up + one level in C:\Gateway\MyDirectory will take you simply to C:\Gateway\, <em>not</em> to D:\My\Very\Long\Path\.</p> +<p>Both at home and at work, I use a “Gateway” folder containing junctions leading to commonly-accessed + directories, and this speeds up navigations a lot. Just remember to delete junctions “properly” + (right-click > Delete Junction), not like an ordinary directory… ;-)</p> <h3>De-cluttering the Context Menus</h3> -<p>Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there’s still room for improvement. Where? Well, in the contex menus of course. <br /> -I spent ages trying to figure out an easy way to remove unnecessary or unwanted entries from the menus which appears on a right-click. Yes, they can be removed by fiddling with the Windows Registry, but that’s not exactly user-friendly, is it? Now there’s an easy alternative: <strong>FileMenu Tools</strong>.</p> -<p>This nifty little utility allows you to remove rubbish from your context menus and add new entries as well. Entries are grouped by file type and can be enabled or disabled with a single click. Unfortunately I was not able to disabe some of them, probably due to restriction on my computer at work.</p> -<p style="float:right;"><img src="/files/filemenu_tools.gif" alt="" /></p> -<p>Once the rubbish is gone, perhaps you can even evaluate the possibility to add some more. I chose to enable just <em>Attributes</em> and <em>Advanced Renamer</em>, but there are many more predefined commands (each with its own pretty icon) you can choose from:</p> +<p>Right now our Windows Explorer interface has been streamlined, folder navigation is easier, but there’s still + room for improvement. Where? Well, in the contex menus of course. <br /> + I spent ages trying to figure out an easy way to remove unnecessary or unwanted entries from the menus which appears + on a right-click. Yes, they can be removed by fiddling with the Windows Registry, but that’s not exactly + user-friendly, is it? Now there’s an easy alternative: <strong>FileMenu Tools</strong>.</p> +<p>This nifty little utility allows you to remove rubbish from your context menus and add new entries as well. Entries + are grouped by file type and can be enabled or disabled with a single click. Unfortunately I was not able to disabe + some of them, probably due to restriction on my computer at work.</p> +<p style="float:right;"><img src="/images/filemenu_tools.gif" alt="" /></p> +<p>Once the rubbish is gone, perhaps you can even evaluate the possibility to add some more. I chose to enable just + <em>Attributes</em> and <em>Advanced Renamer</em>, but there are many more predefined commands (each with its own + pretty icon) you can choose from:</p> <ul> <li>Synchronize Folders</li> <li>Extended Delete</li>@@ -136,4 +221,9 @@ <li>Create new folder</li>
</ul> <p>Something missing? Well, you can always create your own entry, if you like!</p> <h3>Conclusion</h3> -<p>I think that’s enough for you to give Windows Explorer another shot — or at least it was enough for me anyway. Be aware that there are and hopefully there will be more Windows shell extensions able to do neat things: <a href="http://www.7-zip.org/">7-Zip</a>, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> and <a href="http://cream.sourceforge.net/">Cream</a> all add very useful context menus, and don’t forget <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, if you are a Windows-based developers (yes, they do exist).</p> +<p>I think that’s enough for you to give Windows Explorer another shot — or at least it was enough for me + anyway. Be aware that there are and hopefully there will be more Windows shell extensions able to do neat things: <a + href="http://www.7-zip.org/">7-Zip</a>, <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> + and <a href="http://cream.sourceforge.net/">Cream</a> all add very useful context menus, and don’t forget <a + href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, if you are a Windows-based developers (yes, they do + exist).</p>
@@ -7,72 +7,148 @@ tags: "productivity|review|software"
pdf: true ----- - <section class="section"> -<p>I don’t remember the exact day when I started using a todo list in a serious way. It definitely happened at work, but I can’t remember when exactly. The point is that, once I started working (and getting paid for what I love doing – writing), I slowly turned into a real <em>productivity freak</em>.</p> -<p>I write <em>everything</em> down. My colleagues know that if I say that I’ll do something <em>right now</em> but I don’t do it within five minutes, they have to assume that I forgot about it altogether and they’d better send me an email.</p> -<p>I am not a paper person. Never been one. When I got a job which consisted in working on the computer for eight hours a day, I started looking for todo list programs. That turned into an endless quest: I tried X for a few weeks, then I discovered that Y was better, used it for months, then moved onto Z, and so on.</p> +<section class="section"> + <p>I don’t remember the exact day when I started using a todo list in a serious way. It definitely happened at + work, but I can’t remember when exactly. The point is that, once I started working (and getting paid for + what I love doing – writing), I slowly turned into a real <em>productivity freak</em>.</p> + <p>I write <em>everything</em> down. My colleagues know that if I say that I’ll do something <em>right + now</em> but I don’t do it within five minutes, they have to assume that I forgot about it altogether + and they’d better send me an email.</p> + <p>I am not a paper person. Never been one. When I got a job which consisted in working on the computer for eight + hours a day, I started looking for todo list programs. That turned into an endless quest: I tried X for a few + weeks, then I discovered that Y was better, used it for months, then moved onto Z, and so on.</p> <section class="section"> -<header><h1 id="h_1" class="toc">What's wrong with 90% of digital todo lists</h1></header> -<p>Over the past five years, I must have tried dozens of different digital todo lists, and every single one of them had something wrong with it. Here are the most common flaws I encountered in many applications:</p> -<ul> - <li><strong>Too many fields</strong> – I don’t want to specify (or see, either) a due date, a start date, a completion date, priority, effort, risk, tags, categories, sections, flags, stars, projects, reminder, pre-reminder, recurrency, location, contexts, and finally the actual task. I just want to write down what I have to do. Maybe I want to flag it as <em>important</em>. Sometimes I may need to set a deadline with a reminder, but that starts getting complex already.</li> - <li><strong>Too few fields</strong> – On the other hand, just a title and a checkbox won’t do. I want some form of categorization and (optional) deadlines.</li> - <li><strong>Not cross-platform</strong> – I use Windows at work, Linux at home, my wife has a Mac. We both have iPhones, but someday I may get an Android device, too. There aren’t many todo lists out there that support more than two operating systems, nevermind mobile devices or web access!</li> - <li><strong>Too fiddly</strong> – See the first complaint, above. With too many fields almost always comes a complex interface. I don’t want to wait 17 clicks to save my task. I want to type in what I want to do, and press Enter. Is it too much to ask for?</li> - <li><strong>Made for a particular methodology</strong> – <span class="caps">GTD</span> is great and David Allen is the God of Productivity, but I don’t want to use @contexts or specify next actions because don’t believe in them, therefore I shouldn’t be forced to do so.</li> -</ul> -<p>90% of the digital todo list suck. Believe me. 10% – perhaps – don’t. Luckily, I just need <em>one</em>, and guess what: I found it!</p> + <header> + <h1 id="h_1" class="toc">What's wrong with 90% of digital todo lists</h1> + </header> + <p>Over the past five years, I must have tried dozens of different digital todo lists, and every single one of + them had something wrong with it. Here are the most common flaws I encountered in many applications:</p> + <ul> + <li><strong>Too many fields</strong> – I don’t want to specify (or see, either) a due date, a + start date, a completion date, priority, effort, risk, tags, categories, sections, flags, stars, + projects, reminder, pre-reminder, recurrency, location, contexts, and finally the actual task. I just + want to write down what I have to do. Maybe I want to flag it as <em>important</em>. Sometimes I may + need to set a deadline with a reminder, but that starts getting complex already.</li> + <li><strong>Too few fields</strong> – On the other hand, just a title and a checkbox won’t do. I + want some form of categorization and (optional) deadlines.</li> + <li><strong>Not cross-platform</strong> – I use Windows at work, Linux at home, my wife has a Mac. We + both have iPhones, but someday I may get an Android device, too. There aren’t many todo lists out + there that support more than two operating systems, nevermind mobile devices or web access!</li> + <li><strong>Too fiddly</strong> – See the first complaint, above. With too many fields almost always + comes a complex interface. I don’t want to wait 17 clicks to save my task. I want to type in what + I want to do, and press Enter. Is it too much to ask for?</li> + <li><strong>Made for a particular methodology</strong> – <span class="caps">GTD</span> is great and + David Allen is the God of Productivity, but I don’t want to use @contexts or specify next actions + because don’t believe in them, therefore I shouldn’t be forced to do so.</li> + </ul> + <p>90% of the digital todo list suck. Believe me. 10% – perhaps – don’t. Luckily, I just need + <em>one</em>, and guess what: I found it!</p> -</section> + </section> <section class="section"> -<header><h1 id="h_2" class="toc">Introducing Wunderlist: the quest is over!</h1></header> -<p><a href="http://www.6wunderkinder.com/wunderlist/">Wunderlist</a>, the List of Wonders, you can use it anywhere and at any time. It’s so awesome that… I should stop the ass-kissing right now, and get to the <em>facts</em>.</p> -<p>I discovered Wunderlist when my endless quest led me to the App Store. I think I must have installed nearly all the damn todo list apps, even the crappy ones. I didn’t fall in love with Wunderlist at first tap: it took a few install-uninstall cycles, but in the end I settled for it. Here’s why:</p> -<ul> - <li><strong>Free</strong> – Not that it matters that much, I would happily pay a few bucks for a <em>good</em> app. And yes, I did pay for a few todo lists that I dumped afterwards. Bummer.</li> - <li><strong>Cross-platform</strong> – iPhone, iPad, Android, Windows, OS X. And Linux? Not really, but who cares: the web app is fine and it probably plays well <a href="http://haiku-os.org/">Haiku</a> as well.</li> - <li><strong>Simple and Efficient</strong> – Two clicks to add a task to any list. No compulsory extra-fields, optional deadlines, unlimited lists. Got something important to do? Tap the star on the left of the task to move it to the top of your list and bookmark it.</li> - <li><strong>Amazing email integration</strong> – Create tasks via email, share tasks with others via email, get reminders via push… or email. They even email you if you have overdue tasks. Like… everyday! I was so happy when they implemented this feature that I nearly cried when I got the first few emails.</li> - <li><strong>Everything is sync’ed</strong> – On your iPhone, iPad, Android device, Windows PC, Mac, web, etc. It’s all there, always, everywhere.</li> -</ul> -<p>When I finally realized how awesome this app was, I started using it for chores, and as a shopping list. Then I figured it was good enough as a backlog for my open source projects and my web site, and then… Then my wife discovered it.</p> + <header> + <h1 id="h_2" class="toc">Introducing Wunderlist: the quest is over!</h1> + </header> + <p><a href="http://www.6wunderkinder.com/wunderlist/">Wunderlist</a>, the List of Wonders, you can use it + anywhere and at any time. It’s so awesome that… I should stop the ass-kissing right now, and get + to the <em>facts</em>.</p> + <p>I discovered Wunderlist when my endless quest led me to the App Store. I think I must have installed nearly + all the damn todo list apps, even the crappy ones. I didn’t fall in love with Wunderlist at first tap: + it took a few install-uninstall cycles, but in the end I settled for it. Here’s why:</p> + <ul> + <li><strong>Free</strong> – Not that it matters that much, I would happily pay a few bucks for a + <em>good</em> app. And yes, I did pay for a few todo lists that I dumped afterwards. Bummer.</li> + <li><strong>Cross-platform</strong> – iPhone, iPad, Android, Windows, OS X. And Linux? Not really, but + who cares: the web app is fine and it probably plays well <a href="http://haiku-os.org/">Haiku</a> as + well.</li> + <li><strong>Simple and Efficient</strong> – Two clicks to add a task to any list. No compulsory + extra-fields, optional deadlines, unlimited lists. Got something important to do? Tap the star on the + left of the task to move it to the top of your list and bookmark it.</li> + <li><strong>Amazing email integration</strong> – Create tasks via email, share tasks with others via + email, get reminders via push… or email. They even email you if you have overdue tasks. + Like… everyday! I was so happy when they implemented this feature that I nearly cried when I got + the first few emails.</li> + <li><strong>Everything is sync’ed</strong> – On your iPhone, iPad, Android device, Windows PC, + Mac, web, etc. It’s all there, always, everywhere.</li> + </ul> + <p>When I finally realized how awesome this app was, I started using it for chores, and as a shopping list. Then + I figured it was good enough as a backlog for my open source projects and my web site, and then… Then + my wife discovered it.</p> -</section> + </section> <section class="section"> -<header><h1 id="h_3" class="toc">Why your wife shouldn't use it...</h1></header> -<p><img src="/img/pictures/wunderlist/wunderlist-list.png" style="float:right;margin-top:1em;" /></p> -<p>One of the relatively unusual features of Wunderlist is the possibiliy of sharing lists with others. All you have to do is click a button, specify one or more email address, and send invitations out. People will then signup for a free Wunderlist account and they’ll be able to access (as in read/write access) your list.</p> -<p>Because Roxanne, my wife, has an iPhone, she was the most obvious candidate to try out this collaborative feature. First I shared my <em>Shopping</em> list with her: we needed to make a list of things to get for a party, and that was fun. Wunderlist worked perfectly: we went around the supermarket and ticked things off the shared list, which updated in real-time!</p> -<p>All went great until I decided to share the infamous <em>Chores</em> list. You know the one: bills, fees, errands… I used to say things like “it’s on my list, honey, I’ll do it”, or even “Yes… I’ll add it to the <em>Chores</em>, just gimme a minute”. Little did I know that my beloved liked Wunderlist so much that she started using it frequenly, constantly updating the damn chores list with things like “Take the rubbish out” or “Collect the package from the post office”.</p> -<p>I realized she became a true Wunderlist ninja when I found a task called “Flowers for Roxanne!” – starred and with a deadline set to <em>two months ago!</em></p> + <header> + <h1 id="h_3" class="toc">Why your wife shouldn't use it...</h1> + </header> + <p><img src="/images/pictures/wunderlist/wunderlist-list.png" style="float:right;margin-top:1em;" /></p> + <p>One of the relatively unusual features of Wunderlist is the possibiliy of sharing lists with others. All you + have to do is click a button, specify one or more email address, and send invitations out. People will then + signup for a free Wunderlist account and they’ll be able to access (as in read/write access) your + list.</p> + <p>Because Roxanne, my wife, has an iPhone, she was the most obvious candidate to try out this collaborative + feature. First I shared my <em>Shopping</em> list with her: we needed to make a list of things to get for a + party, and that was fun. Wunderlist worked perfectly: we went around the supermarket and ticked things off + the shared list, which updated in real-time!</p> + <p>All went great until I decided to share the infamous <em>Chores</em> list. You know the one: bills, fees, + errands… I used to say things like “it’s on my list, honey, I’ll do it”, or + even “Yes… I’ll add it to the <em>Chores</em>, just gimme a minute”. Little did I + know that my beloved liked Wunderlist so much that she started using it frequenly, constantly updating the + damn chores list with things like “Take the rubbish out” or “Collect the package from the + post office”.</p> + <p>I realized she became a true Wunderlist ninja when I found a task called “Flowers for Roxanne!” + – starred and with a deadline set to <em>two months ago!</em></p> -</section> + </section> <section class="section"> -<header><h1 id="h_4" class="toc">My five work lists</h1></header> -<p>After months of trial, I decided to use Wunderlist at work as well. With caution, of course: I made sure not to write down any sensitive information in my tasks, because you never know. I started off with just one list, but it got crowded very quickly. I now use <em>five</em> lists for work only:</p> -<p><img src="/img/pictures/wunderlist/wunderlist-work.png" style="float:right;margin-top:1em;" /></p> -<ul> - <li><strong>Work [!]</strong> – This is the most active one, I use it for things to do <span class="caps">ASAP</span>. Starred tasks are urgent and important, and should be dealt with within the day. At work, that’s my default list.</li> - <li><strong>Work [~]</strong> – This is for things that in progress, for tasks I delegated to other people, for keeping track of emails waiting for a reply, etc. I tend to check it at least a couple of times per day (if something is really urgent gets moved to the first list).</li> - <li><strong>Work […]</strong> – This is for someday/maybes. Something that is most definitely not urgent, and not too important either. I normally review it once a week, except in the middle of August when I won’t be able to do anything because everyone will be on holiday… It will become my default list for a week or two, then.</li> - <li><strong>Work [CoP]</strong> – I also work as the coordinator of a Community of Practice, and I want to keep CoP-related stuff separate, so that I know where to look when I can allocate some CoP time during my day.</li> - <li><strong>Work [@boss]</strong> – This is a special list for my boss only. We email each other frequently, but rather then sending her long emails she can’t afford to read, I write down discussion topics in this list, which I’ll then load up at the following status meeting.</li> -</ul> -<p>The next step? Maybe sharing lists with my boss and collegues, who knows…</p> + <header> + <h1 id="h_4" class="toc">My five work lists</h1> + </header> + <p>After months of trial, I decided to use Wunderlist at work as well. With caution, of course: I made sure not + to write down any sensitive information in my tasks, because you never know. I started off with just one + list, but it got crowded very quickly. I now use <em>five</em> lists for work only:</p> + <p><img src="/images/pictures/wunderlist/wunderlist-work.png" style="float:right;margin-top:1em;" /></p> + <ul> + <li><strong>Work [!]</strong> – This is the most active one, I use it for things to do <span + class="caps">ASAP</span>. Starred tasks are urgent and important, and should be dealt with within + the day. At work, that’s my default list.</li> + <li><strong>Work [~]</strong> – This is for things that in progress, for tasks I delegated to other + people, for keeping track of emails waiting for a reply, etc. I tend to check it at least a couple of + times per day (if something is really urgent gets moved to the first list).</li> + <li><strong>Work […]</strong> – This is for someday/maybes. Something that is most definitely + not urgent, and not too important either. I normally review it once a week, except in the middle of + August when I won’t be able to do anything because everyone will be on holiday… It will + become my default list for a week or two, then.</li> + <li><strong>Work [CoP]</strong> – I also work as the coordinator of a Community of Practice, and I + want to keep CoP-related stuff separate, so that I know where to look when I can allocate some CoP time + during my day.</li> + <li><strong>Work [@boss]</strong> – This is a special list for my boss only. We email each other + frequently, but rather then sending her long emails she can’t afford to read, I write down + discussion topics in this list, which I’ll then load up at the following status meeting.</li> + </ul> + <p>The next step? Maybe sharing lists with my boss and collegues, who knows…</p> -</section> + </section> <section class="section"> -<header><h1 id="h_5" class="toc">The bottom line</h1></header> -<p>Saying that Wunderlist is the <em>perfect</em> todo list for <em>everyone</em> would be pointless: there would always be people who wouldn’t agree with that. Wunderlist is not perfect, but close enough for me: it has most of the feature I need, and – most importantly – very little features I don’t need. In the end, this is what makes an app truly awesome.</p> -<p>I give it four stars out of five. Why not five? Because in this way <a href="http://www.6wunderkinder.com/">6Wunderkinder</a> can make Wunderlist <em>even a better product</em> by surprising its users with something they didn’t know they wanted. That’s what Steve Jobs does at every Keynote, isn’t it?</p> -<p><img src="/img/pictures/wunderlist/wunderlist-done.png" style="text-align:center;margin:auto;display:block;" /></p> + <header> + <h1 id="h_5" class="toc">The bottom line</h1> + </header> + <p>Saying that Wunderlist is the <em>perfect</em> todo list for <em>everyone</em> would be pointless: there + would always be people who wouldn’t agree with that. Wunderlist is not perfect, but close enough for + me: it has most of the feature I need, and – most importantly – very little features I + don’t need. In the end, this is what makes an app truly awesome.</p> + <p>I give it four stars out of five. Why not five? Because in this way <a + href="http://www.6wunderkinder.com/">6Wunderkinder</a> can make Wunderlist <em>even a better + product</em> by surprising its users with something they didn’t know they wanted. That’s + what Steve Jobs does at every Keynote, isn’t it?</p> + <p><img src="/images/pictures/wunderlist/wunderlist-done.png" + style="text-align:center;margin:auto;display:block;" /></p> -</section> + </section> </section>
@@ -7,31 +7,37 @@ summary: "A dark, easy-to-read color scheme for the Vim text editor. It can be used with 255, 16 or 8 colors."
active: true version: 0.2.1 ----- -<p><strong>herald</strong> is a dark color scheme for <a href="http://www.vim.org">Vim</a> which aims to be easy to read, eye-appealing, portable on multiple terminals, and suitable for source code highlighting in multiple languages.</p> -<p>You can get the latest version <strong><a href="/files/herald.vim"><span class="caps">HERE</span></a></strong> (direct link).</p> +<p><strong>herald</strong> is a dark color scheme for <a href="http://www.vim.org">Vim</a> which aims to be easy to + read, eye-appealing, portable on multiple terminals, and suitable for source code highlighting in multiple + languages.</p> +<p>You can get the latest version <strong><a href="/files/herald.vim"><span class="caps">HERE</span></a></strong> + (direct link).</p> <h3>Changelog</h3> <ul> <li><strong>v0.2.1</strong> - <ul> - <li>Improved readability in search highlights</li> - <li>Delimiters are now rendered like operators</li> - </ul></li> + <ul> + <li>Improved readability in search highlights</li> + <li>Delimiters are now rendered like operators</li> + </ul> + </li> <li><strong>v0.2.0</strong> - <ul> - <li>Support for 8 and 16 color modes</li> - <li>Fixed completion menu colors</li> - <li>Improved readability for Visual mode</li> - <li>Specified highlighting for all the most common Vim syntax groups</li> - </ul></li> + <ul> + <li>Support for 8 and 16 color modes</li> + <li>Fixed completion menu colors</li> + <li>Improved readability for Visual mode</li> + <li>Specified highlighting for all the most common Vim syntax groups</li> + </ul> + </li> <li><strong>v0.1.0</strong> - <ul> - <li>Initial Release</li> - </ul></li> + <ul> + <li>Initial Release</li> + </ul> + </li> </ul> <h3>Screenshot</h3> <p><img src="/images/herald.vim/herald_vim_example.png" alt="" /></p> <h3>Resources</h3> - <li><a href="/articles/herald-vim-color-scheme">First Announcement</a></li> - <li><a href="/articles/herald-vim-021">0.2.1 Release Annoucement</a></li> - <li><a href="http://www.vim.org/scripts/script.php?script_id=2684">Script Page</a> [on Vim.org]</li> +<li><a href="/articles/herald-vim-color-scheme">First Announcement</a></li> +<li><a href="/articles/herald-vim-021">0.2.1 Release Annoucement</a></li> +<li><a href="http://www.vim.org/scripts/script.php?script_id=2684">Script Page</a> [on Vim.org]</li> </ul>